1 // Copyright 2015 The Chromium 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.
5 #ifndef UI_VIEWS_ANIMATION_INK_DROP_ANIMATION_UNITTEST_H_
6 #define UI_VIEWS_ANIMATION_INK_DROP_ANIMATION_UNITTEST_H_
8 #include "base/macros.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "ui/gfx/geometry/size.h"
12 #include "ui/gfx/geometry/size_f.h"
13 #include "ui/views/animation/ink_drop_animation.h"
14 #include "ui/views/animation/ink_drop_state.h"
15 #include "ui/views/animation/test/ink_drop_animation_test_api.h"
22 // Transforms a copy of |point| with |transform| and returns it.
23 gfx::Point
TransformPoint(const gfx::Transform
& transform
,
24 const gfx::Point
& point
) {
25 gfx::Point transformed_point
= point
;
26 transform
.TransformPoint(&transformed_point
);
27 return transformed_point
;
32 class InkDropAnimationTest
: public testing::Test
{
34 InkDropAnimationTest() {}
35 ~InkDropAnimationTest() override
{}
38 scoped_ptr
<InkDropAnimation
> CreateInkDropAnimation() const;
41 DISALLOW_COPY_AND_ASSIGN(InkDropAnimationTest
);
44 // Returns a new InkDropAnimation with default parameters.
45 scoped_ptr
<InkDropAnimation
> InkDropAnimationTest::CreateInkDropAnimation()
47 return make_scoped_ptr(
48 new InkDropAnimation(gfx::Size(10, 10), 2, gfx::Size(8, 8), 1));
51 TEST_F(InkDropAnimationTest
, InitialStateAfterConstruction
) {
52 scoped_ptr
<InkDropAnimation
> ink_drop_animation
= CreateInkDropAnimation();
53 EXPECT_EQ(views::InkDropState::HIDDEN
, ink_drop_animation
->ink_drop_state());
56 TEST_F(InkDropAnimationTest
, AnimateToActionPending
) {
57 scoped_ptr
<InkDropAnimation
> ink_drop_animation
= CreateInkDropAnimation();
58 ink_drop_animation
->AnimateToState(views::InkDropState::ACTION_PENDING
);
59 EXPECT_EQ(views::InkDropState::ACTION_PENDING
,
60 ink_drop_animation
->ink_drop_state());
63 TEST_F(InkDropAnimationTest
, AnimateToQuickAction
) {
64 scoped_ptr
<InkDropAnimation
> ink_drop_animation
= CreateInkDropAnimation();
65 ink_drop_animation
->AnimateToState(views::InkDropState::QUICK_ACTION
);
66 EXPECT_EQ(views::InkDropState::HIDDEN
, ink_drop_animation
->ink_drop_state());
69 TEST_F(InkDropAnimationTest
, AnimateToSlowActionPending
) {
70 scoped_ptr
<InkDropAnimation
> ink_drop_animation
= CreateInkDropAnimation();
71 ink_drop_animation
->AnimateToState(views::InkDropState::SLOW_ACTION_PENDING
);
72 EXPECT_EQ(views::InkDropState::SLOW_ACTION_PENDING
,
73 ink_drop_animation
->ink_drop_state());
76 TEST_F(InkDropAnimationTest
, AnimateToSlowAction
) {
77 scoped_ptr
<InkDropAnimation
> ink_drop_animation
= CreateInkDropAnimation();
78 ink_drop_animation
->AnimateToState(views::InkDropState::SLOW_ACTION
);
79 EXPECT_EQ(views::InkDropState::HIDDEN
, ink_drop_animation
->ink_drop_state());
82 TEST_F(InkDropAnimationTest
, AnimateToActivated
) {
83 scoped_ptr
<InkDropAnimation
> ink_drop_animation
= CreateInkDropAnimation();
84 ink_drop_animation
->AnimateToState(views::InkDropState::ACTIVATED
);
85 EXPECT_EQ(views::InkDropState::ACTIVATED
,
86 ink_drop_animation
->ink_drop_state());
89 TEST_F(InkDropAnimationTest
, AnimateToDeactivated
) {
90 scoped_ptr
<InkDropAnimation
> ink_drop_animation
= CreateInkDropAnimation();
91 ink_drop_animation
->AnimateToState(views::InkDropState::DEACTIVATED
);
92 EXPECT_EQ(views::InkDropState::HIDDEN
, ink_drop_animation
->ink_drop_state());
95 TEST_F(InkDropAnimationTest
,
96 TransformedPointsUsingTransformsFromCalculateCircleTransforms
) {
97 const int kHalfDrawnSize
= 5;
98 const int kDrawnSize
= 2 * kHalfDrawnSize
;
100 const int kHalfTransformedSize
= 100;
101 const int kTransformedSize
= 2 * kHalfTransformedSize
;
103 // Constant points in the drawn space that will be transformed.
104 const gfx::Point
center(kHalfDrawnSize
, kHalfDrawnSize
);
105 const gfx::Point
mid_left(0, kHalfDrawnSize
);
106 const gfx::Point
mid_right(kDrawnSize
, kHalfDrawnSize
);
107 const gfx::Point
top_mid(kHalfDrawnSize
, 0);
108 const gfx::Point
bottom_mid(kHalfDrawnSize
, kDrawnSize
);
110 scoped_ptr
<InkDropAnimation
> ink_drop_animation(
111 new InkDropAnimation(gfx::Size(kDrawnSize
, kDrawnSize
), 2,
112 gfx::Size(kHalfDrawnSize
, kHalfDrawnSize
), 1));
113 InkDropAnimationTestApi
test_api(ink_drop_animation
.get());
115 InkDropAnimationTestApi::InkDropTransforms transforms
;
116 test_api
.CalculateCircleTransforms(
117 gfx::SizeF(kTransformedSize
, kTransformedSize
), &transforms
);
119 // Transform variables to reduce verbosity of actual verification code.
120 const gfx::Transform kTopLeftTransform
=
121 transforms
[InkDropAnimationTestApi::PaintedShape::TOP_LEFT_CIRCLE
];
122 const gfx::Transform kTopRightTransform
=
123 transforms
[InkDropAnimationTestApi::PaintedShape::TOP_RIGHT_CIRCLE
];
124 const gfx::Transform kBottomRightTransform
=
125 transforms
[InkDropAnimationTestApi::PaintedShape::BOTTOM_RIGHT_CIRCLE
];
126 const gfx::Transform kBottomLeftTransform
=
127 transforms
[InkDropAnimationTestApi::PaintedShape::BOTTOM_LEFT_CIRCLE
];
128 const gfx::Transform kHorizontalTransform
=
129 transforms
[InkDropAnimationTestApi::PaintedShape::HORIZONTAL_RECT
];
130 const gfx::Transform kVerticalTransform
=
131 transforms
[InkDropAnimationTestApi::PaintedShape::VERTICAL_RECT
];
134 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kTopLeftTransform
, center
));
135 EXPECT_EQ(gfx::Point(-kHalfTransformedSize
, 0),
136 TransformPoint(kTopLeftTransform
, mid_left
));
137 EXPECT_EQ(gfx::Point(kHalfTransformedSize
, 0),
138 TransformPoint(kTopLeftTransform
, mid_right
));
139 EXPECT_EQ(gfx::Point(0, -kHalfTransformedSize
),
140 TransformPoint(kTopLeftTransform
, top_mid
));
141 EXPECT_EQ(gfx::Point(0, kHalfTransformedSize
),
142 TransformPoint(kTopLeftTransform
, bottom_mid
));
145 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kTopRightTransform
, center
));
146 EXPECT_EQ(gfx::Point(-kHalfTransformedSize
, 0),
147 TransformPoint(kTopRightTransform
, mid_left
));
148 EXPECT_EQ(gfx::Point(kHalfTransformedSize
, 0),
149 TransformPoint(kTopRightTransform
, mid_right
));
150 EXPECT_EQ(gfx::Point(0, -kHalfTransformedSize
),
151 TransformPoint(kTopRightTransform
, top_mid
));
152 EXPECT_EQ(gfx::Point(0, kHalfTransformedSize
),
153 TransformPoint(kTopRightTransform
, bottom_mid
));
155 // Bottom right circle
156 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kBottomRightTransform
, center
));
157 EXPECT_EQ(gfx::Point(-kHalfTransformedSize
, 0),
158 TransformPoint(kBottomRightTransform
, mid_left
));
159 EXPECT_EQ(gfx::Point(kHalfTransformedSize
, 0),
160 TransformPoint(kBottomRightTransform
, mid_right
));
161 EXPECT_EQ(gfx::Point(0, -kHalfTransformedSize
),
162 TransformPoint(kBottomRightTransform
, top_mid
));
163 EXPECT_EQ(gfx::Point(0, kHalfTransformedSize
),
164 TransformPoint(kBottomRightTransform
, bottom_mid
));
166 // Bottom left circle
167 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kBottomLeftTransform
, center
));
168 EXPECT_EQ(gfx::Point(-kHalfTransformedSize
, 0),
169 TransformPoint(kBottomLeftTransform
, mid_left
));
170 EXPECT_EQ(gfx::Point(kHalfTransformedSize
, 0),
171 TransformPoint(kBottomLeftTransform
, mid_right
));
172 EXPECT_EQ(gfx::Point(0, -kHalfTransformedSize
),
173 TransformPoint(kBottomLeftTransform
, top_mid
));
174 EXPECT_EQ(gfx::Point(0, kHalfTransformedSize
),
175 TransformPoint(kBottomLeftTransform
, bottom_mid
));
177 // Horizontal rectangle
178 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kHorizontalTransform
, center
));
179 EXPECT_EQ(gfx::Point(-kHalfTransformedSize
, 0),
180 TransformPoint(kHorizontalTransform
, mid_left
));
181 EXPECT_EQ(gfx::Point(kHalfTransformedSize
, 0),
182 TransformPoint(kHorizontalTransform
, mid_right
));
183 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kHorizontalTransform
, top_mid
));
184 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kHorizontalTransform
, bottom_mid
));
186 // Vertical rectangle
187 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kVerticalTransform
, center
));
188 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kVerticalTransform
, mid_left
));
189 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kVerticalTransform
, mid_right
));
190 EXPECT_EQ(gfx::Point(0, -kHalfTransformedSize
),
191 TransformPoint(kVerticalTransform
, top_mid
));
192 EXPECT_EQ(gfx::Point(0, kHalfTransformedSize
),
193 TransformPoint(kVerticalTransform
, bottom_mid
));
196 TEST_F(InkDropAnimationTest
,
197 TransformedPointsUsingTransformsFromCalculateRectTransforms
) {
198 const int kHalfDrawnSize
= 5;
199 const int kDrawnSize
= 2 * kHalfDrawnSize
;
201 const int kTransformedRadius
= 10;
203 const int kHalfTransformedWidth
= 100;
204 const int kTransformedWidth
= 2 * kHalfTransformedWidth
;
206 const int kHalfTransformedHeight
= 100;
207 const int kTransformedHeight
= 2 * kHalfTransformedHeight
;
209 // Constant points in the drawn space that will be transformed.
210 const gfx::Point
center(kHalfDrawnSize
, kHalfDrawnSize
);
211 const gfx::Point
mid_left(0, kHalfDrawnSize
);
212 const gfx::Point
mid_right(kDrawnSize
, kHalfDrawnSize
);
213 const gfx::Point
top_mid(kHalfDrawnSize
, 0);
214 const gfx::Point
bottom_mid(kHalfDrawnSize
, kDrawnSize
);
216 scoped_ptr
<InkDropAnimation
> ink_drop_animation(
217 new InkDropAnimation(gfx::Size(kDrawnSize
, kDrawnSize
), 2,
218 gfx::Size(kHalfDrawnSize
, kHalfDrawnSize
), 1));
219 InkDropAnimationTestApi
test_api(ink_drop_animation
.get());
221 InkDropAnimationTestApi::InkDropTransforms transforms
;
222 test_api
.CalculateRectTransforms(
223 gfx::SizeF(kTransformedWidth
, kTransformedHeight
), kTransformedRadius
,
226 // Transform variables to reduce verbosity of actual verification code.
227 const gfx::Transform kTopLeftTransform
=
228 transforms
[InkDropAnimationTestApi::PaintedShape::TOP_LEFT_CIRCLE
];
229 const gfx::Transform kTopRightTransform
=
230 transforms
[InkDropAnimationTestApi::PaintedShape::TOP_RIGHT_CIRCLE
];
231 const gfx::Transform kBottomRightTransform
=
232 transforms
[InkDropAnimationTestApi::PaintedShape::BOTTOM_RIGHT_CIRCLE
];
233 const gfx::Transform kBottomLeftTransform
=
234 transforms
[InkDropAnimationTestApi::PaintedShape::BOTTOM_LEFT_CIRCLE
];
235 const gfx::Transform kHorizontalTransform
=
236 transforms
[InkDropAnimationTestApi::PaintedShape::HORIZONTAL_RECT
];
237 const gfx::Transform kVerticalTransform
=
238 transforms
[InkDropAnimationTestApi::PaintedShape::VERTICAL_RECT
];
240 const int x_offset
= kHalfTransformedWidth
- kTransformedRadius
;
241 const int y_offset
= kHalfTransformedWidth
- kTransformedRadius
;
244 EXPECT_EQ(gfx::Point(-x_offset
, -y_offset
),
245 TransformPoint(kTopLeftTransform
, center
));
246 EXPECT_EQ(gfx::Point(-kHalfTransformedWidth
, -y_offset
),
247 TransformPoint(kTopLeftTransform
, mid_left
));
248 EXPECT_EQ(gfx::Point(-x_offset
, -kHalfTransformedHeight
),
249 TransformPoint(kTopLeftTransform
, top_mid
));
252 EXPECT_EQ(gfx::Point(x_offset
, -y_offset
),
253 TransformPoint(kTopRightTransform
, center
));
254 EXPECT_EQ(gfx::Point(kHalfTransformedWidth
, -y_offset
),
255 TransformPoint(kTopRightTransform
, mid_right
));
256 EXPECT_EQ(gfx::Point(x_offset
, -kHalfTransformedHeight
),
257 TransformPoint(kTopRightTransform
, top_mid
));
259 // Bottom right circle
260 EXPECT_EQ(gfx::Point(x_offset
, y_offset
),
261 TransformPoint(kBottomRightTransform
, center
));
262 EXPECT_EQ(gfx::Point(kHalfTransformedWidth
, y_offset
),
263 TransformPoint(kBottomRightTransform
, mid_right
));
264 EXPECT_EQ(gfx::Point(x_offset
, kHalfTransformedHeight
),
265 TransformPoint(kBottomRightTransform
, bottom_mid
));
267 // Bottom left circle
268 EXPECT_EQ(gfx::Point(-x_offset
, y_offset
),
269 TransformPoint(kBottomLeftTransform
, center
));
270 EXPECT_EQ(gfx::Point(-kHalfTransformedWidth
, y_offset
),
271 TransformPoint(kBottomLeftTransform
, mid_left
));
272 EXPECT_EQ(gfx::Point(-x_offset
, kHalfTransformedHeight
),
273 TransformPoint(kBottomLeftTransform
, bottom_mid
));
275 // Horizontal rectangle
276 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kHorizontalTransform
, center
));
277 EXPECT_EQ(gfx::Point(-kHalfTransformedWidth
, 0),
278 TransformPoint(kHorizontalTransform
, mid_left
));
279 EXPECT_EQ(gfx::Point(kHalfTransformedWidth
, 0),
280 TransformPoint(kHorizontalTransform
, mid_right
));
281 EXPECT_EQ(gfx::Point(0, -y_offset
),
282 TransformPoint(kHorizontalTransform
, top_mid
));
283 EXPECT_EQ(gfx::Point(0, y_offset
),
284 TransformPoint(kHorizontalTransform
, bottom_mid
));
286 // Vertical rectangle
287 EXPECT_EQ(gfx::Point(0, 0), TransformPoint(kVerticalTransform
, center
));
288 EXPECT_EQ(gfx::Point(-x_offset
, 0),
289 TransformPoint(kVerticalTransform
, mid_left
));
290 EXPECT_EQ(gfx::Point(x_offset
, 0),
291 TransformPoint(kVerticalTransform
, mid_right
));
292 EXPECT_EQ(gfx::Point(0, -kHalfTransformedHeight
),
293 TransformPoint(kVerticalTransform
, top_mid
));
294 EXPECT_EQ(gfx::Point(0, kHalfTransformedHeight
),
295 TransformPoint(kVerticalTransform
, bottom_mid
));
301 #endif // UI_VIEWS_ANIMATION_INK_DROP_ANIMATION_UNITTEST_H_