| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "flutter/flow/embedded_views.h" | |
| #include "gtest/gtest.h" | |
| namespace flutter { | |
| namespace testing { | |
| TEST(MutatorsStack, Initialization) { | |
| MutatorsStack stack; | |
| ASSERT_TRUE(true); | |
| } | |
| TEST(MutatorsStack, CopyConstructor) { | |
| MutatorsStack stack; | |
| auto rrect = SkRRect::MakeEmpty(); | |
| auto rect = SkRect::MakeEmpty(); | |
| stack.PushClipRect(rect); | |
| stack.PushClipRRect(rrect); | |
| MutatorsStack copy = MutatorsStack(stack); | |
| ASSERT_TRUE(copy == stack); | |
| } | |
| TEST(MutatorsStack, CopyAndUpdateTheCopy) { | |
| MutatorsStack stack; | |
| auto rrect = SkRRect::MakeEmpty(); | |
| auto rect = SkRect::MakeEmpty(); | |
| stack.PushClipRect(rect); | |
| stack.PushClipRRect(rrect); | |
| MutatorsStack copy = MutatorsStack(stack); | |
| copy.Pop(); | |
| copy.Pop(); | |
| ASSERT_TRUE(copy != stack); | |
| ASSERT_TRUE(copy.is_empty()); | |
| ASSERT_TRUE(!stack.is_empty()); | |
| auto iter = stack.Bottom(); | |
| ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRRect); | |
| ASSERT_TRUE(iter->get()->GetRRect() == rrect); | |
| ++iter; | |
| ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRect); | |
| ASSERT_TRUE(iter->get()->GetRect() == rect); | |
| } | |
| TEST(MutatorsStack, PushClipRect) { | |
| MutatorsStack stack; | |
| auto rect = SkRect::MakeEmpty(); | |
| stack.PushClipRect(rect); | |
| auto iter = stack.Bottom(); | |
| ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRect); | |
| ASSERT_TRUE(iter->get()->GetRect() == rect); | |
| } | |
| TEST(MutatorsStack, PushClipRRect) { | |
| MutatorsStack stack; | |
| auto rrect = SkRRect::MakeEmpty(); | |
| stack.PushClipRRect(rrect); | |
| auto iter = stack.Bottom(); | |
| ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRRect); | |
| ASSERT_TRUE(iter->get()->GetRRect() == rrect); | |
| } | |
| TEST(MutatorsStack, PushClipPath) { | |
| MutatorsStack stack; | |
| SkPath path; | |
| stack.PushClipPath(path); | |
| auto iter = stack.Bottom(); | |
| ASSERT_TRUE(iter->get()->GetType() == flutter::MutatorType::kClipPath); | |
| ASSERT_TRUE(iter->get()->GetPath() == path); | |
| } | |
| TEST(MutatorsStack, PushTransform) { | |
| MutatorsStack stack; | |
| SkMatrix matrix; | |
| matrix.setIdentity(); | |
| stack.PushTransform(matrix); | |
| auto iter = stack.Bottom(); | |
| ASSERT_TRUE(iter->get()->GetType() == MutatorType::kTransform); | |
| ASSERT_TRUE(iter->get()->GetMatrix() == matrix); | |
| } | |
| TEST(MutatorsStack, PushOpacity) { | |
| MutatorsStack stack; | |
| int alpha = 240; | |
| stack.PushOpacity(alpha); | |
| auto iter = stack.Bottom(); | |
| ASSERT_TRUE(iter->get()->GetType() == MutatorType::kOpacity); | |
| ASSERT_TRUE(iter->get()->GetAlpha() == 240); | |
| } | |
| TEST(MutatorsStack, PushBackdropFilter) { | |
| MutatorsStack stack; | |
| const int num_of_mutators = 10; | |
| for (int i = 0; i < num_of_mutators; i++) { | |
| auto filter = std::make_shared<DlBlurImageFilter>(i, 5, DlTileMode::kClamp); | |
| stack.PushBackdropFilter(filter, SkRect::MakeXYWH(i, i, i, i)); | |
| } | |
| auto iter = stack.Begin(); | |
| int i = 0; | |
| while (iter != stack.End()) { | |
| ASSERT_EQ(iter->get()->GetType(), MutatorType::kBackdropFilter); | |
| ASSERT_EQ(iter->get()->GetFilterMutation().GetFilter().asBlur()->sigma_x(), | |
| i); | |
| ASSERT_EQ(iter->get()->GetFilterMutation().GetFilterRect().x(), i); | |
| ASSERT_EQ(iter->get()->GetFilterMutation().GetFilterRect().x(), i); | |
| ASSERT_EQ(iter->get()->GetFilterMutation().GetFilterRect().width(), i); | |
| ASSERT_EQ(iter->get()->GetFilterMutation().GetFilterRect().height(), i); | |
| ++iter; | |
| ++i; | |
| } | |
| ASSERT_EQ(i, num_of_mutators); | |
| } | |
| TEST(MutatorsStack, Pop) { | |
| MutatorsStack stack; | |
| SkMatrix matrix; | |
| matrix.setIdentity(); | |
| stack.PushTransform(matrix); | |
| stack.Pop(); | |
| auto iter = stack.Bottom(); | |
| ASSERT_TRUE(iter == stack.Top()); | |
| } | |
| TEST(MutatorsStack, Traversal) { | |
| MutatorsStack stack; | |
| SkMatrix matrix; | |
| matrix.setIdentity(); | |
| stack.PushTransform(matrix); | |
| auto rect = SkRect::MakeEmpty(); | |
| stack.PushClipRect(rect); | |
| auto rrect = SkRRect::MakeEmpty(); | |
| stack.PushClipRRect(rrect); | |
| auto iter = stack.Bottom(); | |
| int index = 0; | |
| while (iter != stack.Top()) { | |
| switch (index) { | |
| case 0: | |
| ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRRect); | |
| ASSERT_TRUE(iter->get()->GetRRect() == rrect); | |
| break; | |
| case 1: | |
| ASSERT_TRUE(iter->get()->GetType() == MutatorType::kClipRect); | |
| ASSERT_TRUE(iter->get()->GetRect() == rect); | |
| break; | |
| case 2: | |
| ASSERT_TRUE(iter->get()->GetType() == MutatorType::kTransform); | |
| ASSERT_TRUE(iter->get()->GetMatrix() == matrix); | |
| break; | |
| default: | |
| break; | |
| } | |
| ++iter; | |
| ++index; | |
| } | |
| } | |
| TEST(MutatorsStack, Equality) { | |
| MutatorsStack stack; | |
| SkMatrix matrix = SkMatrix::Scale(1, 1); | |
| stack.PushTransform(matrix); | |
| SkRect rect = SkRect::MakeEmpty(); | |
| stack.PushClipRect(rect); | |
| SkRRect rrect = SkRRect::MakeEmpty(); | |
| stack.PushClipRRect(rrect); | |
| SkPath path; | |
| stack.PushClipPath(path); | |
| int alpha = 240; | |
| stack.PushOpacity(alpha); | |
| auto filter = std::make_shared<DlBlurImageFilter>(5, 5, DlTileMode::kClamp); | |
| stack.PushBackdropFilter(filter, SkRect::MakeEmpty()); | |
| MutatorsStack stack_other; | |
| SkMatrix matrix_other = SkMatrix::Scale(1, 1); | |
| stack_other.PushTransform(matrix_other); | |
| SkRect rect_other = SkRect::MakeEmpty(); | |
| stack_other.PushClipRect(rect_other); | |
| SkRRect rrect_other = SkRRect::MakeEmpty(); | |
| stack_other.PushClipRRect(rrect_other); | |
| SkPath other_path; | |
| stack_other.PushClipPath(other_path); | |
| int other_alpha = 240; | |
| stack_other.PushOpacity(other_alpha); | |
| auto other_filter = | |
| std::make_shared<DlBlurImageFilter>(5, 5, DlTileMode::kClamp); | |
| stack_other.PushBackdropFilter(other_filter, SkRect::MakeEmpty()); | |
| ASSERT_TRUE(stack == stack_other); | |
| } | |
| TEST(Mutator, Initialization) { | |
| SkRect rect = SkRect::MakeEmpty(); | |
| Mutator mutator = Mutator(rect); | |
| ASSERT_TRUE(mutator.GetType() == MutatorType::kClipRect); | |
| ASSERT_TRUE(mutator.GetRect() == rect); | |
| SkRRect rrect = SkRRect::MakeEmpty(); | |
| Mutator mutator2 = Mutator(rrect); | |
| ASSERT_TRUE(mutator2.GetType() == MutatorType::kClipRRect); | |
| ASSERT_TRUE(mutator2.GetRRect() == rrect); | |
| SkPath path; | |
| Mutator mutator3 = Mutator(path); | |
| ASSERT_TRUE(mutator3.GetType() == MutatorType::kClipPath); | |
| ASSERT_TRUE(mutator3.GetPath() == path); | |
| SkMatrix matrix; | |
| matrix.setIdentity(); | |
| Mutator mutator4 = Mutator(matrix); | |
| ASSERT_TRUE(mutator4.GetType() == MutatorType::kTransform); | |
| ASSERT_TRUE(mutator4.GetMatrix() == matrix); | |
| int alpha = 240; | |
| Mutator mutator5 = Mutator(alpha); | |
| ASSERT_TRUE(mutator5.GetType() == MutatorType::kOpacity); | |
| auto filter = std::make_shared<DlBlurImageFilter>(5, 5, DlTileMode::kClamp); | |
| Mutator mutator6 = Mutator(filter, SkRect::MakeEmpty()); | |
| ASSERT_TRUE(mutator6.GetType() == MutatorType::kBackdropFilter); | |
| ASSERT_TRUE(mutator6.GetFilterMutation().GetFilter() == *filter); | |
| } | |
| TEST(Mutator, CopyConstructor) { | |
| SkRect rect = SkRect::MakeEmpty(); | |
| Mutator mutator = Mutator(rect); | |
| Mutator copy = Mutator(mutator); | |
| ASSERT_TRUE(mutator == copy); | |
| SkRRect rrect = SkRRect::MakeEmpty(); | |
| Mutator mutator2 = Mutator(rrect); | |
| Mutator copy2 = Mutator(mutator2); | |
| ASSERT_TRUE(mutator2 == copy2); | |
| SkPath path; | |
| Mutator mutator3 = Mutator(path); | |
| Mutator copy3 = Mutator(mutator3); | |
| ASSERT_TRUE(mutator3 == copy3); | |
| SkMatrix matrix; | |
| matrix.setIdentity(); | |
| Mutator mutator4 = Mutator(matrix); | |
| Mutator copy4 = Mutator(mutator4); | |
| ASSERT_TRUE(mutator4 == copy4); | |
| int alpha = 240; | |
| Mutator mutator5 = Mutator(alpha); | |
| Mutator copy5 = Mutator(mutator5); | |
| ASSERT_TRUE(mutator5 == copy5); | |
| auto filter = std::make_shared<DlBlurImageFilter>(5, 5, DlTileMode::kClamp); | |
| Mutator mutator6 = Mutator(filter, SkRect::MakeEmpty()); | |
| Mutator copy6 = Mutator(mutator6); | |
| ASSERT_TRUE(mutator6 == copy6); | |
| } | |
| TEST(Mutator, Equality) { | |
| SkMatrix matrix; | |
| matrix.setIdentity(); | |
| Mutator mutator = Mutator(matrix); | |
| Mutator other_mutator = Mutator(matrix); | |
| ASSERT_TRUE(mutator == other_mutator); | |
| SkRect rect = SkRect::MakeEmpty(); | |
| Mutator mutator2 = Mutator(rect); | |
| Mutator other_mutator2 = Mutator(rect); | |
| ASSERT_TRUE(mutator2 == other_mutator2); | |
| SkRRect rrect = SkRRect::MakeEmpty(); | |
| Mutator mutator3 = Mutator(rrect); | |
| Mutator other_mutator3 = Mutator(rrect); | |
| ASSERT_TRUE(mutator3 == other_mutator3); | |
| SkPath path; | |
| flutter::Mutator mutator4 = flutter::Mutator(path); | |
| flutter::Mutator other_mutator4 = flutter::Mutator(path); | |
| ASSERT_TRUE(mutator4 == other_mutator4); | |
| ASSERT_FALSE(mutator2 == mutator); | |
| int alpha = 240; | |
| Mutator mutator5 = Mutator(alpha); | |
| Mutator other_mutator5 = Mutator(alpha); | |
| ASSERT_TRUE(mutator5 == other_mutator5); | |
| auto filter1 = std::make_shared<DlBlurImageFilter>(5, 5, DlTileMode::kClamp); | |
| auto filter2 = std::make_shared<DlBlurImageFilter>(5, 5, DlTileMode::kClamp); | |
| Mutator mutator6 = Mutator(filter1, SkRect::MakeEmpty()); | |
| Mutator other_mutator6 = Mutator(filter2, SkRect::MakeEmpty()); | |
| ASSERT_TRUE(mutator6 == other_mutator6); | |
| } | |
| TEST(Mutator, UnEquality) { | |
| SkRect rect = SkRect::MakeEmpty(); | |
| Mutator mutator = Mutator(rect); | |
| SkMatrix matrix; | |
| matrix.setIdentity(); | |
| Mutator not_equal_mutator = Mutator(matrix); | |
| ASSERT_TRUE(not_equal_mutator != mutator); | |
| int alpha = 240; | |
| int alpha2 = 241; | |
| Mutator mutator2 = Mutator(alpha); | |
| Mutator other_mutator2 = Mutator(alpha2); | |
| ASSERT_TRUE(mutator2 != other_mutator2); | |
| auto filter = std::make_shared<DlBlurImageFilter>(5, 5, DlTileMode::kClamp); | |
| auto filter2 = | |
| std::make_shared<DlBlurImageFilter>(10, 10, DlTileMode::kClamp); | |
| Mutator mutator3 = Mutator(filter, SkRect::MakeEmpty()); | |
| Mutator other_mutator3 = Mutator(filter2, SkRect::MakeEmpty()); | |
| ASSERT_TRUE(mutator3 != other_mutator3); | |
| } | |
| } // namespace testing | |
| } // namespace flutter |