Chromium Code Reviews| Index: third_party/WebKit/Source/core/css/parser/CSSSelectorParserTest.cpp |
| diff --git a/third_party/WebKit/Source/core/css/parser/CSSSelectorParserTest.cpp b/third_party/WebKit/Source/core/css/parser/CSSSelectorParserTest.cpp |
| index 8f4f59abf5192f960390a6d0c968b06a4426206d..36182b7798ef1aa2767e280af9706b8f2e0bc078 100644 |
| --- a/third_party/WebKit/Source/core/css/parser/CSSSelectorParserTest.cpp |
| +++ b/third_party/WebKit/Source/core/css/parser/CSSSelectorParserTest.cpp |
| @@ -70,16 +70,16 @@ TEST(CSSSelectorParserTest, ValidANPlusB) |
| {"-N - 88", -1, -88}, |
| }; |
| - for (unsigned i = 0; i < WTF_ARRAY_LENGTH(testCases); ++i) { |
| - SCOPED_TRACE(testCases[i].input); |
| + for (auto testCase : testCases) { |
| + SCOPED_TRACE(testCase.input); |
| std::pair<int, int> ab; |
| - CSSTokenizer::Scope scope(testCases[i].input); |
| + CSSTokenizer::Scope scope(testCase.input); |
| CSSParserTokenRange range = scope.tokenRange(); |
| bool passed = CSSSelectorParser::consumeANPlusB(range, ab); |
| EXPECT_TRUE(passed); |
| - EXPECT_EQ(ab.first, testCases[i].a); |
| - EXPECT_EQ(ab.second, testCases[i].b); |
| + EXPECT_EQ(ab.first, testCase.a); |
| + EXPECT_EQ(ab.second, testCase.b); |
| } |
| } |
| @@ -101,11 +101,11 @@ TEST(CSSSelectorParserTest, InvalidANPlusB) |
| "10n + -5", |
| }; |
| - for (unsigned i = 0; i < WTF_ARRAY_LENGTH(testCases); ++i) { |
| - SCOPED_TRACE(testCases[i]); |
| + for (auto testCase : testCases) { |
| + SCOPED_TRACE(testCase); |
| std::pair<int, int> ab; |
| - CSSTokenizer::Scope scope(testCases[i]); |
| + CSSTokenizer::Scope scope(testCase); |
| CSSParserTokenRange range = scope.tokenRange(); |
| bool passed = CSSSelectorParser::consumeANPlusB(range, ab); |
| EXPECT_FALSE(passed); |
| @@ -119,17 +119,14 @@ TEST(CSSSelectorParserTest, ShadowDomPseudoInCompound) |
| { ".a::shadow", ".a::shadow" }, |
| { "::content", "::content" }, |
| { ".a::content", ".a::content" }, |
| - { "::content.a", "::content.a" }, |
| - { "::content.a.b", "::content.a.b" }, |
| - { ".a::content.b", ".a::content.b" }, |
| }; |
| - for (unsigned i = 0; i < WTF_ARRAY_LENGTH(testCases); ++i) { |
| - SCOPED_TRACE(testCases[i][0]); |
| - CSSTokenizer::Scope scope(testCases[i][0]); |
| + for (auto testCase : testCases) { |
| + SCOPED_TRACE(testCase[0]); |
| + CSSTokenizer::Scope scope(testCase[0]); |
| CSSParserTokenRange range = scope.tokenRange(); |
| CSSSelectorList list = CSSSelectorParser::parseSelector(range, CSSParserContext(HTMLStandardMode, nullptr), nullptr); |
| - EXPECT_STREQ(testCases[i][1], list.selectorsText().ascii().data()); |
| + EXPECT_STREQ(testCase[1], list.selectorsText().ascii().data()); |
| } |
| } |
| @@ -158,4 +155,43 @@ TEST(CSSSelectorParserTest, PseudoElementsInCompoundLists) |
| } |
| } |
| +TEST(CSSSelectorParserTest, ValidSimpleAfterPseudoElementInCompound) |
| +{ |
| + const char* testCases[] = { |
| + "::-webkit-volume-slider:hover", |
| + "::selection:window-inactive", |
| + "::-webkit-scrollbar:disabled", |
| + "::-webkit-volume-slider:not(:hover)" |
| + }; |
| + |
| + for (auto testCase : testCases) { |
| + CSSTokenizer::Scope scope(testCase); |
| + CSSParserTokenRange range = scope.tokenRange(); |
| + CSSSelectorList list = CSSSelectorParser::parseSelector(range, CSSParserContext(HTMLStandardMode, nullptr), nullptr); |
| + EXPECT_TRUE(list.isValid()); |
| + } |
| +} |
| + |
| +TEST(CSSSelectorParserTest, InvalidSimpleAfterPseudoElementInCompound) |
| +{ |
| + const char* testCases[] = { |
| + "::before#id", |
| + "::after:hover", |
| + ".class::content::before", |
| + "::shadow.class", |
| + "::selection:window-inactive::before", |
| + "::-webkit-volume-slider.class", |
| + "::content.a", |
| + "::content.a.b", |
| + ".a::content.b" |
| + }; |
|
Timothy Loh
2016/01/15 04:22:57
Can we also add some tests with :not here?
|
| + |
| + for (auto testCase : testCases) { |
| + CSSTokenizer::Scope scope(testCase); |
| + CSSParserTokenRange range = scope.tokenRange(); |
| + CSSSelectorList list = CSSSelectorParser::parseSelector(range, CSSParserContext(HTMLStandardMode, nullptr), nullptr); |
| + EXPECT_FALSE(list.isValid()); |
| + } |
| +} |
| + |
| } // namespace |