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

Side by Side Diff: views/focus/focus_manager_unittest.cc

Issue 3354005: Re-lands 58186: (Closed)
Patch Set: Created 10 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 | « views/focus/focus_manager.cc ('k') | views/view_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "testing/gtest/include/gtest/gtest.h" 5 #include "testing/gtest/include/gtest/gtest.h"
6 6
7 #include "app/combobox_model.h" 7 #include "app/combobox_model.h"
8 #include "base/keyboard_codes.h" 8 #include "app/keyboard_codes.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/string16.h" 10 #include "base/string16.h"
11 #include "base/string_number_conversions.h" 11 #include "base/string_number_conversions.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "gfx/rect.h" 13 #include "gfx/rect.h"
14 #include "third_party/skia/include/core/SkColor.h" 14 #include "third_party/skia/include/core/SkColor.h"
15 #include "views/background.h" 15 #include "views/background.h"
16 #include "views/border.h" 16 #include "views/border.h"
17 #include "views/controls/button/checkbox.h" 17 #include "views/controls/button/checkbox.h"
18 #include "views/controls/button/native_button.h" 18 #include "views/controls/button/native_button.h"
(...skipping 10 matching lines...) Expand all
29 #include "views/focus/accelerator_handler.h" 29 #include "views/focus/accelerator_handler.h"
30 #include "views/widget/root_view.h" 30 #include "views/widget/root_view.h"
31 #include "views/window/non_client_view.h" 31 #include "views/window/non_client_view.h"
32 #include "views/window/window.h" 32 #include "views/window/window.h"
33 #include "views/window/window_delegate.h" 33 #include "views/window/window_delegate.h"
34 34
35 #if defined(OS_WIN) 35 #if defined(OS_WIN)
36 #include "views/widget/widget_win.h" 36 #include "views/widget/widget_win.h"
37 #include "views/window/window_win.h" 37 #include "views/window/window_win.h"
38 #elif defined(OS_LINUX) 38 #elif defined(OS_LINUX)
39 #include "base/keyboard_code_conversion_gtk.h" 39 #include "app/keyboard_code_conversion_gtk.h"
40 #include "views/window/window_gtk.h" 40 #include "views/window/window_gtk.h"
41 #endif 41 #endif
42 42
43 namespace { 43 namespace {
44 const int kWindowWidth = 600; 44 const int kWindowWidth = 600;
45 const int kWindowHeight = 500; 45 const int kWindowHeight = 500;
46 46
47 int count = 1; 47 int count = 1;
48 48
49 const int kTopCheckBoxID = count++; // 1 49 const int kTopCheckBoxID = count++; // 1
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 Window* window_; 202 Window* window_;
203 View* content_view_; 203 View* content_view_;
204 204
205 void AddFocusChangeListener(FocusChangeListener* listener) { 205 void AddFocusChangeListener(FocusChangeListener* listener) {
206 ASSERT_FALSE(focus_change_listener_); 206 ASSERT_FALSE(focus_change_listener_);
207 focus_change_listener_ = listener; 207 focus_change_listener_ = listener;
208 GetFocusManager()->AddFocusChangeListener(listener); 208 GetFocusManager()->AddFocusChangeListener(listener);
209 } 209 }
210 210
211 #if defined(OS_WIN) 211 #if defined(OS_WIN)
212 void PostKeyDown(base::KeyboardCode key_code) { 212 void PostKeyDown(app::KeyboardCode key_code) {
213 ::PostMessage(window_->GetNativeWindow(), WM_KEYDOWN, key_code, 0); 213 ::PostMessage(window_->GetNativeWindow(), WM_KEYDOWN, key_code, 0);
214 } 214 }
215 215
216 void PostKeyUp(base::KeyboardCode key_code) { 216 void PostKeyUp(app::KeyboardCode key_code) {
217 ::PostMessage(window_->GetNativeWindow(), WM_KEYUP, key_code, 0); 217 ::PostMessage(window_->GetNativeWindow(), WM_KEYUP, key_code, 0);
218 } 218 }
219 #elif defined(OS_LINUX) 219 #elif defined(OS_LINUX)
220 void PostKeyDown(base::KeyboardCode key_code) { 220 void PostKeyDown(app::KeyboardCode key_code) {
221 PostKeyEvent(key_code, true); 221 PostKeyEvent(key_code, true);
222 } 222 }
223 223
224 void PostKeyUp(base::KeyboardCode key_code) { 224 void PostKeyUp(app::KeyboardCode key_code) {
225 PostKeyEvent(key_code, false); 225 PostKeyEvent(key_code, false);
226 } 226 }
227 227
228 void PostKeyEvent(base::KeyboardCode key_code, bool pressed) { 228 void PostKeyEvent(app::KeyboardCode key_code, bool pressed) {
229 int keyval = GdkKeyCodeForWindowsKeyCode(key_code, false); 229 int keyval = GdkKeyCodeForWindowsKeyCode(key_code, false);
230 GdkKeymapKey* keys; 230 GdkKeymapKey* keys;
231 gint n_keys; 231 gint n_keys;
232 gdk_keymap_get_entries_for_keyval( 232 gdk_keymap_get_entries_for_keyval(
233 gdk_keymap_get_default(), 233 gdk_keymap_get_default(),
234 keyval, 234 keyval,
235 &keys, 235 &keys,
236 &n_keys); 236 &n_keys);
237 GdkEvent* event = gdk_event_new(pressed ? GDK_KEY_PRESS : GDK_KEY_RELEASE); 237 GdkEvent* event = gdk_event_new(pressed ? GDK_KEY_PRESS : GDK_KEY_RELEASE);
238 GdkEventKey* key_event = reinterpret_cast<GdkEventKey*>(event); 238 GdkEventKey* key_event = reinterpret_cast<GdkEventKey*>(event);
(...skipping 1054 matching lines...) Expand 10 before | Expand all | Expand 10 after
1293 1293
1294 private: 1294 private:
1295 int accelerator_count_; // number of times that the accelerator is activated 1295 int accelerator_count_; // number of times that the accelerator is activated
1296 bool process_accelerator_; // return value of AcceleratorPressed 1296 bool process_accelerator_; // return value of AcceleratorPressed
1297 1297
1298 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorTarget); 1298 DISALLOW_COPY_AND_ASSIGN(TestAcceleratorTarget);
1299 }; 1299 };
1300 1300
1301 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) { 1301 TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) {
1302 FocusManager* focus_manager = GetFocusManager(); 1302 FocusManager* focus_manager = GetFocusManager();
1303 Accelerator return_accelerator(base::VKEY_RETURN, false, false, false); 1303 Accelerator return_accelerator(app::VKEY_RETURN, false, false, false);
1304 Accelerator escape_accelerator(base::VKEY_ESCAPE, false, false, false); 1304 Accelerator escape_accelerator(app::VKEY_ESCAPE, false, false, false);
1305 1305
1306 TestAcceleratorTarget return_target(true); 1306 TestAcceleratorTarget return_target(true);
1307 TestAcceleratorTarget escape_target(true); 1307 TestAcceleratorTarget escape_target(true);
1308 EXPECT_EQ(return_target.accelerator_count(), 0); 1308 EXPECT_EQ(return_target.accelerator_count(), 0);
1309 EXPECT_EQ(escape_target.accelerator_count(), 0); 1309 EXPECT_EQ(escape_target.accelerator_count(), 0);
1310 EXPECT_EQ(NULL, 1310 EXPECT_EQ(NULL,
1311 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 1311 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
1312 EXPECT_EQ(NULL, 1312 EXPECT_EQ(NULL,
1313 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator)); 1313 focus_manager->GetCurrentTargetForAccelerator(escape_accelerator));
1314 1314
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1411 private: 1411 private:
1412 Accelerator accelerator_; 1412 Accelerator accelerator_;
1413 FocusManager* focus_manager_; 1413 FocusManager* focus_manager_;
1414 int accelerator_count_; 1414 int accelerator_count_;
1415 1415
1416 DISALLOW_COPY_AND_ASSIGN(SelfUnregisteringAcceleratorTarget); 1416 DISALLOW_COPY_AND_ASSIGN(SelfUnregisteringAcceleratorTarget);
1417 }; 1417 };
1418 1418
1419 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { 1419 TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) {
1420 FocusManager* focus_manager = GetFocusManager(); 1420 FocusManager* focus_manager = GetFocusManager();
1421 Accelerator return_accelerator(base::VKEY_RETURN, false, false, false); 1421 Accelerator return_accelerator(app::VKEY_RETURN, false, false, false);
1422 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager); 1422 SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager);
1423 EXPECT_EQ(target.accelerator_count(), 0); 1423 EXPECT_EQ(target.accelerator_count(), 0);
1424 EXPECT_EQ(NULL, 1424 EXPECT_EQ(NULL,
1425 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 1425 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
1426 1426
1427 // Register the target. 1427 // Register the target.
1428 focus_manager->RegisterAccelerator(return_accelerator, &target); 1428 focus_manager->RegisterAccelerator(return_accelerator, &target);
1429 EXPECT_EQ(&target, 1429 EXPECT_EQ(&target,
1430 focus_manager->GetCurrentTargetForAccelerator(return_accelerator)); 1430 focus_manager->GetCurrentTargetForAccelerator(return_accelerator));
1431 1431
(...skipping 27 matching lines...) Expand all
1459 accelerator_pressed_ = true; 1459 accelerator_pressed_ = true;
1460 return true; 1460 return true;
1461 } 1461 }
1462 1462
1463 void Reset() { 1463 void Reset() {
1464 accelerator_pressed_ = false; 1464 accelerator_pressed_ = false;
1465 keys_pressed_.clear(); 1465 keys_pressed_.clear();
1466 keys_released_.clear(); 1466 keys_released_.clear();
1467 } 1467 }
1468 1468
1469 const std::vector<base::KeyboardCode>& keys_pressed() const { 1469 const std::vector<app::KeyboardCode>& keys_pressed() const {
1470 return keys_pressed_; 1470 return keys_pressed_;
1471 } 1471 }
1472 1472
1473 const std::vector<base::KeyboardCode>& keys_released() const { 1473 const std::vector<app::KeyboardCode>& keys_released() const {
1474 return keys_released_; 1474 return keys_released_;
1475 } 1475 }
1476 1476
1477 bool accelerator_pressed() const { 1477 bool accelerator_pressed() const {
1478 return accelerator_pressed_; 1478 return accelerator_pressed_;
1479 } 1479 }
1480 1480
1481 private: 1481 private:
1482 bool accelerator_pressed_; 1482 bool accelerator_pressed_;
1483 std::vector<base::KeyboardCode> keys_pressed_; 1483 std::vector<app::KeyboardCode> keys_pressed_;
1484 std::vector<base::KeyboardCode> keys_released_; 1484 std::vector<app::KeyboardCode> keys_released_;
1485 1485
1486 DISALLOW_COPY_AND_ASSIGN(MessageTrackingView); 1486 DISALLOW_COPY_AND_ASSIGN(MessageTrackingView);
1487 }; 1487 };
1488 1488
1489 #if defined(OS_WIN) 1489 #if defined(OS_WIN)
1490 // This test is now Windows only. Linux Views port does not handle accelerator 1490 // This test is now Windows only. Linux Views port does not handle accelerator
1491 // keys in AcceleratorHandler anymore. The logic has been moved into 1491 // keys in AcceleratorHandler anymore. The logic has been moved into
1492 // WidgetGtk::OnKeyEvent(). 1492 // WidgetGtk::OnKeyEvent().
1493 // Tests that the keyup messages are eaten for accelerators. 1493 // Tests that the keyup messages are eaten for accelerators.
1494 TEST_F(FocusManagerTest, IgnoreKeyupForAccelerators) { 1494 TEST_F(FocusManagerTest, IgnoreKeyupForAccelerators) {
1495 FocusManager* focus_manager = GetFocusManager(); 1495 FocusManager* focus_manager = GetFocusManager();
1496 MessageTrackingView* mtv = new MessageTrackingView(); 1496 MessageTrackingView* mtv = new MessageTrackingView();
1497 mtv->AddAccelerator(Accelerator(base::VKEY_0, false, false, false)); 1497 mtv->AddAccelerator(Accelerator(app::VKEY_0, false, false, false));
1498 mtv->AddAccelerator(Accelerator(base::VKEY_1, false, false, false)); 1498 mtv->AddAccelerator(Accelerator(app::VKEY_1, false, false, false));
1499 content_view_->AddChildView(mtv); 1499 content_view_->AddChildView(mtv);
1500 focus_manager->SetFocusedView(mtv); 1500 focus_manager->SetFocusedView(mtv);
1501 1501
1502 // First send a non-accelerator key sequence. 1502 // First send a non-accelerator key sequence.
1503 PostKeyDown(base::VKEY_9); 1503 PostKeyDown(app::VKEY_9);
1504 PostKeyUp(base::VKEY_9); 1504 PostKeyUp(app::VKEY_9);
1505 AcceleratorHandler accelerator_handler; 1505 AcceleratorHandler accelerator_handler;
1506 MessageLoopForUI::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 1506 MessageLoopForUI::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask());
1507 MessageLoopForUI::current()->Run(&accelerator_handler); 1507 MessageLoopForUI::current()->Run(&accelerator_handler);
1508 // Make sure we get a key-up and key-down. 1508 // Make sure we get a key-up and key-down.
1509 ASSERT_EQ(1U, mtv->keys_pressed().size()); 1509 ASSERT_EQ(1U, mtv->keys_pressed().size());
1510 EXPECT_EQ(base::VKEY_9, mtv->keys_pressed().at(0)); 1510 EXPECT_EQ(app::VKEY_9, mtv->keys_pressed().at(0));
1511 ASSERT_EQ(1U, mtv->keys_released().size()); 1511 ASSERT_EQ(1U, mtv->keys_released().size());
1512 EXPECT_EQ(base::VKEY_9, mtv->keys_released().at(0)); 1512 EXPECT_EQ(app::VKEY_9, mtv->keys_released().at(0));
1513 EXPECT_FALSE(mtv->accelerator_pressed()); 1513 EXPECT_FALSE(mtv->accelerator_pressed());
1514 mtv->Reset(); 1514 mtv->Reset();
1515 1515
1516 // Same thing with repeat and more than one key at once. 1516 // Same thing with repeat and more than one key at once.
1517 PostKeyDown(base::VKEY_9); 1517 PostKeyDown(app::VKEY_9);
1518 PostKeyDown(base::VKEY_9); 1518 PostKeyDown(app::VKEY_9);
1519 PostKeyDown(base::VKEY_8); 1519 PostKeyDown(app::VKEY_8);
1520 PostKeyDown(base::VKEY_9); 1520 PostKeyDown(app::VKEY_9);
1521 PostKeyDown(base::VKEY_7); 1521 PostKeyDown(app::VKEY_7);
1522 PostKeyUp(base::VKEY_9); 1522 PostKeyUp(app::VKEY_9);
1523 PostKeyUp(base::VKEY_7); 1523 PostKeyUp(app::VKEY_7);
1524 PostKeyUp(base::VKEY_8); 1524 PostKeyUp(app::VKEY_8);
1525 MessageLoopForUI::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 1525 MessageLoopForUI::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask());
1526 MessageLoopForUI::current()->Run(&accelerator_handler); 1526 MessageLoopForUI::current()->Run(&accelerator_handler);
1527 // Make sure we get a key-up and key-down. 1527 // Make sure we get a key-up and key-down.
1528 ASSERT_EQ(5U, mtv->keys_pressed().size()); 1528 ASSERT_EQ(5U, mtv->keys_pressed().size());
1529 EXPECT_EQ(base::VKEY_9, mtv->keys_pressed().at(0)); 1529 EXPECT_EQ(app::VKEY_9, mtv->keys_pressed().at(0));
1530 EXPECT_EQ(base::VKEY_9, mtv->keys_pressed().at(1)); 1530 EXPECT_EQ(app::VKEY_9, mtv->keys_pressed().at(1));
1531 EXPECT_EQ(base::VKEY_8, mtv->keys_pressed().at(2)); 1531 EXPECT_EQ(app::VKEY_8, mtv->keys_pressed().at(2));
1532 EXPECT_EQ(base::VKEY_9, mtv->keys_pressed().at(3)); 1532 EXPECT_EQ(app::VKEY_9, mtv->keys_pressed().at(3));
1533 EXPECT_EQ(base::VKEY_7, mtv->keys_pressed().at(4)); 1533 EXPECT_EQ(app::VKEY_7, mtv->keys_pressed().at(4));
1534 ASSERT_EQ(3U, mtv->keys_released().size()); 1534 ASSERT_EQ(3U, mtv->keys_released().size());
1535 EXPECT_EQ(base::VKEY_9, mtv->keys_released().at(0)); 1535 EXPECT_EQ(app::VKEY_9, mtv->keys_released().at(0));
1536 EXPECT_EQ(base::VKEY_7, mtv->keys_released().at(1)); 1536 EXPECT_EQ(app::VKEY_7, mtv->keys_released().at(1));
1537 EXPECT_EQ(base::VKEY_8, mtv->keys_released().at(2)); 1537 EXPECT_EQ(app::VKEY_8, mtv->keys_released().at(2));
1538 EXPECT_FALSE(mtv->accelerator_pressed()); 1538 EXPECT_FALSE(mtv->accelerator_pressed());
1539 mtv->Reset(); 1539 mtv->Reset();
1540 1540
1541 // Now send an accelerator key sequence. 1541 // Now send an accelerator key sequence.
1542 PostKeyDown(base::VKEY_0); 1542 PostKeyDown(app::VKEY_0);
1543 PostKeyUp(base::VKEY_0); 1543 PostKeyUp(app::VKEY_0);
1544 MessageLoopForUI::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 1544 MessageLoopForUI::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask());
1545 MessageLoopForUI::current()->Run(&accelerator_handler); 1545 MessageLoopForUI::current()->Run(&accelerator_handler);
1546 EXPECT_TRUE(mtv->keys_pressed().empty()); 1546 EXPECT_TRUE(mtv->keys_pressed().empty());
1547 EXPECT_TRUE(mtv->keys_released().empty()); 1547 EXPECT_TRUE(mtv->keys_released().empty());
1548 EXPECT_TRUE(mtv->accelerator_pressed()); 1548 EXPECT_TRUE(mtv->accelerator_pressed());
1549 mtv->Reset(); 1549 mtv->Reset();
1550 1550
1551 // Same thing with repeat and more than one key at once. 1551 // Same thing with repeat and more than one key at once.
1552 PostKeyDown(base::VKEY_0); 1552 PostKeyDown(app::VKEY_0);
1553 PostKeyDown(base::VKEY_1); 1553 PostKeyDown(app::VKEY_1);
1554 PostKeyDown(base::VKEY_1); 1554 PostKeyDown(app::VKEY_1);
1555 PostKeyDown(base::VKEY_0); 1555 PostKeyDown(app::VKEY_0);
1556 PostKeyDown(base::VKEY_0); 1556 PostKeyDown(app::VKEY_0);
1557 PostKeyUp(base::VKEY_1); 1557 PostKeyUp(app::VKEY_1);
1558 PostKeyUp(base::VKEY_0); 1558 PostKeyUp(app::VKEY_0);
1559 MessageLoopForUI::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); 1559 MessageLoopForUI::current()->PostTask(FROM_HERE, new MessageLoop::QuitTask());
1560 MessageLoopForUI::current()->Run(&accelerator_handler); 1560 MessageLoopForUI::current()->Run(&accelerator_handler);
1561 EXPECT_TRUE(mtv->keys_pressed().empty()); 1561 EXPECT_TRUE(mtv->keys_pressed().empty());
1562 EXPECT_TRUE(mtv->keys_released().empty()); 1562 EXPECT_TRUE(mtv->keys_released().empty());
1563 EXPECT_TRUE(mtv->accelerator_pressed()); 1563 EXPECT_TRUE(mtv->accelerator_pressed());
1564 mtv->Reset(); 1564 mtv->Reset();
1565 } 1565 }
1566 #endif 1566 #endif
1567 1567
1568 #if defined(OS_WIN) 1568 #if defined(OS_WIN)
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
1719 // Focus manager should be the last one to destruct. 1719 // Focus manager should be the last one to destruct.
1720 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str()); 1720 ASSERT_STREQ("FocusManagerDtorTracked", dtor_tracker_[2].c_str());
1721 1721
1722 // Clear window_ so that we don't try to close it again. 1722 // Clear window_ so that we don't try to close it again.
1723 window_ = NULL; 1723 window_ = NULL;
1724 } 1724 }
1725 1725
1726 #endif // defined(OS_CHROMEOS) 1726 #endif // defined(OS_CHROMEOS)
1727 1727
1728 } // namespace views 1728 } // namespace views
OLDNEW
« no previous file with comments | « views/focus/focus_manager.cc ('k') | views/view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698