1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "third_party/blink/renderer/core/css/resolver/cascade_filter.h"
6 #include <gtest/gtest.h>
7
8 namespace blink {
9
TEST(CascadeFilterTest,FilterNothing)10 TEST(CascadeFilterTest, FilterNothing) {
11 CascadeFilter filter;
12 EXPECT_FALSE(filter.Rejects(GetCSSPropertyBackgroundColor()));
13 EXPECT_FALSE(filter.Rejects(GetCSSPropertyColor()));
14 EXPECT_FALSE(filter.Rejects(GetCSSPropertyDisplay()));
15 EXPECT_FALSE(filter.Rejects(GetCSSPropertyFloat()));
16 EXPECT_FALSE(filter.Rejects(GetCSSPropertyInternalVisitedColor()));
17 }
18
TEST(CascadeFilterTest,ConstructorBehavesLikeSingleAdd)19 TEST(CascadeFilterTest, ConstructorBehavesLikeSingleAdd) {
20 EXPECT_EQ(CascadeFilter().Add(CSSProperty::kInherited, true),
21 CascadeFilter(CSSProperty::kInherited, true));
22 EXPECT_EQ(CascadeFilter().Add(CSSProperty::kInherited, false),
23 CascadeFilter(CSSProperty::kInherited, false));
24 }
25
TEST(CascadeFilterTest,Equals)26 TEST(CascadeFilterTest, Equals) {
27 EXPECT_EQ(CascadeFilter(CSSProperty::kInherited, true),
28 CascadeFilter(CSSProperty::kInherited, true));
29 EXPECT_EQ(CascadeFilter(CSSProperty::kInherited, false),
30 CascadeFilter(CSSProperty::kInherited, false));
31 }
32
TEST(CascadeFilterTest,NotEqualsMask)33 TEST(CascadeFilterTest, NotEqualsMask) {
34 EXPECT_NE(CascadeFilter(CSSProperty::kInherited, true),
35 CascadeFilter(CSSProperty::kInherited, false));
36 EXPECT_NE(CascadeFilter(CSSProperty::kInherited, false),
37 CascadeFilter(CSSProperty::kVisited, false));
38 EXPECT_NE(CascadeFilter(CSSProperty::kInherited, false),
39 CascadeFilter(CSSProperty::kInherited, false)
40 .Add(CSSProperty::kVisited, false));
41 EXPECT_NE(CascadeFilter(CSSProperty::kInherited, false), CascadeFilter());
42 }
43
TEST(CascadeFilterTest,FilterInherited)44 TEST(CascadeFilterTest, FilterInherited) {
45 CascadeFilter filter(CSSProperty::kInherited, true);
46 EXPECT_FALSE(filter.Rejects(GetCSSPropertyBackgroundColor()));
47 EXPECT_TRUE(filter.Rejects(GetCSSPropertyColor()));
48 EXPECT_TRUE(filter.Rejects(GetCSSPropertyFontSize()));
49 EXPECT_FALSE(filter.Rejects(GetCSSPropertyDisplay()));
50 EXPECT_FALSE(filter.Rejects(GetCSSPropertyFloat()));
51 EXPECT_TRUE(filter.Rejects(GetCSSPropertyInternalVisitedColor()));
52 }
53
TEST(CascadeFilterTest,FilterNonInherited)54 TEST(CascadeFilterTest, FilterNonInherited) {
55 CascadeFilter filter(CSSProperty::kInherited, false);
56 EXPECT_TRUE(filter.Rejects(GetCSSPropertyBackgroundColor()));
57 EXPECT_FALSE(filter.Rejects(GetCSSPropertyColor()));
58 EXPECT_TRUE(filter.Rejects(GetCSSPropertyDisplay()));
59 EXPECT_TRUE(filter.Rejects(GetCSSPropertyFloat()));
60 EXPECT_FALSE(filter.Rejects(GetCSSPropertyInternalVisitedColor()));
61 }
62
TEST(CascadeFilterTest,FilterVisitedAndInherited)63 TEST(CascadeFilterTest, FilterVisitedAndInherited) {
64 auto filter = CascadeFilter()
65 .Add(CSSProperty::kVisited, true)
66 .Add(CSSProperty::kInherited, true);
67 EXPECT_FALSE(filter.Rejects(GetCSSPropertyBackgroundColor()));
68 EXPECT_TRUE(filter.Rejects(GetCSSPropertyColor()));
69 EXPECT_FALSE(filter.Rejects(GetCSSPropertyDisplay()));
70 EXPECT_FALSE(filter.Rejects(GetCSSPropertyFloat()));
71 EXPECT_TRUE(filter.Rejects(GetCSSPropertyInternalVisitedBackgroundColor()));
72 }
73
TEST(CascadeFilterTest,FilterVisitedAndNonInherited)74 TEST(CascadeFilterTest, FilterVisitedAndNonInherited) {
75 auto filter = CascadeFilter()
76 .Add(CSSProperty::kVisited, true)
77 .Add(CSSProperty::kInherited, false);
78 EXPECT_TRUE(filter.Rejects(GetCSSPropertyBackgroundColor()));
79 EXPECT_FALSE(filter.Rejects(GetCSSPropertyColor()));
80 EXPECT_TRUE(filter.Rejects(GetCSSPropertyDisplay()));
81 EXPECT_TRUE(filter.Rejects(GetCSSPropertyFloat()));
82 EXPECT_TRUE(filter.Rejects(GetCSSPropertyInternalVisitedColor()));
83 }
84
TEST(CascadeFilterTest,RejectFlag)85 TEST(CascadeFilterTest, RejectFlag) {
86 auto filter = CascadeFilter()
87 .Add(CSSProperty::kVisited, true)
88 .Add(CSSProperty::kInherited, false);
89 EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, true));
90 EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, false));
91 EXPECT_FALSE(filter.Rejects(CSSProperty::kVisited, false));
92 EXPECT_FALSE(filter.Rejects(CSSProperty::kInherited, true));
93 }
94
TEST(CascadeFilterTest,AddDoesNotOverwrite)95 TEST(CascadeFilterTest, AddDoesNotOverwrite) {
96 auto filter = CascadeFilter()
97 .Add(CSSProperty::kVisited, true)
98 .Add(CSSProperty::kInherited, false);
99 EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, true));
100 EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, false));
101 filter = filter.Add(CSSProperty::kVisited, false);
102 filter = filter.Add(CSSProperty::kInherited, true);
103 // Add has no effect if flags are already set:
104 EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, true));
105 EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, false));
106 }
107
TEST(CascadeFilterTest,SetDoesOverwrite)108 TEST(CascadeFilterTest, SetDoesOverwrite) {
109 auto filter = CascadeFilter()
110 .Add(CSSProperty::kVisited, true)
111 .Add(CSSProperty::kInherited, false);
112 EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, true));
113 EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, false));
114 filter = filter.Set(CSSProperty::kVisited, false);
115 filter = filter.Set(CSSProperty::kInherited, true);
116 // Add has no effect if flags are already set:
117 EXPECT_TRUE(filter.Rejects(CSSProperty::kVisited, false));
118 EXPECT_TRUE(filter.Rejects(CSSProperty::kInherited, true));
119 }
120
121 } // namespace blink
122