/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include #include #include namespace facebook::react { TEST(CSSRatio, ratio_values) { auto emptyValue = parseCSSProperty(""); EXPECT_TRUE(std::holds_alternative(emptyValue)); auto validRatio = parseCSSProperty("16/9"); EXPECT_TRUE(std::holds_alternative(validRatio)); EXPECT_EQ(std::get(validRatio).numerator, 16.0f); EXPECT_EQ(std::get(validRatio).denominator, 9.0f); auto validRatioWithWhitespace = parseCSSProperty("16 / 9"); EXPECT_TRUE(std::holds_alternative(validRatioWithWhitespace)); EXPECT_EQ(std::get(validRatioWithWhitespace).numerator, 16.0f); EXPECT_EQ(std::get(validRatioWithWhitespace).denominator, 9.0f); auto singleNumberRatio = parseCSSProperty("16"); EXPECT_TRUE(std::holds_alternative(singleNumberRatio)); EXPECT_EQ(std::get(singleNumberRatio).numerator, 16.0f); EXPECT_EQ(std::get(singleNumberRatio).denominator, 1.0f); auto fractionalNumber = parseCSSProperty("16.5"); EXPECT_TRUE(std::holds_alternative(fractionalNumber)); EXPECT_EQ(std::get(fractionalNumber).numerator, 16.5f); EXPECT_EQ(std::get(fractionalNumber).denominator, 1.0f); auto fractionalNumerator = parseCSSProperty("16.5/9"); EXPECT_TRUE(std::holds_alternative(fractionalNumerator)); EXPECT_EQ(std::get(fractionalNumerator).numerator, 16.5f); EXPECT_EQ(std::get(fractionalNumerator).denominator, 9.0f); auto fractionalDenominator = parseCSSProperty("16/9.5"); EXPECT_TRUE(std::holds_alternative(fractionalDenominator)); EXPECT_EQ(std::get(fractionalDenominator).numerator, 16.0f); } TEST(CSSRatio, invalid_values) { auto negativeNumber = parseCSSProperty("-16"); EXPECT_TRUE(std::holds_alternative(negativeNumber)); auto missingDenominator = parseCSSProperty("16/"); EXPECT_TRUE(std::holds_alternative(missingDenominator)); auto negativeNumerator = parseCSSProperty("-16/9"); EXPECT_TRUE(std::holds_alternative(negativeNumerator)); auto negativeDenominator = parseCSSProperty("16/-9"); EXPECT_TRUE(std::holds_alternative(negativeDenominator)); } TEST(CSSRatio, degenerate_values) { auto degenerateRatio = parseCSSProperty("0"); EXPECT_TRUE(std::holds_alternative(degenerateRatio)); EXPECT_TRUE(std::get(degenerateRatio).isDegenerate()); } } // namespace facebook::react