Flutter Engine
 
Loading...
Searching...
No Matches
dl_color_source_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
5#include <memory>
6#include <vector>
7
15
16namespace flutter {
17namespace testing {
18
19static const sk_sp<DlImage> kTestOpaqueImage =
21static const sk_sp<DlImage> kTestAlphaImage =
23// clang-format off
24static const DlMatrix kTestMatrix1 =
25 DlMatrix::MakeRow(2, 0, 0, 10,
26 0, 3, 0, 12,
27 0, 0, 1, 0,
28 0, 0, 0, 1);
29static const DlMatrix kTestMatrix2 =
30 DlMatrix::MakeRow(4, 0, 0, 15,
31 0, 7, 0, 17,
32 0, 0, 1, 0,
33 0, 0, 0, 1);
34// clang-format on
35static constexpr int kTestStopCount = 3;
46static constexpr float kTestStops[kTestStopCount] = {
47 0.0f,
48 0.7f,
49 1.0f,
50};
51static constexpr float kTestStops2[kTestStopCount] = {
52 0.0f,
53 0.3f,
54 1.0f,
55};
56static constexpr DlPoint kTestPoints1[2] = {
57 DlPoint(5, 15),
58 DlPoint(7, 18),
59};
60static constexpr DlPoint kTestPoints2[2] = {
61 DlPoint(100, 115),
62 DlPoint(107, 118),
63};
64
65TEST(DisplayListColorSource, ImageConstructor) {
69}
70
71TEST(DisplayListColorSource, ImageShared) {
75 ASSERT_NE(source.shared().get(), &source);
76 ASSERT_EQ(*source.shared(), source);
77}
78
79TEST(DisplayListColorSource, ImageAsImage) {
83 ASSERT_NE(source.asImage(), nullptr);
84 ASSERT_EQ(source.asImage(), &source);
85
86 ASSERT_EQ(source.asLinearGradient(), nullptr);
87 ASSERT_EQ(source.asRadialGradient(), nullptr);
88 ASSERT_EQ(source.asConicalGradient(), nullptr);
89 ASSERT_EQ(source.asSweepGradient(), nullptr);
90 ASSERT_EQ(source.asRuntimeEffect(), nullptr);
91}
92
93TEST(DisplayListColorSource, ImageContents) {
97 ASSERT_EQ(source.image(), kTestOpaqueImage);
98 ASSERT_EQ(source.horizontal_tile_mode(), DlTileMode::kRepeat);
99 ASSERT_EQ(source.vertical_tile_mode(), DlTileMode::kMirror);
100 ASSERT_EQ(source.sampling(), DlImageSampling::kLinear);
101 ASSERT_EQ(source.matrix(), kTestMatrix1);
102 ASSERT_EQ(source.is_opaque(), true);
103}
104
105TEST(DisplayListColorSource, AlphaImageContents) {
108 &kTestMatrix1);
109 ASSERT_EQ(source.image(), kTestAlphaImage);
110 ASSERT_EQ(source.horizontal_tile_mode(), DlTileMode::kRepeat);
111 ASSERT_EQ(source.vertical_tile_mode(), DlTileMode::kMirror);
112 ASSERT_EQ(source.sampling(), DlImageSampling::kLinear);
113 ASSERT_EQ(source.matrix(), kTestMatrix1);
114 ASSERT_EQ(source.is_opaque(), false);
115}
116
126
127TEST(DisplayListColorSource, ImageNotEquals) {
130 &kTestMatrix1);
131 {
134 &kTestMatrix1);
135 TestNotEquals(source1, source2, "Image differs");
136 }
137 {
140 &kTestMatrix1);
141 TestNotEquals(source1, source2, "hTileMode differs");
142 }
143 {
146 &kTestMatrix1);
147 TestNotEquals(source1, source2, "vTileMode differs");
148 }
149 {
152 &kTestMatrix1);
153 TestNotEquals(source1, source2, "Sampling differs");
154 }
155 {
158 &kTestMatrix2);
159 TestNotEquals(source1, source2, "Matrix differs");
160 }
161}
162
163TEST(DisplayListColorSource, LinearGradientConstructor) {
164 std::shared_ptr<DlColorSource> source = DlColorSource::MakeLinear(
167}
168
169TEST(DisplayListColorSource, LinearGradientARGBConstructor) {
170 std::array<DlScalar, kTestStopCount * 4> colors;
171 for (int i = 0; i < kTestStopCount; ++i) {
172 colors[i * 4 + 0] = kTestColors[i].getAlphaF(); //
173 colors[i * 4 + 1] = kTestColors[i].getRedF(); //
174 colors[i * 4 + 2] = kTestColors[i].getGreenF(); //
175 colors[i * 4 + 3] = kTestColors[i].getBlueF();
176 }
177 std::shared_ptr<DlColorSource> source = DlColorSource::MakeLinear(
178 kTestPoints1[0], kTestPoints1[1], kTestStopCount, colors.data(),
180 ASSERT_TRUE(source);
181 ASSERT_TRUE(source->asLinearGradient());
182 EXPECT_EQ(source->asLinearGradient()->start_point(), kTestPoints1[0]);
183 EXPECT_EQ(source->asLinearGradient()->end_point(), kTestPoints1[1]);
184 EXPECT_EQ(source->asLinearGradient()->stop_count(), kTestStopCount);
185 for (int i = 0; i < kTestStopCount; i++) {
186 EXPECT_EQ(source->asLinearGradient()->colors()[i],
188 EXPECT_EQ(source->asLinearGradient()->stops()[i], kTestStops[i]);
189 }
190 EXPECT_EQ(source->asLinearGradient()->tile_mode(), DlTileMode::kClamp);
191 EXPECT_EQ(source->asLinearGradient()->matrix(), kTestMatrix1);
192 EXPECT_EQ(source->is_opaque(), true);
193}
194
195TEST(DisplayListColorSource, LinearGradientShared) {
196 std::shared_ptr<DlColorSource> source = DlColorSource::MakeLinear(
199 ASSERT_NE(source->shared().get(), source.get());
200 ASSERT_EQ(*source->shared().get(), *source.get());
201}
202
203TEST(DisplayListColorSource, LinearGradientAsLinear) {
204 std::shared_ptr<DlColorSource> source = DlColorSource::MakeLinear(
207 ASSERT_NE(source->asLinearGradient(), nullptr);
208 ASSERT_EQ(source->asLinearGradient(), source.get());
209
210 ASSERT_EQ(source->asImage(), nullptr);
211 ASSERT_EQ(source->asRadialGradient(), nullptr);
212 ASSERT_EQ(source->asConicalGradient(), nullptr);
213 ASSERT_EQ(source->asSweepGradient(), nullptr);
214 ASSERT_EQ(source->asRuntimeEffect(), nullptr);
215}
216
217TEST(DisplayListColorSource, LinearGradientContents) {
218 std::shared_ptr<DlColorSource> source = DlColorSource::MakeLinear(
221 ASSERT_EQ(source->asLinearGradient()->start_point(), kTestPoints1[0]);
222 ASSERT_EQ(source->asLinearGradient()->end_point(), kTestPoints1[1]);
223 ASSERT_EQ(source->asLinearGradient()->stop_count(), kTestStopCount);
224 for (int i = 0; i < kTestStopCount; i++) {
225 ASSERT_EQ(source->asLinearGradient()->colors()[i], kTestColors[i]);
226 ASSERT_EQ(source->asLinearGradient()->stops()[i], kTestStops[i]);
227 }
228 ASSERT_EQ(source->asLinearGradient()->tile_mode(), DlTileMode::kClamp);
229 ASSERT_EQ(source->asLinearGradient()->matrix(), kTestMatrix1);
230 ASSERT_EQ(source->is_opaque(), true);
231}
232
233TEST(DisplayListColorSource, AlphaLinearGradientContents) {
234 std::shared_ptr<DlColorSource> source = DlColorSource::MakeLinear(
237 ASSERT_EQ(source->asLinearGradient()->start_point(), kTestPoints1[0]);
238 ASSERT_EQ(source->asLinearGradient()->end_point(), kTestPoints1[1]);
239 ASSERT_EQ(source->asLinearGradient()->stop_count(), kTestStopCount);
240 for (int i = 0; i < kTestStopCount; i++) {
241 ASSERT_EQ(source->asLinearGradient()->colors()[i], kTestAlphaColors[i]);
242 ASSERT_EQ(source->asLinearGradient()->stops()[i], kTestStops[i]);
243 }
244 ASSERT_EQ(source->asLinearGradient()->tile_mode(), DlTileMode::kClamp);
245 ASSERT_EQ(source->asLinearGradient()->matrix(), kTestMatrix1);
246 ASSERT_EQ(source->is_opaque(), false);
247}
248
249TEST(DisplayListColorSource, LinearGradientEquals) {
250 std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeLinear(
253 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeLinear(
256 TestEquals(*source1, *source2);
257}
258
259TEST(DisplayListColorSource, LinearGradientNotEquals) {
260 std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeLinear(
263 {
264 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeLinear(
267 TestNotEquals(*source1, *source2, "Point 0 differs");
268 }
269 {
270 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeLinear(
273 TestNotEquals(*source1, *source2, "Point 1 differs");
274 }
275 {
276 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeLinear(
279 TestNotEquals(*source1, *source2, "Stop count differs");
280 }
281 {
282 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeLinear(
285 TestNotEquals(*source1, *source2, "Colors differ");
286 }
287 {
288 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeLinear(
291 TestNotEquals(*source1, *source2, "Stops differ");
292 }
293 {
294 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeLinear(
297 TestNotEquals(*source1, *source2, "Tile Mode differs");
298 }
299 {
300 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeLinear(
303 TestNotEquals(*source1, *source2, "Matrix differs");
304 }
305}
306
307TEST(DisplayListColorSource, RadialGradientConstructor) {
308 std::shared_ptr<DlColorSource> source = DlColorSource::MakeRadial(
311}
312
313TEST(DisplayListColorSource, RadialGradientARGBConstructor) {
314 std::array<DlScalar, kTestStopCount * 4> colors;
315 for (int i = 0; i < kTestStopCount; ++i) {
316 colors[i * 4 + 0] = kTestColors[i].getAlphaF(); //
317 colors[i * 4 + 1] = kTestColors[i].getRedF(); //
318 colors[i * 4 + 2] = kTestColors[i].getGreenF(); //
319 colors[i * 4 + 3] = kTestColors[i].getBlueF();
320 }
321 std::shared_ptr<DlColorSource> source = DlColorSource::MakeRadial(
322 kTestPoints1[0], 10.f, kTestStopCount, colors.data(), kTestStops,
324 ASSERT_TRUE(source);
325 ASSERT_TRUE(source->asRadialGradient());
326 EXPECT_EQ(source->asRadialGradient()->center(), kTestPoints1[0]);
327 EXPECT_EQ(source->asRadialGradient()->radius(), 10.f);
328 EXPECT_EQ(source->asRadialGradient()->stop_count(), kTestStopCount);
329 for (int i = 0; i < kTestStopCount; i++) {
330 EXPECT_EQ(source->asRadialGradient()->colors()[i],
332 EXPECT_EQ(source->asRadialGradient()->stops()[i], kTestStops[i]);
333 }
334 EXPECT_EQ(source->asRadialGradient()->tile_mode(), DlTileMode::kClamp);
335 EXPECT_EQ(source->asRadialGradient()->matrix(), kTestMatrix1);
336 EXPECT_EQ(source->is_opaque(), true);
337}
338
339TEST(DisplayListColorSource, RadialGradientShared) {
340 std::shared_ptr<DlColorSource> source = DlColorSource::MakeRadial(
343 ASSERT_NE(source->shared().get(), source.get());
344 ASSERT_EQ(*source->shared().get(), *source.get());
345}
346
347TEST(DisplayListColorSource, RadialGradientAsRadial) {
348 std::shared_ptr<DlColorSource> source = DlColorSource::MakeRadial(
351 ASSERT_NE(source->asRadialGradient(), nullptr);
352 ASSERT_EQ(source->asRadialGradient(), source.get());
353
354 ASSERT_EQ(source->asImage(), nullptr);
355 ASSERT_EQ(source->asLinearGradient(), nullptr);
356 ASSERT_EQ(source->asConicalGradient(), nullptr);
357 ASSERT_EQ(source->asSweepGradient(), nullptr);
358 ASSERT_EQ(source->asRuntimeEffect(), nullptr);
359}
360
361TEST(DisplayListColorSource, RadialGradientContents) {
362 std::shared_ptr<DlColorSource> source = DlColorSource::MakeRadial(
365 ASSERT_EQ(source->asRadialGradient()->center(), kTestPoints1[0]);
366 ASSERT_EQ(source->asRadialGradient()->radius(), 10.0);
367 ASSERT_EQ(source->asRadialGradient()->stop_count(), kTestStopCount);
368 for (int i = 0; i < kTestStopCount; i++) {
369 ASSERT_EQ(source->asRadialGradient()->colors()[i], kTestColors[i]);
370 ASSERT_EQ(source->asRadialGradient()->stops()[i], kTestStops[i]);
371 }
372 ASSERT_EQ(source->asRadialGradient()->tile_mode(), DlTileMode::kClamp);
373 ASSERT_EQ(source->asRadialGradient()->matrix(), kTestMatrix1);
374 ASSERT_EQ(source->is_opaque(), true);
375}
376
377TEST(DisplayListColorSource, AlphaRadialGradientContents) {
378 std::shared_ptr<DlColorSource> source = DlColorSource::MakeRadial(
381 ASSERT_EQ(source->asRadialGradient()->center(), kTestPoints1[0]);
382 ASSERT_EQ(source->asRadialGradient()->radius(), 10.0);
383 ASSERT_EQ(source->asRadialGradient()->stop_count(), kTestStopCount);
384 for (int i = 0; i < kTestStopCount; i++) {
385 ASSERT_EQ(source->asRadialGradient()->colors()[i], kTestAlphaColors[i]);
386 ASSERT_EQ(source->asRadialGradient()->stops()[i], kTestStops[i]);
387 }
388 ASSERT_EQ(source->asRadialGradient()->tile_mode(), DlTileMode::kClamp);
389 ASSERT_EQ(source->asRadialGradient()->matrix(), kTestMatrix1);
390 ASSERT_EQ(source->is_opaque(), false);
391}
392
393TEST(DisplayListColorSource, RadialGradientEquals) {
394 std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeRadial(
397 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRadial(
400 TestEquals(*source1, *source2);
401}
402
403TEST(DisplayListColorSource, RadialGradientNotEquals) {
404 std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeRadial(
407 {
408 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRadial(
411 TestNotEquals(*source1, *source2, "Center differs");
412 }
413 {
414 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRadial(
417 TestNotEquals(*source1, *source2, "Radius differs");
418 }
419 {
420 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRadial(
421 kTestPoints1[0], 10.0, 2, kTestColors, kTestStops, //
423 TestNotEquals(*source1, *source2, "Stop count differs");
424 }
425 {
426 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRadial(
429 TestNotEquals(*source1, *source2, "Colors differ");
430 }
431 {
432 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRadial(
435 TestNotEquals(*source1, *source2, "Stops differ");
436 }
437 {
438 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRadial(
441 TestNotEquals(*source1, *source2, "Tile Mode differs");
442 }
443 {
444 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRadial(
447 TestNotEquals(*source1, *source2, "Matrix differs");
448 }
449}
450
451TEST(DisplayListColorSource, ConicalGradientConstructor) {
452 std::shared_ptr<DlColorSource> source = DlColorSource::MakeConical(
455}
456
457TEST(DisplayListColorSource, ConicalGradientARGBConstructor) {
458 std::array<DlScalar, kTestStopCount * 4> colors;
459 for (int i = 0; i < kTestStopCount; ++i) {
460 colors[i * 4 + 0] = kTestColors[i].getAlphaF(); //
461 colors[i * 4 + 1] = kTestColors[i].getRedF(); //
462 colors[i * 4 + 2] = kTestColors[i].getGreenF(); //
463 colors[i * 4 + 3] = kTestColors[i].getBlueF();
464 }
465 std::shared_ptr<DlColorSource> source = DlColorSource::MakeConical(
466 kTestPoints1[0], 10.f, kTestPoints1[1], 20.f, kTestStopCount,
467 colors.data(), kTestStops, DlTileMode::kClamp, &kTestMatrix1);
468 ASSERT_TRUE(source);
469 ASSERT_TRUE(source->asConicalGradient());
470 EXPECT_EQ(source->asConicalGradient()->start_center(), kTestPoints1[0]);
471 EXPECT_EQ(source->asConicalGradient()->start_radius(), 10.f);
472 EXPECT_EQ(source->asConicalGradient()->end_center(), kTestPoints1[1]);
473 EXPECT_EQ(source->asConicalGradient()->end_radius(), 20.f);
474 EXPECT_EQ(source->asConicalGradient()->stop_count(), kTestStopCount);
475 for (int i = 0; i < kTestStopCount; i++) {
476 EXPECT_EQ(source->asConicalGradient()->colors()[i],
478 EXPECT_EQ(source->asConicalGradient()->stops()[i], kTestStops[i]);
479 }
480 EXPECT_EQ(source->asConicalGradient()->tile_mode(), DlTileMode::kClamp);
481 EXPECT_EQ(source->asConicalGradient()->matrix(), kTestMatrix1);
482 EXPECT_EQ(source->is_opaque(), true);
483}
484
485TEST(DisplayListColorSource, ConicalGradientShared) {
486 std::shared_ptr<DlColorSource> source = DlColorSource::MakeConical(
489 ASSERT_NE(source->shared().get(), source.get());
490 ASSERT_EQ(*source->shared().get(), *source.get());
491}
492
493TEST(DisplayListColorSource, ConicalGradientAsConical) {
494 std::shared_ptr<DlColorSource> source = DlColorSource::MakeConical(
497 ASSERT_NE(source->asConicalGradient(), nullptr);
498 ASSERT_EQ(source->asConicalGradient(), source.get());
499
500 ASSERT_EQ(source->asImage(), nullptr);
501 ASSERT_EQ(source->asLinearGradient(), nullptr);
502 ASSERT_EQ(source->asRadialGradient(), nullptr);
503 ASSERT_EQ(source->asSweepGradient(), nullptr);
504 ASSERT_EQ(source->asRuntimeEffect(), nullptr);
505}
506
507TEST(DisplayListColorSource, ConicalGradientContents) {
508 std::shared_ptr<DlColorSource> source = DlColorSource::MakeConical(
511 ASSERT_EQ(source->asConicalGradient()->start_center(), kTestPoints1[0]);
512 ASSERT_EQ(source->asConicalGradient()->start_radius(), 10.0);
513 ASSERT_EQ(source->asConicalGradient()->end_center(), kTestPoints1[1]);
514 ASSERT_EQ(source->asConicalGradient()->end_radius(), 20.0);
515 ASSERT_EQ(source->asConicalGradient()->stop_count(), kTestStopCount);
516 for (int i = 0; i < kTestStopCount; i++) {
517 ASSERT_EQ(source->asConicalGradient()->colors()[i], kTestColors[i]);
518 ASSERT_EQ(source->asConicalGradient()->stops()[i], kTestStops[i]);
519 }
520 ASSERT_EQ(source->asConicalGradient()->tile_mode(), DlTileMode::kClamp);
521 ASSERT_EQ(source->asConicalGradient()->matrix(), kTestMatrix1);
522 ASSERT_EQ(source->is_opaque(), true);
523}
524
525TEST(DisplayListColorSource, AlphaConicalGradientContents) {
526 std::shared_ptr<DlColorSource> source = DlColorSource::MakeConical(
527 kTestPoints1[0], 10.0, kTestPoints1[1], 20.0, kTestStopCount,
529 ASSERT_EQ(source->asConicalGradient()->start_center(), kTestPoints1[0]);
530 ASSERT_EQ(source->asConicalGradient()->start_radius(), 10.0);
531 ASSERT_EQ(source->asConicalGradient()->end_center(), kTestPoints1[1]);
532 ASSERT_EQ(source->asConicalGradient()->end_radius(), 20.0);
533 ASSERT_EQ(source->asConicalGradient()->stop_count(), kTestStopCount);
534 for (int i = 0; i < kTestStopCount; i++) {
535 ASSERT_EQ(source->asConicalGradient()->colors()[i], kTestAlphaColors[i]);
536 ASSERT_EQ(source->asConicalGradient()->stops()[i], kTestStops[i]);
537 }
538 ASSERT_EQ(source->asConicalGradient()->tile_mode(), DlTileMode::kClamp);
539 ASSERT_EQ(source->asConicalGradient()->matrix(), kTestMatrix1);
540 ASSERT_EQ(source->is_opaque(), false);
541}
542
543TEST(DisplayListColorSource, ConicalGradientEquals) {
544 std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeConical(
547 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
550 TestEquals(*source1, *source2);
551}
552
553TEST(DisplayListColorSource, ConicalGradientNotEquals) {
554 std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeConical(
557 {
558 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
559 kTestPoints2[0], 10.0, kTestPoints1[1], 20.0, kTestStopCount,
561 TestNotEquals(*source1, *source2, "Start Center differs");
562 }
563 {
564 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
565 kTestPoints1[0], 15.0, kTestPoints1[1], 20.0, kTestStopCount,
567 TestNotEquals(*source1, *source2, "Start Radius differs");
568 }
569 {
570 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
571 kTestPoints1[0], 10.0, kTestPoints2[1], 20.0, kTestStopCount,
573 TestNotEquals(*source1, *source2, "End Center differs");
574 }
575 {
576 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
577 kTestPoints1[0], 10.0, kTestPoints1[1], 25.0, kTestStopCount,
579 TestNotEquals(*source1, *source2, "End Radius differs");
580 }
581 {
582 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
583 kTestPoints1[0], 10.0, kTestPoints1[1], 20.0, 2, kTestColors,
585 TestNotEquals(*source1, *source2, "Stop count differs");
586 }
587 {
588 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
589 kTestPoints1[0], 10.0, kTestPoints1[1], 20.0, kTestStopCount,
591 TestNotEquals(*source1, *source2, "Colors differ");
592 }
593 {
594 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
595 kTestPoints1[0], 10.0, kTestPoints1[1], 20.0, kTestStopCount,
597 TestNotEquals(*source1, *source2, "Stops differ");
598 }
599 {
600 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
601 kTestPoints1[0], 10.0, kTestPoints1[1], 20.0, kTestStopCount,
603 TestNotEquals(*source1, *source2, "Tile Mode differs");
604 }
605 {
606 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeConical(
607 kTestPoints1[0], 10.0, kTestPoints1[1], 20.0, kTestStopCount,
609 TestNotEquals(*source1, *source2, "Matrix differs");
610 }
611}
612
613TEST(DisplayListColorSource, SweepGradientConstructor) {
614 std::shared_ptr<DlColorSource> source = DlColorSource::MakeSweep(
617}
618
619TEST(DisplayListColorSource, SweepGradientARGBConstructor) {
620 std::array<DlScalar, kTestStopCount * 4> colors;
621 for (int i = 0; i < kTestStopCount; ++i) {
622 colors[i * 4 + 0] = kTestColors[i].getAlphaF(); //
623 colors[i * 4 + 1] = kTestColors[i].getRedF(); //
624 colors[i * 4 + 2] = kTestColors[i].getGreenF(); //
625 colors[i * 4 + 3] = kTestColors[i].getBlueF();
626 }
627 std::shared_ptr<DlColorSource> source = DlColorSource::MakeSweep(
628 kTestPoints1[0], 10.f, 20.f, kTestStopCount, colors.data(), kTestStops,
630 ASSERT_TRUE(source);
631 ASSERT_TRUE(source->asSweepGradient());
632 EXPECT_EQ(source->asSweepGradient()->center(), kTestPoints1[0]);
633 EXPECT_EQ(source->asSweepGradient()->start(), 10.f);
634 EXPECT_EQ(source->asSweepGradient()->end(), 20.f);
635 EXPECT_EQ(source->asSweepGradient()->stop_count(), kTestStopCount);
636 for (int i = 0; i < kTestStopCount; i++) {
637 EXPECT_EQ(source->asSweepGradient()->colors()[i],
639 EXPECT_EQ(source->asSweepGradient()->stops()[i], kTestStops[i]);
640 }
641 EXPECT_EQ(source->asSweepGradient()->tile_mode(), DlTileMode::kClamp);
642 EXPECT_EQ(source->asSweepGradient()->matrix(), kTestMatrix1);
643 EXPECT_EQ(source->is_opaque(), true);
644}
645
646TEST(DisplayListColorSource, SweepGradientShared) {
647 std::shared_ptr<DlColorSource> source = DlColorSource::MakeSweep(
650 ASSERT_NE(source->shared().get(), source.get());
651 ASSERT_EQ(*source->shared().get(), *source.get());
652}
653
654TEST(DisplayListColorSource, SweepGradientAsSweep) {
655 std::shared_ptr<DlColorSource> source = DlColorSource::MakeSweep(
658 ASSERT_NE(source->asSweepGradient(), nullptr);
659 ASSERT_EQ(source->asSweepGradient(), source.get());
660
661 ASSERT_EQ(source->asImage(), nullptr);
662 ASSERT_EQ(source->asLinearGradient(), nullptr);
663 ASSERT_EQ(source->asRadialGradient(), nullptr);
664 ASSERT_EQ(source->asConicalGradient(), nullptr);
665 ASSERT_EQ(source->asRuntimeEffect(), nullptr);
666}
667
668TEST(DisplayListColorSource, SweepGradientContents) {
669 std::shared_ptr<DlColorSource> source = DlColorSource::MakeSweep(
672 ASSERT_EQ(source->asSweepGradient()->center(), kTestPoints1[0]);
673 ASSERT_EQ(source->asSweepGradient()->start(), 10.0);
674 ASSERT_EQ(source->asSweepGradient()->end(), 20.0);
675 ASSERT_EQ(source->asSweepGradient()->stop_count(), kTestStopCount);
676 for (int i = 0; i < kTestStopCount; i++) {
677 ASSERT_EQ(source->asSweepGradient()->colors()[i], kTestColors[i]);
678 ASSERT_EQ(source->asSweepGradient()->stops()[i], kTestStops[i]);
679 }
680 ASSERT_EQ(source->asSweepGradient()->tile_mode(), DlTileMode::kClamp);
681 ASSERT_EQ(source->asSweepGradient()->matrix(), kTestMatrix1);
682 ASSERT_EQ(source->is_opaque(), true);
683}
684
685TEST(DisplayListColorSource, AlphaSweepGradientContents) {
686 std::shared_ptr<DlColorSource> source = DlColorSource::MakeSweep(
689 ASSERT_EQ(source->asSweepGradient()->center(), kTestPoints1[0]);
690 ASSERT_EQ(source->asSweepGradient()->start(), 10.0);
691 ASSERT_EQ(source->asSweepGradient()->end(), 20.0);
692 ASSERT_EQ(source->asSweepGradient()->stop_count(), kTestStopCount);
693 for (int i = 0; i < kTestStopCount; i++) {
694 ASSERT_EQ(source->asSweepGradient()->colors()[i], kTestAlphaColors[i]);
695 ASSERT_EQ(source->asSweepGradient()->stops()[i], kTestStops[i]);
696 }
697 ASSERT_EQ(source->asSweepGradient()->tile_mode(), DlTileMode::kClamp);
698 ASSERT_EQ(source->asSweepGradient()->matrix(), kTestMatrix1);
699 ASSERT_EQ(source->is_opaque(), false);
700}
701
702TEST(DisplayListColorSource, SweepGradientEquals) {
703 std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeSweep(
706 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeSweep(
709 TestEquals(*source1, *source2);
710}
711
712TEST(DisplayListColorSource, SweepGradientNotEquals) {
713 std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeSweep(
716 {
717 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeSweep(
720 TestNotEquals(*source1, *source2, "Center differs");
721 }
722 {
723 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeSweep(
726 TestNotEquals(*source1, *source2, "Start Angle differs");
727 }
728 {
729 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeSweep(
732 TestNotEquals(*source1, *source2, "End Angle differs");
733 }
734 {
735 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeSweep(
736 kTestPoints1[0], 10.0, 20.0, 2, kTestColors, kTestStops, //
738 TestNotEquals(*source1, *source2, "Stop count differs");
739 }
740 {
741 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeSweep(
744 TestNotEquals(*source1, *source2, "Colors differ");
745 }
746 {
747 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeSweep(
750 TestNotEquals(*source1, *source2, "Stops differ");
751 }
752 {
753 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeSweep(
756 TestNotEquals(*source1, *source2, "Tile Mode differs");
757 }
758 {
759 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeSweep(
762 TestNotEquals(*source1, *source2, "Matrix differs");
763 }
764}
765
766TEST(DisplayListColorSource, RuntimeEffect) {
767 std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeRuntimeEffect(
768 kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>());
769 std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRuntimeEffect(
770 kTestRuntimeEffect2, {}, std::make_shared<std::vector<uint8_t>>());
771 std::shared_ptr<DlColorSource> source3 = DlColorSource::MakeRuntimeEffect(
772 nullptr, {}, std::make_shared<std::vector<uint8_t>>());
773
774 ASSERT_EQ(source1->type(), DlColorSourceType::kRuntimeEffect);
775 ASSERT_EQ(source1->asRuntimeEffect(), source1.get());
776 ASSERT_NE(source2->asRuntimeEffect(), source1.get());
777
778 ASSERT_EQ(source1->asImage(), nullptr);
779 ASSERT_EQ(source1->asLinearGradient(), nullptr);
780 ASSERT_EQ(source1->asRadialGradient(), nullptr);
781 ASSERT_EQ(source1->asConicalGradient(), nullptr);
782 ASSERT_EQ(source1->asSweepGradient(), nullptr);
783
784 TestEquals(source1, source1);
785 TestEquals(source3, source3);
786 TestNotEquals(source1, source2, "RuntimeEffect differs");
787 TestNotEquals(source2, source3, "RuntimeEffect differs");
788}
789
790} // namespace testing
791} // namespace flutter
virtual const DlRuntimeEffectColorSource * asRuntimeEffect() const
static std::shared_ptr< DlColorSource > MakeSweep(DlPoint center, DlScalar start, DlScalar end, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeLinear(const DlPoint start_point, const DlPoint end_point, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
virtual const DlRadialGradientColorSource * asRadialGradient() const
virtual const DlLinearGradientColorSource * asLinearGradient() const
virtual const DlSweepGradientColorSource * asSweepGradient() const
static std::shared_ptr< DlColorSource > MakeRuntimeEffect(sk_sp< DlRuntimeEffect > runtime_effect, std::vector< std::shared_ptr< DlColorSource > > samplers, std::shared_ptr< std::vector< uint8_t > > uniform_data)
virtual const DlConicalGradientColorSource * asConicalGradient() const
static std::shared_ptr< DlColorSource > MakeConical(DlPoint start_center, DlScalar start_radius, DlPoint end_center, DlScalar end_radius, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeRadial(DlPoint center, DlScalar radius, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
std::shared_ptr< DlColorSource > shared() const override
DlImageSampling sampling() const
const DlImageColorSource * asImage() const override
DlTileMode horizontal_tile_mode() const
sk_sp< const DlImage > image() const
static const DlMatrix kTestMatrix2
static constexpr float kTestStops2[kTestStopCount]
static const sk_sp< DlImage > kTestAlphaImage
static const sk_sp< DlRuntimeEffect > kTestRuntimeEffect1
static constexpr DlPoint kTestPoints1[2]
static constexpr int kTestStopCount
static constexpr float kTestStops[kTestStopCount]
static void TestEquals(const T &source1, const U &source2)
sk_sp< DlImage > MakeTestImage(int w, int h, int checker_size)
static const sk_sp< DlRuntimeEffect > kTestRuntimeEffect2
static void TestNotEquals(T &source1, U &source2, const std::string &label)
static constexpr DlPoint kTestPoints2[2]
TEST(NativeAssetsManagerTest, NoAvailableAssets)
static const DlColor kTestAlphaColors[kTestStopCount]
static const sk_sp< DlImage > kTestOpaqueImage
static constexpr DlColor kTestColors[kTestStopCount]
static const DlMatrix kTestMatrix1
impeller::Point DlPoint
static constexpr DlColor kBlue()
Definition dl_color.h:73
constexpr DlScalar getRedF() const
Definition dl_color.h:114
constexpr DlScalar getAlphaF() const
Definition dl_color.h:113
DlColor withColorSpace(DlColorSpace color_space) const
Definition dl_color.cc:40
constexpr DlScalar getBlueF() const
Definition dl_color.h:116
constexpr DlScalar getGreenF() const
Definition dl_color.h:115
static constexpr DlColor kTransparent()
Definition dl_color.h:68
static constexpr DlColor kRed()
Definition dl_color.h:71
static constexpr DlColor kGreen()
Definition dl_color.h:72
DlColor withAlpha(uint8_t alpha) const
Definition dl_color.h:120
A 4x4 matrix using column-major storage.
Definition matrix.h:37
static constexpr Matrix MakeRow(Scalar m0, Scalar m1, Scalar m2, Scalar m3, Scalar m4, Scalar m5, Scalar m6, Scalar m7, Scalar m8, Scalar m9, Scalar m10, Scalar m11, Scalar m12, Scalar m13, Scalar m14, Scalar m15)
Definition matrix.h:83