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