Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / athena / home / home_card_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 "athena/home/public/home_card.h"
6
7 #include "athena/activity/public/activity_factory.h"
8 #include "athena/home/home_card_constants.h"
9 #include "athena/home/home_card_impl.h"
10 #include "athena/test/base/athena_test_base.h"
11 #include "athena/test/base/test_windows.h"
12 #include "athena/wm/public/window_manager.h"
13 #include "ui/aura/test/test_window_delegate.h"
14 #include "ui/aura/window.h"
15 #include "ui/events/test/event_generator.h"
16 #include "ui/gfx/display.h"
17 #include "ui/gfx/screen.h"
18 #include "ui/views/controls/textfield/textfield.h"
19 #include "ui/views/focus/focus_manager.h"
20 #include "ui/views/widget/widget.h"
21 #include "ui/wm/core/shadow_types.h"
22 #include "ui/wm/core/window_util.h"
23
24 namespace athena {
25
26 aura::Window* GetHomeCardWindow() {
27   return static_cast<HomeCardImpl*>(HomeCard::Get())->
28       GetHomeCardWindowForTest();
29 }
30
31 typedef test::AthenaTestBase HomeCardTest;
32
33 TEST_F(HomeCardTest, BasicTransition) {
34   ASSERT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
35   aura::Window* home_card = GetHomeCardWindow();
36   const int screen_height = root_window()->bounds().height();
37   const int work_area_height = gfx::Screen::GetScreenFor(root_window())->
38       GetDisplayNearestWindow(root_window()).work_area().height();
39   ASSERT_TRUE(home_card);
40
41   // In the minimized state, home card should be outside (below) the work area.
42   EXPECT_EQ(screen_height - kHomeCardMinimizedHeight,
43             home_card->GetTargetBounds().y());
44   EXPECT_EQ(work_area_height, home_card->GetTargetBounds().y());
45
46   WindowManager::Get()->EnterOverview();
47   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
48   EXPECT_EQ(screen_height - kHomeCardHeight, home_card->GetTargetBounds().y());
49
50   WindowManager::Get()->ExitOverview();
51   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
52   EXPECT_EQ(work_area_height, home_card->GetTargetBounds().y());
53 }
54
55 TEST_F(HomeCardTest, VirtualKeyboardTransition) {
56   // Minimized -> Hidden for virtual keyboard.
57   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
58   const gfx::Rect vk_bounds(0, 0, 100, 100);
59   HomeCard::Get()->UpdateVirtualKeyboardBounds(vk_bounds);
60   EXPECT_EQ(HomeCard::HIDDEN, HomeCard::Get()->GetState());
61   HomeCard::Get()->UpdateVirtualKeyboardBounds(gfx::Rect());
62   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
63
64   // bottom -> centered for virtual keyboard.
65   WindowManager::Get()->EnterOverview();
66   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
67   HomeCard::Get()->UpdateVirtualKeyboardBounds(vk_bounds);
68   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
69
70   aura::Window* home_card = GetHomeCardWindow();
71   EXPECT_EQ(0, home_card->GetTargetBounds().y());
72
73   HomeCard::Get()->UpdateVirtualKeyboardBounds(gfx::Rect());
74   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
75 }
76
77 TEST_F(HomeCardTest, ToggleOverviewWithVirtualKeyboard) {
78   // Minimized -> Hidden for virtual keyboard.
79   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
80   const gfx::Rect vk_bounds(0, 0, 100, 100);
81   HomeCard::Get()->UpdateVirtualKeyboardBounds(vk_bounds);
82   EXPECT_EQ(HomeCard::HIDDEN, HomeCard::Get()->GetState());
83
84   // EnterOverview() revives the bottom home card. Home card also gets
85   /// activated which will close the virtual keyboard.
86   WindowManager::Get()->EnterOverview();
87   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
88   aura::Window* home_card = GetHomeCardWindow();
89   EXPECT_TRUE(wm::IsActiveWindow(home_card));
90 }
91
92 // Verify if the home card is correctly minimized after app launch.
93 TEST_F(HomeCardTest, AppSelection) {
94   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
95
96   WindowManager::Get()->EnterOverview();
97   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
98
99   athena::ActivityFactory::Get()->CreateWebActivity(
100       nullptr, base::string16(), GURL("http://www.google.com/"));
101   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
102 }
103
104 TEST_F(HomeCardTest, Accelerators) {
105   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
106
107   ui::test::EventGenerator generator(root_window());
108
109   // CTRL+L toggles centered home card, check that overview mode follows
110   generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
111   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
112   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
113   generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
114   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
115   EXPECT_FALSE(WindowManager::Get()->IsOverviewModeActive());
116
117   // ESC key hides centered home card
118   generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
119   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
120   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
121   generator.PressKey(ui::VKEY_ESCAPE, ui::EF_NONE);
122   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
123   EXPECT_FALSE(WindowManager::Get()->IsOverviewModeActive());
124
125   // Do nothing with bottom home card with CTRL+L, hide with ESC key
126   WindowManager::Get()->EnterOverview();
127   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
128   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
129   generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
130   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
131   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
132   generator.PressKey(ui::VKEY_ESCAPE, ui::EF_NONE);
133   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
134   EXPECT_FALSE(WindowManager::Get()->IsOverviewModeActive());
135
136   // Do nothing if the centered state is a temporary state.
137   WindowManager::Get()->EnterOverview();
138   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
139   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
140   HomeCard::Get()->UpdateVirtualKeyboardBounds(gfx::Rect(0, 0, 100, 100));
141   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
142   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
143   generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
144   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
145   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
146 }
147
148 TEST_F(HomeCardTest, MouseClick) {
149   ASSERT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
150
151   // Mouse click at the bottom of the screen should invokes overview mode and
152   // changes the state to BOTTOM.
153   gfx::Rect screen_rect(root_window()->bounds());
154   ui::test::EventGenerator generator(
155       root_window(), gfx::Point(
156           screen_rect.x() + screen_rect.width() / 2, screen_rect.bottom() - 1));
157   generator.ClickLeftButton();
158
159   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
160   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
161
162   // Further clicks are simply ignored.
163   generator.ClickLeftButton();
164   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
165   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
166 }
167
168 TEST_F(HomeCardTest, Gestures) {
169   ASSERT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
170   ui::test::EventGenerator generator(root_window());
171   gfx::Rect screen_rect(root_window()->bounds());
172
173   const int bottom = screen_rect.bottom();
174   const int x = screen_rect.x() + 1;
175
176   generator.GestureScrollSequence(gfx::Point(x, bottom - 1),
177                                   gfx::Point(x, bottom - 70),
178                                   base::TimeDelta::FromSeconds(1),
179                                   10);
180   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
181   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
182
183   // Too short moves. Nothing has changed.
184   generator.GestureScrollSequence(gfx::Point(x, bottom - 40),
185                                   gfx::Point(x, bottom - 80),
186                                   base::TimeDelta::FromSeconds(1),
187                                   10);
188   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
189   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
190
191   generator.GestureScrollSequence(gfx::Point(x, bottom - 40),
192                                   gfx::Point(x, bottom - 20),
193                                   base::TimeDelta::FromSeconds(1),
194                                   10);
195   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
196   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
197
198   // Swipe up to the centered state.
199   generator.GestureScrollSequence(gfx::Point(x, bottom - 40),
200                                   gfx::Point(x, bottom - 300),
201                                   base::TimeDelta::FromSeconds(1),
202                                   10);
203   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
204   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
205
206   // Swipe up from centered; nothing has to be changed.
207   generator.GestureScrollSequence(gfx::Point(x, bottom - 300),
208                                   gfx::Point(x, bottom - 350),
209                                   base::TimeDelta::FromSeconds(1),
210                                   10);
211   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
212   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
213
214   // Swipe down slightly; nothing has to be changed.
215   generator.GestureScrollSequence(gfx::Point(x, bottom - 300),
216                                   gfx::Point(x, bottom - 250),
217                                   base::TimeDelta::FromSeconds(1),
218                                   10);
219   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
220   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
221
222   // Swipe down to the bottom state.
223   generator.GestureScrollSequence(gfx::Point(x, 10),
224                                   gfx::Point(x, bottom - 120),
225                                   base::TimeDelta::FromSeconds(1),
226                                   10);
227   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
228   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
229
230   generator.GestureScrollSequence(gfx::Point(x, bottom - 40),
231                                   gfx::Point(x, bottom - 300),
232                                   base::TimeDelta::FromSeconds(1),
233                                   10);
234   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
235   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
236
237   // Swipe down to the minimized state.
238   generator.GestureScrollSequence(gfx::Point(x, 10),
239                                   gfx::Point(x, bottom - 1),
240                                   base::TimeDelta::FromSeconds(1),
241                                   10);
242   EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
243   EXPECT_FALSE(WindowManager::Get()->IsOverviewModeActive());
244 }
245
246 TEST_F(HomeCardTest, GesturesToFullDirectly) {
247   ASSERT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
248   ui::test::EventGenerator generator(root_window());
249   gfx::Rect screen_rect(root_window()->bounds());
250
251   const int bottom = screen_rect.bottom();
252   const int x = screen_rect.x() + 1;
253
254   generator.GestureScrollSequence(gfx::Point(x, bottom - 1),
255                                   gfx::Point(x, 20),
256                                   base::TimeDelta::FromSeconds(1),
257                                   10);
258   EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
259   EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
260 }
261
262 TEST_F(HomeCardTest, DontMinimizeWithModalWindow) {
263   aura::Window* home_card = GetHomeCardWindow();
264
265   WindowManager::Get()->EnterOverview();
266   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
267   EXPECT_TRUE(wm::IsActiveWindow(home_card));
268
269   aura::test::TestWindowDelegate delegate;
270   scoped_ptr<aura::Window> modal(test::CreateTransientWindow(
271       &delegate, nullptr, ui::MODAL_TYPE_SYSTEM, false));
272   modal->Show();
273   wm::ActivateWindow(modal.get());
274   EXPECT_TRUE(wm::IsActiveWindow(modal.get()));
275   EXPECT_FALSE(wm::IsActiveWindow(home_card));
276   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
277
278   modal.reset();
279
280   EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
281   EXPECT_TRUE(wm::IsActiveWindow(home_card));
282 }
283
284 }  // namespace athena