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

Unified Diff: ash/accelerators/nested_dispatcher_controller_unittest.cc

Issue 9538015: Allows ash accelerators in wrench menu (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Changes as requested Created 8 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: ash/accelerators/nested_dispatcher_controller_unittest.cc
diff --git a/ash/accelerators/nested_dispatcher_controller_unittest.cc b/ash/accelerators/nested_dispatcher_controller_unittest.cc
index 07f37607e8d23dc290ca8c588059c869e1e992bf..be9fcf3503b6d106fae909afa23d775a323f713c 100644
--- a/ash/accelerators/nested_dispatcher_controller_unittest.cc
+++ b/ash/accelerators/nested_dispatcher_controller_unittest.cc
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "ash/accelerators/accelerator_controller.h"
#include "ash/shell.h"
#include "ash/shell_window_ids.h"
#include "ash/test/ash_test_base.h"
@@ -12,6 +13,7 @@
#include "ui/aura/root_window.h"
#include "ui/aura/test/test_windows.h"
#include "ui/aura/window.h"
+#include "ui/base/accelerators/accelerator.h"
#if defined(USE_X11)
#include <X11/Xlib.h>
@@ -50,7 +52,31 @@ class MockDispatcher : public MessageLoop::Dispatcher {
int num_key_events_dispatched_;
};
-void DispatchKeyEvent() {
+class TestTarget : public ui::AcceleratorTarget {
+ public:
+ TestTarget() : accelerator_pressed_count_(0) {};
sky 2012/02/29 22:04:18 nit: no ; here and next line.
+ virtual ~TestTarget() {};
+
+ int accelerator_pressed_count() const {
+ return accelerator_pressed_count_;
+ }
+
+ // Overridden from ui::AcceleratorTarget:
+ virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE {
+ accelerator_pressed_count_++;
+ return true;
+ }
+ virtual bool CanHandleAccelerators() const OVERRIDE {
+ return true;
+ }
+
+ private:
+ int accelerator_pressed_count_;
+
+ DISALLOW_COPY_AND_ASSIGN(TestTarget);
+};
+
+void DispatchKeyReleaseA() {
#if defined(OS_WIN)
MSG native_event = { NULL, WM_KEYUP, ui::VKEY_A, 0 };
ash::Shell::GetRootWindow()->PostNativeEvent(native_event);
@@ -75,7 +101,7 @@ typedef AshTestBase NestedDispatcherTest;
TEST_F(NestedDispatcherTest, AssociatedWindowBelowLockScreen) {
MockDispatcher inner_dispatcher;
aura::Window* default_container = Shell::GetInstance()->GetContainer(
- ash::internal::kShellWindowId_DefaultContainer);
+ internal::kShellWindowId_DefaultContainer);
scoped_ptr<aura::Window>associated_window(aura::test::CreateTestWindowWithId(
0, default_container));
scoped_ptr<aura::Window>mock_lock_container(
@@ -86,7 +112,7 @@ TEST_F(NestedDispatcherTest, AssociatedWindowBelowLockScreen) {
associated_window.get()));
MessageLoop::current()->PostDelayedTask(
FROM_HERE,
- base::Bind(&DispatchKeyEvent),
+ base::Bind(&DispatchKeyReleaseA),
base::TimeDelta::FromMilliseconds(100));
aura::RootWindow* root_window = ash::Shell::GetInstance()->GetRootWindow();
aura::client::GetDispatcherClient(root_window)->RunWithDispatcher(
@@ -101,7 +127,7 @@ TEST_F(NestedDispatcherTest, AssociatedWindowAboveLockScreen) {
MockDispatcher inner_dispatcher;
aura::Window* default_container = Shell::GetInstance()->GetContainer(
- ash::internal::kShellWindowId_DefaultContainer);
+ internal::kShellWindowId_DefaultContainer);
scoped_ptr<aura::Window>mock_lock_container(
aura::test::CreateTestWindowWithId(0, default_container));
mock_lock_container->set_stops_event_propagation(true);
@@ -113,7 +139,7 @@ TEST_F(NestedDispatcherTest, AssociatedWindowAboveLockScreen) {
MessageLoop::current()->PostDelayedTask(
FROM_HERE,
- base::Bind(&DispatchKeyEvent),
+ base::Bind(&DispatchKeyReleaseA),
base::TimeDelta::FromMilliseconds(100));
aura::RootWindow* root_window = ash::Shell::GetInstance()->GetRootWindow();
aura::client::GetDispatcherClient(root_window)->RunWithDispatcher(
@@ -123,5 +149,28 @@ TEST_F(NestedDispatcherTest, AssociatedWindowAboveLockScreen) {
EXPECT_EQ(1, inner_dispatcher.num_key_events_dispatched());
}
+// Test that the nested dispatcher handles accelerators.
+TEST_F(NestedDispatcherTest, AcceleratorsHandled) {
+ MockDispatcher inner_dispatcher;
+ aura::RootWindow* root_window = ash::Shell::GetInstance()->GetRootWindow();
+
+ ui::Accelerator accelerator(ui::VKEY_A, false, false, false);
+ accelerator.set_type(ui::ET_TRANSLATED_KEY_RELEASE);
+ TestTarget target;
+ Shell::GetInstance()->accelerator_controller()->Register(accelerator,
+ &target);
+
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE,
+ base::Bind(&DispatchKeyReleaseA),
+ base::TimeDelta::FromMilliseconds(100));
sky 2012/02/29 22:04:18 Why does this need to delay 100ms? Can't it use Po
pkotwicz 2012/03/01 23:56:37 The delay is arbitrary. However, I beleive the del
oshima 2012/03/02 00:12:21 Sorry I missed this in first review. On 2012/03/0
+ aura::client::GetDispatcherClient(root_window)->RunWithDispatcher(
+ &inner_dispatcher,
+ root_window,
+ true /* nestable_tasks_allowed */);
+ EXPECT_EQ(0, inner_dispatcher.num_key_events_dispatched());
+ EXPECT_EQ(1, target.accelerator_pressed_count());
+}
+
} // namespace test
} // namespace ash

Powered by Google App Engine
This is Rietveld 408576698