Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
mutators_stack_unittests.cc
Go to the documentation of this file.
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
8#include "gtest/gtest.h"
9
10namespace flutter {
11namespace testing {
12
13TEST(MutatorsStack, Initialization) {
14 MutatorsStack stack;
15 ASSERT_TRUE(true);
16}
17
18TEST(MutatorsStack, CopyConstructor) {
19 MutatorsStack stack;
20 auto rrect = DlRoundRect();
21 auto rect = DlRect();
22 stack.PushClipRect(rect);
23 stack.PushClipRRect(rrect);
24 MutatorsStack copy = MutatorsStack(stack);
25 ASSERT_TRUE(copy == stack);
26}
27
28TEST(MutatorsStack, CopyAndUpdateTheCopy) {
29 MutatorsStack stack;
30 auto rrect = DlRoundRect();
31 auto rect = DlRect();
32 stack.PushClipRect(rect);
33 stack.PushClipRRect(rrect);
34 MutatorsStack copy = MutatorsStack(stack);
35 copy.Pop();
36 copy.Pop();
37 ASSERT_TRUE(copy != stack);
38 ASSERT_TRUE(copy.is_empty());
39 ASSERT_TRUE(!stack.is_empty());
40 auto iter = stack.Bottom();
41 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRRect);
42 ASSERT_TRUE(iter->get()->GetRRect() == rrect);
43 ++iter;
44 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRect);
45 ASSERT_TRUE(iter->get()->GetRect() == rect);
46}
47
48TEST(MutatorsStack, PushClipRect) {
49 MutatorsStack stack;
50 auto rect = DlRect();
51 stack.PushClipRect(rect);
52 auto iter = stack.Bottom();
53 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRect);
54 ASSERT_TRUE(iter->get()->GetRect() == rect);
55}
56
57TEST(MutatorsStack, PushClipRRect) {
58 MutatorsStack stack;
59 auto rrect = DlRoundRect();
60 stack.PushClipRRect(rrect);
61 auto iter = stack.Bottom();
62 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRRect);
63 ASSERT_TRUE(iter->get()->GetRRect() == rrect);
64}
65
66TEST(MutatorsStack, PushClipRSE) {
67 MutatorsStack stack;
68 auto rse = DlRoundSuperellipse();
69 stack.PushClipRSE(rse);
70 auto iter = stack.Bottom();
71 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRSE);
72 ASSERT_TRUE(iter->get()->GetRSE() == rse);
73}
74
75TEST(MutatorsStack, PushClipPath) {
76 MutatorsStack stack;
78 stack.PushClipPath(path);
79 auto iter = stack.Bottom();
80 ASSERT_TRUE(iter->get()->GetType() == flutter::MutatorType::kClipPath);
81 ASSERT_TRUE(iter->get()->GetPath() == path);
82}
83
84TEST(MutatorsStack, PushTransform) {
85 MutatorsStack stack;
86 DlMatrix matrix;
87 stack.PushTransform(matrix);
88 auto iter = stack.Bottom();
89 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kTransform);
90 ASSERT_TRUE(iter->get()->GetMatrix() == matrix);
91}
92
93TEST(MutatorsStack, PushOpacity) {
94 MutatorsStack stack;
95 uint8_t alpha = 240;
96 stack.PushOpacity(alpha);
97 auto iter = stack.Bottom();
98 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kOpacity);
99 ASSERT_TRUE(iter->get()->GetAlpha() == 240);
100}
101
102TEST(MutatorsStack, PushPlatformViewClipRect) {
103 MutatorsStack stack;
104 auto rect = DlRect();
105 stack.PushPlatformViewClipRect(rect);
106 auto iter = stack.Bottom();
107 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kBackdropClipRect);
108 ASSERT_TRUE(iter->get()->GetBackdropClipRect().rect == rect);
109}
110
111TEST(MutatorsStack, PushPlatformViewClipRRect) {
112 MutatorsStack stack;
113 auto rrect = DlRoundRect();
114 stack.PushPlatformViewClipRRect(rrect);
115 auto iter = stack.Bottom();
116 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kBackdropClipRRect);
117 ASSERT_TRUE(iter->get()->GetBackdropClipRRect().rrect == rrect);
118}
119
120TEST(MutatorsStack, PushPlatformViewClipRSuperellipse) {
121 MutatorsStack stack;
122 auto rse = DlRoundSuperellipse();
124 auto iter = stack.Bottom();
125 ASSERT_TRUE(iter->get()->GetType() ==
127 ASSERT_TRUE(iter->get()->GetBackdropClipRSuperellipse().rse == rse);
128}
129
130TEST(MutatorsStack, PushPlatformViewClipPath) {
131 MutatorsStack stack;
132 auto path = DlPath();
134 auto iter = stack.Bottom();
135 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kBackdropClipPath);
136 ASSERT_TRUE(iter->get()->GetBackdropClipPath().path == path);
137}
138
139TEST(MutatorsStack, PushBackdropFilter) {
140 MutatorsStack stack;
141 const int num_of_mutators = 10;
142 for (int i = 0; i < num_of_mutators; i++) {
144 stack.PushBackdropFilter(filter, DlRect::MakeXYWH(i, i, i, i));
145 }
146
147 auto iter = stack.Begin();
148 int i = 0;
149 while (iter != stack.End()) {
150 ASSERT_EQ(iter->get()->GetType(), MutatorType::kBackdropFilter);
151 ASSERT_EQ(iter->get()->GetFilterMutation().GetFilter().asBlur()->sigma_x(),
152 i);
153 ASSERT_EQ(iter->get()->GetFilterMutation().GetFilterRect().GetX(), i);
154 ASSERT_EQ(iter->get()->GetFilterMutation().GetFilterRect().GetY(), i);
155 ASSERT_EQ(iter->get()->GetFilterMutation().GetFilterRect().GetWidth(), i);
156 ASSERT_EQ(iter->get()->GetFilterMutation().GetFilterRect().GetHeight(), i);
157 ++iter;
158 ++i;
159 }
160 ASSERT_EQ(i, num_of_mutators);
161}
162
164 MutatorsStack stack;
165 DlMatrix matrix;
166 stack.PushTransform(matrix);
167 stack.Pop();
168 auto iter = stack.Bottom();
169 ASSERT_TRUE(iter == stack.Top());
170}
171
172TEST(MutatorsStack, Traversal) {
173 MutatorsStack stack;
174 DlMatrix matrix;
175 stack.PushTransform(matrix);
176 auto rect = DlRect();
177 stack.PushClipRect(rect);
178 auto rrect = DlRoundRect();
179 stack.PushClipRRect(rrect);
180 auto iter = stack.Bottom();
181 int index = 0;
182 while (iter != stack.Top()) {
183 switch (index) {
184 case 0:
185 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRRect);
186 ASSERT_TRUE(iter->get()->GetRRect() == rrect);
187 break;
188 case 1:
189 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRect);
190 ASSERT_TRUE(iter->get()->GetRect() == rect);
191 break;
192 case 2:
193 ASSERT_TRUE(iter->get()->GetType() == MutatorType::kTransform);
194 ASSERT_TRUE(iter->get()->GetMatrix() == matrix);
195 break;
196 default:
197 break;
198 }
199 ++iter;
200 ++index;
201 }
202}
203
204TEST(MutatorsStack, Equality) {
205 MutatorsStack stack;
206 DlMatrix matrix = DlMatrix::MakeScale({1, 1, 1});
207 stack.PushTransform(matrix);
208 DlRect rect = DlRect();
209 stack.PushClipRect(rect);
210 DlRoundRect rrect = DlRoundRect();
211 stack.PushClipRRect(rrect);
212 DlPath path;
213 stack.PushClipPath(path);
214 uint8_t alpha = 240;
215 stack.PushOpacity(alpha);
216 auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
217 stack.PushBackdropFilter(filter, DlRect());
218
219 MutatorsStack stack_other;
220 DlMatrix matrix_other = DlMatrix::MakeScale({1, 1, 1});
221 stack_other.PushTransform(matrix_other);
222 DlRect rect_other = DlRect();
223 stack_other.PushClipRect(rect_other);
224 DlRoundRect rrect_other = DlRoundRect();
225 stack_other.PushClipRRect(rrect_other);
226 DlPath other_path;
227 stack_other.PushClipPath(other_path);
228 uint8_t other_alpha = 240;
229 stack_other.PushOpacity(other_alpha);
230 auto other_filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
231 stack_other.PushBackdropFilter(other_filter, DlRect());
232
233 ASSERT_TRUE(stack == stack_other);
234}
235
236TEST(Mutator, Initialization) {
237 DlRect rect = DlRect();
238 Mutator mutator = Mutator(rect);
239 ASSERT_TRUE(mutator.GetType() == MutatorType::kClipRect);
240 ASSERT_TRUE(mutator.GetRect() == rect);
241
242 DlRoundRect rrect = DlRoundRect();
243 Mutator mutator2 = Mutator(rrect);
244 ASSERT_TRUE(mutator2.GetType() == MutatorType::kClipRRect);
245 ASSERT_TRUE(mutator2.GetRRect() == rrect);
246
248 Mutator mutator2se = Mutator(rse);
249 ASSERT_TRUE(mutator2se.GetType() == MutatorType::kClipRSE);
250 ASSERT_TRUE(mutator2se.GetRSE() == rse);
251
252 DlPath path;
253 Mutator mutator3 = Mutator(path);
254 ASSERT_TRUE(mutator3.GetType() == MutatorType::kClipPath);
255 ASSERT_TRUE(mutator3.GetPath() == path);
256
257 DlMatrix matrix;
258 Mutator mutator4 = Mutator(matrix);
259 ASSERT_TRUE(mutator4.GetType() == MutatorType::kTransform);
260 ASSERT_TRUE(mutator4.GetMatrix() == matrix);
261
262 uint8_t alpha = 240;
263 Mutator mutator5 = Mutator(alpha);
264 ASSERT_TRUE(mutator5.GetType() == MutatorType::kOpacity);
265
266 auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
267 Mutator mutator6 = Mutator(filter, DlRect());
268 ASSERT_TRUE(mutator6.GetType() == MutatorType::kBackdropFilter);
269 ASSERT_TRUE(mutator6.GetFilterMutation().GetFilter() == *filter);
270}
271
272TEST(Mutator, CopyConstructor) {
273 DlRect rect = DlRect();
274 Mutator mutator = Mutator(rect);
275 Mutator copy = Mutator(mutator);
276 ASSERT_TRUE(mutator == copy);
277
278 DlRoundRect rrect = DlRoundRect();
279 Mutator mutator2 = Mutator(rrect);
280 Mutator copy2 = Mutator(mutator2);
281 ASSERT_TRUE(mutator2 == copy2);
282
284 Mutator mutator2se = Mutator(rse);
285 Mutator copy2se = Mutator(mutator2se);
286 ASSERT_TRUE(mutator2se == copy2se);
287
288 DlPath path;
289 Mutator mutator3 = Mutator(path);
290 Mutator copy3 = Mutator(mutator3);
291 ASSERT_TRUE(mutator3 == copy3);
292
293 DlMatrix matrix;
294 Mutator mutator4 = Mutator(matrix);
295 Mutator copy4 = Mutator(mutator4);
296 ASSERT_TRUE(mutator4 == copy4);
297
298 uint8_t alpha = 240;
299 Mutator mutator5 = Mutator(alpha);
300 Mutator copy5 = Mutator(mutator5);
301 ASSERT_TRUE(mutator5 == copy5);
302
303 auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
304 Mutator mutator6 = Mutator(filter, DlRect());
305 Mutator copy6 = Mutator(mutator6);
306 ASSERT_TRUE(mutator6 == copy6);
307}
308
309TEST(Mutator, Equality) {
310 DlMatrix matrix;
311 Mutator mutator = Mutator(matrix);
312 Mutator other_mutator = Mutator(matrix);
313 ASSERT_TRUE(mutator == other_mutator);
314
315 DlRect rect = DlRect();
316 Mutator mutator2 = Mutator(rect);
317 Mutator other_mutator2 = Mutator(rect);
318 ASSERT_TRUE(mutator2 == other_mutator2);
319
320 DlRoundRect rrect = DlRoundRect();
321 Mutator mutator3 = Mutator(rrect);
322 Mutator other_mutator3 = Mutator(rrect);
323 ASSERT_TRUE(mutator3 == other_mutator3);
324
326 Mutator mutator3se = Mutator(rse);
327 Mutator other_mutator3se = Mutator(rse);
328 ASSERT_TRUE(mutator3se == other_mutator3se);
329
330 DlPath path;
332 flutter::Mutator other_mutator4 = flutter::Mutator(path);
333 ASSERT_TRUE(mutator4 == other_mutator4);
334 ASSERT_FALSE(mutator2 == mutator);
335
336 uint8_t alpha = 240;
337 Mutator mutator5 = Mutator(alpha);
338 Mutator other_mutator5 = Mutator(alpha);
339 ASSERT_TRUE(mutator5 == other_mutator5);
340
341 auto filter1 = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
342 auto filter2 = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
343 Mutator mutator6 = Mutator(filter1, DlRect());
344 Mutator other_mutator6 = Mutator(filter2, DlRect());
345 ASSERT_TRUE(mutator6 == other_mutator6);
346}
347
348TEST(Mutator, UnEquality) {
349 DlRect rect = DlRect();
350 Mutator mutator = Mutator(rect);
351 DlMatrix matrix;
352 Mutator not_equal_mutator = Mutator(matrix);
353 ASSERT_TRUE(not_equal_mutator != mutator);
354
355 uint8_t alpha = 240;
356 uint8_t alpha2 = 241;
357 Mutator mutator2 = Mutator(alpha);
358 Mutator other_mutator2 = Mutator(alpha2);
359 ASSERT_TRUE(mutator2 != other_mutator2);
360
361 auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
362 auto filter2 = DlImageFilter::MakeBlur(10, 10, DlTileMode::kClamp);
363 Mutator mutator3 = Mutator(filter, DlRect());
364 Mutator other_mutator3 = Mutator(filter2, DlRect());
365 ASSERT_TRUE(mutator3 != other_mutator3);
366}
367
368} // namespace testing
369} // namespace flutter
static std::shared_ptr< DlImageFilter > MakeBlur(DlScalar sigma_x, DlScalar sigma_y, DlTileMode tile_mode)
const DlImageFilter & GetFilter() const
const DlMatrix & GetMatrix() const
const ImageFilterMutation & GetFilterMutation() const
MutatorType GetType() const
const DlPath & GetPath() const
const DlRoundSuperellipse & GetRSE() const
const DlRect & GetRect() const
const DlRoundRect & GetRRect() const
void PushTransform(const DlMatrix &matrix)
void PushBackdropFilter(const std::shared_ptr< DlImageFilter > &filter, const DlRect &filter_rect)
void PushClipRect(const DlRect &rect)
void PushClipPath(const DlPath &path)
void PushPlatformViewClipRect(const DlRect &rect)
const std::vector< std::shared_ptr< Mutator > >::const_reverse_iterator Top() const
const std::vector< std::shared_ptr< Mutator > >::const_reverse_iterator Bottom() const
void PushPlatformViewClipRRect(const DlRoundRect &rrect)
void PushPlatformViewClipPath(const DlPath &path)
const std::vector< std::shared_ptr< Mutator > >::const_iterator End() const
void PushClipRRect(const DlRoundRect &rrect)
void PushOpacity(const uint8_t &alpha)
void PushClipRSE(const DlRoundSuperellipse &rrect)
void PushPlatformViewClipRSuperellipse(const DlRoundSuperellipse &rse)
const std::vector< std::shared_ptr< Mutator > >::const_iterator Begin() const
TEST(NativeAssetsManagerTest, NoAvailableAssets)
impeller::RoundRect DlRoundRect
impeller::Rect DlRect
impeller::RoundSuperellipse DlRoundSuperellipse
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot The VM snapshot data that will be memory mapped as read only SnapshotAssetPath must be present isolate snapshot The isolate snapshot data that will be memory mapped as read only SnapshotAssetPath must be present cache dir path
Definition switch_defs.h:52
A 4x4 matrix using column-major storage.
Definition matrix.h:37
static constexpr Matrix MakeScale(const Vector3 &s)
Definition matrix.h:104
static constexpr TRect MakeXYWH(Type x, Type y, Type width, Type height)
Definition rect.h:136