OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 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. | |
4 | |
5 #include "testing/gtest/include/gtest/gtest.h" | |
6 #include "ui/base/animation/animation_container_element.h" | |
7 #include "ui/base/animation/multi_animation.h" | |
8 | |
9 namespace ui { | |
10 | |
11 TEST(MultiAnimationTest, Basic) { | |
12 // Create a MultiAnimation with two parts. | |
13 MultiAnimation::Parts parts; | |
14 parts.push_back(MultiAnimation::Part(100, Tween::LINEAR)); | |
15 parts.push_back(MultiAnimation::Part(100, Tween::EASE_OUT)); | |
16 | |
17 MultiAnimation animation(parts, MultiAnimation::GetDefaultTimerInterval()); | |
18 AnimationContainerElement* as_element = | |
19 static_cast<AnimationContainerElement*>(&animation); | |
20 as_element->SetStartTime(base::TimeTicks()); | |
21 | |
22 // Step to 50, which is half way through the first part. | |
23 as_element->Step(base::TimeTicks() + base::TimeDelta::FromMilliseconds(50)); | |
24 EXPECT_EQ(.5, animation.GetCurrentValue()); | |
25 | |
26 // Step to 120, which is 20% through the second part. | |
27 as_element->Step(base::TimeTicks() + | |
28 base::TimeDelta::FromMilliseconds(120)); | |
29 EXPECT_DOUBLE_EQ(Tween::CalculateValue(Tween::EASE_OUT, .2), | |
30 animation.GetCurrentValue()); | |
31 | |
32 // Step to 320, which is 20% through the second part. | |
33 as_element->Step(base::TimeTicks() + | |
34 base::TimeDelta::FromMilliseconds(320)); | |
35 EXPECT_DOUBLE_EQ(Tween::CalculateValue(Tween::EASE_OUT, .2), | |
36 animation.GetCurrentValue()); | |
37 } | |
38 | |
39 TEST(MultiAnimationTest, DifferingStartAndEnd) { | |
40 // Create a MultiAnimation with two parts. | |
41 MultiAnimation::Parts parts; | |
42 parts.push_back(MultiAnimation::Part(200, Tween::LINEAR)); | |
43 parts[0].start_time_ms = 100; | |
44 parts[0].end_time_ms = 400; | |
45 | |
46 MultiAnimation animation(parts, MultiAnimation::GetDefaultTimerInterval()); | |
47 AnimationContainerElement* as_element = | |
48 static_cast<AnimationContainerElement*>(&animation); | |
49 as_element->SetStartTime(base::TimeTicks()); | |
50 | |
51 // Step to 0. Because the start_time is 100, this should be 100ms into the | |
52 // animation | |
53 as_element->Step(base::TimeTicks()); | |
54 EXPECT_EQ(.25, animation.GetCurrentValue()); | |
55 | |
56 // Step to 100, which is effectively 200ms into the animation. | |
57 as_element->Step(base::TimeTicks() + base::TimeDelta::FromMilliseconds(100)); | |
58 EXPECT_EQ(.5, animation.GetCurrentValue()); | |
59 } | |
60 | |
61 // Makes sure multi-animation stops if cycles is false. | |
62 TEST(MultiAnimationTest, DontCycle) { | |
63 MultiAnimation::Parts parts; | |
64 parts.push_back(MultiAnimation::Part(200, Tween::LINEAR)); | |
65 MultiAnimation animation(parts, MultiAnimation::GetDefaultTimerInterval()); | |
66 AnimationContainerElement* as_element = | |
67 static_cast<AnimationContainerElement*>(&animation); | |
68 as_element->SetStartTime(base::TimeTicks()); | |
69 animation.set_continuous(false); | |
70 | |
71 // Step to 300, which is greater than the cycle time. | |
72 as_element->Step(base::TimeTicks() + base::TimeDelta::FromMilliseconds(300)); | |
73 EXPECT_EQ(1.0, animation.GetCurrentValue()); | |
74 EXPECT_FALSE(animation.is_animating()); | |
75 } | |
76 | |
77 // Makes sure multi-animation cycles correctly. | |
78 TEST(MultiAnimationTest, Cycle) { | |
79 MultiAnimation::Parts parts; | |
80 parts.push_back(MultiAnimation::Part(200, Tween::LINEAR)); | |
81 MultiAnimation animation(parts, MultiAnimation::GetDefaultTimerInterval()); | |
82 AnimationContainerElement* as_element = | |
83 static_cast<AnimationContainerElement*>(&animation); | |
84 as_element->SetStartTime(base::TimeTicks()); | |
85 | |
86 // Step to 300, which is greater than the cycle time. | |
87 as_element->Step(base::TimeTicks() + base::TimeDelta::FromMilliseconds(300)); | |
88 EXPECT_EQ(.5, animation.GetCurrentValue()); | |
89 } | |
90 | |
91 } // namespace ui | |
OLD | NEW |