| 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 <string> | 5 #include <string> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "content/browser/renderer_host/input/gesture_text_selector.h" | 10 #include "content/browser/renderer_host/input/gesture_text_selector.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 protected: | 59 protected: |
| 60 scoped_ptr<GestureTextSelector> selector_; | 60 scoped_ptr<GestureTextSelector> selector_; |
| 61 std::vector<std::string> event_log_; | 61 std::vector<std::string> event_log_; |
| 62 }; | 62 }; |
| 63 | 63 |
| 64 TEST_F(GestureTextSelectorTest, ShouldStartTextSelection) { | 64 TEST_F(GestureTextSelectorTest, ShouldStartTextSelection) { |
| 65 base::TimeTicks event_time = base::TimeTicks::Now(); | 65 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 66 { // Touched with a finger. | 66 { // Touched with a finger. |
| 67 MockMotionEvent e(MotionEvent::ACTION_DOWN, event_time, 50.0f, 50.0f); | 67 MockMotionEvent e(MotionEvent::ACTION_DOWN, event_time, 50.0f, 50.0f); |
| 68 e.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); | 68 e.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); |
| 69 e.SetButtonState(0); | 69 e.set_button_state(0); |
| 70 EXPECT_FALSE(selector_->ShouldStartTextSelection(e)); | 70 EXPECT_FALSE(selector_->ShouldStartTextSelection(e)); |
| 71 } | 71 } |
| 72 | 72 |
| 73 { // Touched with a stylus, but no button pressed. | 73 { // Touched with a stylus, but no button pressed. |
| 74 MockMotionEvent e(MotionEvent::ACTION_DOWN, event_time, 50.0f, 50.0f); | 74 MockMotionEvent e(MotionEvent::ACTION_DOWN, event_time, 50.0f, 50.0f); |
| 75 e.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); | 75 e.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); |
| 76 e.SetButtonState(0); | 76 e.set_button_state(0); |
| 77 EXPECT_FALSE(selector_->ShouldStartTextSelection(e)); | 77 EXPECT_FALSE(selector_->ShouldStartTextSelection(e)); |
| 78 } | 78 } |
| 79 | 79 |
| 80 { // Touched with a stylus, with first button (BUTTON_SECONDARY) pressed. | 80 { // Touched with a stylus, with first button (BUTTON_SECONDARY) pressed. |
| 81 MockMotionEvent e(MotionEvent::ACTION_DOWN, event_time, 50.0f, 50.0f); | 81 MockMotionEvent e(MotionEvent::ACTION_DOWN, event_time, 50.0f, 50.0f); |
| 82 e.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); | 82 e.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); |
| 83 e.SetButtonState(MotionEvent::BUTTON_SECONDARY); | 83 e.set_button_state(MotionEvent::BUTTON_SECONDARY); |
| 84 EXPECT_TRUE(selector_->ShouldStartTextSelection(e)); | 84 EXPECT_TRUE(selector_->ShouldStartTextSelection(e)); |
| 85 } | 85 } |
| 86 | 86 |
| 87 { // Touched with a stylus, with two buttons pressed. | 87 { // Touched with a stylus, with two buttons pressed. |
| 88 MockMotionEvent e(MotionEvent::ACTION_DOWN, event_time, 50.0f, 50.0f); | 88 MockMotionEvent e(MotionEvent::ACTION_DOWN, event_time, 50.0f, 50.0f); |
| 89 e.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); | 89 e.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); |
| 90 e.SetButtonState( | 90 e.set_button_state( |
| 91 MotionEvent::BUTTON_SECONDARY | MotionEvent::BUTTON_TERTIARY); | 91 MotionEvent::BUTTON_SECONDARY | MotionEvent::BUTTON_TERTIARY); |
| 92 EXPECT_FALSE(selector_->ShouldStartTextSelection(e)); | 92 EXPECT_FALSE(selector_->ShouldStartTextSelection(e)); |
| 93 } | 93 } |
| 94 } | 94 } |
| 95 | 95 |
| 96 TEST_F(GestureTextSelectorTest, FingerTouch) { | 96 TEST_F(GestureTextSelectorTest, FingerTouch) { |
| 97 base::TimeTicks event_time = base::TimeTicks::Now(); | 97 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 98 const float x = 50.0f; | 98 const float x = 50.0f; |
| 99 const float y = 30.0f; | 99 const float y = 30.0f; |
| 100 // 1. Touched with a finger: ignored | 100 // 1. Touched with a finger: ignored |
| 101 MockMotionEvent finger(MotionEvent::ACTION_DOWN, event_time, x, y); | 101 MockMotionEvent finger(MotionEvent::ACTION_DOWN, event_time, x, y); |
| 102 finger.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); | 102 finger.SetToolType(0, MotionEvent::TOOL_TYPE_FINGER); |
| 103 EXPECT_FALSE(selector_->OnTouchEvent(finger)); | 103 EXPECT_FALSE(selector_->OnTouchEvent(finger)); |
| 104 // We do not consume finger events. | 104 // We do not consume finger events. |
| 105 EXPECT_TRUE(event_log_.empty()); | 105 EXPECT_TRUE(event_log_.empty()); |
| 106 } | 106 } |
| 107 | 107 |
| 108 TEST_F(GestureTextSelectorTest, PenDragging) { | 108 TEST_F(GestureTextSelectorTest, PenDragging) { |
| 109 base::TimeTicks event_time = base::TimeTicks::Now(); | 109 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 110 const float x1 = 50.0f; | 110 const float x1 = 50.0f; |
| 111 const float y1 = 30.0f; | 111 const float y1 = 30.0f; |
| 112 const float x2 = 100.0f; | 112 const float x2 = 100.0f; |
| 113 const float y2 = 90.0f; | 113 const float y2 = 90.0f; |
| 114 // 1. ACTION_DOWN with stylus + button | 114 // 1. ACTION_DOWN with stylus + button |
| 115 event_time += base::TimeDelta::FromMilliseconds(10); | 115 event_time += base::TimeDelta::FromMilliseconds(10); |
| 116 MockMotionEvent action_down(MotionEvent::ACTION_DOWN, event_time, x1, y1); | 116 MockMotionEvent action_down(MotionEvent::ACTION_DOWN, event_time, x1, y1); |
| 117 action_down.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); | 117 action_down.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); |
| 118 action_down.SetButtonState(MotionEvent::BUTTON_SECONDARY); | 118 action_down.set_button_state(MotionEvent::BUTTON_SECONDARY); |
| 119 EXPECT_TRUE(selector_->OnTouchEvent(action_down)); | 119 EXPECT_TRUE(selector_->OnTouchEvent(action_down)); |
| 120 EXPECT_TRUE(event_log_.empty()); | 120 EXPECT_TRUE(event_log_.empty()); |
| 121 | 121 |
| 122 // 2. ACTION_MOVE | 122 // 2. ACTION_MOVE |
| 123 event_time += base::TimeDelta::FromMilliseconds(10); | 123 event_time += base::TimeDelta::FromMilliseconds(10); |
| 124 MockMotionEvent action_move(MotionEvent::ACTION_MOVE, event_time, x2, y2); | 124 MockMotionEvent action_move(MotionEvent::ACTION_MOVE, event_time, x2, y2); |
| 125 action_move.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); | 125 action_move.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); |
| 126 action_move.SetButtonState(MotionEvent::BUTTON_SECONDARY); | 126 action_move.set_button_state(MotionEvent::BUTTON_SECONDARY); |
| 127 EXPECT_TRUE(selector_->OnTouchEvent(action_move)); | 127 EXPECT_TRUE(selector_->OnTouchEvent(action_move)); |
| 128 EXPECT_TRUE(event_log_.empty()); | 128 EXPECT_TRUE(event_log_.empty()); |
| 129 | 129 |
| 130 // 3. DOUBLE TAP | 130 // 3. DOUBLE TAP |
| 131 // Suppress most gesture events when in text selection mode. | 131 // Suppress most gesture events when in text selection mode. |
| 132 event_time += base::TimeDelta::FromMilliseconds(10); | 132 event_time += base::TimeDelta::FromMilliseconds(10); |
| 133 const GestureEventData double_tap( | 133 const GestureEventData double_tap( |
| 134 GestureEventDetails(ui::ET_GESTURE_DOUBLE_TAP, 0, 0), 0, event_time, | 134 GestureEventDetails(ui::ET_GESTURE_DOUBLE_TAP, 0, 0), 0, event_time, |
| 135 x2, y2, x2, y2, 1, gfx::RectF(0, 0, 0, 0)); | 135 x2, y2, x2, y2, 1, gfx::RectF(0, 0, 0, 0)); |
| 136 EXPECT_TRUE(selector_->OnGestureEvent(double_tap)); | 136 EXPECT_TRUE(selector_->OnGestureEvent(double_tap)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 151 GestureEventDetails(ui::ET_GESTURE_SCROLL_UPDATE, 0, 0), 0, event_time, | 151 GestureEventDetails(ui::ET_GESTURE_SCROLL_UPDATE, 0, 0), 0, event_time, |
| 152 x2, y2, x2, y2, 1, gfx::RectF(0, 0, 0, 0)); | 152 x2, y2, x2, y2, 1, gfx::RectF(0, 0, 0, 0)); |
| 153 EXPECT_TRUE(selector_->OnGestureEvent(scroll_update)); | 153 EXPECT_TRUE(selector_->OnGestureEvent(scroll_update)); |
| 154 EXPECT_EQ(3u, event_log_.size()); // Unselect, Show, SelectRange | 154 EXPECT_EQ(3u, event_log_.size()); // Unselect, Show, SelectRange |
| 155 EXPECT_STREQ("SelectRange", event_log_.back().c_str()); | 155 EXPECT_STREQ("SelectRange", event_log_.back().c_str()); |
| 156 | 156 |
| 157 // 6. ACTION_UP | 157 // 6. ACTION_UP |
| 158 event_time += base::TimeDelta::FromMilliseconds(10); | 158 event_time += base::TimeDelta::FromMilliseconds(10); |
| 159 MockMotionEvent action_up(MotionEvent::ACTION_UP, event_time, x2, y2); | 159 MockMotionEvent action_up(MotionEvent::ACTION_UP, event_time, x2, y2); |
| 160 action_up.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); | 160 action_up.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); |
| 161 action_up.SetButtonState(0); | 161 action_up.set_button_state(0); |
| 162 EXPECT_TRUE(selector_->OnTouchEvent(action_up)); | 162 EXPECT_TRUE(selector_->OnTouchEvent(action_up)); |
| 163 EXPECT_EQ(3u, event_log_.size()); // NO CHANGE | 163 EXPECT_EQ(3u, event_log_.size()); // NO CHANGE |
| 164 | 164 |
| 165 // 7. ET_GESTURE_SCROLL_END | 165 // 7. ET_GESTURE_SCROLL_END |
| 166 event_time += base::TimeDelta::FromMilliseconds(10); | 166 event_time += base::TimeDelta::FromMilliseconds(10); |
| 167 const GestureEventData scroll_end( | 167 const GestureEventData scroll_end( |
| 168 GestureEventDetails(ui::ET_GESTURE_SCROLL_END, 0, 0), 0, event_time, | 168 GestureEventDetails(ui::ET_GESTURE_SCROLL_END, 0, 0), 0, event_time, |
| 169 x2, y2, x2, y2, 1, gfx::RectF(0, 0, 0, 0)); | 169 x2, y2, x2, y2, 1, gfx::RectF(0, 0, 0, 0)); |
| 170 EXPECT_TRUE(selector_->OnGestureEvent(scroll_end)); | 170 EXPECT_TRUE(selector_->OnGestureEvent(scroll_end)); |
| 171 EXPECT_EQ(3u, event_log_.size()); // NO CHANGE | 171 EXPECT_EQ(3u, event_log_.size()); // NO CHANGE |
| 172 } | 172 } |
| 173 | 173 |
| 174 TEST_F(GestureTextSelectorTest, TapToSelectWord) { | 174 TEST_F(GestureTextSelectorTest, TapToSelectWord) { |
| 175 base::TimeTicks event_time = base::TimeTicks::Now(); | 175 base::TimeTicks event_time = base::TimeTicks::Now(); |
| 176 const float x1 = 50.0f; | 176 const float x1 = 50.0f; |
| 177 const float y1 = 30.0f; | 177 const float y1 = 30.0f; |
| 178 const float x2 = 51.0f; | 178 const float x2 = 51.0f; |
| 179 const float y2 = 31.0f; | 179 const float y2 = 31.0f; |
| 180 // 1. ACTION_DOWN with stylus + button | 180 // 1. ACTION_DOWN with stylus + button |
| 181 event_time += base::TimeDelta::FromMilliseconds(10); | 181 event_time += base::TimeDelta::FromMilliseconds(10); |
| 182 MockMotionEvent action_down(MotionEvent::ACTION_DOWN, event_time, x1, y1); | 182 MockMotionEvent action_down(MotionEvent::ACTION_DOWN, event_time, x1, y1); |
| 183 action_down.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); | 183 action_down.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); |
| 184 action_down.SetButtonState(MotionEvent::BUTTON_SECONDARY); | 184 action_down.set_button_state(MotionEvent::BUTTON_SECONDARY); |
| 185 EXPECT_TRUE(selector_->OnTouchEvent(action_down)); | 185 EXPECT_TRUE(selector_->OnTouchEvent(action_down)); |
| 186 EXPECT_TRUE(event_log_.empty()); | 186 EXPECT_TRUE(event_log_.empty()); |
| 187 | 187 |
| 188 // 5. TAP_DOWN | 188 // 5. TAP_DOWN |
| 189 event_time += base::TimeDelta::FromMilliseconds(10); | 189 event_time += base::TimeDelta::FromMilliseconds(10); |
| 190 const GestureEventData tap_down( | 190 const GestureEventData tap_down( |
| 191 GestureEventDetails(ui::ET_GESTURE_TAP_DOWN, 0, 0), 0, event_time, | 191 GestureEventDetails(ui::ET_GESTURE_TAP_DOWN, 0, 0), 0, event_time, |
| 192 x2, y2, x2, y2, 1, gfx::RectF(0, 0, 0, 0)); | 192 x2, y2, x2, y2, 1, gfx::RectF(0, 0, 0, 0)); |
| 193 EXPECT_TRUE(selector_->OnGestureEvent(tap_down)); | 193 EXPECT_TRUE(selector_->OnGestureEvent(tap_down)); |
| 194 EXPECT_TRUE(event_log_.empty()); | 194 EXPECT_TRUE(event_log_.empty()); |
| 195 | 195 |
| 196 // 2. ACTION_MOVE | 196 // 2. ACTION_MOVE |
| 197 event_time += base::TimeDelta::FromMilliseconds(10); | 197 event_time += base::TimeDelta::FromMilliseconds(10); |
| 198 MockMotionEvent action_move(MotionEvent::ACTION_MOVE, event_time, x2, y2); | 198 MockMotionEvent action_move(MotionEvent::ACTION_MOVE, event_time, x2, y2); |
| 199 action_move.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); | 199 action_move.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); |
| 200 action_move.SetButtonState(MotionEvent::BUTTON_SECONDARY); | 200 action_move.set_button_state(MotionEvent::BUTTON_SECONDARY); |
| 201 EXPECT_TRUE(selector_->OnTouchEvent(action_move)); | 201 EXPECT_TRUE(selector_->OnTouchEvent(action_move)); |
| 202 EXPECT_TRUE(event_log_.empty()); | 202 EXPECT_TRUE(event_log_.empty()); |
| 203 | 203 |
| 204 // 3. ACTION_UP | 204 // 3. ACTION_UP |
| 205 event_time += base::TimeDelta::FromMilliseconds(10); | 205 event_time += base::TimeDelta::FromMilliseconds(10); |
| 206 MockMotionEvent action_up(MotionEvent::ACTION_UP, event_time, x2, y2); | 206 MockMotionEvent action_up(MotionEvent::ACTION_UP, event_time, x2, y2); |
| 207 action_up.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); | 207 action_up.SetToolType(0, MotionEvent::TOOL_TYPE_STYLUS); |
| 208 action_up.SetButtonState(0); | 208 action_up.set_button_state(0); |
| 209 EXPECT_TRUE(selector_->OnTouchEvent(action_up)); | 209 EXPECT_TRUE(selector_->OnTouchEvent(action_up)); |
| 210 EXPECT_TRUE(event_log_.empty()); | 210 EXPECT_TRUE(event_log_.empty()); |
| 211 | 211 |
| 212 // 4. TAP | 212 // 4. TAP |
| 213 event_time += base::TimeDelta::FromMilliseconds(10); | 213 event_time += base::TimeDelta::FromMilliseconds(10); |
| 214 const GestureEventData tap( | 214 const GestureEventData tap( |
| 215 GestureEventDetails(ui::ET_GESTURE_TAP, 0, 0), 0, event_time, | 215 GestureEventDetails(ui::ET_GESTURE_TAP, 0, 0), 0, event_time, |
| 216 x1, y1, x1, y1, 1, gfx::RectF(0, 0, 0, 0)); | 216 x1, y1, x1, y1, 1, gfx::RectF(0, 0, 0, 0)); |
| 217 EXPECT_TRUE(selector_->OnGestureEvent(tap)); | 217 EXPECT_TRUE(selector_->OnGestureEvent(tap)); |
| 218 EXPECT_EQ(1u, event_log_.size()); // Unselect, Show | 218 EXPECT_EQ(1u, event_log_.size()); // Unselect, Show |
| 219 EXPECT_STREQ("LongPress", event_log_.back().c_str()); | 219 EXPECT_STREQ("LongPress", event_log_.back().c_str()); |
| 220 } | 220 } |
| 221 | 221 |
| 222 } // namespace content | 222 } // namespace content |
| OLD | NEW |