1// Copyright 2013 The Flutter 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 "flutter/flow/embedded_views.h"
6
7#include "gtest/gtest.h"
8
9namespace flutter {
10namespace testing {
11
12TEST(MutatorsStack, Initialization) {
13 MutatorsStack stack;
14 ASSERT_TRUE(true);
15}
16
17TEST(MutatorsStack, CopyConstructor) {
18 MutatorsStack stack;
19 auto rrect = SkRRect::MakeEmpty();
20 auto rect = SkRect::MakeEmpty();
21 stack.PushClipRect(rect);
22 stack.PushClipRRect(rrect);
23 MutatorsStack copy = MutatorsStack(stack);
24 ASSERT_TRUE(copy == stack);
25}
26
27TEST(MutatorsStack, CopyAndUpdateTheCopy) {
28 MutatorsStack stack;
29 auto rrect = SkRRect::MakeEmpty();
30 auto rect = SkRect::MakeEmpty();
31 stack.PushClipRect(rect);
32 stack.PushClipRRect(rrect);
33 MutatorsStack copy = MutatorsStack(stack);
34 copy.Pop();
35 copy.Pop();
36 ASSERT_TRUE(copy != stack);
37 ASSERT_TRUE(copy.is_empty());
38 ASSERT_TRUE(!stack.is_empty());
39 auto iter = stack.Bottom();
40 ASSERT_TRUE(iter->get()->GetType() == MutatorType::clip_rrect);
41 ASSERT_TRUE(iter->get()->GetRRect() == rrect);
42 ++iter;
43 ASSERT_TRUE(iter->get()->GetType() == MutatorType::clip_rect);
44 ASSERT_TRUE(iter->get()->GetRect() == rect);
45}
46
47TEST(MutatorsStack, PushClipRect) {
48 MutatorsStack stack;
49 auto rect = SkRect::MakeEmpty();
50 stack.PushClipRect(rect);
51 auto iter = stack.Bottom();
52 ASSERT_TRUE(iter->get()->GetType() == MutatorType::clip_rect);
53 ASSERT_TRUE(iter->get()->GetRect() == rect);
54}
55
56TEST(MutatorsStack, PushClipRRect) {
57 MutatorsStack stack;
58 auto rrect = SkRRect::MakeEmpty();
59 stack.PushClipRRect(rrect);
60 auto iter = stack.Bottom();
61 ASSERT_TRUE(iter->get()->GetType() == MutatorType::clip_rrect);
62 ASSERT_TRUE(iter->get()->GetRRect() == rrect);
63}
64
65TEST(MutatorsStack, PushClipPath) {
66 MutatorsStack stack;
67 SkPath path;
68 stack.PushClipPath(path);
69 auto iter = stack.Bottom();
70 ASSERT_TRUE(iter->get()->GetType() == flutter::MutatorType::clip_path);
71 ASSERT_TRUE(iter->get()->GetPath() == path);
72}
73
74TEST(MutatorsStack, PushTransform) {
75 MutatorsStack stack;
76 SkMatrix matrix;
77 matrix.setIdentity();
78 stack.PushTransform(matrix);
79 auto iter = stack.Bottom();
80 ASSERT_TRUE(iter->get()->GetType() == MutatorType::transform);
81 ASSERT_TRUE(iter->get()->GetMatrix() == matrix);
82}
83
84TEST(MutatorsStack, PushOpacity) {
85 MutatorsStack stack;
86 int alpha = 240;
87 stack.PushOpacity(alpha);
88 auto iter = stack.Bottom();
89 ASSERT_TRUE(iter->get()->GetType() == MutatorType::opacity);
90 ASSERT_TRUE(iter->get()->GetAlpha() == 240);
91}
92
93TEST(MutatorsStack, Pop) {
94 MutatorsStack stack;
95 SkMatrix matrix;
96 matrix.setIdentity();
97 stack.PushTransform(matrix);
98 stack.Pop();
99 auto iter = stack.Bottom();
100 ASSERT_TRUE(iter == stack.Top());
101}
102
103TEST(MutatorsStack, Traversal) {
104 MutatorsStack stack;
105 SkMatrix matrix;
106 matrix.setIdentity();
107 stack.PushTransform(matrix);
108 auto rect = SkRect::MakeEmpty();
109 stack.PushClipRect(rect);
110 auto rrect = SkRRect::MakeEmpty();
111 stack.PushClipRRect(rrect);
112 auto iter = stack.Bottom();
113 int index = 0;
114 while (iter != stack.Top()) {
115 switch (index) {
116 case 0:
117 ASSERT_TRUE(iter->get()->GetType() == MutatorType::clip_rrect);
118 ASSERT_TRUE(iter->get()->GetRRect() == rrect);
119 break;
120 case 1:
121 ASSERT_TRUE(iter->get()->GetType() == MutatorType::clip_rect);
122 ASSERT_TRUE(iter->get()->GetRect() == rect);
123 break;
124 case 2:
125 ASSERT_TRUE(iter->get()->GetType() == MutatorType::transform);
126 ASSERT_TRUE(iter->get()->GetMatrix() == matrix);
127 break;
128 default:
129 break;
130 }
131 ++iter;
132 ++index;
133 }
134}
135
136TEST(MutatorsStack, Equality) {
137 MutatorsStack stack;
138 SkMatrix matrix = SkMatrix::Scale(1, 1);
139 stack.PushTransform(matrix);
140 SkRect rect = SkRect::MakeEmpty();
141 stack.PushClipRect(rect);
142 SkRRect rrect = SkRRect::MakeEmpty();
143 stack.PushClipRRect(rrect);
144 SkPath path;
145 stack.PushClipPath(path);
146 int alpha = 240;
147 stack.PushOpacity(alpha);
148
149 MutatorsStack stackOther;
150 SkMatrix matrixOther = SkMatrix::Scale(1, 1);
151 stackOther.PushTransform(matrixOther);
152 SkRect rectOther = SkRect::MakeEmpty();
153 stackOther.PushClipRect(rectOther);
154 SkRRect rrectOther = SkRRect::MakeEmpty();
155 stackOther.PushClipRRect(rrectOther);
156 SkPath otherPath;
157 stackOther.PushClipPath(otherPath);
158 int otherAlpha = 240;
159 stackOther.PushOpacity(otherAlpha);
160
161 ASSERT_TRUE(stack == stackOther);
162}
163
164TEST(Mutator, Initialization) {
165 SkRect rect = SkRect::MakeEmpty();
166 Mutator mutator = Mutator(rect);
167 ASSERT_TRUE(mutator.GetType() == MutatorType::clip_rect);
168 ASSERT_TRUE(mutator.GetRect() == rect);
169
170 SkRRect rrect = SkRRect::MakeEmpty();
171 Mutator mutator2 = Mutator(rrect);
172 ASSERT_TRUE(mutator2.GetType() == MutatorType::clip_rrect);
173 ASSERT_TRUE(mutator2.GetRRect() == rrect);
174
175 SkPath path;
176 Mutator mutator3 = Mutator(path);
177 ASSERT_TRUE(mutator3.GetType() == MutatorType::clip_path);
178 ASSERT_TRUE(mutator3.GetPath() == path);
179
180 SkMatrix matrix;
181 matrix.setIdentity();
182 Mutator mutator4 = Mutator(matrix);
183 ASSERT_TRUE(mutator4.GetType() == MutatorType::transform);
184 ASSERT_TRUE(mutator4.GetMatrix() == matrix);
185
186 int alpha = 240;
187 Mutator mutator5 = Mutator(alpha);
188 ASSERT_TRUE(mutator5.GetType() == MutatorType::opacity);
189}
190
191TEST(Mutator, CopyConstructor) {
192 SkRect rect = SkRect::MakeEmpty();
193 Mutator mutator = Mutator(rect);
194 Mutator copy = Mutator(mutator);
195 ASSERT_TRUE(mutator == copy);
196
197 SkRRect rrect = SkRRect::MakeEmpty();
198 Mutator mutator2 = Mutator(rrect);
199 Mutator copy2 = Mutator(mutator2);
200 ASSERT_TRUE(mutator2 == copy2);
201
202 SkPath path;
203 Mutator mutator3 = Mutator(path);
204 Mutator copy3 = Mutator(mutator3);
205 ASSERT_TRUE(mutator3 == copy3);
206
207 SkMatrix matrix;
208 matrix.setIdentity();
209 Mutator mutator4 = Mutator(matrix);
210 Mutator copy4 = Mutator(mutator4);
211 ASSERT_TRUE(mutator4 == copy4);
212
213 int alpha = 240;
214 Mutator mutator5 = Mutator(alpha);
215 Mutator copy5 = Mutator(mutator5);
216 ASSERT_TRUE(mutator5 == copy5);
217}
218
219TEST(Mutator, Equality) {
220 SkMatrix matrix;
221 matrix.setIdentity();
222 Mutator mutator = Mutator(matrix);
223 Mutator otherMutator = Mutator(matrix);
224 ASSERT_TRUE(mutator == otherMutator);
225
226 SkRect rect = SkRect::MakeEmpty();
227 Mutator mutator2 = Mutator(rect);
228 Mutator otherMutator2 = Mutator(rect);
229 ASSERT_TRUE(mutator2 == otherMutator2);
230
231 SkRRect rrect = SkRRect::MakeEmpty();
232 Mutator mutator3 = Mutator(rrect);
233 Mutator otherMutator3 = Mutator(rrect);
234 ASSERT_TRUE(mutator3 == otherMutator3);
235
236 SkPath path;
237 flutter::Mutator mutator4 = flutter::Mutator(path);
238 flutter::Mutator otherMutator4 = flutter::Mutator(path);
239 ASSERT_TRUE(mutator4 == otherMutator4);
240 ASSERT_FALSE(mutator2 == mutator);
241 int alpha = 240;
242 Mutator mutator5 = Mutator(alpha);
243 Mutator otherMutator5 = Mutator(alpha);
244 ASSERT_TRUE(mutator5 == otherMutator5);
245}
246
247TEST(Mutator, UnEquality) {
248 SkRect rect = SkRect::MakeEmpty();
249 Mutator mutator = Mutator(rect);
250 SkMatrix matrix;
251 matrix.setIdentity();
252 Mutator notEqualMutator = Mutator(matrix);
253 ASSERT_TRUE(notEqualMutator != mutator);
254
255 int alpha = 240;
256 int alpha2 = 241;
257 Mutator mutator2 = Mutator(alpha);
258 Mutator otherMutator2 = Mutator(alpha2);
259 ASSERT_TRUE(mutator2 != otherMutator2);
260}
261
262} // namespace testing
263} // namespace flutter
264