Index: Source/core/css/resolver/MatchResultTest.cpp |
diff --git a/Source/core/css/resolver/MatchResultTest.cpp b/Source/core/css/resolver/MatchResultTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..021f5f6f49a6087f1029de4ecebf155314cfca3f |
--- /dev/null |
+++ b/Source/core/css/resolver/MatchResultTest.cpp |
@@ -0,0 +1,173 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "config.h" |
+#include "core/css/resolver/MatchResult.h" |
+ |
+#include "core/css/StylePropertySet.h" |
+#include <gtest/gtest.h> |
+ |
+namespace blink { |
+ |
+class MatchResultTest : public ::testing::Test { |
+protected: |
+ void SetUp() override; |
+ |
+ const StylePropertySet* propertySet(unsigned index) const |
+ { |
+ return propertySets[index].get(); |
+ } |
+ |
+private: |
+ WillBePersistentHeapVector<RefPtrWillBeMember<MutableStylePropertySet>, 6> propertySets; |
+}; |
+ |
+void MatchResultTest::SetUp() |
+{ |
+ for (unsigned i = 0; i < 6; i++) |
+ propertySets.append(MutableStylePropertySet::create()); |
+} |
+ |
+void testMatchedPropertiesRange(const MatchedPropertiesRange& range, int expectedLength, const StylePropertySet** expectedSets) |
+{ |
+ EXPECT_EQ(expectedLength, range.end() - range.begin()); |
+ for (const auto& matchedProperties : range) |
+ EXPECT_EQ(*expectedSets++, matchedProperties.properties); |
+} |
+ |
+TEST_F(MatchResultTest, UARules) |
+{ |
+ const StylePropertySet* uaSets[] = { propertySet(0), propertySet(1) }; |
+ |
+ MatchResult result; |
+ result.addMatchedProperties(uaSets[0]); |
+ result.addMatchedProperties(uaSets[1]); |
+ result.finishAddingUARules(); |
+ |
+ result.finishAddingAuthorRulesForTreeScope(); |
+ |
+ testMatchedPropertiesRange(result.allRules(), 2, uaSets); |
+ testMatchedPropertiesRange(result.uaRules(), 2, uaSets); |
+ testMatchedPropertiesRange(result.authorRules(), 0, nullptr); |
+ |
+ ImportantAuthorRanges important(result); |
+ EXPECT_EQ(important.end(), important.begin()); |
+} |
+ |
+TEST_F(MatchResultTest, AuthorRules) |
+{ |
+ const StylePropertySet* authorSets[] = { propertySet(0), propertySet(1) }; |
+ |
+ MatchResult result; |
+ |
+ result.finishAddingUARules(); |
+ result.addMatchedProperties(authorSets[0]); |
+ result.addMatchedProperties(authorSets[1]); |
+ result.finishAddingAuthorRulesForTreeScope(); |
+ |
+ testMatchedPropertiesRange(result.allRules(), 2, authorSets); |
+ testMatchedPropertiesRange(result.uaRules(), 0, nullptr); |
+ testMatchedPropertiesRange(result.authorRules(), 2, authorSets); |
+ |
+ ImportantAuthorRanges important(result); |
+ EXPECT_EQ(important.end(), ++important.begin()); |
+} |
+ |
+TEST_F(MatchResultTest, UAAndAuthorRules) |
+{ |
+ const StylePropertySet* allSets[] = { propertySet(0), propertySet(1), propertySet(2), propertySet(3) }; |
+ const StylePropertySet** uaSets = &allSets[0]; |
+ const StylePropertySet** authorSets = &allSets[2]; |
+ |
+ MatchResult result; |
+ |
+ result.addMatchedProperties(uaSets[0]); |
+ result.addMatchedProperties(uaSets[1]); |
+ result.finishAddingUARules(); |
+ |
+ result.addMatchedProperties(authorSets[0]); |
+ result.addMatchedProperties(authorSets[1]); |
+ result.finishAddingAuthorRulesForTreeScope(); |
+ |
+ testMatchedPropertiesRange(result.allRules(), 4, allSets); |
+ testMatchedPropertiesRange(result.uaRules(), 2, uaSets); |
+ testMatchedPropertiesRange(result.authorRules(), 2, authorSets); |
+ |
+ ImportantAuthorRanges important(result); |
+ EXPECT_EQ(important.end(), ++important.begin()); |
+} |
+ |
+TEST_F(MatchResultTest, AuthorRulesMultipleScopes) |
+{ |
+ const StylePropertySet* authorSets[] = { propertySet(0), propertySet(1), propertySet(2), propertySet(3) }; |
+ |
+ MatchResult result; |
+ |
+ result.finishAddingUARules(); |
+ |
+ result.addMatchedProperties(authorSets[0]); |
+ result.addMatchedProperties(authorSets[1]); |
+ result.finishAddingAuthorRulesForTreeScope(); |
+ |
+ result.addMatchedProperties(authorSets[2]); |
+ result.addMatchedProperties(authorSets[3]); |
+ result.finishAddingAuthorRulesForTreeScope(); |
+ |
+ testMatchedPropertiesRange(result.allRules(), 4, authorSets); |
+ testMatchedPropertiesRange(result.uaRules(), 0, nullptr); |
+ testMatchedPropertiesRange(result.authorRules(), 4, authorSets); |
+ |
+ ImportantAuthorRanges important(result); |
+ |
+ auto iter = important.begin(); |
+ EXPECT_NE(important.end(), iter); |
+ testMatchedPropertiesRange(*iter, 2, &authorSets[2]); |
+ |
+ ++iter; |
+ EXPECT_NE(important.end(), iter); |
+ testMatchedPropertiesRange(*iter, 2, authorSets); |
+ |
+ ++iter; |
+ EXPECT_EQ(important.end(), iter); |
+} |
+ |
+TEST_F(MatchResultTest, UARulesAndAuthorRulesMultipleScopes) |
+{ |
+ const StylePropertySet* allSets[] = { propertySet(0), propertySet(1), propertySet(2), propertySet(3), propertySet(4), propertySet(5) }; |
+ const StylePropertySet** uaSets = &allSets[0]; |
+ const StylePropertySet** authorSets = &allSets[2]; |
+ |
+ MatchResult result; |
+ |
+ result.addMatchedProperties(uaSets[0]); |
+ result.addMatchedProperties(uaSets[1]); |
+ result.finishAddingUARules(); |
+ |
+ result.addMatchedProperties(authorSets[0]); |
+ result.addMatchedProperties(authorSets[1]); |
+ result.finishAddingAuthorRulesForTreeScope(); |
+ |
+ result.addMatchedProperties(authorSets[2]); |
+ result.addMatchedProperties(authorSets[3]); |
+ result.finishAddingAuthorRulesForTreeScope(); |
+ |
+ testMatchedPropertiesRange(result.allRules(), 6, allSets); |
+ testMatchedPropertiesRange(result.uaRules(), 2, uaSets); |
+ testMatchedPropertiesRange(result.authorRules(), 4, authorSets); |
+ |
+ ImportantAuthorRanges important(result); |
+ |
+ ImportantAuthorRangeIterator iter = important.begin(); |
+ EXPECT_NE(important.end(), iter); |
+ testMatchedPropertiesRange(*iter, 2, &authorSets[2]); |
+ |
+ ++iter; |
+ EXPECT_NE(important.end(), iter); |
+ testMatchedPropertiesRange(*iter, 2, authorSets); |
+ |
+ ++iter; |
+ EXPECT_EQ(important.end(), iter); |
+} |
+ |
+} // namespace blink |