Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(775)

Side by Side Diff: ui/views/controls/textfield/textfield_unittest.cc

Issue 2273263002: MacViewsBrowser: Fix omnibox crash due to failed DCHECK. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/views/controls/textfield/textfield_test_api.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « ui/views/controls/textfield/textfield_test_api.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698