Index: ui/events/gestures/gesture_event_queue_unittest.cc |
diff --git a/ui/events/gestures/gesture_event_queue_unittest.cc b/ui/events/gestures/gesture_event_queue_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ea82e24529d8e88c341fc36f913ebb9bf5ba6fa0 |
--- /dev/null |
+++ b/ui/events/gestures/gesture_event_queue_unittest.cc |
@@ -0,0 +1,454 @@ |
+// Copyright 2013 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 "testing/gmock/include/gmock/gmock.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/events/event.h" |
+#include "ui/events/gestures/gesture_event_queue.h" |
+#include "ui/events/gestures/test/eager_gesture_recognition_test_base.h" |
+#include "ui/events/gestures/touch_point_state.h" |
+ |
+using testing::ElementsAre; |
+ |
+namespace ui { |
+namespace test { |
+ |
+namespace { |
+ |
+// Used to condense definitions of ScopedVectors of TouchPointStates. |
+class TPStates : public std::vector<TouchPointState*> { |
+ public: |
+ TPStates(int n, ...) { |
+ va_list ap; |
+ va_start(ap, n); |
+ |
+ TouchPointState* tps; |
+ for (int i = 0; i < n; ++i) { |
+ tps = va_arg(ap, TouchPointState*); |
+ push_back(tps); |
+ } |
+ va_end(ap); |
+ } |
+ |
+ TPStates(int touch_id, |
+ bool has_press, |
+ bool has_release, |
+ int move_count, |
+ int timer_count) { |
+ push_back(new TouchPointState( |
+ touch_id, has_press, has_release, move_count, timer_count)); |
+ } |
+}; |
+ |
+class MockGestureEventQueueDelegate: public GestureEventQueueDelegate { |
+ public: |
+ MockGestureEventQueueDelegate() {} |
+ virtual ~MockGestureEventQueueDelegate() {} |
+ std::vector<EventType> GetAndResetDispatchedEvents() { |
+ std::vector<EventType> tmp; |
+ dispatched_events_.swap(tmp); |
+ return tmp; |
+ |
+ } |
+ virtual void DispatchGestureEvent(GestureEvent* event) OVERRIDE { |
+ dispatched_events_.push_back(event->type()); |
+ } |
+ |
+ private: |
+ std::vector<EventType> dispatched_events_; |
+}; |
+ |
+class TestGestureEventQueue : public GestureEventQueue{ |
+ public: |
+ TestGestureEventQueue(MockGestureEventQueueDelegate* delegate) |
+ : GestureEventQueue(delegate) |
+ , mock_delegate_(delegate) { |
+ } |
+ |
+ std::vector<EventType> GetAndResetDispatchedEvents() { |
+ return mock_delegate_->GetAndResetDispatchedEvents(); |
+ } |
+ |
+ std::list<size_t> SequenceSizes() { |
+ std::list<size_t> sizes; |
+ for (std::list<Sequence*>::iterator it = sequences_.begin(); |
+ it != sequences_.end(); |
+ ++it) { |
+ sizes.push_back((*it)->size()); |
+ } |
+ return sizes; |
+ } |
+ |
+ void QueueForTest( |
+ GestureEvent* event, |
+ std::vector<TouchPointState*>& touch_point_states) { |
+ QueueGestureEvent(event, touch_point_states); |
+ } |
+ |
+ private: |
+ MockGestureEventQueueDelegate* mock_delegate_; |
+ DISALLOW_COPY_AND_ASSIGN(TestGestureEventQueue); |
+}; |
+ |
+class GestureEventQueueTest : public EagerGestureRecognitionTestBase { |
+ public: |
+ GestureEventQueueTest() {} |
+ virtual void SetUp() { |
+ EagerGestureRecognitionTestBase::SetUp(); |
+ delegate_.reset(new MockGestureEventQueueDelegate()); |
+ geq_.reset(new TestGestureEventQueue(delegate_.get())); |
+ } |
+ |
+ virtual void TearDown() { |
+ geq_.reset(); |
+ EagerGestureRecognitionTestBase::TearDown(); |
+ } |
+ |
+ TestGestureEventQueue& geq() { return *geq_.get(); } |
+ |
+ private: |
+ scoped_ptr<TestGestureEventQueue> geq_; |
+ scoped_ptr<MockGestureEventQueueDelegate> delegate_; |
+ DISALLOW_COPY_AND_ASSIGN(GestureEventQueueTest); |
+}; |
+ |
+} // namespace |
+ |
+// Ensure that GESTURE_BEGIN creates a new sequence in the queue. We ensure |
+// no events are acked, to simplify the test. |
+TEST_F(GestureEventQueueTest, QueueGestureEvent) { |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre()); |
+ |
+ // QueueForTest takes ownership of the elements of the TPStates object, and |
+ // empties it, so we can't reuse these objects. |
+ TPStates never_send_1(0, false, false, 100, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), never_send_1); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ |
+ TPStates never_send_2(0, false, false, 100, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), never_send_2); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2)); |
+ |
+ TPStates never_send_3(0, false, false, 100, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), never_send_3); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2, 1)); |
+ |
+ TPStates never_send_4(0, false, false, 100, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), never_send_4); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2, 2)); |
+ |
+ TPStates never_send_5(0, false, false, 100, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), never_send_5); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2, 2, 1)); |
+} |
+ |
+TEST_F(GestureEventQueueTest, OnTouchEventAckNotConsumed) { |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre()); |
+ |
+ TPStates depends_on_nothing(0, false, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), |
+ depends_on_nothing); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_BEGIN)); |
+ |
+ TPStates depends_on_press_1(0, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), |
+ depends_on_press_1); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_press_2(0, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_SCROLL_BEGIN), |
+ depends_on_press_2); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_1_move(0, true, false, 1, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_SCROLL_UPDATE), |
+ depends_on_1_move); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(3)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_2_moves(0, true, false, 2, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_SCROLL_UPDATE), |
+ depends_on_2_moves); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(4)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_press_3(0, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), |
+ depends_on_press_3); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(4, 1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Ack TAP_DOWN and SCROLL_BEGIN. |
+ geq().OnTouchEventAck(Press(0), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2, 1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP_DOWN, ET_GESTURE_SCROLL_BEGIN)); |
+ |
+ // Ack SCROLL_UPDATE. |
+ geq().OnTouchEventAck(Move(0), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1, 1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_SCROLL_UPDATE)); |
+ |
+ // Ack SCROLL_UPDATE, which is the end of this sequence. We could dispatch the |
+ // next GESTURE_BEGIN at this point, but at this point it isn't clear if we |
+ // want to dispatch it before the press receives an ack. |
+ geq().OnTouchEventAck(Move(0), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0, 1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_SCROLL_UPDATE)); |
+} |
+ |
+TEST_F(GestureEventQueueTest, OnTouchEventAckConsumed) { |
+ TPStates depends_on_nothing(0, false, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), |
+ depends_on_nothing); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_BEGIN)); |
+ |
+ TPStates depends_on_press(0, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), |
+ depends_on_press); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_press_and_move(0, true, false, 1, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP), |
+ depends_on_press_and_move); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_move(0, false, false, 1, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_SCROLL_UPDATE), |
+ depends_on_move); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(3)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Consume press event. |
+ geq().OnTouchEventAck(Press(0), ui::ER_CONSUMED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Ack move event. |
+ geq().OnTouchEventAck(Move(0), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_SCROLL_UPDATE)); |
+} |
+ |
+TEST_F(GestureEventQueueTest, SimpleMultiFingerTest) { |
+ TPStates depends_on_nothing(1, false, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), depends_on_nothing); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_BEGIN)); |
+ |
+ TPStates depends_on_press(1, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), depends_on_press); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_press_2(2, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP), depends_on_press_2); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Ack touch 1 press. |
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP_DOWN)); |
+ |
+ // Ack touch 2 press. |
+ geq().OnTouchEventAck(Press(2), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP)); |
+} |
+ |
+TEST_F(GestureEventQueueTest, StaysInOrder) { |
+ TPStates depends_on_nothing(1, false, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), depends_on_nothing); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_BEGIN)); |
+ |
+ TPStates depends_on_press(1, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), depends_on_press); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_press_2(2, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP), depends_on_press_2); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Ack touch 2 press. |
+ geq().OnTouchEventAck(Press(2), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre()); |
+ |
+ // Ack touch 1 press. |
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP_DOWN, ET_GESTURE_TAP)); |
+ |
+} |
+ |
+TEST_F(GestureEventQueueTest, DependsTwoFingers) { |
+ TPStates depends_on_nothing(1, false, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), |
+ depends_on_nothing); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_BEGIN)); |
+ |
+ TPStates depends_on_presses(2, |
+ new TouchPointState(4, true, false, 0, 0), |
+ new TouchPointState(1, true, false, 0, 0)); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), |
+ depends_on_presses); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Ack touch 4 press. |
+ geq().OnTouchEventAck(Press(4), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre()); |
+ |
+ // Ack touch 1 press. |
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP_DOWN)); |
+} |
+ |
+TEST_F(GestureEventQueueTest, OnTouchEventAckConsumedBeforeGestureArrives) { |
+ TPStates depends_on_nothing(0, false, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), |
+ depends_on_nothing); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_BEGIN)); |
+ |
+ // Consume press event. |
+ geq().OnTouchEventAck(Press(0), ui::ER_CONSUMED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_press(0, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), |
+ depends_on_press); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Ack press event. |
+ geq().OnTouchEventAck(Press(0), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+} |
+ |
+// Touch down with touch point 0. Then tap twice with touch point 1. |
+TEST_F(GestureEventQueueTest, ResetTouchPointOnRelease) { |
+ TPStates depends_on_nothing(0, false, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), |
+ depends_on_nothing); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_BEGIN)); |
+ |
+ TPStates depends_on_press_0(0, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), |
+ depends_on_press_0); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Ack the zeroth press. |
+ geq().OnTouchEventAck(Press(0), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP_DOWN)); |
+ |
+ TPStates depends_on_press_1(1, true, false, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), |
+ depends_on_press_1); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_release_1(1, true, true, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP), |
+ depends_on_release_1); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Ack the first press. |
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP_DOWN)); |
+ |
+ // Ack the release. |
+ geq().OnTouchEventAck(Release(1), |
+ ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP)); |
+ |
+ TPStates depends_on_press_1_2(1, true, false, 0, 0); |
+ // Now tap again with touch point 1. |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), |
+ depends_on_press_1_2); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ TPStates depends_on_release_1_2(1, true, true, 0, 0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP), |
+ depends_on_release_1_2); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(2)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), ElementsAre()); |
+ |
+ // Ack touch point 1's second press. |
+ geq().OnTouchEventAck(Press(1), ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(1)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP_DOWN)); |
+ |
+ // Ack touch point 1's second release. |
+ geq().OnTouchEventAck(Release(1), |
+ ui::ER_UNHANDLED); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP)); |
+} |
+ |
+TEST_F(GestureEventQueueTest, NoAckTest) { |
+ TPStates empty_1(0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_BEGIN), empty_1); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_BEGIN)); |
+ |
+ TPStates empty_2(0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP_DOWN), empty_2); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP_DOWN)); |
+ |
+ TPStates empty_3(0); |
+ geq().QueueForTest(Gesture(ET_GESTURE_TAP), empty_3); |
+ EXPECT_THAT(geq().SequenceSizes(), ElementsAre(0)); |
+ EXPECT_THAT(geq().GetAndResetDispatchedEvents(), |
+ ElementsAre(ET_GESTURE_TAP)); |
+} |
+ |
+} // namespace test |
+} // namespace ui |