// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ash/ime/input_method_event_filter.h" #include "ash/shell.h" #include "ash/shell_window_ids.h" #include "ash/test/ash_test_base.h" #include "ash/wm/root_window_event_filter.h" #include "ash/wm/window_util.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/client/aura_constants.h" #include "ui/aura/root_window.h" #include "ui/aura/test/event_generator.h" #include "ui/aura/test/test_event_filter.h" #include "ui/aura/test/test_windows.h" #if !defined(OS_WIN) && !defined(USE_X11) // On platforms except Windows and X11, aura::test::EventGenerator::PressKey // generates a key event without native_event(), which is not supported by // ui::MockInputMethod. #define TestInputMethodKeyEventPropagation \ DISABLED_TestInputMethodKeyEventPropagation #endif namespace ash { typedef test::AshTestBase InputMethodEventFilterTest; // Tests if InputMethodEventFilter adds a window property on its construction. TEST_F(InputMethodEventFilterTest, TestInputMethodProperty) { aura::RootWindow* root_window = Shell::GetRootWindow(); EXPECT_TRUE( root_window->GetProperty(aura::client::kRootWindowInputMethodKey)); } // Tests if InputMethodEventFilter dispatches a ui::ET_TRANSLATED_KEY_* event to // the root window. TEST_F(InputMethodEventFilterTest, TestInputMethodKeyEventPropagation) { aura::RootWindow* root_window = Shell::GetRootWindow(); // Add TestEventFilter to the RootWindow. aura::test::TestEventFilter test_filter; internal::RootWindowEventFilter* root_filter = static_cast( root_window->event_filter()); ASSERT_TRUE(root_filter); root_filter->AddFilter(&test_filter); // We need an active window. Otherwise, the root window will not forward a key // event to event filters. aura::Window* default_container = Shell::GetInstance()->GetContainer( internal::kShellWindowId_DefaultContainer); aura::test::TestWindowDelegate test_delegate; scoped_ptr window(aura::test::CreateTestWindowWithDelegate( &test_delegate, -1, gfx::Rect(), default_container)); wm::ActivateWindow(window.get()); // Send a fake key event to the root window. InputMethodEventFilter, which is // automatically set up by AshTestBase, consumes it and sends a new // ui::ET_TRANSLATED_KEY_* event to the root window, which will be consumed by // the test event filter. aura::test::EventGenerator generator(Shell::GetRootWindow()); EXPECT_EQ(0, test_filter.key_event_count()); generator.PressKey(ui::VKEY_SPACE, 0); EXPECT_EQ(1, test_filter.key_event_count()); generator.ReleaseKey(ui::VKEY_SPACE, 0); EXPECT_EQ(2, test_filter.key_event_count()); root_filter->RemoveFilter(&test_filter); // Reset window before |test_delegate| gets deleted. window.reset(); } } // namespace ash