blob: 385870fa089ab07cceb3a57b6cb3d242eef24c7e [file] [log] [blame]
// 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 "ui/events/gestures/blink/web_gesture_curve_impl.h"
#include <memory>
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/web_float_size.h"
#include "third_party/blink/public/platform/web_gesture_curve.h"
#include "ui/events/gestures/fling_curve.h"
using blink::WebFloatSize;
using blink::WebGestureCurve;
namespace ui {
TEST(WebGestureCurveImplTest, Basic) {
gfx::Vector2dF velocity(5000, 0);
gfx::Vector2dF offset;
base::TimeTicks time;
auto curve = WebGestureCurveImpl::CreateFromUICurveForTesting(
std::unique_ptr<ui::GestureCurve>(new ui::FlingCurve(velocity, time)),
offset);
gfx::Vector2dF current_velocity;
gfx::Vector2dF current_scroll_delta;
gfx::Vector2dF cumulative_delta;
EXPECT_TRUE(curve->Advance(0, current_velocity, current_scroll_delta));
cumulative_delta += current_scroll_delta;
EXPECT_TRUE(curve->Advance(0.25, current_velocity, current_scroll_delta));
cumulative_delta += current_scroll_delta;
EXPECT_NEAR(current_velocity.x(), 1878, 1);
EXPECT_EQ(current_velocity.y(), 0);
EXPECT_GT(cumulative_delta.x(), 0);
EXPECT_TRUE(
curve->Advance(0.45, current_velocity,
current_scroll_delta)); // Use non-uniform tick spacing.
cumulative_delta += current_scroll_delta;
// Ensure fling persists even if successive timestamps are identical.
gfx::Vector2dF old_velocity = current_velocity;
EXPECT_TRUE(curve->Advance(0.45, current_velocity, current_scroll_delta));
EXPECT_EQ(gfx::Vector2dF(), current_scroll_delta);
EXPECT_EQ(old_velocity, current_velocity);
EXPECT_TRUE(curve->Advance(0.75, current_velocity, current_scroll_delta));
cumulative_delta += current_scroll_delta;
EXPECT_FALSE(curve->Advance(1.5, current_velocity, current_scroll_delta));
cumulative_delta += current_scroll_delta;
EXPECT_NEAR(cumulative_delta.x(), 1193, 1);
EXPECT_EQ(cumulative_delta.y(), 0);
EXPECT_EQ(current_velocity.x(), 0);
EXPECT_EQ(current_velocity.y(), 0);
}
} // namespace ui