| 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 |