1 // Copyright (c) 2012 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 "webkit/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 17 using WebKit::WebFloatPoint; 18 using WebKit::WebFloatSize; 19 using WebKit::WebGestureCurve; 20 using WebKit::WebGestureCurveTarget; 21 using WebKit::WebSize; 22 23 namespace { 24 25 class MockGestureCurveTarget : public WebGestureCurveTarget { 26 public: 27 virtual void scrollBy(const WebFloatSize& delta) { 28 cumulative_delta_.width += delta.width; 29 cumulative_delta_.height += delta.height; 30 } 31 32 virtual void notifyCurrentFlingVelocity(const WebFloatSize& velocity) { 33 current_velocity_ = velocity; 34 } 35 36 WebFloatSize cumulative_delta() const { return cumulative_delta_; } 37 void resetCumulativeDelta() { cumulative_delta_ = WebFloatSize(); } 38 39 WebFloatSize current_velocity() const { return current_velocity_; } 40 41 private: 42 WebFloatSize cumulative_delta_; 43 WebFloatSize current_velocity_; 44 }; 45 46 } // namespace anonymous 47 48 TEST(TouchFlingGestureCurve, flingCurveTouch) 49 { 50 double initialVelocity = 5000; 51 MockGestureCurveTarget target; 52 53 scoped_ptr<WebGestureCurve> curve(webkit_glue::TouchFlingGestureCurve::Create( 54 WebFloatPoint(initialVelocity, 0), 55 -5.70762e+03f, 1.72e+02f, 3.7e+00f, WebSize())); 56 57 // Note: the expectations below are dependent on the curve parameters hard 58 // coded into the create call above. 59 EXPECT_TRUE(curve->apply(0, &target)); 60 EXPECT_TRUE(curve->apply(0.25, &target)); 61 EXPECT_NEAR(target.current_velocity().width, 1878, 1); 62 EXPECT_EQ(target.current_velocity().height, 0); 63 EXPECT_TRUE(curve->apply(0.45f, &target)); // Use non-uniform tick spacing. 64 EXPECT_TRUE(curve->apply(1, &target)); 65 EXPECT_FALSE(curve->apply(1.5, &target)); 66 EXPECT_NEAR(target.cumulative_delta().width, 1193, 1); 67 EXPECT_EQ(target.cumulative_delta().height, 0); 68 EXPECT_EQ(target.current_velocity().width, 0); 69 EXPECT_EQ(target.current_velocity().height, 0); 70 } 71 72