Index: ui/gfx/android/scroller_unittest.cc |
diff --git a/ui/gfx/android/scroller_unittest.cc b/ui/gfx/android/scroller_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..af3c67a1b027ab9d22e5cb179ecfdc13608a015d |
--- /dev/null |
+++ b/ui/gfx/android/scroller_unittest.cc |
@@ -0,0 +1,143 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/time/time.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/gfx/android/scroller.h" |
+ |
+namespace gfx { |
+ |
+namespace { |
+ |
+const float kDefaultStartX = 7.f; |
+const float kDefaultStartY = 25.f; |
+const float kDefaultDeltaX = -20.f; |
+const float kDefaultDeltaY = 73.f; |
+const float kDefaultVelocityX = -35.f; |
+const float kDefaultVelocityY = 22.f; |
+const float kEpsilon = 1e-3f; |
+ |
+Scroller::Config DefaultConfig() { |
+ return Scroller::Config(); |
+} |
+ |
+} // namespace |
+ |
+class ScrollerTest : public testing::Test {}; |
+ |
+TEST_F(ScrollerTest, Scroll) { |
+ Scroller scroller(DefaultConfig()); |
+ base::TimeTicks start_time = base::TimeTicks::Now(); |
+ |
+ // Start a scroll and verify initialized values. |
+ scroller.StartScroll(kDefaultStartX, |
+ kDefaultStartY, |
+ kDefaultDeltaX, |
+ kDefaultDeltaY, |
+ start_time); |
+ |
+ EXPECT_EQ(kDefaultStartX, scroller.GetStartX()); |
+ EXPECT_EQ(kDefaultStartY, scroller.GetStartY()); |
+ EXPECT_EQ(kDefaultStartX, scroller.GetCurrX()); |
+ EXPECT_EQ(kDefaultStartY, scroller.GetCurrY()); |
+ EXPECT_EQ(kDefaultStartX + kDefaultDeltaX, scroller.GetFinalX()); |
+ EXPECT_EQ(kDefaultStartY + kDefaultDeltaY, scroller.GetFinalY()); |
+ EXPECT_FALSE(scroller.IsFinished()); |
+ EXPECT_EQ(base::TimeDelta(), scroller.GetTimePassed()); |
+ |
+ // Advance halfway through the scroll. |
+ const base::TimeDelta scroll_duration = scroller.GetDuration(); |
+ scroller.ComputeScrollOffset(start_time + scroll_duration / 2); |
+ |
+ // Ensure we've moved in the direction of the delta, but have yet to reach |
+ // the target. |
+ EXPECT_GT(kDefaultStartX, scroller.GetCurrX()); |
+ EXPECT_LT(kDefaultStartY, scroller.GetCurrY()); |
+ EXPECT_LT(scroller.GetFinalX(), scroller.GetCurrX()); |
+ EXPECT_GT(scroller.GetFinalY(), scroller.GetCurrY()); |
+ EXPECT_FALSE(scroller.IsFinished()); |
+ |
+ // Ensure our velocity is non-zero and in the same direction as the delta. |
+ EXPECT_GT(0.f, scroller.GetCurrVelocityX() * kDefaultDeltaX); |
+ EXPECT_GT(0.f, scroller.GetCurrVelocityY() * kDefaultDeltaY); |
+ EXPECT_TRUE(scroller.IsScrollingInDirection(kDefaultDeltaX, kDefaultDeltaY)); |
+ |
+ // Advance to the end. |
+ scroller.ComputeScrollOffset(start_time + scroll_duration); |
+ EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX()); |
+ EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY()); |
+ EXPECT_TRUE(scroller.IsFinished()); |
+ EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); |
+ EXPECT_NEAR(0.f, scroller.GetCurrVelocityX(), kEpsilon); |
+ EXPECT_NEAR(0.f, scroller.GetCurrVelocityY(), kEpsilon); |
+ |
+ // Try to advance further; nothing should change. |
+ scroller.ComputeScrollOffset(start_time + scroll_duration * 2); |
+ EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX()); |
+ EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY()); |
+ EXPECT_TRUE(scroller.IsFinished()); |
+ EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); |
+} |
+ |
+TEST_F(ScrollerTest, Fling) { |
+ Scroller scroller(DefaultConfig()); |
+ base::TimeTicks start_time = base::TimeTicks::Now(); |
+ |
+ // Start a fling and verify initialized values. |
+ scroller.Fling(kDefaultStartX, |
+ kDefaultStartY, |
+ kDefaultVelocityX, |
+ kDefaultVelocityY, |
+ INT_MIN, |
+ INT_MAX, |
+ INT_MIN, |
+ INT_MAX, |
+ start_time); |
+ |
+ EXPECT_EQ(kDefaultStartX, scroller.GetStartX()); |
+ EXPECT_EQ(kDefaultStartY, scroller.GetStartY()); |
+ EXPECT_EQ(kDefaultStartX, scroller.GetCurrX()); |
+ EXPECT_EQ(kDefaultStartY, scroller.GetCurrY()); |
+ EXPECT_GT(kDefaultStartX, scroller.GetFinalX()); |
+ EXPECT_LT(kDefaultStartY, scroller.GetFinalY()); |
+ EXPECT_FALSE(scroller.IsFinished()); |
+ EXPECT_EQ(base::TimeDelta(), scroller.GetTimePassed()); |
+ |
+ // Advance halfway through the fling. |
+ const base::TimeDelta scroll_duration = scroller.GetDuration(); |
+ scroller.ComputeScrollOffset(start_time + scroll_duration / 2); |
+ |
+ // Ensure we've moved in the direction of the velocity, but have yet to reach |
+ // the target. |
+ EXPECT_GT(kDefaultStartX, scroller.GetCurrX()); |
+ EXPECT_LT(kDefaultStartY, scroller.GetCurrY()); |
+ EXPECT_LT(scroller.GetFinalX(), scroller.GetCurrX()); |
+ EXPECT_GT(scroller.GetFinalY(), scroller.GetCurrY()); |
+ EXPECT_FALSE(scroller.IsFinished()); |
+ |
+ // Ensure our velocity is non-zero and in the same direction as the original |
+ // velocity. |
+ EXPECT_LT(0.f, scroller.GetCurrVelocityX() * kDefaultVelocityX); |
+ EXPECT_LT(0.f, scroller.GetCurrVelocityY() * kDefaultVelocityY); |
+ EXPECT_TRUE( |
+ scroller.IsScrollingInDirection(kDefaultVelocityX, kDefaultVelocityY)); |
+ |
+ // Advance to the end. |
+ scroller.ComputeScrollOffset(start_time + scroll_duration); |
+ EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX()); |
+ EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY()); |
+ EXPECT_TRUE(scroller.IsFinished()); |
+ EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); |
+ EXPECT_NEAR(0.f, scroller.GetCurrVelocityX(), kEpsilon); |
+ EXPECT_NEAR(0.f, scroller.GetCurrVelocityY(), kEpsilon); |
+ |
+ // Try to advance further; nothing should change. |
+ scroller.ComputeScrollOffset(start_time + scroll_duration * 2); |
+ EXPECT_EQ(scroller.GetFinalX(), scroller.GetCurrX()); |
+ EXPECT_EQ(scroller.GetFinalY(), scroller.GetCurrY()); |
+ EXPECT_TRUE(scroller.IsFinished()); |
+ EXPECT_EQ(scroll_duration, scroller.GetTimePassed()); |
+} |
+ |
+} // namespace gfx |