Chromium Code Reviews| 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 eba129ca4d501a6a39d17cff5d29311ba841a9cc..67e7bcab8d5889f4a215a1fb64550163027c4a67 100644 |
| --- a/third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp |
| +++ b/third_party/WebKit/Source/core/css/RuleFeatureSetTest.cpp |
| @@ -85,6 +85,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())); |
| @@ -255,6 +260,11 @@ public: |
| EXPECT_EQ(count, m_ruleFeatureSet->uncommonAttributeRules.size()); |
| } |
| + void expectFullRecalcForRuleSetInvalidation(bool expected) |
| + { |
| + EXPECT_EQ(expected, m_ruleFeatureSet->needsFullRecalcForRuleSetInvalidation()); |
| + } |
| + |
| private: |
| PersistentPartObject<RuleFeatureSet> m_ruleFeatureSet; |
| Persistent<Document> m_document; |
| @@ -905,4 +915,192 @@ TEST_F(RuleFeatureSetTest, nthInvalidationAnyDescendant) |
| expectClassInvalidation("a", invalidationLists.descendants); |
| } |
| +TEST_F(RuleFeatureSetTest, RuleSetInvalidationTypeSelector) |
| +{ |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("div")); |
| + expectFullRecalcForRuleSetInvalidation(false); |
| + clearFeatures(); |
| + |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* div")); |
| + expectFullRecalcForRuleSetInvalidation(false); |
| + clearFeatures(); |
| + |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("body *")); |
| + expectFullRecalcForRuleSetInvalidation(true); |
| +} |
| + |
| +TEST_F(RuleFeatureSetTest, RuleSetInvalidationClassIdAttr) |
| +{ |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".c")); |
| + expectFullRecalcForRuleSetInvalidation(false); |
| + clearFeatures(); |
| + |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".c *")); |
| + expectFullRecalcForRuleSetInvalidation(false); |
| + clearFeatures(); |
| + |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#i")); |
| + expectFullRecalcForRuleSetInvalidation(false); |
| + clearFeatures(); |
| + |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#i *")); |
| + expectFullRecalcForRuleSetInvalidation(false); |
| + clearFeatures(); |
| + |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("[attr]")); |
| + expectFullRecalcForRuleSetInvalidation(false); |
| + clearFeatures(); |
| + |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("[attr] *")); |
| + expectFullRecalcForRuleSetInvalidation(false); |
| +} |
| + |
| +TEST_F(RuleFeatureSetTest, RuleSetInvalidationHoverActiveFocus) |
| +{ |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":hover:active:focus")); |
| + expectFullRecalcForRuleSetInvalidation(true); |
| +} |
| + |
| +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); |
|
rune
2016/09/14 07:47:31
This is not going to work since we're collecting f
|
| +} |
| + |
| +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); |
| + clearFeatures(); |
| + |
| + EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":-webkit-any(*, .a) *")); |
| + expectFullRecalcForRuleSetInvalidation(true); |
| +} |
| + |
| } // namespace blink |