Chromium Code Reviews

Unified Diff: third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp

Issue 1913833002: Current work-in-progress crbug.com/567021 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More assert fixes Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « third_party/WebKit/Source/core/css/RuleFeature.cpp ('k') | third_party/WebKit/Source/core/css/RuleSet.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c625113f1db57eb5abfd2fa51f1078df05656bd2..7ebd49c5ca7c84479785a0c258f18963c52092c0 100644
--- a/third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp
+++ b/third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp
@@ -44,6 +44,11 @@ public:
return m_ruleFeatureSet.collectFeaturesFromRuleData(ruleData);
}
+ void clearFeatures()
+ {
+ m_ruleFeatureSet.clear();
+ }
+
void collectInvalidationSetsForClass(InvalidationLists& invalidationLists, const AtomicString& className) const
{
Element* element = Traversal<HTMLElement>::firstChild(*Traversal<HTMLElement>::firstChild(*m_document->body()));
@@ -180,6 +185,11 @@ public:
EXPECT_EQ(count, m_ruleFeatureSet.uncommonAttributeRules.size());
}
+ void expectFullRecalcForRuleSetInvalidation(bool expected)
+ {
+ EXPECT_EQ(expected, m_ruleFeatureSet.needsFullRecalcForRuleSetInvalidation());
+ }
+
DEFINE_INLINE_TRACE()
{
visitor->trace(m_ruleFeatureSet);
@@ -533,4 +543,142 @@ TEST_F(RuleFeatureSetTest, uncommonAttributeRulesAfterHostContextBeforePseudo)
expectUncommonAttributeRuleCount(1);
}
+TEST_F(RuleFeatureSetTest, RuleSetInvalidationHostContext)
+{
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context(.x)"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context(.x) .y"));
+ expectFullRecalcForRuleSetInvalidation(false);
+}
+
+TEST_F(RuleFeatureSetTest, RuleSetInvalidationHost)
+{
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host(.x)"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host(*) .y"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host(.x) .y"));
+ expectFullRecalcForRuleSetInvalidation(false);
+}
+
+TEST_F(RuleFeatureSetTest, RuleSetInvalidationNot)
+{
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.x)"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.x) :hover"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.x) .y"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.x) + .y"));
+ expectFullRecalcForRuleSetInvalidation(false);
+}
+
+TEST_F(RuleFeatureSetTest, RuleSetInvalidationCustomPseudo)
+{
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("::-webkit-slider-thumb"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x::-webkit-slider-thumb"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x + ::-webkit-slider-thumb"));
+ expectFullRecalcForRuleSetInvalidation(false);
+}
+
+TEST_F(RuleFeatureSetTest, RuleSetInvalidationDeep)
+{
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* /deep/ .x"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("body /deep/ .x"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x /deep/ .y"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x /deep/ *"));
+ expectFullRecalcForRuleSetInvalidation(false);
+}
+
+TEST_F(RuleFeatureSetTest, RuleSetInvalidationShadow)
+{
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("*::shadow .x"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x::shadow *"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("[x] ::shadow .y"));
+ expectFullRecalcForRuleSetInvalidation(false);
+}
+
+TEST_F(RuleFeatureSetTest, RuleSetInvalidationContent)
+{
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("*::content .x"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x::content *"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("[x] ::content .y"));
+ expectFullRecalcForRuleSetInvalidation(false);
+}
+
+TEST_F(RuleFeatureSetTest, RuleSetInvalidationSlotted)
+{
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("::slotted(*)"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("::slotted(.y)"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x::slotted(.y)"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("[x] ::slotted(.y)"));
+ expectFullRecalcForRuleSetInvalidation(false);
+}
+
+TEST_F(RuleFeatureSetTest, RuleSetInvalidationAnyPseudo)
+{
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":-webkit-any(*, #x)"));
+ expectFullRecalcForRuleSetInvalidation(true);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x:-webkit-any(*, #y)"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":-webkit-any(:-webkit-any(.a, .b), #x)"));
+ expectFullRecalcForRuleSetInvalidation(false);
+ clearFeatures();
+
+ EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":-webkit-any(:-webkit-any(.a, *), #x)"));
+ expectFullRecalcForRuleSetInvalidation(true);
+}
+
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/css/RuleFeature.cpp ('k') | third_party/WebKit/Source/core/css/RuleSet.h » ('j') | no next file with comments »

Powered by Google App Engine