Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / ui / gfx / android / scroller_unittest.cc
1 // Copyright 2014 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 "base/time/time.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7 #include "ui/gfx/android/scroller.h"
8
9 namespace gfx {
10
11 namespace {
12
13 const float kDefaultStartX = 7.f;
14 const float kDefaultStartY = 25.f;
15 const float kDefaultDeltaX = -20.f;
16 const float kDefaultDeltaY = 73.f;
17 const float kDefaultVelocityX = -35.f;
18 const float kDefaultVelocityY = 22.f;
19 const float kEpsilon = 1e-3f;
20
21 Scroller::Config DefaultConfig() {
22   return Scroller::Config();
23 }
24
25 }  // namespace
26
27 class ScrollerTest : public testing::Test {};
28
29 TEST_F(ScrollerTest, Scroll) {
30   Scroller scroller(DefaultConfig());
31   base::TimeTicks start_time = base::TimeTicks::Now();
32
33   // Start a scroll and verify initialized values.
34   scroller.StartScroll(kDefaultStartX,
35                        kDefaultStartY,
36                        kDefaultDeltaX,
37                        kDefaultDeltaY,
38                        start_time);
39
40   EXPECT_EQ(kDefaultStartX, scroller.GetStartX());
41   EXPECT_EQ(kDefaultStartY, scroller.GetStartY());
42   EXPECT_EQ(kDefaultStartX, scroller.GetCurrX());
43   EXPECT_EQ(kDefaultStartY, scroller.GetCurrY());
44   EXPECT_EQ(kDefaultStartX + kDefaultDeltaX, scroller.GetFinalX());
45   EXPECT_EQ(kDefaultStartY + kDefaultDeltaY, scroller.GetFinalY());
46   EXPECT_FALSE(scroller.IsFinished());
47   EXPECT_EQ(base::TimeDelta(), scroller.GetTimePassed());
48
49   // Advance halfway through the scroll.
50   const base::TimeDelta scroll_duration = scroller.GetDuration();
51   scroller.ComputeScrollOffset(start_time + scroll_duration / 2);
52
53   // Ensure we've moved in the direction of the delta, but have yet to reach
54   // the target.
55   EXPECT_GT(kDefaultStartX, scroller.GetCurrX());
56   EXPECT_LT(kDefaultStartY, scroller.GetCurrY());
57   EXPECT_LT(scroller.GetFinalX(), scroller.GetCurrX());
58   EXPECT_GT(scroller.GetFinalY(), scroller.GetCurrY());
59   EXPECT_FALSE(scroller.IsFinished());
60
61   // Ensure our velocity is non-zero and in the same direction as the delta.
62   EXPECT_GT(0.f, scroller.GetCurrVelocityX() * kDefaultDeltaX);
63   EXPECT_GT(0.f, scroller.GetCurrVelocityY() * kDefaultDeltaY);
64   EXPECT_TRUE(scroller.IsScrollingInDirection(kDefaultDeltaX, kDefaultDeltaY));
65
66   // Repeated offset computations at the same timestamp should yield identical
67   // results.
68   float curr_x = scroller.GetCurrX();
69   float curr_y = scroller.GetCurrY();
70   float curr_velocity_x = scroller.GetCurrVelocityX();
71   float curr_velocity_y = scroller.GetCurrVelocityY();
72   scroller.ComputeScrollOffset(start_time + scroll_duration / 2);
73   EXPECT_EQ(curr_x, scroller.GetCurrX());
74   EXPECT_EQ(curr_y, scroller.GetCurrY());
75   EXPECT_EQ(curr_velocity_x, scroller.GetCurrVelocityX());
76   EXPECT_EQ(curr_velocity_y, scroller.GetCurrVelocityY());
77
78   // Advance to the end.
79   scroller.ComputeScrollOffset(start_time + scroll_duration);
80   EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX());
81   EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY());
82   EXPECT_TRUE(scroller.IsFinished());
83   EXPECT_EQ(scroll_duration, scroller.GetTimePassed());
84   EXPECT_NEAR(0.f, scroller.GetCurrVelocityX(), kEpsilon);
85   EXPECT_NEAR(0.f, scroller.GetCurrVelocityY(), kEpsilon);
86
87   // Try to advance further; nothing should change.
88   scroller.ComputeScrollOffset(start_time + scroll_duration * 2);
89   EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX());
90   EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY());
91   EXPECT_TRUE(scroller.IsFinished());
92   EXPECT_EQ(scroll_duration, scroller.GetTimePassed());
93 }
94
95 TEST_F(ScrollerTest, Fling) {
96   Scroller scroller(DefaultConfig());
97   base::TimeTicks start_time = base::TimeTicks::Now();
98
99   // Start a fling and verify initialized values.
100   scroller.Fling(kDefaultStartX,
101                  kDefaultStartY,
102                  kDefaultVelocityX,
103                  kDefaultVelocityY,
104                  INT_MIN,
105                  INT_MAX,
106                  INT_MIN,
107                  INT_MAX,
108                  start_time);
109
110   EXPECT_EQ(kDefaultStartX, scroller.GetStartX());
111   EXPECT_EQ(kDefaultStartY, scroller.GetStartY());
112   EXPECT_EQ(kDefaultStartX, scroller.GetCurrX());
113   EXPECT_EQ(kDefaultStartY, scroller.GetCurrY());
114   EXPECT_GT(kDefaultStartX, scroller.GetFinalX());
115   EXPECT_LT(kDefaultStartY, scroller.GetFinalY());
116   EXPECT_FALSE(scroller.IsFinished());
117   EXPECT_EQ(base::TimeDelta(), scroller.GetTimePassed());
118
119   // Advance halfway through the fling.
120   const base::TimeDelta scroll_duration = scroller.GetDuration();
121   scroller.ComputeScrollOffset(start_time + scroll_duration / 2);
122
123   // Ensure we've moved in the direction of the velocity, but have yet to reach
124   // the target.
125   EXPECT_GT(kDefaultStartX, scroller.GetCurrX());
126   EXPECT_LT(kDefaultStartY, scroller.GetCurrY());
127   EXPECT_LT(scroller.GetFinalX(), scroller.GetCurrX());
128   EXPECT_GT(scroller.GetFinalY(), scroller.GetCurrY());
129   EXPECT_FALSE(scroller.IsFinished());
130
131   // Ensure our velocity is non-zero and in the same direction as the original
132   // velocity.
133   EXPECT_LT(0.f, scroller.GetCurrVelocityX() * kDefaultVelocityX);
134   EXPECT_LT(0.f, scroller.GetCurrVelocityY() * kDefaultVelocityY);
135   EXPECT_TRUE(
136       scroller.IsScrollingInDirection(kDefaultVelocityX, kDefaultVelocityY));
137
138   // Repeated offset computations at the same timestamp should yield identical
139   // results.
140   float curr_x = scroller.GetCurrX();
141   float curr_y = scroller.GetCurrY();
142   float curr_velocity_x = scroller.GetCurrVelocityX();
143   float curr_velocity_y = scroller.GetCurrVelocityY();
144   scroller.ComputeScrollOffset(start_time + scroll_duration / 2);
145   EXPECT_EQ(curr_x, scroller.GetCurrX());
146   EXPECT_EQ(curr_y, scroller.GetCurrY());
147   EXPECT_EQ(curr_velocity_x, scroller.GetCurrVelocityX());
148   EXPECT_EQ(curr_velocity_y, scroller.GetCurrVelocityY());
149
150   // Advance to the end.
151   scroller.ComputeScrollOffset(start_time + scroll_duration);
152   EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX());
153   EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY());
154   EXPECT_TRUE(scroller.IsFinished());
155   EXPECT_EQ(scroll_duration, scroller.GetTimePassed());
156   EXPECT_NEAR(0.f, scroller.GetCurrVelocityX(), kEpsilon);
157   EXPECT_NEAR(0.f, scroller.GetCurrVelocityY(), kEpsilon);
158
159   // Try to advance further; nothing should change.
160   scroller.ComputeScrollOffset(start_time + scroll_duration * 2);
161   EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX());
162   EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY());
163   EXPECT_TRUE(scroller.IsFinished());
164   EXPECT_EQ(scroll_duration, scroller.GetTimePassed());
165 }
166
167 }  // namespace gfx