Index: third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp |
diff --git a/third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp b/third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp |
index 1e5bb254884da17d0db31338a401008133c13054..cf7cb88ba833153d2e3ad1a587f2887e81eb5ded 100644 |
--- a/third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp |
+++ b/third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp |
@@ -109,6 +109,11 @@ public: |
m_ruleFeatureSet->collectInvalidationSetsForPseudoClass(invalidationLists, *element, pseudo); |
} |
+ void collectUniversalSiblingInvalidationSet(InvalidationLists& invalidationLists) |
+ { |
+ m_ruleFeatureSet->collectUniversalSiblingInvalidationSet(invalidationLists); |
+ } |
+ |
const HashSet<AtomicString>& classSet(const InvalidationSet& invalidationSet) |
{ |
return invalidationSet.classSetForTesting(); |
@@ -568,4 +573,154 @@ TEST_F(RuleFeatureSetTest, uncommonAttributeRulesAfterHostContextBeforePseudo) |
expectUncommonAttributeRuleCount(1); |
} |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationDirectAdjacent) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* + .a")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingInvalidation(1, "a", invalidationLists.siblings); |
+ expectSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationMultipleDirectAdjacent) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* + .a + .b")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingInvalidation(2, "b", invalidationLists.siblings); |
+ expectSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationDirectAdjacentDescendant) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* + .a .b")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingDescendantInvalidation(1, "a", "b", invalidationLists.siblings); |
+ expectNoSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationIndirectAdjacent) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* ~ .a")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingInvalidation(UINT_MAX, "a", invalidationLists.siblings); |
+ expectSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationMultipleIndirectAdjacent) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* ~ .a ~ .b")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingInvalidation(UINT_MAX, "b", invalidationLists.siblings); |
+ expectSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationIndirectAdjacentDescendant) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* ~ .a .b")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingDescendantInvalidation(UINT_MAX, "a", "b", invalidationLists.siblings); |
+ expectNoSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationNot) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.a) + .b")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingInvalidation(1, "b", invalidationLists.siblings); |
+ expectSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, nonUniversalSiblingInvalidationNot) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x:not(.a) + .b")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectNoInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationAny) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":-webkit-any(.a) + .b")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingInvalidation(1, "b", invalidationLists.siblings); |
+ expectSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, nonUniversalSiblingInvalidationAny) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x:-webkit-any(.a) + .b")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectNoInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationType) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("div + .a")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingInvalidation(1, "a", invalidationLists.siblings); |
+ expectSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, nonUniversalSiblingInvalidationType) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("div#x + .a")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectNoInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, universalSiblingInvalidationLink) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":link + .a")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectSiblingInvalidation(1, "a", invalidationLists.siblings); |
+ expectSelfInvalidation(invalidationLists.siblings); |
+} |
+ |
+TEST_F(RuleFeatureSetTest, nonUniversalSiblingInvalidationLink) |
+{ |
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x:link + .a")); |
+ |
+ InvalidationLists invalidationLists; |
+ collectUniversalSiblingInvalidationSet(invalidationLists); |
+ |
+ expectNoInvalidation(invalidationLists.siblings); |
+} |
+ |
} // namespace blink |