1 // Copyright 2019 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/style/style_variables.h"
6
7 #include "third_party/blink/renderer/core/css/css_test_helpers.h"
8 #include "third_party/blink/renderer/core/css/css_variable_data.h"
9 #include "third_party/blink/renderer/core/css/parser/css_tokenizer.h"
10 #include "third_party/blink/renderer/core/testing/page_test_base.h"
11
12 namespace blink {
13 namespace {
14
15 class StyleVariablesTest : public PageTestBase {};
16
TEST_F(StyleVariablesTest,EmptyEqual)17 TEST_F(StyleVariablesTest, EmptyEqual) {
18 StyleVariables vars1;
19 StyleVariables vars2;
20 EXPECT_EQ(vars1, vars1);
21 EXPECT_EQ(vars2, vars2);
22 EXPECT_EQ(vars1, vars2);
23 }
24
TEST_F(StyleVariablesTest,Copy)25 TEST_F(StyleVariablesTest, Copy) {
26 auto foo_data = css_test_helpers::CreateVariableData("foo");
27 const CSSValue* foo_value = css_test_helpers::CreateCustomIdent("foo");
28
29 StyleVariables vars1;
30 vars1.SetData("--x", foo_data);
31 vars1.SetValue("--x", foo_value);
32
33 StyleVariables vars2(vars1);
34 EXPECT_EQ(foo_data, vars2.GetData("--x").value_or(nullptr));
35 EXPECT_EQ(foo_value, vars2.GetValue("--x").value_or(nullptr));
36 EXPECT_EQ(vars1, vars2);
37 }
38
TEST_F(StyleVariablesTest,GetNames)39 TEST_F(StyleVariablesTest, GetNames) {
40 StyleVariables vars;
41 vars.SetData("--x", css_test_helpers::CreateVariableData("foo"));
42 vars.SetData("--y", css_test_helpers::CreateVariableData("bar"));
43
44 HashSet<AtomicString> names;
45 vars.CollectNames(names);
46 EXPECT_EQ(2u, names.size());
47 EXPECT_TRUE(names.Contains("--x"));
48 EXPECT_TRUE(names.Contains("--y"));
49 }
50
51 // CSSVariableData
52
TEST_F(StyleVariablesTest,IsEmptyData)53 TEST_F(StyleVariablesTest, IsEmptyData) {
54 StyleVariables vars;
55 EXPECT_TRUE(vars.IsEmpty());
56 vars.SetData("--x", css_test_helpers::CreateVariableData("foo"));
57 EXPECT_FALSE(vars.IsEmpty());
58 }
59
TEST_F(StyleVariablesTest,SetData)60 TEST_F(StyleVariablesTest, SetData) {
61 StyleVariables vars;
62
63 auto foo = css_test_helpers::CreateVariableData("foo");
64 auto bar = css_test_helpers::CreateVariableData("bar");
65
66 EXPECT_FALSE(vars.GetData("--x").has_value());
67
68 vars.SetData("--x", foo);
69 EXPECT_EQ(foo, vars.GetData("--x").value_or(nullptr));
70
71 vars.SetData("--x", bar);
72 EXPECT_EQ(bar, vars.GetData("--x").value_or(nullptr));
73 }
74
TEST_F(StyleVariablesTest,SetNullData)75 TEST_F(StyleVariablesTest, SetNullData) {
76 StyleVariables vars;
77 EXPECT_FALSE(vars.GetData("--x").has_value());
78 vars.SetData("--x", nullptr);
79 auto data = vars.GetData("--x");
80 ASSERT_TRUE(data.has_value());
81 EXPECT_EQ(nullptr, data.value());
82 }
83
TEST_F(StyleVariablesTest,SingleDataSamePointer)84 TEST_F(StyleVariablesTest, SingleDataSamePointer) {
85 auto data = css_test_helpers::CreateVariableData("foo");
86 StyleVariables vars1;
87 StyleVariables vars2;
88 vars1.SetData("--x", data);
89 vars2.SetData("--x", data);
90 EXPECT_EQ(vars1, vars2);
91 }
92
TEST_F(StyleVariablesTest,SingleDataSameContent)93 TEST_F(StyleVariablesTest, SingleDataSameContent) {
94 StyleVariables vars1;
95 StyleVariables vars2;
96 vars1.SetData("--x", css_test_helpers::CreateVariableData("foo"));
97 vars2.SetData("--x", css_test_helpers::CreateVariableData("foo"));
98 EXPECT_EQ(vars1, vars2);
99 }
100
TEST_F(StyleVariablesTest,SingleDataContentNotEqual)101 TEST_F(StyleVariablesTest, SingleDataContentNotEqual) {
102 StyleVariables vars1;
103 StyleVariables vars2;
104 vars1.SetData("--x", css_test_helpers::CreateVariableData("foo"));
105 vars2.SetData("--x", css_test_helpers::CreateVariableData("bar"));
106 EXPECT_NE(vars1, vars2);
107 }
108
TEST_F(StyleVariablesTest,DifferentDataSize)109 TEST_F(StyleVariablesTest, DifferentDataSize) {
110 StyleVariables vars1;
111 StyleVariables vars2;
112 vars1.SetData("--x", css_test_helpers::CreateVariableData("foo"));
113 vars2.SetData("--x", css_test_helpers::CreateVariableData("bar"));
114 vars2.SetData("--y", css_test_helpers::CreateVariableData("foz"));
115 EXPECT_NE(vars1, vars2);
116 }
117
118 // CSSValue
119
TEST_F(StyleVariablesTest,IsEmptyValue)120 TEST_F(StyleVariablesTest, IsEmptyValue) {
121 StyleVariables vars;
122 EXPECT_TRUE(vars.IsEmpty());
123 vars.SetValue("--x", css_test_helpers::CreateCustomIdent("foo"));
124 EXPECT_FALSE(vars.IsEmpty());
125 }
126
TEST_F(StyleVariablesTest,SetValue)127 TEST_F(StyleVariablesTest, SetValue) {
128 StyleVariables vars;
129
130 const CSSValue* foo = css_test_helpers::CreateCustomIdent("foo");
131 const CSSValue* bar = css_test_helpers::CreateCustomIdent("bar");
132
133 EXPECT_FALSE(vars.GetValue("--x").has_value());
134
135 vars.SetValue("--x", foo);
136 EXPECT_EQ(foo, vars.GetValue("--x").value_or(nullptr));
137
138 vars.SetValue("--x", bar);
139 EXPECT_EQ(bar, vars.GetValue("--x").value_or(nullptr));
140 }
141
TEST_F(StyleVariablesTest,SetNullValue)142 TEST_F(StyleVariablesTest, SetNullValue) {
143 StyleVariables vars;
144 EXPECT_FALSE(vars.GetValue("--x").has_value());
145 vars.SetValue("--x", nullptr);
146 auto value = vars.GetValue("--x");
147 ASSERT_TRUE(value.has_value());
148 EXPECT_EQ(nullptr, value.value());
149 }
150
TEST_F(StyleVariablesTest,SingleValueSamePointer)151 TEST_F(StyleVariablesTest, SingleValueSamePointer) {
152 const CSSValue* foo = css_test_helpers::CreateCustomIdent("foo");
153 StyleVariables vars1;
154 StyleVariables vars2;
155 vars1.SetValue("--x", foo);
156 vars2.SetValue("--x", foo);
157 EXPECT_EQ(vars1, vars2);
158 }
159
TEST_F(StyleVariablesTest,SingleValueSameContent)160 TEST_F(StyleVariablesTest, SingleValueSameContent) {
161 StyleVariables vars1;
162 StyleVariables vars2;
163 vars1.SetValue("--x", css_test_helpers::CreateCustomIdent("foo"));
164 vars2.SetValue("--x", css_test_helpers::CreateCustomIdent("foo"));
165 EXPECT_EQ(vars1, vars2);
166 }
167
TEST_F(StyleVariablesTest,SingleValueContentNotEqual)168 TEST_F(StyleVariablesTest, SingleValueContentNotEqual) {
169 StyleVariables vars1;
170 StyleVariables vars2;
171 vars1.SetValue("--x", css_test_helpers::CreateCustomIdent("foo"));
172 vars2.SetValue("--x", css_test_helpers::CreateCustomIdent("bar"));
173 EXPECT_NE(vars1, vars2);
174 }
175
TEST_F(StyleVariablesTest,DifferentValueSize)176 TEST_F(StyleVariablesTest, DifferentValueSize) {
177 StyleVariables vars1;
178 StyleVariables vars2;
179 vars1.SetValue("--x", css_test_helpers::CreateCustomIdent("foo"));
180 vars2.SetValue("--x", css_test_helpers::CreateCustomIdent("bar"));
181 vars2.SetValue("--y", css_test_helpers::CreateCustomIdent("foz"));
182 EXPECT_NE(vars1, vars2);
183 }
184
185 } // namespace
186 } // namespace blink
187