OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/chromeos/touch_exploration_controller.h" | 5 #include "ui/chromeos/touch_exploration_controller.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
173 } | 173 } |
174 | 174 |
175 float GetSlopDistanceFromEdge() const { | 175 float GetSlopDistanceFromEdge() const { |
176 return touch_exploration_controller_->kSlopDistanceFromEdge; | 176 return touch_exploration_controller_->kSlopDistanceFromEdge; |
177 } | 177 } |
178 | 178 |
179 void SetTickClockForTesting(base::TickClock* simulated_clock) { | 179 void SetTickClockForTesting(base::TickClock* simulated_clock) { |
180 touch_exploration_controller_->tick_clock_ = simulated_clock; | 180 touch_exploration_controller_->tick_clock_ = simulated_clock; |
181 } | 181 } |
182 | 182 |
183 void SetTouchAccessibilityAnchorPoint(const gfx::Point& location) { | |
184 touch_exploration_controller_->SetTouchAccessibilityAnchorPoint(location); | |
185 } | |
186 | |
183 private: | 187 private: |
184 std::unique_ptr<TouchExplorationController> touch_exploration_controller_; | 188 std::unique_ptr<TouchExplorationController> touch_exploration_controller_; |
185 | 189 |
186 DISALLOW_COPY_AND_ASSIGN(TouchExplorationControllerTestApi); | 190 DISALLOW_COPY_AND_ASSIGN(TouchExplorationControllerTestApi); |
187 }; | 191 }; |
188 | 192 |
189 class TouchExplorationTest : public aura::test::AuraTestBase { | 193 class TouchExplorationTest : public aura::test::AuraTestBase { |
190 public: | 194 public: |
191 TouchExplorationTest() : simulated_clock_(new base::SimpleTestTickClock()) { | 195 TouchExplorationTest() : simulated_clock_(new base::SimpleTestTickClock()) { |
192 // Tests fail if time is ever 0. | 196 // Tests fail if time is ever 0. |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
388 return touch_exploration_controller_->GetSlopDistanceFromEdge(); | 392 return touch_exploration_controller_->GetSlopDistanceFromEdge(); |
389 } | 393 } |
390 | 394 |
391 base::TimeDelta Now() { | 395 base::TimeDelta Now() { |
392 // This is the same as what EventTimeForNow() does, but here we do it | 396 // This is the same as what EventTimeForNow() does, but here we do it |
393 // with our simulated clock. | 397 // with our simulated clock. |
394 return base::TimeDelta::FromInternalValue( | 398 return base::TimeDelta::FromInternalValue( |
395 simulated_clock_->NowTicks().ToInternalValue()); | 399 simulated_clock_->NowTicks().ToInternalValue()); |
396 } | 400 } |
397 | 401 |
402 void SetTouchAccessibilityAnchorPoint(const gfx::Point& location) { | |
403 touch_exploration_controller_->SetTouchAccessibilityAnchorPoint(location); | |
404 } | |
405 | |
398 std::unique_ptr<test::EventGenerator> generator_; | 406 std::unique_ptr<test::EventGenerator> generator_; |
399 ui::GestureDetector::Config gesture_detector_config_; | 407 ui::GestureDetector::Config gesture_detector_config_; |
400 // Owned by |generator_|. | 408 // Owned by |generator_|. |
401 base::SimpleTestTickClock* simulated_clock_; | 409 base::SimpleTestTickClock* simulated_clock_; |
402 MockTouchExplorationControllerDelegate delegate_; | 410 MockTouchExplorationControllerDelegate delegate_; |
403 | 411 |
404 private: | 412 private: |
405 EventCapturer event_capturer_; | 413 EventCapturer event_capturer_; |
406 std::unique_ptr<TouchExplorationControllerTestApi> | 414 std::unique_ptr<TouchExplorationControllerTestApi> |
407 touch_exploration_controller_; | 415 touch_exploration_controller_; |
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
700 | 708 |
701 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); | 709 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); |
702 ASSERT_EQ(2U, captured_events.size()); | 710 ASSERT_EQ(2U, captured_events.size()); |
703 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); | 711 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); |
704 EXPECT_EQ(tap_location, captured_events[0]->location()); | 712 EXPECT_EQ(tap_location, captured_events[0]->location()); |
705 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); | 713 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); |
706 EXPECT_EQ(tap_location, captured_events[1]->location()); | 714 EXPECT_EQ(tap_location, captured_events[1]->location()); |
707 EXPECT_TRUE(IsInNoFingersDownState()); | 715 EXPECT_TRUE(IsInNoFingersDownState()); |
708 } | 716 } |
709 | 717 |
718 // If an explicit anchor point is set during touch exploration, double-tapping | |
719 // should send a 'click' gesture rather than a simulated touch press and | |
720 // release. | |
721 TEST_F(TouchExplorationTest, DoubleTapWithExplicitAnchorPoint) { | |
722 SwitchTouchExplorationMode(true); | |
723 | |
724 // Tap at one location, and get a mouse move event. | |
725 gfx::Point tap_location(51, 52); | |
726 generator_->set_current_location(tap_location); | |
727 generator_->PressTouchId(1); | |
728 generator_->ReleaseTouchId(1); | |
729 AdvanceSimulatedTimePastTapDelay(); | |
730 | |
731 SetTouchAccessibilityAnchorPoint(tap_location); | |
732 | |
733 std::vector<ui::LocatedEvent*> events = | |
734 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); | |
735 ASSERT_EQ(1U, events.size()); | |
736 | |
737 EXPECT_EQ(tap_location, events[0]->location()); | |
738 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); | |
739 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); | |
740 ClearCapturedEvents(); | |
741 | |
742 // Now double-tap at a different location. This should result in | |
743 // a click gesture. | |
744 gfx::Point double_tap_location(33, 34); | |
745 generator_->set_current_location(double_tap_location); | |
746 generator_->PressTouch(); | |
747 generator_->ReleaseTouch(); | |
748 generator_->PressTouch(); | |
749 generator_->ReleaseTouch(); | |
750 | |
751 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); | |
752 ASSERT_EQ(0U, captured_events.size()); | |
753 EXPECT_TRUE(IsInNoFingersDownState()); | |
754 EXPECT_EQ(ui::AX_GESTURE_CLICK, delegate_.GetLastGesture()); | |
755 } | |
756 | |
710 // Double-tapping where the user holds their finger down for the second time | 757 // Double-tapping where the user holds their finger down for the second time |
711 // for a longer press should send a touch press and passthrough all further | 758 // for a longer press should send a touch press and passthrough all further |
712 // events from that finger. Other finger presses should be ignored. | 759 // events from that finger. Other finger presses should be ignored. |
713 TEST_F(TouchExplorationTest, DoubleTapPassthrough) { | 760 TEST_F(TouchExplorationTest, DoubleTapPassthrough) { |
714 SwitchTouchExplorationMode(true); | 761 SwitchTouchExplorationMode(true); |
715 | 762 |
716 // Tap at one location, and get a mouse move event. | 763 // Tap at one location, and get a mouse move event. |
717 gfx::Point tap_location(11, 12); | 764 gfx::Point tap_location(11, 12); |
718 generator_->set_current_location(tap_location); | 765 generator_->set_current_location(tap_location); |
719 generator_->PressTouch(); | 766 generator_->PressTouch(); |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
907 } | 954 } |
908 | 955 |
909 // Tapping and releasing with a second finger when in touch exploration mode | 956 // Tapping and releasing with a second finger when in touch exploration mode |
910 // should send a touch press and released to the location of the last | 957 // should send a touch press and released to the location of the last |
911 // successful touch exploration and return to touch explore. | 958 // successful touch exploration and return to touch explore. |
912 TEST_F(TouchExplorationTest, SplitTap) { | 959 TEST_F(TouchExplorationTest, SplitTap) { |
913 SwitchTouchExplorationMode(true); | 960 SwitchTouchExplorationMode(true); |
914 gfx::Point initial_touch_location(11, 12); | 961 gfx::Point initial_touch_location(11, 12); |
915 gfx::Point second_touch_location(33, 34); | 962 gfx::Point second_touch_location(33, 34); |
916 | 963 |
964 LOG(ERROR) << "*** SplitTap initial hold ***"; | |
oshima
2016/05/26 22:15:39
debug msg
dmazzoni
2016/05/26 22:53:48
Done.
| |
965 | |
917 // Tap and hold at one location, and get a mouse move event in touch explore. | 966 // Tap and hold at one location, and get a mouse move event in touch explore. |
918 EnterTouchExplorationModeAtLocation(initial_touch_location); | 967 EnterTouchExplorationModeAtLocation(initial_touch_location); |
919 std::vector<ui::LocatedEvent*> events = | 968 std::vector<ui::LocatedEvent*> events = |
920 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); | 969 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); |
921 ASSERT_EQ(1U, events.size()); | 970 ASSERT_EQ(1U, events.size()); |
922 | 971 |
923 EXPECT_EQ(initial_touch_location, events[0]->location()); | 972 EXPECT_EQ(initial_touch_location, events[0]->location()); |
924 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); | 973 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); |
925 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); | 974 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); |
926 ClearCapturedEvents(); | 975 ClearCapturedEvents(); |
927 EXPECT_TRUE(IsInTouchToMouseMode()); | 976 EXPECT_TRUE(IsInTouchToMouseMode()); |
928 | 977 |
978 LOG(ERROR) << "*** SplitTap press ***"; | |
oshima
2016/05/26 22:15:39
ditto
dmazzoni
2016/05/26 22:53:48
Done.
| |
979 | |
929 // Now tap and release at a different location. This should result in a | 980 // Now tap and release at a different location. This should result in a |
930 // single touch and release at the location of the first (held) tap, | 981 // single touch and release at the location of the first (held) tap, |
931 // not at the location of the second tap and release. | 982 // not at the location of the second tap and release. |
932 // After the release, there is still a finger in touch explore mode. | 983 // After the release, there is still a finger in touch explore mode. |
933 ui::TouchEvent split_tap_press( | 984 ui::TouchEvent split_tap_press( |
934 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); | 985 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); |
935 generator_->Dispatch(&split_tap_press); | 986 generator_->Dispatch(&split_tap_press); |
936 // To simulate the behavior of the real device, we manually disable | 987 // To simulate the behavior of the real device, we manually disable |
937 // mouse events. To not rely on manually setting the state, this is also | 988 // mouse events. To not rely on manually setting the state, this is also |
938 // tested in touch_exploration_controller_browsertest. | 989 // tested in touch_exploration_controller_browsertest. |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
998 EXPECT_TRUE(IsInNoFingersDownState()); | 1049 EXPECT_TRUE(IsInNoFingersDownState()); |
999 | 1050 |
1000 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); | 1051 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); |
1001 ASSERT_EQ(2U, captured_events.size()); | 1052 ASSERT_EQ(2U, captured_events.size()); |
1002 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); | 1053 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); |
1003 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); | 1054 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); |
1004 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); | 1055 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); |
1005 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); | 1056 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); |
1006 } | 1057 } |
1007 | 1058 |
1008 // When in touch exploration mode, making a long press with a second finger | |
1009 // should send a touch press and released to the location of the last | |
1010 // successful touch exploration. There should be a delay between the | |
1011 // touch and release events (right click). | |
1012 TEST_F(TouchExplorationTest, SplitTapLongPress) { | |
1013 SwitchTouchExplorationMode(true); | |
1014 gfx::Point initial_touch_location(11, 12); | |
1015 gfx::Point second_touch_location(33, 34); | |
1016 | |
1017 // Tap and hold at one location, and get a mouse move event in touch explore. | |
1018 EnterTouchExplorationModeAtLocation(initial_touch_location); | |
1019 std::vector<ui::LocatedEvent*> events = | |
1020 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); | |
1021 ASSERT_EQ(1U, events.size()); | |
1022 | |
1023 ClearCapturedEvents(); | |
1024 | |
1025 // Now tap, hold, and release at a different location. This should result | |
1026 // in a single touch and release (long press) at the location of the first | |
1027 // (held) tap, not at the location of the second tap and release. | |
1028 ui::TouchEvent split_tap_press( | |
1029 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); | |
1030 generator_->Dispatch(&split_tap_press); | |
1031 // To simulate the behavior of the real device, we manually disable | |
1032 // mouse events, like in the SplitTap test. | |
1033 cursor_client()->DisableMouseEvents(); | |
1034 EXPECT_FALSE(cursor_client()->IsMouseEventsEnabled()); | |
1035 EXPECT_FALSE(cursor_client()->IsCursorVisible()); | |
1036 EXPECT_FALSE(IsInGestureInProgressState()); | |
1037 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); | |
1038 // After the release, there is still a finger in touch exploration, and | |
1039 // mouse events should be enabled again. | |
1040 ui::TouchEvent split_tap_release( | |
1041 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); | |
1042 generator_->Dispatch(&split_tap_release); | |
1043 EXPECT_FALSE(IsInNoFingersDownState()); | |
1044 EXPECT_TRUE(IsInTouchToMouseMode()); | |
1045 | |
1046 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); | |
1047 ASSERT_EQ(2U, captured_events.size()); | |
1048 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); | |
1049 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); | |
1050 base::TimeDelta pressed_time = captured_events[0]->time_stamp(); | |
1051 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); | |
1052 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); | |
1053 base::TimeDelta released_time = captured_events[1]->time_stamp(); | |
1054 EXPECT_EQ(gesture_detector_config_.longpress_timeout, | |
1055 released_time - pressed_time); | |
1056 } | |
1057 | |
1058 // If split tap is started but the touch explore finger is released first, | |
1059 // there should still be a touch press and release sent to the location of | |
1060 // the last successful touch exploration. If the remaining finger is held | |
1061 // as a longpress, there should be a delay between the sent touch and release | |
1062 // events (right click).All fingers should be released after the click | |
1063 // goes through. | |
1064 TEST_F(TouchExplorationTest, SplitTapReleaseLongPress) { | |
1065 SwitchTouchExplorationMode(true); | |
1066 gfx::Point initial_touch_location(11, 12); | |
1067 gfx::Point second_touch_location(33, 34); | |
1068 | |
1069 // Tap and hold at one location, and get a mouse move event in touch explore. | |
1070 EnterTouchExplorationModeAtLocation(initial_touch_location); | |
1071 std::vector<ui::LocatedEvent*> events = | |
1072 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); | |
1073 ASSERT_EQ(1U, events.size()); | |
1074 ClearCapturedEvents(); | |
1075 | |
1076 // Now tap at a different location. Release at the first location, | |
1077 // then release at the second. This should result in a | |
1078 // single touch and release at the location of the first (held) tap, | |
1079 // not at the location of the second tap and release. | |
1080 // After the release, TouchToMouseMode should still be on. | |
1081 ui::TouchEvent split_tap_press( | |
1082 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); | |
1083 generator_->Dispatch(&split_tap_press); | |
1084 ui::TouchEvent touch_explore_release( | |
1085 ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now()); | |
1086 generator_->Dispatch(&touch_explore_release); | |
1087 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); | |
1088 ui::TouchEvent split_tap_release( | |
1089 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); | |
1090 generator_->Dispatch(&split_tap_release); | |
1091 EXPECT_TRUE(IsInTouchToMouseMode()); | |
1092 | |
1093 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); | |
1094 ASSERT_EQ(2U, captured_events.size()); | |
1095 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); | |
1096 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); | |
1097 base::TimeDelta pressed_time = captured_events[0]->time_stamp(); | |
1098 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); | |
1099 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); | |
1100 base::TimeDelta released_time = captured_events[1]->time_stamp(); | |
1101 EXPECT_EQ(gesture_detector_config_.longpress_timeout, | |
1102 released_time - pressed_time); | |
1103 } | |
1104 | |
1105 TEST_F(TouchExplorationTest, SplitTapMultiFinger) { | 1059 TEST_F(TouchExplorationTest, SplitTapMultiFinger) { |
1106 SwitchTouchExplorationMode(true); | 1060 SwitchTouchExplorationMode(true); |
1107 gfx::Point initial_touch_location(11, 12); | 1061 gfx::Point initial_touch_location(11, 12); |
1108 gfx::Point second_touch_location(33, 34); | 1062 gfx::Point second_touch_location(33, 34); |
1109 gfx::Point third_touch_location(16, 17); | 1063 gfx::Point third_touch_location(16, 17); |
1110 | 1064 |
1111 // Tap and hold at one location, and get a mouse move event in touch explore. | 1065 // Tap and hold at one location, and get a mouse move event in touch explore. |
1112 EnterTouchExplorationModeAtLocation(initial_touch_location); | 1066 EnterTouchExplorationModeAtLocation(initial_touch_location); |
1113 | 1067 |
1114 std::vector<ui::LocatedEvent*> events = | 1068 std::vector<ui::LocatedEvent*> events = |
1115 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); | 1069 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED); |
1116 ASSERT_EQ(1U, events.size()); | 1070 ASSERT_EQ(1U, events.size()); |
1117 | 1071 |
1118 EXPECT_EQ(initial_touch_location, events[0]->location()); | 1072 EXPECT_EQ(initial_touch_location, events[0]->location()); |
1119 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); | 1073 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); |
1120 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); | 1074 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); |
1121 ClearCapturedEvents(); | 1075 ClearCapturedEvents(); |
1122 | 1076 |
1123 // Now tap at a different location and hold for long press. | 1077 // Now tap at a different location |
1124 ui::TouchEvent split_tap_press( | 1078 ui::TouchEvent split_tap_press( |
1125 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); | 1079 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); |
1126 generator_->Dispatch(&split_tap_press); | 1080 generator_->Dispatch(&split_tap_press); |
1127 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); | 1081 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); |
1128 | 1082 |
1129 // Placing a third finger on the screen should cancel the initial press and | 1083 // Placing a third finger on the screen should cancel the split tap and |
1130 // enter the wait state. | 1084 // enter the wait state. |
1131 ui::TouchEvent third_press( | 1085 ui::TouchEvent third_press( |
1132 ui::ET_TOUCH_PRESSED, third_touch_location, 2, Now()); | 1086 ui::ET_TOUCH_PRESSED, third_touch_location, 2, Now()); |
1133 generator_->Dispatch(&third_press); | 1087 generator_->Dispatch(&third_press); |
1134 | 1088 |
1135 // When all three fingers are released, the only events captured should be a | 1089 // When all three fingers are released, no events should be captured. |
1136 // press and touch cancel. All fingers should then be up. | 1090 // All fingers should then be up. |
1137 ui::TouchEvent touch_explore_release( | 1091 ui::TouchEvent touch_explore_release( |
1138 ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now()); | 1092 ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now()); |
1139 generator_->Dispatch(&touch_explore_release); | 1093 generator_->Dispatch(&touch_explore_release); |
1140 ui::TouchEvent split_tap_release( | 1094 ui::TouchEvent split_tap_release( |
1141 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); | 1095 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); |
1142 generator_->Dispatch(&split_tap_release); | 1096 generator_->Dispatch(&split_tap_release); |
1143 ui::TouchEvent third_tap_release( | 1097 ui::TouchEvent third_tap_release( |
1144 ui::ET_TOUCH_RELEASED, third_touch_location, 2, Now()); | 1098 ui::ET_TOUCH_RELEASED, third_touch_location, 2, Now()); |
1145 generator_->Dispatch(&third_tap_release); | 1099 generator_->Dispatch(&third_tap_release); |
1146 | 1100 |
1147 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); | 1101 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); |
1148 ASSERT_EQ(2U, captured_events.size()); | 1102 ASSERT_EQ(0U, captured_events.size()); |
1149 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); | |
1150 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); | |
1151 EXPECT_EQ(ui::ET_TOUCH_CANCELLED, captured_events[1]->type()); | |
1152 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); | |
1153 EXPECT_TRUE(IsInNoFingersDownState()); | 1103 EXPECT_TRUE(IsInNoFingersDownState()); |
1154 } | 1104 } |
1155 | 1105 |
1156 | |
1157 TEST_F(TouchExplorationTest, SplitTapLeaveSlop) { | 1106 TEST_F(TouchExplorationTest, SplitTapLeaveSlop) { |
1158 SwitchTouchExplorationMode(true); | 1107 SwitchTouchExplorationMode(true); |
1159 gfx::Point first_touch_location(11, 12); | 1108 gfx::Point first_touch_location(11, 12); |
1160 gfx::Point second_touch_location(33, 34); | 1109 gfx::Point second_touch_location(33, 34); |
1161 gfx::Point first_move_location( | 1110 gfx::Point first_move_location( |
1162 first_touch_location.x() + gesture_detector_config_.touch_slop * 3 + 1, | 1111 first_touch_location.x() + gesture_detector_config_.touch_slop * 3 + 1, |
1163 first_touch_location.y()); | 1112 first_touch_location.y()); |
1164 gfx::Point second_move_location( | 1113 gfx::Point second_move_location( |
1165 second_touch_location.x() + gesture_detector_config_.touch_slop * 3 + 1, | 1114 second_touch_location.x() + gesture_detector_config_.touch_slop * 3 + 1, |
1166 second_touch_location.y()); | 1115 second_touch_location.y()); |
1167 | 1116 |
1168 // Tap and hold at one location, and get a mouse move event in touch explore. | 1117 // Tap and hold at one location, and get a mouse move event in touch explore. |
1169 EnterTouchExplorationModeAtLocation(first_touch_location); | 1118 EnterTouchExplorationModeAtLocation(first_touch_location); |
1170 ClearCapturedEvents(); | 1119 ClearCapturedEvents(); |
1171 | 1120 |
1172 // Now tap at a different location for split tap. | 1121 // Now tap at a different location for split tap. |
1173 ui::TouchEvent split_tap_press( | 1122 ui::TouchEvent split_tap_press( |
1174 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); | 1123 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); |
1175 generator_->Dispatch(&split_tap_press); | 1124 generator_->Dispatch(&split_tap_press); |
1176 | 1125 |
1177 // Move the first finger out of slop and release both fingers. The split | 1126 // Move the first finger out of slop and release both fingers. The split |
1178 // tap should have been cancelled, so a touch press and touch cancel event | 1127 // tap should have been cancelled. |
1179 // should go through at the last touch exploration location (the first press). | |
1180 ui::TouchEvent first_touch_move( | 1128 ui::TouchEvent first_touch_move( |
1181 ui::ET_TOUCH_MOVED, first_move_location, 0, Now()); | 1129 ui::ET_TOUCH_MOVED, first_move_location, 0, Now()); |
1182 generator_->Dispatch(&first_touch_move); | 1130 generator_->Dispatch(&first_touch_move); |
1183 ui::TouchEvent first_touch_release( | 1131 ui::TouchEvent first_touch_release( |
1184 ui::ET_TOUCH_RELEASED, first_move_location, 0, Now()); | 1132 ui::ET_TOUCH_RELEASED, first_move_location, 0, Now()); |
1185 generator_->Dispatch(&first_touch_release); | 1133 generator_->Dispatch(&first_touch_release); |
1134 LOG(ERROR) << "*** FINAL RELEASE ***"; | |
1186 ui::TouchEvent second_touch_release( | 1135 ui::TouchEvent second_touch_release( |
1187 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); | 1136 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); |
1188 generator_->Dispatch(&second_touch_release); | 1137 generator_->Dispatch(&second_touch_release); |
1189 | 1138 |
1190 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); | 1139 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents(); |
1191 ASSERT_EQ(2U, captured_events.size()); | 1140 ASSERT_EQ(0U, captured_events.size()); |
1192 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); | |
1193 EXPECT_EQ(first_touch_location, captured_events[0]->location()); | |
1194 EXPECT_EQ(ui::ET_TOUCH_CANCELLED, captured_events[1]->type()); | |
1195 EXPECT_EQ(first_touch_location, captured_events[1]->location()); | |
1196 EXPECT_TRUE(IsInNoFingersDownState()); | 1141 EXPECT_TRUE(IsInNoFingersDownState()); |
1197 | 1142 |
1198 // Now do the same, but moving the split tap finger out of slop | 1143 // Now do the same, but moving the split tap finger out of slop |
1199 EnterTouchExplorationModeAtLocation(first_touch_location); | 1144 EnterTouchExplorationModeAtLocation(first_touch_location); |
1200 ClearCapturedEvents(); | 1145 ClearCapturedEvents(); |
1201 ui::TouchEvent split_tap_press2( | 1146 ui::TouchEvent split_tap_press2( |
1202 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); | 1147 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); |
1203 generator_->Dispatch(&split_tap_press2); | 1148 generator_->Dispatch(&split_tap_press2); |
1204 | 1149 |
1205 // Move the second finger out of slop and release both fingers. The split | 1150 // Move the second finger out of slop and release both fingers. The split |
1206 // tap should have been cancelled, so a touch press and touch cancel event | 1151 // tap should have been cancelled. |
1207 // should go through at the last touch exploration location (the first press). | |
1208 ui::TouchEvent second_touch_move2( | 1152 ui::TouchEvent second_touch_move2( |
1209 ui::ET_TOUCH_MOVED, second_move_location, 1, Now()); | 1153 ui::ET_TOUCH_MOVED, second_move_location, 1, Now()); |
1210 generator_->Dispatch(&second_touch_move2); | 1154 generator_->Dispatch(&second_touch_move2); |
1211 ui::TouchEvent first_touch_release2( | 1155 ui::TouchEvent first_touch_release2( |
1212 ui::ET_TOUCH_RELEASED, first_touch_location, 0, Now()); | 1156 ui::ET_TOUCH_RELEASED, first_touch_location, 0, Now()); |
1213 generator_->Dispatch(&first_touch_release2); | 1157 generator_->Dispatch(&first_touch_release2); |
1214 ui::TouchEvent second_touch_release2( | 1158 ui::TouchEvent second_touch_release2( |
1215 ui::ET_TOUCH_RELEASED, second_move_location, 1, Now()); | 1159 ui::ET_TOUCH_RELEASED, second_move_location, 1, Now()); |
1216 generator_->Dispatch(&second_touch_release2); | 1160 generator_->Dispatch(&second_touch_release2); |
1217 | 1161 |
1218 captured_events = GetCapturedLocatedEvents(); | 1162 captured_events = GetCapturedLocatedEvents(); |
1219 ASSERT_EQ(2U, captured_events.size()); | 1163 ASSERT_EQ(0U, captured_events.size()); |
1220 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); | |
1221 EXPECT_EQ(first_touch_location, captured_events[0]->location()); | |
1222 EXPECT_EQ(ui::ET_TOUCH_CANCELLED, captured_events[1]->type()); | |
1223 EXPECT_EQ(first_touch_location, captured_events[1]->location()); | |
1224 EXPECT_TRUE(IsInNoFingersDownState()); | 1164 EXPECT_TRUE(IsInNoFingersDownState()); |
1225 } | 1165 } |
1226 | 1166 |
1227 // Finger must have moved more than slop, faster than the minimum swipe | 1167 // Finger must have moved more than slop, faster than the minimum swipe |
1228 // velocity, and before the tap timer fires in order to enter | 1168 // velocity, and before the tap timer fires in order to enter |
1229 // GestureInProgress state. Otherwise, if the tap timer fires before the a | 1169 // GestureInProgress state. Otherwise, if the tap timer fires before the a |
1230 // gesture is completed, enter touch exploration. | 1170 // gesture is completed, enter touch exploration. |
1231 TEST_F(TouchExplorationTest, EnterGestureInProgressState) { | 1171 TEST_F(TouchExplorationTest, EnterGestureInProgressState) { |
1232 SwitchTouchExplorationMode(true); | 1172 SwitchTouchExplorationMode(true); |
1233 EXPECT_FALSE(IsInTouchToMouseMode()); | 1173 EXPECT_FALSE(IsInTouchToMouseMode()); |
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1890 generator_->PressTouch(); | 1830 generator_->PressTouch(); |
1891 generator_->MoveTouch(initial_press); | 1831 generator_->MoveTouch(initial_press); |
1892 generator_->MoveTouch(*point); | 1832 generator_->MoveTouch(*point); |
1893 generator_->ReleaseTouch(); | 1833 generator_->ReleaseTouch(); |
1894 ASSERT_EQ(1U, delegate_.NumExitScreenSounds()); | 1834 ASSERT_EQ(1U, delegate_.NumExitScreenSounds()); |
1895 delegate_.ResetCountersToZero(); | 1835 delegate_.ResetCountersToZero(); |
1896 } | 1836 } |
1897 } | 1837 } |
1898 | 1838 |
1899 } // namespace ui | 1839 } // namespace ui |
OLD | NEW |