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/views/controls/textfield/textfield.h" | 5 #include "ui/views/controls/textfield/textfield.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <set> | 10 #include <set> |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
249 | 249 |
250 bool MockInputMethod::HasComposition() { | 250 bool MockInputMethod::HasComposition() { |
251 return composition_.text.length() || result_text_.length(); | 251 return composition_.text.length() || result_text_.length(); |
252 } | 252 } |
253 | 253 |
254 void MockInputMethod::ClearComposition() { | 254 void MockInputMethod::ClearComposition() { |
255 composition_.Clear(); | 255 composition_.Clear(); |
256 result_text_.clear(); | 256 result_text_.clear(); |
257 } | 257 } |
258 | 258 |
259 // A Textfield wrapper to intercept OnKey[Pressed|Released]() ressults. | |
260 class TestTextfield : public views::Textfield { | |
261 public: | |
262 TestTextfield() | |
263 : Textfield(), | |
264 key_handled_(false), | |
265 key_received_(false), | |
266 weak_ptr_factory_(this) {} | |
267 | |
268 bool OnKeyPressed(const ui::KeyEvent& e) override { | |
269 key_received_ = true; | |
270 | |
271 // Since OnKeyPressed() might destroy |this|, get a weak pointer and | |
272 // verify it isn't null before writing the bool value to key_handled_. | |
273 base::WeakPtr<TestTextfield> textfield(weak_ptr_factory_.GetWeakPtr()); | |
274 bool key = views::Textfield::OnKeyPressed(e); | |
275 | |
276 if (!textfield) | |
277 return key; | |
278 | |
279 key_handled_ = key; | |
280 | |
281 return key_handled_; | |
282 } | |
283 | |
284 bool OnKeyReleased(const ui::KeyEvent& e) override { | |
285 key_received_ = true; | |
286 key_handled_ = views::Textfield::OnKeyReleased(e); | |
287 EXPECT_FALSE(key_handled_); // Textfield doesn't override OnKeyReleased. | |
288 return key_handled_; | |
289 } | |
290 | |
291 // ui::TextInputClient overrides: | |
292 void InsertChar(const ui::KeyEvent& e) override { | |
293 views::Textfield::InsertChar(e); | |
294 #if defined(OS_MACOSX) | |
295 // On Mac, characters are inserted directly rather than attempting to get a | |
296 // unicode character from the ui::KeyEvent (which isn't always possible). | |
297 key_received_ = true; | |
298 #endif | |
299 } | |
300 | |
301 bool key_handled() const { return key_handled_; } | |
302 bool key_received() const { return key_received_; } | |
303 | |
304 void clear() { key_received_ = key_handled_ = false; } | |
305 | |
306 private: | |
307 bool key_handled_; | |
308 bool key_received_; | |
309 | |
310 base::WeakPtrFactory<TestTextfield> weak_ptr_factory_; | |
311 | |
312 DISALLOW_COPY_AND_ASSIGN(TestTextfield); | |
313 }; | |
314 | |
315 // Convenience to make constructing a GestureEvent simpler. | 259 // Convenience to make constructing a GestureEvent simpler. |
316 class GestureEventForTest : public ui::GestureEvent { | 260 class GestureEventForTest : public ui::GestureEvent { |
317 public: | 261 public: |
318 GestureEventForTest(int x, int y, ui::GestureEventDetails details) | 262 GestureEventForTest(int x, int y, ui::GestureEventDetails details) |
319 : GestureEvent(x, y, 0, base::TimeTicks(), details) {} | 263 : GestureEvent(x, y, 0, base::TimeTicks(), details) {} |
320 | 264 |
321 private: | 265 private: |
322 DISALLOW_COPY_AND_ASSIGN(GestureEventForTest); | 266 DISALLOW_COPY_AND_ASSIGN(GestureEventForTest); |
323 }; | 267 }; |
324 | 268 |
(...skipping 28 matching lines...) Expand all Loading... | |
353 } | 297 } |
354 | 298 |
355 void SetClipboardText(ui::ClipboardType type, const std::string& text) { | 299 void SetClipboardText(ui::ClipboardType type, const std::string& text) { |
356 ui::ScopedClipboardWriter(type).WriteText(ASCIIToUTF16(text)); | 300 ui::ScopedClipboardWriter(type).WriteText(ASCIIToUTF16(text)); |
357 } | 301 } |
358 | 302 |
359 } // namespace | 303 } // namespace |
360 | 304 |
361 namespace views { | 305 namespace views { |
362 | 306 |
307 // A Textfield wrapper to intercept OnKey[Pressed|Released]() ressults. | |
308 class TestTextfield : public views::Textfield { | |
309 public: | |
310 TestTextfield() | |
311 : Textfield(), | |
312 key_handled_(false), | |
313 key_received_(false), | |
314 weak_ptr_factory_(this) {} | |
315 | |
316 // ui::TextInputClient overrides: | |
317 void InsertChar(const ui::KeyEvent& e) override { | |
318 views::Textfield::InsertChar(e); | |
319 #if defined(OS_MACOSX) | |
320 // On Mac, characters are inserted directly rather than attempting to get a | |
321 // unicode character from the ui::KeyEvent (which isn't always possible). | |
322 key_received_ = true; | |
323 #endif | |
324 } | |
325 | |
326 bool key_handled() const { return key_handled_; } | |
327 bool key_received() const { return key_received_; } | |
328 | |
329 void clear() { key_received_ = key_handled_ = false; } | |
330 | |
331 private: | |
332 bool OnKeyPressed(const ui::KeyEvent& e) override { | |
msw
2016/08/26 15:19:09
Oh, can these override onkeyevent instead? and the
karandeepb
2016/08/29 09:59:34
Done. Keep forgetting about OnKeyEvent. This also
| |
333 key_received_ = true; | |
334 | |
335 // Since OnKeyPressed() might destroy |this|, get a weak pointer and | |
336 // verify it isn't null before writing the bool value to key_handled_. | |
337 base::WeakPtr<TestTextfield> textfield(weak_ptr_factory_.GetWeakPtr()); | |
338 bool key = views::Textfield::OnKeyPressed(e); | |
339 | |
340 if (!textfield) | |
341 return key; | |
342 | |
343 key_handled_ = key; | |
344 | |
345 return key_handled_; | |
346 } | |
347 | |
348 bool OnKeyReleased(const ui::KeyEvent& e) override { | |
349 key_received_ = true; | |
350 key_handled_ = views::Textfield::OnKeyReleased(e); | |
351 | |
352 // Currently Textfield::OnKeyReleased always returns false. | |
353 EXPECT_FALSE(key_handled_); | |
354 return key_handled_; | |
355 } | |
356 | |
357 bool key_handled_; | |
358 bool key_received_; | |
359 | |
360 base::WeakPtrFactory<TestTextfield> weak_ptr_factory_; | |
361 | |
362 DISALLOW_COPY_AND_ASSIGN(TestTextfield); | |
363 }; | |
364 | |
363 class TextfieldTest : public ViewsTestBase, public TextfieldController { | 365 class TextfieldTest : public ViewsTestBase, public TextfieldController { |
364 public: | 366 public: |
365 TextfieldTest() | 367 TextfieldTest() |
366 : widget_(NULL), | 368 : widget_(NULL), |
367 textfield_(NULL), | 369 textfield_(NULL), |
368 model_(NULL), | 370 model_(NULL), |
369 input_method_(NULL), | 371 input_method_(NULL), |
370 on_before_user_action_(0), | 372 on_before_user_action_(0), |
371 on_after_user_action_(0), | 373 on_after_user_action_(0), |
372 copied_to_clipboard_(ui::CLIPBOARD_TYPE_LAST) { | 374 copied_to_clipboard_(ui::CLIPBOARD_TYPE_LAST) { |
(...skipping 2380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2753 | 2755 |
2754 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); | 2756 textfield_->SetTextInputType(ui::TEXT_INPUT_TYPE_PASSWORD); |
2755 ui::AXViewState state_protected; | 2757 ui::AXViewState state_protected; |
2756 textfield_->GetAccessibleState(&state_protected); | 2758 textfield_->GetAccessibleState(&state_protected); |
2757 EXPECT_EQ(ui::AX_ROLE_TEXT_FIELD, state_protected.role); | 2759 EXPECT_EQ(ui::AX_ROLE_TEXT_FIELD, state_protected.role); |
2758 EXPECT_EQ(ASCIIToUTF16("********"), state_protected.value); | 2760 EXPECT_EQ(ASCIIToUTF16("********"), state_protected.value); |
2759 EXPECT_TRUE(state_protected.HasStateFlag(ui::AX_STATE_PROTECTED)); | 2761 EXPECT_TRUE(state_protected.HasStateFlag(ui::AX_STATE_PROTECTED)); |
2760 } | 2762 } |
2761 | 2763 |
2762 } // namespace views | 2764 } // namespace views |
OLD | NEW |