Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Side by Side 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, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/RuleFeature.h" 5 #include "core/css/RuleFeature.h"
6 6
7 #include "core/css/CSSSelectorList.h" 7 #include "core/css/CSSSelectorList.h"
8 #include "core/css/RuleSet.h" 8 #include "core/css/RuleSet.h"
9 #include "core/css/StylePropertySet.h" 9 #include "core/css/StylePropertySet.h"
10 #include "core/css/StyleRule.h" 10 #include "core/css/StyleRule.h"
(...skipping 26 matching lines...) Expand all
37 37
38 RuleFeatureSet::SelectorPreMatch collectFeatures(const String& selectorText) 38 RuleFeatureSet::SelectorPreMatch collectFeatures(const String& selectorText)
39 { 39 {
40 CSSSelectorList selectorList = CSSParser::parseSelector(strictCSSParserC ontext(), nullptr, selectorText); 40 CSSSelectorList selectorList = CSSParser::parseSelector(strictCSSParserC ontext(), nullptr, selectorText);
41 41
42 StyleRule* styleRule = StyleRule::create(std::move(selectorList), Mutabl eStylePropertySet::create(HTMLStandardMode)); 42 StyleRule* styleRule = StyleRule::create(std::move(selectorList), Mutabl eStylePropertySet::create(HTMLStandardMode));
43 RuleData ruleData(styleRule, 0, 0, RuleHasNoSpecialState); 43 RuleData ruleData(styleRule, 0, 0, RuleHasNoSpecialState);
44 return m_ruleFeatureSet.collectFeaturesFromRuleData(ruleData); 44 return m_ruleFeatureSet.collectFeaturesFromRuleData(ruleData);
45 } 45 }
46 46
47 void clearFeatures()
48 {
49 m_ruleFeatureSet.clear();
50 }
51
47 void collectInvalidationSetsForClass(InvalidationLists& invalidationLists, c onst AtomicString& className) const 52 void collectInvalidationSetsForClass(InvalidationLists& invalidationLists, c onst AtomicString& className) const
48 { 53 {
49 Element* element = Traversal<HTMLElement>::firstChild(*Traversal<HTMLEle ment>::firstChild(*m_document->body())); 54 Element* element = Traversal<HTMLElement>::firstChild(*Traversal<HTMLEle ment>::firstChild(*m_document->body()));
50 m_ruleFeatureSet.collectInvalidationSetsForClass(invalidationLists, *ele ment, className); 55 m_ruleFeatureSet.collectInvalidationSetsForClass(invalidationLists, *ele ment, className);
51 } 56 }
52 57
53 void collectInvalidationSetsForId(InvalidationLists& invalidationLists, cons t AtomicString& id) const 58 void collectInvalidationSetsForId(InvalidationLists& invalidationLists, cons t AtomicString& id) const
54 { 59 {
55 Element* element = Traversal<HTMLElement>::firstChild(*Traversal<HTMLEle ment>::firstChild(*m_document->body())); 60 Element* element = Traversal<HTMLElement>::firstChild(*Traversal<HTMLEle ment>::firstChild(*m_document->body()));
56 m_ruleFeatureSet.collectInvalidationSetsForId(invalidationLists, *elemen t, id); 61 m_ruleFeatureSet.collectInvalidationSetsForId(invalidationLists, *elemen t, id);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 void expectSiblingRuleCount(unsigned count) 178 void expectSiblingRuleCount(unsigned count)
174 { 179 {
175 EXPECT_EQ(count, m_ruleFeatureSet.siblingRules.size()); 180 EXPECT_EQ(count, m_ruleFeatureSet.siblingRules.size());
176 } 181 }
177 182
178 void expectUncommonAttributeRuleCount(unsigned count) 183 void expectUncommonAttributeRuleCount(unsigned count)
179 { 184 {
180 EXPECT_EQ(count, m_ruleFeatureSet.uncommonAttributeRules.size()); 185 EXPECT_EQ(count, m_ruleFeatureSet.uncommonAttributeRules.size());
181 } 186 }
182 187
188 void expectFullRecalcForRuleSetInvalidation(bool expected)
189 {
190 EXPECT_EQ(expected, m_ruleFeatureSet.needsFullRecalcForRuleSetInvalidati on());
191 }
192
183 DEFINE_INLINE_TRACE() 193 DEFINE_INLINE_TRACE()
184 { 194 {
185 visitor->trace(m_ruleFeatureSet); 195 visitor->trace(m_ruleFeatureSet);
186 visitor->trace(m_document); 196 visitor->trace(m_document);
187 } 197 }
188 198
189 private: 199 private:
190 RuleFeatureSet m_ruleFeatureSet; 200 RuleFeatureSet m_ruleFeatureSet;
191 Persistent<Document> m_document; 201 Persistent<Document> m_document;
192 }; 202 };
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context(* ) [attr]")); 536 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context(* ) [attr]"));
527 expectUncommonAttributeRuleCount(1); 537 expectUncommonAttributeRuleCount(1);
528 } 538 }
529 539
530 TEST_F(RuleFeatureSetTest, uncommonAttributeRulesAfterHostContextBeforePseudo) 540 TEST_F(RuleFeatureSetTest, uncommonAttributeRulesAfterHostContextBeforePseudo)
531 { 541 {
532 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context([ attr])::before")); 542 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context([ attr])::before"));
533 expectUncommonAttributeRuleCount(1); 543 expectUncommonAttributeRuleCount(1);
534 } 544 }
535 545
546 TEST_F(RuleFeatureSetTest, RuleSetInvalidationHostContext)
547 {
548 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context(. x)"));
549 expectFullRecalcForRuleSetInvalidation(true);
550 clearFeatures();
551
552 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host-context(. x) .y"));
553 expectFullRecalcForRuleSetInvalidation(false);
554 }
555
556 TEST_F(RuleFeatureSetTest, RuleSetInvalidationHost)
557 {
558 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host(.x)"));
559 expectFullRecalcForRuleSetInvalidation(false);
560 clearFeatures();
561
562 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host(*) .y"));
563 expectFullRecalcForRuleSetInvalidation(false);
564 clearFeatures();
565
566 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":host(.x) .y")) ;
567 expectFullRecalcForRuleSetInvalidation(false);
568 }
569
570 TEST_F(RuleFeatureSetTest, RuleSetInvalidationNot)
571 {
572 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.x)"));
573 expectFullRecalcForRuleSetInvalidation(true);
574 clearFeatures();
575
576 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.x) :hover "));
577 expectFullRecalcForRuleSetInvalidation(true);
578 clearFeatures();
579
580 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.x) .y"));
581 expectFullRecalcForRuleSetInvalidation(false);
582 clearFeatures();
583
584 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":not(.x) + .y") );
585 expectFullRecalcForRuleSetInvalidation(false);
586 }
587
588 TEST_F(RuleFeatureSetTest, RuleSetInvalidationCustomPseudo)
589 {
590 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("::-webkit-slide r-thumb"));
591 expectFullRecalcForRuleSetInvalidation(true);
592 clearFeatures();
593
594 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x::-webkit-sli der-thumb"));
595 expectFullRecalcForRuleSetInvalidation(false);
596 clearFeatures();
597
598 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x + ::-webkit- slider-thumb"));
599 expectFullRecalcForRuleSetInvalidation(false);
600 }
601
602 TEST_F(RuleFeatureSetTest, RuleSetInvalidationDeep)
603 {
604 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("* /deep/ .x"));
605 expectFullRecalcForRuleSetInvalidation(true);
606 clearFeatures();
607
608 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("body /deep/ .x" ));
609 expectFullRecalcForRuleSetInvalidation(true);
610 clearFeatures();
611
612 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x /deep/ .y")) ;
613 expectFullRecalcForRuleSetInvalidation(false);
614 clearFeatures();
615
616 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("#x /deep/ *"));
617 expectFullRecalcForRuleSetInvalidation(false);
618 }
619
620 TEST_F(RuleFeatureSetTest, RuleSetInvalidationShadow)
621 {
622 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("*::shadow .x")) ;
623 expectFullRecalcForRuleSetInvalidation(true);
624 clearFeatures();
625
626 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x::shadow *")) ;
627 expectFullRecalcForRuleSetInvalidation(false);
628 clearFeatures();
629
630 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("[x] ::shadow .y "));
631 expectFullRecalcForRuleSetInvalidation(false);
632 }
633
634 TEST_F(RuleFeatureSetTest, RuleSetInvalidationContent)
635 {
636 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("*::content .x") );
637 expectFullRecalcForRuleSetInvalidation(true);
638 clearFeatures();
639
640 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x::content *") );
641 expectFullRecalcForRuleSetInvalidation(false);
642 clearFeatures();
643
644 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("[x] ::content . y"));
645 expectFullRecalcForRuleSetInvalidation(false);
646 }
647
648 TEST_F(RuleFeatureSetTest, RuleSetInvalidationSlotted)
649 {
650 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("::slotted(*)")) ;
651 expectFullRecalcForRuleSetInvalidation(true);
652 clearFeatures();
653
654 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("::slotted(.y)") );
655 expectFullRecalcForRuleSetInvalidation(false);
656 clearFeatures();
657
658 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x::slotted(.y) "));
659 expectFullRecalcForRuleSetInvalidation(false);
660 clearFeatures();
661
662 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures("[x] ::slotted(. y)"));
663 expectFullRecalcForRuleSetInvalidation(false);
664 }
665
666 TEST_F(RuleFeatureSetTest, RuleSetInvalidationAnyPseudo)
667 {
668 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":-webkit-any(*, #x)"));
669 expectFullRecalcForRuleSetInvalidation(true);
670 clearFeatures();
671
672 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(".x:-webkit-any( *, #y)"));
673 expectFullRecalcForRuleSetInvalidation(false);
674 clearFeatures();
675
676 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":-webkit-any(:- webkit-any(.a, .b), #x)"));
677 expectFullRecalcForRuleSetInvalidation(false);
678 clearFeatures();
679
680 EXPECT_EQ(RuleFeatureSet::SelectorMayMatch, collectFeatures(":-webkit-any(:- webkit-any(.a, *), #x)"));
681 expectFullRecalcForRuleSetInvalidation(true);
682 }
683
536 } // namespace blink 684 } // namespace blink
OLDNEW
« 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
This is Rietveld 408576698