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