| 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
|
|
|