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 // Tests for the TouchFlingGestureCurve. | 5 #include "content/child/web_gesture_curve_impl.h" |
6 | |
7 #include "content/child/touch_fling_gesture_curve.h" | |
8 | 6 |
9 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 8 #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" | 9 #include "third_party/WebKit/public/platform/WebFloatSize.h" |
13 #include "third_party/WebKit/public/platform/WebGestureCurve.h" | 10 #include "third_party/WebKit/public/platform/WebGestureCurve.h" |
14 #include "third_party/WebKit/public/platform/WebGestureCurveTarget.h" | 11 #include "third_party/WebKit/public/platform/WebGestureCurveTarget.h" |
15 #include "third_party/WebKit/public/platform/WebSize.h" | 12 #include "ui/events/gestures/fling_curve.h" |
16 | 13 |
17 using blink::WebFloatPoint; | |
18 using blink::WebFloatSize; | 14 using blink::WebFloatSize; |
19 using blink::WebGestureCurve; | 15 using blink::WebGestureCurve; |
20 using blink::WebGestureCurveTarget; | 16 using blink::WebGestureCurveTarget; |
21 using blink::WebSize; | |
22 | 17 |
| 18 namespace content { |
23 namespace { | 19 namespace { |
24 | 20 |
25 class MockGestureCurveTarget : public WebGestureCurveTarget { | 21 class MockGestureCurveTarget : public WebGestureCurveTarget { |
26 public: | 22 public: |
27 virtual bool scrollBy(const WebFloatSize& delta, | 23 virtual bool scrollBy(const WebFloatSize& delta, |
28 const WebFloatSize& velocity) override { | 24 const WebFloatSize& velocity) override { |
29 cumulative_delta_.width += delta.width; | 25 cumulative_delta_.width += delta.width; |
30 cumulative_delta_.height += delta.height; | 26 cumulative_delta_.height += delta.height; |
31 current_velocity_ = velocity; | 27 current_velocity_ = velocity; |
32 return true; | 28 return true; |
33 } | 29 } |
34 | 30 |
35 WebFloatSize cumulative_delta() const { return cumulative_delta_; } | 31 const WebFloatSize& cumulative_delta() const { return cumulative_delta_; } |
36 void resetCumulativeDelta() { cumulative_delta_ = WebFloatSize(); } | 32 const WebFloatSize& current_velocity() const { return current_velocity_; } |
37 | |
38 WebFloatSize current_velocity() const { return current_velocity_; } | |
39 | 33 |
40 private: | 34 private: |
41 WebFloatSize cumulative_delta_; | 35 WebFloatSize cumulative_delta_; |
42 WebFloatSize current_velocity_; | 36 WebFloatSize current_velocity_; |
43 }; | 37 }; |
44 | 38 |
45 } // namespace anonymous | 39 } // namespace anonymous |
46 | 40 |
47 TEST(TouchFlingGestureCurve, flingCurveTouch) | 41 TEST(WebGestureCurveImplTest, Basic) { |
48 { | 42 gfx::Vector2dF velocity(5000, 0); |
49 double initialVelocity = 5000; | 43 gfx::Vector2dF offset; |
| 44 base::TimeTicks time; |
| 45 auto curve = WebGestureCurveImpl::CreateFrom( |
| 46 scoped_ptr<ui::GestureCurve>(new ui::FlingCurve(velocity, time)), offset); |
| 47 |
| 48 // coded into the create call above. |
50 MockGestureCurveTarget target; | 49 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)); | 50 EXPECT_TRUE(curve->apply(0, &target)); |
58 EXPECT_TRUE(curve->apply(0.25, &target)); | 51 EXPECT_TRUE(curve->apply(0.25, &target)); |
59 EXPECT_NEAR(target.current_velocity().width, 1878, 1); | 52 EXPECT_NEAR(target.current_velocity().width, 1878, 1); |
60 EXPECT_EQ(target.current_velocity().height, 0); | 53 EXPECT_EQ(target.current_velocity().height, 0); |
61 EXPECT_TRUE(curve->apply(0.45f, &target)); // Use non-uniform tick spacing. | 54 EXPECT_GT(target.cumulative_delta().width, 0); |
62 EXPECT_TRUE(curve->apply(1, &target)); | 55 EXPECT_TRUE(curve->apply(0.45, &target)); // Use non-uniform tick spacing. |
| 56 |
| 57 // Ensure fling persists even if successive timestamps are identical. |
| 58 gfx::Vector2dF cumulative_delta = target.cumulative_delta(); |
| 59 gfx::Vector2dF current_velocity = target.current_velocity(); |
| 60 EXPECT_TRUE(curve->apply(0.45, &target)); |
| 61 EXPECT_EQ(cumulative_delta, gfx::Vector2dF(target.cumulative_delta())); |
| 62 EXPECT_EQ(current_velocity, gfx::Vector2dF(target.current_velocity())); |
| 63 |
| 64 EXPECT_TRUE(curve->apply(0.75, &target)); |
63 EXPECT_FALSE(curve->apply(1.5, &target)); | 65 EXPECT_FALSE(curve->apply(1.5, &target)); |
64 EXPECT_NEAR(target.cumulative_delta().width, 1193, 1); | 66 EXPECT_NEAR(target.cumulative_delta().width, 1193, 1); |
65 EXPECT_EQ(target.cumulative_delta().height, 0); | 67 EXPECT_EQ(target.cumulative_delta().height, 0); |
66 EXPECT_EQ(target.current_velocity().width, 0); | 68 EXPECT_EQ(target.current_velocity().width, 0); |
67 EXPECT_EQ(target.current_velocity().height, 0); | 69 EXPECT_EQ(target.current_velocity().height, 0); |
68 } | 70 } |
69 | 71 |
| 72 } // namespace content |
OLD | NEW |