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
3// found in the LICENSE file.
4
5// Tests for the TouchFlingGestureCurve.
6
7#include "content/child/touch_fling_gesture_curve.h"
8
9#include "base/memory/scoped_ptr.h"
10#include "testing/gtest/include/gtest/gtest.h"
11#include "third_party/WebKit/public/platform/WebFloatPoint.h"
12#include "third_party/WebKit/public/platform/WebFloatSize.h"
13#include "third_party/WebKit/public/platform/WebGestureCurve.h"
14#include "third_party/WebKit/public/platform/WebGestureCurveTarget.h"
15#include "third_party/WebKit/public/platform/WebSize.h"
16
17using blink::WebFloatPoint;
18using blink::WebFloatSize;
19using blink::WebGestureCurve;
20using blink::WebGestureCurveTarget;
21using blink::WebSize;
22
23namespace {
24
25class MockGestureCurveTarget : public WebGestureCurveTarget {
26 public:
27  virtual bool scrollBy(const WebFloatSize& delta,
28                        const WebFloatSize& velocity) OVERRIDE {
29    cumulative_delta_.width += delta.width;
30    cumulative_delta_.height += delta.height;
31    current_velocity_ = velocity;
32    return true;
33  }
34
35  WebFloatSize cumulative_delta() const { return cumulative_delta_; }
36  void resetCumulativeDelta() { cumulative_delta_ = WebFloatSize(); }
37
38  WebFloatSize current_velocity() const { return current_velocity_; }
39
40 private:
41  WebFloatSize cumulative_delta_;
42  WebFloatSize current_velocity_;
43};
44
45} // namespace anonymous
46
47TEST(TouchFlingGestureCurve, flingCurveTouch)
48{
49  double initialVelocity = 5000;
50  MockGestureCurveTarget target;
51
52  scoped_ptr<WebGestureCurve> curve(content::TouchFlingGestureCurve::Create(
53      WebFloatPoint(initialVelocity, 0), WebSize()));
54
55  // Note: the expectations below are dependent on the curve parameters hard
56  // coded into the create call above.
57  EXPECT_TRUE(curve->apply(0, &target));
58  EXPECT_TRUE(curve->apply(0.25, &target));
59  EXPECT_NEAR(target.current_velocity().width, 1878, 1);
60  EXPECT_EQ(target.current_velocity().height, 0);
61  EXPECT_TRUE(curve->apply(0.45f, &target)); // Use non-uniform tick spacing.
62  EXPECT_TRUE(curve->apply(1, &target));
63  EXPECT_FALSE(curve->apply(1.5, &target));
64  EXPECT_NEAR(target.cumulative_delta().width, 1193, 1);
65  EXPECT_EQ(target.cumulative_delta().height, 0);
66  EXPECT_EQ(target.current_velocity().width, 0);
67  EXPECT_EQ(target.current_velocity().height, 0);
68}
69
70