OLD | NEW |
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 "app/keyboard_codes.h" | 8 #include "base/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 Loading... |
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 "app/keyboard_code_conversion_gtk.h" | 39 #include "base/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 Loading... |
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(app::KeyboardCode key_code) { | 212 void PostKeyDown(base::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(app::KeyboardCode key_code) { | 216 void PostKeyUp(base::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(app::KeyboardCode key_code) { | 220 void PostKeyDown(base::KeyboardCode key_code) { |
221 PostKeyEvent(key_code, true); | 221 PostKeyEvent(key_code, true); |
222 } | 222 } |
223 | 223 |
224 void PostKeyUp(app::KeyboardCode key_code) { | 224 void PostKeyUp(base::KeyboardCode key_code) { |
225 PostKeyEvent(key_code, false); | 225 PostKeyEvent(key_code, false); |
226 } | 226 } |
227 | 227 |
228 void PostKeyEvent(app::KeyboardCode key_code, bool pressed) { | 228 void PostKeyEvent(base::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 Loading... |
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(app::VKEY_RETURN, false, false, false); | 1303 Accelerator return_accelerator(base::VKEY_RETURN, false, false, false); |
1304 Accelerator escape_accelerator(app::VKEY_ESCAPE, false, false, false); | 1304 Accelerator escape_accelerator(base::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 Loading... |
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(app::VKEY_RETURN, false, false, false); | 1421 Accelerator return_accelerator(base::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 Loading... |
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<app::KeyboardCode>& keys_pressed() const { | 1469 const std::vector<base::KeyboardCode>& keys_pressed() const { |
1470 return keys_pressed_; | 1470 return keys_pressed_; |
1471 } | 1471 } |
1472 | 1472 |
1473 const std::vector<app::KeyboardCode>& keys_released() const { | 1473 const std::vector<base::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<app::KeyboardCode> keys_pressed_; | 1483 std::vector<base::KeyboardCode> keys_pressed_; |
1484 std::vector<app::KeyboardCode> keys_released_; | 1484 std::vector<base::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(app::VKEY_0, false, false, false)); | 1497 mtv->AddAccelerator(Accelerator(base::VKEY_0, false, false, false)); |
1498 mtv->AddAccelerator(Accelerator(app::VKEY_1, false, false, false)); | 1498 mtv->AddAccelerator(Accelerator(base::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(app::VKEY_9); | 1503 PostKeyDown(base::VKEY_9); |
1504 PostKeyUp(app::VKEY_9); | 1504 PostKeyUp(base::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(app::VKEY_9, mtv->keys_pressed().at(0)); | 1510 EXPECT_EQ(base::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(app::VKEY_9, mtv->keys_released().at(0)); | 1512 EXPECT_EQ(base::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(app::VKEY_9); | 1517 PostKeyDown(base::VKEY_9); |
1518 PostKeyDown(app::VKEY_9); | 1518 PostKeyDown(base::VKEY_9); |
1519 PostKeyDown(app::VKEY_8); | 1519 PostKeyDown(base::VKEY_8); |
1520 PostKeyDown(app::VKEY_9); | 1520 PostKeyDown(base::VKEY_9); |
1521 PostKeyDown(app::VKEY_7); | 1521 PostKeyDown(base::VKEY_7); |
1522 PostKeyUp(app::VKEY_9); | 1522 PostKeyUp(base::VKEY_9); |
1523 PostKeyUp(app::VKEY_7); | 1523 PostKeyUp(base::VKEY_7); |
1524 PostKeyUp(app::VKEY_8); | 1524 PostKeyUp(base::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(app::VKEY_9, mtv->keys_pressed().at(0)); | 1529 EXPECT_EQ(base::VKEY_9, mtv->keys_pressed().at(0)); |
1530 EXPECT_EQ(app::VKEY_9, mtv->keys_pressed().at(1)); | 1530 EXPECT_EQ(base::VKEY_9, mtv->keys_pressed().at(1)); |
1531 EXPECT_EQ(app::VKEY_8, mtv->keys_pressed().at(2)); | 1531 EXPECT_EQ(base::VKEY_8, mtv->keys_pressed().at(2)); |
1532 EXPECT_EQ(app::VKEY_9, mtv->keys_pressed().at(3)); | 1532 EXPECT_EQ(base::VKEY_9, mtv->keys_pressed().at(3)); |
1533 EXPECT_EQ(app::VKEY_7, mtv->keys_pressed().at(4)); | 1533 EXPECT_EQ(base::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(app::VKEY_9, mtv->keys_released().at(0)); | 1535 EXPECT_EQ(base::VKEY_9, mtv->keys_released().at(0)); |
1536 EXPECT_EQ(app::VKEY_7, mtv->keys_released().at(1)); | 1536 EXPECT_EQ(base::VKEY_7, mtv->keys_released().at(1)); |
1537 EXPECT_EQ(app::VKEY_8, mtv->keys_released().at(2)); | 1537 EXPECT_EQ(base::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(app::VKEY_0); | 1542 PostKeyDown(base::VKEY_0); |
1543 PostKeyUp(app::VKEY_0); | 1543 PostKeyUp(base::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(app::VKEY_0); | 1552 PostKeyDown(base::VKEY_0); |
1553 PostKeyDown(app::VKEY_1); | 1553 PostKeyDown(base::VKEY_1); |
1554 PostKeyDown(app::VKEY_1); | 1554 PostKeyDown(base::VKEY_1); |
1555 PostKeyDown(app::VKEY_0); | 1555 PostKeyDown(base::VKEY_0); |
1556 PostKeyDown(app::VKEY_0); | 1556 PostKeyDown(base::VKEY_0); |
1557 PostKeyUp(app::VKEY_1); | 1557 PostKeyUp(base::VKEY_1); |
1558 PostKeyUp(app::VKEY_0); | 1558 PostKeyUp(base::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 Loading... |
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 |
OLD | NEW |