mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
315 lines
9.5 KiB
C++
315 lines
9.5 KiB
C++
// 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
|