OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/time/time.h" | 5 #include "base/time/time.h" |
6 #include "testing/gtest/include/gtest/gtest.h" | 6 #include "testing/gtest/include/gtest/gtest.h" |
7 #include "ui/gfx/android/scroller.h" | 7 #include "ui/events/android/scroller.h" |
8 | 8 |
9 namespace gfx { | 9 namespace ui { |
10 | |
11 namespace { | 10 namespace { |
12 | 11 |
13 const float kDefaultStartX = 7.f; | 12 const float kDefaultStartX = 7.f; |
14 const float kDefaultStartY = 25.f; | 13 const float kDefaultStartY = 25.f; |
15 const float kDefaultDeltaX = -20.f; | 14 const float kDefaultDeltaX = -20.f; |
16 const float kDefaultDeltaY = 73.f; | 15 const float kDefaultDeltaY = 73.f; |
17 const float kDefaultVelocityX = -350.f; | 16 const float kDefaultVelocityX = -350.f; |
18 const float kDefaultVelocityY = 220.f; | 17 const float kDefaultVelocityY = 220.f; |
19 const float kEpsilon = 1e-3f; | 18 const float kEpsilon = 1e-3f; |
20 | 19 |
(...skipping 20 matching lines...) Expand all Loading... |
41 EXPECT_EQ(kDefaultStartY, scroller.GetStartY()); | 40 EXPECT_EQ(kDefaultStartY, scroller.GetStartY()); |
42 EXPECT_EQ(kDefaultStartX, scroller.GetCurrX()); | 41 EXPECT_EQ(kDefaultStartX, scroller.GetCurrX()); |
43 EXPECT_EQ(kDefaultStartY, scroller.GetCurrY()); | 42 EXPECT_EQ(kDefaultStartY, scroller.GetCurrY()); |
44 EXPECT_EQ(kDefaultStartX + kDefaultDeltaX, scroller.GetFinalX()); | 43 EXPECT_EQ(kDefaultStartX + kDefaultDeltaX, scroller.GetFinalX()); |
45 EXPECT_EQ(kDefaultStartY + kDefaultDeltaY, scroller.GetFinalY()); | 44 EXPECT_EQ(kDefaultStartY + kDefaultDeltaY, scroller.GetFinalY()); |
46 EXPECT_FALSE(scroller.IsFinished()); | 45 EXPECT_FALSE(scroller.IsFinished()); |
47 EXPECT_EQ(base::TimeDelta(), scroller.GetTimePassed()); | 46 EXPECT_EQ(base::TimeDelta(), scroller.GetTimePassed()); |
48 | 47 |
49 // Advance halfway through the scroll. | 48 // Advance halfway through the scroll. |
50 const base::TimeDelta scroll_duration = scroller.GetDuration(); | 49 const base::TimeDelta scroll_duration = scroller.GetDuration(); |
51 scroller.ComputeScrollOffset(start_time + scroll_duration / 2); | 50 gfx::Vector2dF offset, velocity; |
| 51 EXPECT_TRUE(scroller.ComputeScrollOffset( |
| 52 start_time + scroll_duration / 2, &offset, &velocity)); |
52 | 53 |
53 // Ensure we've moved in the direction of the delta, but have yet to reach | 54 // Ensure we've moved in the direction of the delta, but have yet to reach |
54 // the target. | 55 // the target. |
55 EXPECT_GT(kDefaultStartX, scroller.GetCurrX()); | 56 EXPECT_GT(kDefaultStartX, offset.x()); |
56 EXPECT_LT(kDefaultStartY, scroller.GetCurrY()); | 57 EXPECT_LT(kDefaultStartY, offset.y()); |
57 EXPECT_LT(scroller.GetFinalX(), scroller.GetCurrX()); | 58 EXPECT_LT(scroller.GetFinalX(), offset.x()); |
58 EXPECT_GT(scroller.GetFinalY(), scroller.GetCurrY()); | 59 EXPECT_GT(scroller.GetFinalY(), offset.y()); |
59 EXPECT_FALSE(scroller.IsFinished()); | 60 EXPECT_FALSE(scroller.IsFinished()); |
60 | 61 |
61 // Ensure our velocity is non-zero and in the same direction as the delta. | 62 // 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, velocity.x() * kDefaultDeltaX); |
63 EXPECT_GT(0.f, scroller.GetCurrVelocityY() * kDefaultDeltaY); | 64 EXPECT_GT(0.f, velocity.y() * kDefaultDeltaY); |
64 EXPECT_TRUE(scroller.IsScrollingInDirection(kDefaultDeltaX, kDefaultDeltaY)); | 65 EXPECT_TRUE(scroller.IsScrollingInDirection(kDefaultDeltaX, kDefaultDeltaY)); |
65 | 66 |
66 // Repeated offset computations at the same timestamp should yield identical | 67 // Repeated offset computations at the same timestamp should yield identical |
67 // results. | 68 // results. |
68 float curr_x = scroller.GetCurrX(); | 69 float curr_x = offset.x(); |
69 float curr_y = scroller.GetCurrY(); | 70 float curr_y = offset.y(); |
70 float curr_velocity_x = scroller.GetCurrVelocityX(); | 71 float curr_velocity_x = velocity.x(); |
71 float curr_velocity_y = scroller.GetCurrVelocityY(); | 72 float curr_velocity_y = velocity.y(); |
72 scroller.ComputeScrollOffset(start_time + scroll_duration / 2); | 73 EXPECT_TRUE(scroller.ComputeScrollOffset( |
73 EXPECT_EQ(curr_x, scroller.GetCurrX()); | 74 start_time + scroll_duration / 2, &offset, &velocity)); |
74 EXPECT_EQ(curr_y, scroller.GetCurrY()); | 75 EXPECT_EQ(curr_x, offset.x()); |
75 EXPECT_EQ(curr_velocity_x, scroller.GetCurrVelocityX()); | 76 EXPECT_EQ(curr_y, offset.y()); |
76 EXPECT_EQ(curr_velocity_y, scroller.GetCurrVelocityY()); | 77 EXPECT_EQ(curr_velocity_x, velocity.x()); |
| 78 EXPECT_EQ(curr_velocity_y, velocity.y()); |
77 | 79 |
78 // Advance to the end. | 80 // Advance to the end. |
79 scroller.ComputeScrollOffset(start_time + scroll_duration); | 81 EXPECT_FALSE(scroller.ComputeScrollOffset( |
80 EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX()); | 82 start_time + scroll_duration, &offset, &velocity)); |
81 EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY()); | 83 EXPECT_EQ(scroller.GetFinalX(), offset.x()); |
| 84 EXPECT_EQ(scroller.GetFinalY(), offset.y()); |
82 EXPECT_TRUE(scroller.IsFinished()); | 85 EXPECT_TRUE(scroller.IsFinished()); |
83 EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); | 86 EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); |
84 EXPECT_NEAR(0.f, scroller.GetCurrVelocityX(), kEpsilon); | 87 EXPECT_NEAR(0.f, velocity.x(), kEpsilon); |
85 EXPECT_NEAR(0.f, scroller.GetCurrVelocityY(), kEpsilon); | 88 EXPECT_NEAR(0.f, velocity.y(), kEpsilon); |
86 | 89 |
87 // Try to advance further; nothing should change. | 90 // Try to advance further; nothing should change. |
88 scroller.ComputeScrollOffset(start_time + scroll_duration * 2); | 91 EXPECT_FALSE(scroller.ComputeScrollOffset( |
89 EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX()); | 92 start_time + scroll_duration * 2, &offset, &velocity)); |
90 EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY()); | 93 EXPECT_EQ(scroller.GetFinalX(), offset.x()); |
| 94 EXPECT_EQ(scroller.GetFinalY(), offset.y()); |
91 EXPECT_TRUE(scroller.IsFinished()); | 95 EXPECT_TRUE(scroller.IsFinished()); |
92 EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); | 96 EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); |
93 } | 97 } |
94 | 98 |
95 TEST_F(ScrollerTest, Fling) { | 99 TEST_F(ScrollerTest, Fling) { |
96 Scroller scroller(DefaultConfig()); | 100 Scroller scroller(DefaultConfig()); |
97 base::TimeTicks start_time = base::TimeTicks::Now(); | 101 base::TimeTicks start_time = base::TimeTicks::Now(); |
98 | 102 |
99 // Start a fling and verify initialized values. | 103 // Start a fling and verify initialized values. |
100 scroller.Fling(kDefaultStartX, | 104 scroller.Fling(kDefaultStartX, |
(...skipping 10 matching lines...) Expand all Loading... |
111 EXPECT_EQ(kDefaultStartY, scroller.GetStartY()); | 115 EXPECT_EQ(kDefaultStartY, scroller.GetStartY()); |
112 EXPECT_EQ(kDefaultStartX, scroller.GetCurrX()); | 116 EXPECT_EQ(kDefaultStartX, scroller.GetCurrX()); |
113 EXPECT_EQ(kDefaultStartY, scroller.GetCurrY()); | 117 EXPECT_EQ(kDefaultStartY, scroller.GetCurrY()); |
114 EXPECT_GT(kDefaultStartX, scroller.GetFinalX()); | 118 EXPECT_GT(kDefaultStartX, scroller.GetFinalX()); |
115 EXPECT_LT(kDefaultStartY, scroller.GetFinalY()); | 119 EXPECT_LT(kDefaultStartY, scroller.GetFinalY()); |
116 EXPECT_FALSE(scroller.IsFinished()); | 120 EXPECT_FALSE(scroller.IsFinished()); |
117 EXPECT_EQ(base::TimeDelta(), scroller.GetTimePassed()); | 121 EXPECT_EQ(base::TimeDelta(), scroller.GetTimePassed()); |
118 | 122 |
119 // Advance halfway through the fling. | 123 // Advance halfway through the fling. |
120 const base::TimeDelta scroll_duration = scroller.GetDuration(); | 124 const base::TimeDelta scroll_duration = scroller.GetDuration(); |
121 scroller.ComputeScrollOffset(start_time + scroll_duration / 2); | 125 gfx::Vector2dF offset, velocity; |
| 126 scroller.ComputeScrollOffset( |
| 127 start_time + scroll_duration / 2, &offset, &velocity); |
122 | 128 |
123 // Ensure we've moved in the direction of the velocity, but have yet to reach | 129 // Ensure we've moved in the direction of the velocity, but have yet to reach |
124 // the target. | 130 // the target. |
125 EXPECT_GT(kDefaultStartX, scroller.GetCurrX()); | 131 EXPECT_GT(kDefaultStartX, offset.x()); |
126 EXPECT_LT(kDefaultStartY, scroller.GetCurrY()); | 132 EXPECT_LT(kDefaultStartY, offset.y()); |
127 EXPECT_LT(scroller.GetFinalX(), scroller.GetCurrX()); | 133 EXPECT_LT(scroller.GetFinalX(), offset.x()); |
128 EXPECT_GT(scroller.GetFinalY(), scroller.GetCurrY()); | 134 EXPECT_GT(scroller.GetFinalY(), offset.y()); |
129 EXPECT_FALSE(scroller.IsFinished()); | 135 EXPECT_FALSE(scroller.IsFinished()); |
130 | 136 |
131 // Ensure our velocity is non-zero and in the same direction as the original | 137 // Ensure our velocity is non-zero and in the same direction as the original |
132 // velocity. | 138 // velocity. |
133 EXPECT_LT(0.f, scroller.GetCurrVelocityX() * kDefaultVelocityX); | 139 EXPECT_LT(0.f, velocity.x() * kDefaultVelocityX); |
134 EXPECT_LT(0.f, scroller.GetCurrVelocityY() * kDefaultVelocityY); | 140 EXPECT_LT(0.f, velocity.y() * kDefaultVelocityY); |
135 EXPECT_TRUE( | 141 EXPECT_TRUE( |
136 scroller.IsScrollingInDirection(kDefaultVelocityX, kDefaultVelocityY)); | 142 scroller.IsScrollingInDirection(kDefaultVelocityX, kDefaultVelocityY)); |
137 | 143 |
138 // Repeated offset computations at the same timestamp should yield identical | 144 // Repeated offset computations at the same timestamp should yield identical |
139 // results. | 145 // results. |
140 float curr_x = scroller.GetCurrX(); | 146 float curr_x = offset.x(); |
141 float curr_y = scroller.GetCurrY(); | 147 float curr_y = offset.y(); |
142 float curr_velocity_x = scroller.GetCurrVelocityX(); | 148 float curr_velocity_x = velocity.x(); |
143 float curr_velocity_y = scroller.GetCurrVelocityY(); | 149 float curr_velocity_y = velocity.y(); |
144 scroller.ComputeScrollOffset(start_time + scroll_duration / 2); | 150 EXPECT_TRUE(scroller.ComputeScrollOffset( |
145 EXPECT_EQ(curr_x, scroller.GetCurrX()); | 151 start_time + scroll_duration / 2, &offset, &velocity)); |
146 EXPECT_EQ(curr_y, scroller.GetCurrY()); | 152 EXPECT_EQ(curr_x, offset.x()); |
147 EXPECT_EQ(curr_velocity_x, scroller.GetCurrVelocityX()); | 153 EXPECT_EQ(curr_y, offset.y()); |
148 EXPECT_EQ(curr_velocity_y, scroller.GetCurrVelocityY()); | 154 EXPECT_EQ(curr_velocity_x, velocity.x()); |
| 155 EXPECT_EQ(curr_velocity_y, velocity.y()); |
149 | 156 |
150 // Advance to the end. | 157 // Advance to the end. |
151 scroller.ComputeScrollOffset(start_time + scroll_duration); | 158 EXPECT_FALSE(scroller.ComputeScrollOffset( |
152 EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX()); | 159 start_time + scroll_duration, &offset, &velocity)); |
153 EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY()); | 160 EXPECT_EQ(scroller.GetFinalX(), offset.x()); |
| 161 EXPECT_EQ(scroller.GetFinalY(), offset.y()); |
154 EXPECT_TRUE(scroller.IsFinished()); | 162 EXPECT_TRUE(scroller.IsFinished()); |
155 EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); | 163 EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); |
156 EXPECT_NEAR(0.f, scroller.GetCurrVelocityX(), kEpsilon); | 164 EXPECT_NEAR(0.f, velocity.x(), kEpsilon); |
157 EXPECT_NEAR(0.f, scroller.GetCurrVelocityY(), kEpsilon); | 165 EXPECT_NEAR(0.f, velocity.y(), kEpsilon); |
158 | 166 |
159 // Try to advance further; nothing should change. | 167 // Try to advance further; nothing should change. |
160 scroller.ComputeScrollOffset(start_time + scroll_duration * 2); | 168 EXPECT_FALSE(scroller.ComputeScrollOffset( |
161 EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX()); | 169 start_time + scroll_duration * 2, &offset, &velocity)); |
162 EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY()); | 170 EXPECT_EQ(scroller.GetFinalX(), offset.x()); |
| 171 EXPECT_EQ(scroller.GetFinalY(), offset.y()); |
163 EXPECT_TRUE(scroller.IsFinished()); | 172 EXPECT_TRUE(scroller.IsFinished()); |
164 EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); | 173 EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); |
165 } | 174 } |
166 | 175 |
167 } // namespace gfx | 176 } // namespace ui |
OLD | NEW |