PlatformGestureCurveTest.cpp [plain text]
#include "config.h"
#include "PlatformGestureCurve.h"
#include "ActivePlatformGestureAnimation.h"
#include "PlatformGestureCurveTarget.h"
#include "TouchpadFlingPlatformGestureCurve.h"
#include "WheelFlingPlatformGestureCurve.h"
#include "cc/CCActiveGestureAnimation.h"
#include "cc/CCGestureCurve.h"
#include <gtest/gtest.h>
#include <wtf/OwnPtr.h>
namespace {
using namespace WebCore;
class MockPlatformGestureCurveTarget : public PlatformGestureCurveTarget {
public:
virtual void scrollBy(const IntPoint& delta)
{
m_cumulativeDelta = m_cumulativeDelta + delta;
}
IntPoint cumulativeDelta() const { return m_cumulativeDelta; }
void resetCumulativeDelta() { m_cumulativeDelta = IntPoint(); }
private:
IntPoint m_cumulativeDelta;
};
TEST(PlatformGestureCurve, flingCurve)
{
MockPlatformGestureCurveTarget target;
OwnPtr<ActivePlatformGestureAnimation> animation = ActivePlatformGestureAnimation::create(WheelFlingPlatformGestureCurve::create(FloatPoint(100, 0)), &target);
EXPECT_TRUE(animation->animate(0));
EXPECT_TRUE(animation->animate(0.25));
EXPECT_TRUE(animation->animate(0.45)); EXPECT_TRUE(animation->animate(0.75));
EXPECT_TRUE(animation->animate(1000));
EXPECT_FALSE(animation->animate(1001));
EXPECT_NEAR(target.cumulativeDelta().x(), 100, 1);
EXPECT_EQ(target.cumulativeDelta().y(), 0);
double baseTime = 42.42;
animation = ActivePlatformGestureAnimation::create(WheelFlingPlatformGestureCurve::create(FloatPoint(100, 0)), &target);
target.resetCumulativeDelta();
EXPECT_TRUE(animation->animate(baseTime + 0.35));
EXPECT_TRUE(animation->animate(baseTime + 1.35));
EXPECT_TRUE(animation->animate(baseTime + 1000));
EXPECT_FALSE(animation->animate(baseTime + 1001));
EXPECT_NEAR(target.cumulativeDelta().x(), 100, 1);
animation = ActivePlatformGestureAnimation::create(WheelFlingPlatformGestureCurve::create(FloatPoint(50, 150)), &target);
target.resetCumulativeDelta();
EXPECT_TRUE(animation->animate(0));
EXPECT_TRUE(animation->animate(0.25));
EXPECT_TRUE(animation->animate(0.45));
EXPECT_TRUE(animation->animate(0.75));
EXPECT_TRUE(animation->animate(1000));
EXPECT_FALSE(animation->animate(1001));
EXPECT_NEAR(target.cumulativeDelta().x(), 50, 1);
EXPECT_NEAR(target.cumulativeDelta().y(), 150, 1);
}
TEST(PlatformGestureCurve, flingCurveTouch)
{
double initialVelocity = 5000;
MockPlatformGestureCurveTarget target;
OwnPtr<ActivePlatformGestureAnimation> animation = ActivePlatformGestureAnimation::create(TouchpadFlingPlatformGestureCurve::create(FloatPoint(initialVelocity, 0)), &target);
EXPECT_TRUE(animation->animate(0));
EXPECT_TRUE(animation->animate(0.25));
EXPECT_TRUE(animation->animate(0.45)); EXPECT_TRUE(animation->animate(1));
EXPECT_FALSE(animation->animate(1.5));
EXPECT_NEAR(target.cumulativeDelta().x(), 1193, 1);
EXPECT_EQ(target.cumulativeDelta().y(), 0);
}
}