| Index: ui/events/gesture_detection/filtered_gesture_provider_unittest.cc
|
| diff --git a/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc b/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d60490ce71b0c119674e84455efbf6439396ef16
|
| --- /dev/null
|
| +++ b/ui/events/gesture_detection/filtered_gesture_provider_unittest.cc
|
| @@ -0,0 +1,84 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/events/gesture_detection/filtered_gesture_provider.h"
|
| +#include "ui/events/test/motion_event_test_utils.h"
|
| +
|
| +namespace ui {
|
| +
|
| +class FilteredGestureProviderTest : public GestureProviderClient,
|
| + public testing::Test {
|
| + public:
|
| + FilteredGestureProviderTest() {}
|
| + ~FilteredGestureProviderTest() override {}
|
| +
|
| + // GestureProviderClient implementation.
|
| + void OnGestureEvent(const GestureEventData&) override {}
|
| +
|
| + private:
|
| + base::MessageLoopForUI message_loop_;
|
| +};
|
| +
|
| +TEST_F(FilteredGestureProviderTest, TouchDidGenerateScroll) {
|
| + GestureProvider::Config config;
|
| + FilteredGestureProvider provider(config, this);
|
| +
|
| + const float kSlopRegion = config.gesture_detector_config.touch_slop;
|
| +
|
| + test::MockMotionEvent event;
|
| + event.set_event_time(base::TimeTicks::Now());
|
| + event.PressPoint(0, 0);
|
| + auto result = provider.OnTouchEvent(event);
|
| + EXPECT_TRUE(result.succeeded);
|
| + EXPECT_FALSE(result.did_generate_scroll);
|
| +
|
| + event.MovePoint(0, kSlopRegion / 2.f, 0);
|
| + result = provider.OnTouchEvent(event);
|
| + EXPECT_TRUE(result.succeeded);
|
| + EXPECT_FALSE(result.did_generate_scroll);
|
| +
|
| + // Exceeding the slop should triggering scrolling and be reflected in the API.
|
| + event.MovePoint(0, kSlopRegion * 2.f, 0);
|
| + result = provider.OnTouchEvent(event);
|
| + EXPECT_TRUE(result.succeeded);
|
| + EXPECT_TRUE(result.did_generate_scroll);
|
| +
|
| + // No movement should indicate no scrolling.
|
| + result = provider.OnTouchEvent(event);
|
| + EXPECT_TRUE(result.succeeded);
|
| + EXPECT_FALSE(result.did_generate_scroll);
|
| +
|
| + // Nonzero movement should reflect scrolling after exceeding the slop region.
|
| + event.MovePoint(0, 0, 0);
|
| + result = provider.OnTouchEvent(event);
|
| + EXPECT_TRUE(result.succeeded);
|
| + EXPECT_TRUE(result.did_generate_scroll);
|
| +
|
| + // Ending a touch with no fling should not indicate scrolling.
|
| + event.ReleasePoint();
|
| + result = provider.OnTouchEvent(event);
|
| + EXPECT_TRUE(result.succeeded);
|
| + EXPECT_FALSE(result.did_generate_scroll);
|
| +
|
| + // Ending a touch with a fling *should* indicate scrolling.
|
| + base::TimeTicks time = base::TimeTicks::Now();
|
| + event.PressPoint(0, 0);
|
| + event.set_event_time(time);
|
| + ASSERT_TRUE(provider.OnTouchEvent(event).succeeded);
|
| +
|
| + time += base::TimeDelta::FromMilliseconds(10);
|
| + event.MovePoint(0, kSlopRegion * 50, 0);
|
| + event.set_event_time(time);
|
| + ASSERT_TRUE(provider.OnTouchEvent(event).succeeded);
|
| +
|
| + event.ReleasePoint();
|
| + result = provider.OnTouchEvent(event);
|
| + EXPECT_TRUE(result.succeeded);
|
| + EXPECT_TRUE(result.did_generate_scroll);
|
| +}
|
| +
|
| +} // namespace ui
|
|
|