blob: 37f38160b3a8f273ee26b32b867d7b3ca19a6614 [file] [log] [blame]
// 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<internal::RootWindowEventFilter*>(
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<aura::Window> 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