Tidy logcat message on test for mmap from apk.
[chromium-blink-merge.git] / athena / home / home_card_unittest.cc
blobfb31f7ce707c3c8ded8785eb0a673562036d928f
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.
5 #include "athena/home/public/home_card.h"
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/wm/public/window_manager.h"
12 #include "ui/aura/window.h"
13 #include "ui/events/test/event_generator.h"
14 #include "ui/gfx/display.h"
15 #include "ui/gfx/screen.h"
16 #include "ui/views/controls/textfield/textfield.h"
17 #include "ui/views/focus/focus_manager.h"
18 #include "ui/views/widget/widget.h"
19 #include "ui/wm/core/shadow_types.h"
20 #include "ui/wm/core/window_util.h"
22 namespace athena {
24 aura::Window* GetHomeCardWindow() {
25 return static_cast<HomeCardImpl*>(HomeCard::Get())->
26 GetHomeCardWindowForTest();
29 // Returns true if the keyboard focus is on the search box.
30 bool IsSearchBoxFocused(aura::Window* home_card) {
31 return views::Widget::GetWidgetForNativeWindow(home_card)->
32 GetContentsView()->GetViewByID(kHomeCardSearchBoxId)->HasFocus();
35 typedef test::AthenaTestBase HomeCardTest;
37 TEST_F(HomeCardTest, BasicTransition) {
38 ASSERT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
39 aura::Window* home_card = GetHomeCardWindow();
40 const int screen_height = root_window()->bounds().height();
41 const int work_area_height = gfx::Screen::GetScreenFor(root_window())->
42 GetDisplayNearestWindow(root_window()).work_area().height();
43 ASSERT_TRUE(home_card);
45 // In the minimized state, home card should be outside (below) the work area.
46 EXPECT_EQ(screen_height - kHomeCardMinimizedHeight,
47 home_card->GetTargetBounds().y());
48 EXPECT_EQ(work_area_height, home_card->GetTargetBounds().y());
49 EXPECT_EQ(wm::ShadowType::SHADOW_TYPE_NONE, wm::GetShadowType(home_card));
51 WindowManager::Get()->EnterOverview();
52 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
53 EXPECT_EQ(screen_height - kHomeCardHeight, home_card->GetTargetBounds().y());
54 EXPECT_EQ(wm::ShadowType::SHADOW_TYPE_RECTANGULAR,
55 wm::GetShadowType(home_card));
57 WindowManager::Get()->ExitOverview();
58 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
59 EXPECT_EQ(work_area_height, home_card->GetTargetBounds().y());
60 EXPECT_EQ(wm::ShadowType::SHADOW_TYPE_NONE, wm::GetShadowType(home_card));
63 TEST_F(HomeCardTest, VirtualKeyboardTransition) {
64 // Minimized -> Hidden for virtual keyboard.
65 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
66 const gfx::Rect vk_bounds(0, 0, 100, 100);
67 HomeCard::Get()->UpdateVirtualKeyboardBounds(vk_bounds);
68 EXPECT_EQ(HomeCard::HIDDEN, HomeCard::Get()->GetState());
69 HomeCard::Get()->UpdateVirtualKeyboardBounds(gfx::Rect());
70 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
72 // bottom -> centered for virtual keyboard.
73 WindowManager::Get()->EnterOverview();
74 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
75 HomeCard::Get()->UpdateVirtualKeyboardBounds(vk_bounds);
76 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
78 aura::Window* home_card = GetHomeCardWindow();
79 EXPECT_EQ(0, home_card->GetTargetBounds().y());
80 EXPECT_EQ(wm::ShadowType::SHADOW_TYPE_RECTANGULAR,
81 wm::GetShadowType(home_card));
83 HomeCard::Get()->UpdateVirtualKeyboardBounds(gfx::Rect());
84 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
87 TEST_F(HomeCardTest, ToggleOverviewWithVirtualKeyboard) {
88 // Minimized -> Hidden for virtual keyboard.
89 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
90 const gfx::Rect vk_bounds(0, 0, 100, 100);
91 HomeCard::Get()->UpdateVirtualKeyboardBounds(vk_bounds);
92 EXPECT_EQ(HomeCard::HIDDEN, HomeCard::Get()->GetState());
94 // EnterOverview() revives the bottom home card. Home card also gets
95 /// activated which will close the virtual keyboard.
96 WindowManager::Get()->EnterOverview();
97 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
98 aura::Window* home_card = GetHomeCardWindow();
99 EXPECT_TRUE(wm::IsActiveWindow(home_card));
102 // Verify if the home card is correctly minimized after app launch.
103 TEST_F(HomeCardTest, AppSelection) {
104 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
106 WindowManager::Get()->EnterOverview();
107 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
109 athena::ActivityFactory::Get()->CreateWebActivity(
110 NULL, base::string16(), GURL("http://www.google.com/"));
111 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
114 TEST_F(HomeCardTest, Accelerators) {
115 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
117 ui::test::EventGenerator generator(root_window());
119 // CTRL+L toggles centered home card, check that overview mode follows
120 generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
121 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
122 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
123 generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
124 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
125 EXPECT_FALSE(WindowManager::Get()->IsOverviewModeActive());
127 // ESC key hides centered home card
128 generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
129 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
130 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
131 generator.PressKey(ui::VKEY_ESCAPE, ui::EF_NONE);
132 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
133 EXPECT_FALSE(WindowManager::Get()->IsOverviewModeActive());
135 // Do nothing with bottom home card with CTRL+L, hide with ESC key
136 WindowManager::Get()->EnterOverview();
137 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
138 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
139 generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
140 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
141 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
142 generator.PressKey(ui::VKEY_ESCAPE, ui::EF_NONE);
143 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
144 EXPECT_FALSE(WindowManager::Get()->IsOverviewModeActive());
146 // Do nothing if the centered state is a temporary state.
147 WindowManager::Get()->EnterOverview();
148 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
149 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
150 HomeCard::Get()->UpdateVirtualKeyboardBounds(gfx::Rect(0, 0, 100, 100));
151 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
152 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
153 generator.PressKey(ui::VKEY_L, ui::EF_CONTROL_DOWN);
154 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
155 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
158 TEST_F(HomeCardTest, MouseClick) {
159 ASSERT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
161 // Mouse click at the bottom of the screen should invokes overview mode and
162 // changes the state to BOTTOM.
163 gfx::Rect screen_rect(root_window()->bounds());
164 ui::test::EventGenerator generator(
165 root_window(), gfx::Point(
166 screen_rect.x() + screen_rect.width() / 2, screen_rect.bottom() - 1));
167 generator.ClickLeftButton();
169 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
170 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
172 // Further clicks are simply ignored.
173 generator.ClickLeftButton();
174 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
175 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
178 TEST_F(HomeCardTest, Gestures) {
179 ASSERT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
180 ui::test::EventGenerator generator(root_window());
181 gfx::Rect screen_rect(root_window()->bounds());
183 const int bottom = screen_rect.bottom();
184 const int x = screen_rect.x() + 1;
186 generator.GestureScrollSequence(gfx::Point(x, bottom - 1),
187 gfx::Point(x, bottom - 70),
188 base::TimeDelta::FromSeconds(1),
189 10);
190 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
191 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
193 // Too short moves. Nothing has changed.
194 generator.GestureScrollSequence(gfx::Point(x, bottom - 40),
195 gfx::Point(x, bottom - 80),
196 base::TimeDelta::FromSeconds(1),
197 10);
198 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
199 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
201 generator.GestureScrollSequence(gfx::Point(x, bottom - 40),
202 gfx::Point(x, bottom - 20),
203 base::TimeDelta::FromSeconds(1),
204 10);
205 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
206 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
208 // Swipe up to the centered state.
209 generator.GestureScrollSequence(gfx::Point(x, bottom - 40),
210 gfx::Point(x, bottom - 300),
211 base::TimeDelta::FromSeconds(1),
212 10);
213 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
214 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
216 // Swipe up from centered; nothing has to be changed.
217 generator.GestureScrollSequence(gfx::Point(x, bottom - 300),
218 gfx::Point(x, bottom - 350),
219 base::TimeDelta::FromSeconds(1),
220 10);
221 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
222 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
224 // Swipe down slightly; nothing has to be changed.
225 generator.GestureScrollSequence(gfx::Point(x, bottom - 300),
226 gfx::Point(x, bottom - 250),
227 base::TimeDelta::FromSeconds(1),
228 10);
229 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
230 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
232 // Swipe down to the bottom state.
233 generator.GestureScrollSequence(gfx::Point(x, 10),
234 gfx::Point(x, bottom - 90),
235 base::TimeDelta::FromSeconds(1),
236 10);
237 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
238 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
240 generator.GestureScrollSequence(gfx::Point(x, bottom - 40),
241 gfx::Point(x, bottom - 300),
242 base::TimeDelta::FromSeconds(1),
243 10);
244 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
245 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
247 // Swipe down to the minimized state.
248 generator.GestureScrollSequence(gfx::Point(x, 10),
249 gfx::Point(x, bottom - 1),
250 base::TimeDelta::FromSeconds(1),
251 10);
252 EXPECT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
253 EXPECT_FALSE(WindowManager::Get()->IsOverviewModeActive());
256 TEST_F(HomeCardTest, GesturesToFullDirectly) {
257 ASSERT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
258 ui::test::EventGenerator generator(root_window());
259 gfx::Rect screen_rect(root_window()->bounds());
261 const int bottom = screen_rect.bottom();
262 const int x = screen_rect.x() + 1;
264 generator.GestureScrollSequence(gfx::Point(x, bottom - 1),
265 gfx::Point(x, 20),
266 base::TimeDelta::FromSeconds(1),
267 10);
268 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
269 EXPECT_TRUE(WindowManager::Get()->IsOverviewModeActive());
272 TEST_F(HomeCardTest, KeyboardFocus) {
273 ASSERT_EQ(HomeCard::VISIBLE_MINIMIZED, HomeCard::Get()->GetState());
274 aura::Window* home_card = GetHomeCardWindow();
275 ASSERT_FALSE(IsSearchBoxFocused(home_card));
277 WindowManager::Get()->EnterOverview();
278 ASSERT_FALSE(IsSearchBoxFocused(home_card));
280 ui::test::EventGenerator generator(root_window());
281 gfx::Rect screen_rect(root_window()->bounds());
283 const int bottom = screen_rect.bottom();
284 const int x = screen_rect.x() + 1;
286 generator.GestureScrollSequence(gfx::Point(x, bottom - 40),
287 gfx::Point(x, 10),
288 base::TimeDelta::FromSeconds(1),
289 10);
290 EXPECT_EQ(HomeCard::VISIBLE_CENTERED, HomeCard::Get()->GetState());
291 EXPECT_TRUE(IsSearchBoxFocused(home_card));
293 generator.GestureScrollSequence(gfx::Point(x, 10),
294 gfx::Point(x, bottom - 100),
295 base::TimeDelta::FromSeconds(1),
296 10);
297 EXPECT_EQ(HomeCard::VISIBLE_BOTTOM, HomeCard::Get()->GetState());
298 EXPECT_FALSE(IsSearchBoxFocused(home_card));
301 } // namespace athena