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