1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/gfx/geometry/linear_gradient.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/axis_transform2d.h"
#include "ui/gfx/geometry/point_f.h"
#include "ui/gfx/geometry/transform.h"
namespace gfx {
TEST(LinearGradientTest, Basic) {
LinearGradient gradient(45);
EXPECT_TRUE(gradient.IsEmpty());
gradient.AddStep(.1, 0);
gradient.AddStep(.5, 50);
gradient.AddStep(.8, 1);
EXPECT_FALSE(gradient.IsEmpty());
EXPECT_EQ(45, gradient.angle());
EXPECT_EQ(3u, gradient.step_count());
EXPECT_FLOAT_EQ(gradient.steps()[0].fraction, .1);
EXPECT_EQ(gradient.steps()[0].alpha, 0);
EXPECT_FLOAT_EQ(gradient.steps()[1].fraction, .5);
EXPECT_EQ(gradient.steps()[1].alpha, 50);
EXPECT_FLOAT_EQ(gradient.steps()[2].fraction, .8);
EXPECT_EQ(gradient.steps()[2].alpha, 1);
LinearGradient gradient2(90);
gradient2.AddStep(.1, 0);
gradient2.AddStep(.5, 50);
gradient2.AddStep(.8, 1);
EXPECT_NE(gradient, gradient2);
gradient2.set_angle(45);
EXPECT_EQ(gradient, gradient2);
gradient2.AddStep(.9, 0);
EXPECT_NE(gradient, gradient2);
}
TEST(LinearGradientTest, Reverse) {
LinearGradient gradient(45);
// Make sure reversing an empty LinearGradient doesn't cause an issue.
gradient.ReverseSteps();
gradient.AddStep(.1, 0);
gradient.AddStep(.5, 50);
gradient.AddStep(.8, 1);
gradient.ReverseSteps();
EXPECT_EQ(45, gradient.angle());
EXPECT_EQ(3u, gradient.step_count());
EXPECT_FLOAT_EQ(gradient.steps()[0].fraction, .2);
EXPECT_EQ(gradient.steps()[0].alpha, 1);
EXPECT_FLOAT_EQ(gradient.steps()[1].fraction, .5);
EXPECT_EQ(gradient.steps()[1].alpha, 50);
EXPECT_FLOAT_EQ(gradient.steps()[2].fraction, .9);
EXPECT_EQ(gradient.steps()[2].alpha, 0);
}
TEST(LinearGradientTest, ApplyTransform) {
{
LinearGradient gradient(45);
gfx::Transform transform;
transform.Translate(10, 50);
gradient.ApplyTransform(transform);
EXPECT_EQ(45, gradient.angle());
}
// Scale can change the angle.
{
LinearGradient gradient(45);
gfx::Transform transform;
transform.Scale(1, 10);
gradient.ApplyTransform(transform);
EXPECT_EQ(84, gradient.angle());
}
{
LinearGradient gradient(45);
gfx::Transform transform;
transform.Rotate(45);
gradient.ApplyTransform(transform);
EXPECT_EQ(0, gradient.angle());
}
}
TEST(LinearGradientTest, ApplyAxisTransform2d) {
{
LinearGradient gradient(45);
auto transform = AxisTransform2d::FromScaleAndTranslation(
Vector2dF(1, 1), Vector2dF(10, 50));
gradient.ApplyTransform(transform);
EXPECT_EQ(45, gradient.angle());
}
// Scale can change the angle.
{
LinearGradient gradient(45);
auto transform = AxisTransform2d::FromScaleAndTranslation(
Vector2dF(1, 10), Vector2dF(10, 50));
gradient.ApplyTransform(transform);
EXPECT_EQ(84, gradient.angle());
}
}
} // namespace gfx
|