Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / ash / accelerators / magnifier_key_scroller_unittest.cc
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ash/accelerators/magnifier_key_scroller.h"
6
7 #include "ash/magnifier/magnification_controller.h"
8 #include "ash/shell.h"
9 #include "ash/test/ash_test_base.h"
10 #include "ash/wm/window_util.h"
11 #include "ui/aura/test/event_generator.h"
12 #include "ui/aura/test/test_window_delegate.h"
13
14 namespace ash {
15 namespace {
16
17 class KeyEventDelegate : public aura::test::TestWindowDelegate {
18  public:
19   KeyEventDelegate() {}
20   virtual ~KeyEventDelegate() {}
21
22   // ui::EventHandler overrides:
23   virtual void OnKeyEvent(ui::KeyEvent* event) OVERRIDE {
24     key_event.reset(new ui::KeyEvent(
25         event->type(), event->key_code(), event->flags(), false));
26   }
27
28   const ui::KeyEvent* event() const { return key_event.get(); }
29   void reset() { key_event.reset(); }
30
31  private:
32   scoped_ptr<ui::KeyEvent> key_event;
33
34   DISALLOW_COPY_AND_ASSIGN(KeyEventDelegate);
35 };
36
37 }  // namespace
38
39 typedef ash::test::AshTestBase MagnifierKeyScrollerTest;
40
41 TEST_F(MagnifierKeyScrollerTest, Basic) {
42   KeyEventDelegate delegate;
43   scoped_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate(
44       &delegate,
45       0,
46       gfx::Rect(10, 10, 100, 100)));
47   wm::ActivateWindow(window.get());
48
49   MagnifierKeyScroller::ScopedEnablerForTest scoped;
50   Shell* shell = Shell::GetInstance();
51   MagnificationController* controller = shell->magnification_controller();
52   controller->SetEnabled(true);
53
54   EXPECT_EQ("200,150", controller->GetWindowPosition().ToString());
55   aura::test::EventGenerator& generator = GetEventGenerator();
56
57   // Click and Release generates the press event upon release.
58   generator.PressKey(ui::VKEY_DOWN, ui::EF_SHIFT_DOWN);
59   EXPECT_EQ("200,150", controller->GetWindowPosition().ToString());
60   EXPECT_FALSE(delegate.event());
61
62   generator.ReleaseKey(ui::VKEY_DOWN, 0);
63   EXPECT_EQ("200,150", controller->GetWindowPosition().ToString());
64   RunAllPendingInMessageLoop();
65   EXPECT_TRUE(delegate.event());
66   EXPECT_EQ(ui::ET_KEY_PRESSED, delegate.event()->type());
67   delegate.reset();
68
69   // Click and hold scrolls the magnifier screen.
70   generator.PressKey(ui::VKEY_DOWN, ui::EF_SHIFT_DOWN);
71   EXPECT_EQ("200,150", controller->GetWindowPosition().ToString());
72   EXPECT_FALSE(delegate.event());
73
74   generator.PressKey(ui::VKEY_DOWN, ui::EF_SHIFT_DOWN);
75   EXPECT_EQ("200,300", controller->GetWindowPosition().ToString());
76   EXPECT_FALSE(delegate.event());
77
78   generator.ReleaseKey(ui::VKEY_DOWN, 0);
79   EXPECT_EQ("200,300", controller->GetWindowPosition().ToString());
80   EXPECT_FALSE(delegate.event());
81
82   // Events are passed normally when the magnifier is off.
83   controller->SetEnabled(false);
84
85   generator.PressKey(ui::VKEY_DOWN, ui::EF_SHIFT_DOWN);
86   EXPECT_TRUE(delegate.event());
87   EXPECT_EQ(ui::ET_KEY_PRESSED, delegate.event()->type());
88   delegate.reset();
89
90   generator.ReleaseKey(ui::VKEY_DOWN, 0);
91   EXPECT_TRUE(delegate.event());
92   EXPECT_EQ(ui::ET_KEY_RELEASED, delegate.event()->type());
93   delegate.reset();
94
95   generator.PressKey(ui::VKEY_DOWN, ui::EF_SHIFT_DOWN);
96   EXPECT_TRUE(delegate.event());
97   EXPECT_EQ(ui::ET_KEY_PRESSED, delegate.event()->type());
98   delegate.reset();
99
100   generator.PressKey(ui::VKEY_DOWN, ui::EF_SHIFT_DOWN);
101   EXPECT_TRUE(delegate.event());
102   EXPECT_EQ(ui::ET_KEY_PRESSED, delegate.event()->type());
103   delegate.reset();
104
105   generator.ReleaseKey(ui::VKEY_DOWN, 0);
106   EXPECT_TRUE(delegate.event());
107   EXPECT_EQ(ui::ET_KEY_RELEASED, delegate.event()->type());
108   delegate.reset();
109 }
110
111 }  // namespace ash