- add sources.
[platform/framework/web/crosswalk.git] / src / ui / gfx / animation / slide_animation_unittest.cc
1 // Copyright (c) 2012 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 "ui/gfx/animation/slide_animation.h"
6
7 #include "base/memory/scoped_ptr.h"
8 #include "base/time/time.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/gfx/animation/test_animation_delegate.h"
11
12 namespace gfx {
13
14 // Class to provide access to SlideAnimation internals for testing.
15 class SlideAnimation::TestApi {
16  public:
17   explicit TestApi(SlideAnimation* animation) : animation_(animation) {}
18
19   void SetStartTime(base::TimeTicks ticks) {
20     animation_->SetStartTime(ticks);
21   }
22
23   void Step(base::TimeTicks ticks) {
24     animation_->Step(ticks);
25   }
26
27  private:
28   SlideAnimation* animation_;
29
30   DISALLOW_COPY_AND_ASSIGN(TestApi);
31 };
32
33 ////////////////////////////////////////////////////////////////////////////////
34 // SlideAnimationTest
35 class SlideAnimationTest: public testing::Test {
36  private:
37   base::MessageLoopForUI message_loop_;
38 };
39
40 // Tests animation construction.
41 TEST_F(SlideAnimationTest, InitialState) {
42   SlideAnimation animation(NULL);
43   // By default, slide animations are 60 Hz, so the timer interval should be
44   // 1/60th of a second.
45   EXPECT_EQ(1000 / 60, animation.timer_interval().InMilliseconds());
46   // Duration defaults to 120 ms.
47   EXPECT_EQ(120, animation.GetSlideDuration());
48   // Slide is neither showing nor closing.
49   EXPECT_FALSE(animation.IsShowing());
50   EXPECT_FALSE(animation.IsClosing());
51   // Starts at 0.
52   EXPECT_EQ(0.0, animation.GetCurrentValue());
53 }
54
55 TEST_F(SlideAnimationTest, Basics) {
56   SlideAnimation animation(NULL);
57   SlideAnimation::TestApi test_api(&animation);
58
59   // Use linear tweening to make the math easier below.
60   animation.SetTweenType(Tween::LINEAR);
61
62   // Duration can be set after construction.
63   animation.SetSlideDuration(100);
64   EXPECT_EQ(100, animation.GetSlideDuration());
65
66   // Show toggles the appropriate state.
67   animation.Show();
68   EXPECT_TRUE(animation.IsShowing());
69   EXPECT_FALSE(animation.IsClosing());
70
71   // Simulate running the animation.
72   test_api.SetStartTime(base::TimeTicks());
73   test_api.Step(base::TimeTicks() + base::TimeDelta::FromMilliseconds(50));
74   EXPECT_EQ(0.5, animation.GetCurrentValue());
75
76   // We can start hiding mid-way through the animation.
77   animation.Hide();
78   EXPECT_FALSE(animation.IsShowing());
79   EXPECT_TRUE(animation.IsClosing());
80
81   // Reset stops the animation.
82   animation.Reset();
83   EXPECT_EQ(0.0, animation.GetCurrentValue());
84   EXPECT_FALSE(animation.IsShowing());
85   EXPECT_FALSE(animation.IsClosing());
86 }
87
88 // Tests that delegate is not notified when animation is running and is deleted.
89 // (Such a scenario would cause problems for BoundsAnimator).
90 TEST_F(SlideAnimationTest, DontNotifyOnDelete) {
91   TestAnimationDelegate delegate;
92   scoped_ptr<SlideAnimation> animation(new SlideAnimation(&delegate));
93
94   // Start the animation.
95   animation->Show();
96
97   // Delete the animation.
98   animation.reset();
99
100   // Make sure the delegate wasn't notified.
101   EXPECT_FALSE(delegate.finished());
102   EXPECT_FALSE(delegate.canceled());
103 }
104
105 }  // namespace gfx