Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: chrome/browser/ui/views/app_list/win/app_list_win_unittest.cc

Issue 2143893002: Purge the App Launcher code from Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comment Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2013 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 "chrome/browser/ui/views/app_list/win/app_list_win.h"
6
7 #include "chrome/browser/ui/app_list/app_list_positioner.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "ui/display/display.h"
10 #include "ui/gfx/geometry/point.h"
11 #include "ui/gfx/geometry/rect.h"
12 #include "ui/gfx/geometry/size.h"
13
14 namespace {
15
16 const int kScreenWidth = 800;
17 const int kScreenHeight = 600;
18
19 const int kWindowWidth = 100;
20 const int kWindowHeight = 200;
21
22 // Size of the normal (non-hidden) taskbar.
23 const int kTaskbarSize = 30;
24
25 // The distance the taskbar will appear from the edge of the screen.
26 const int kMinDistanceFromEdge = 3;
27
28 // Max distance the mouse can be from taskbar to count as "near" the taskbar.
29 const int kSnapDistance = 50;
30 // A cursor position that is within the taskbar. This must be < kTaskbarSize.
31 const int kCursorOnTaskbar = kTaskbarSize / 2;
32 // A cursor position that is within 50 pixels of the taskbar.
33 const int kCursorNearTaskbar = kTaskbarSize + kSnapDistance;
34 // A cursor position that is more than 50 pixels away from the taskbar.
35 const int kCursorAwayFromTaskbar = kCursorNearTaskbar + 1;
36
37 // A position for the center of the window that causes the window to overlap the
38 // edge of the screen. This must be < kWindowWidth / 2 and < kWindowHeight / 2.
39 const int kWindowNearEdge = kWindowWidth / 4;
40 // A position for the center of the window that places the window away from all
41 // edges of the screen. This must be > kWindowWidth / 2, > kWindowHeight / 2, <
42 // kScreenWidth - kWindowWidth / 2 and < kScreenHeight - kWindowHeight / 2.
43 const int kWindowAwayFromEdge = 158;
44
45 // Horizontal offset of the simulated Windows 8 split point.
46 const int kWin8SplitPoint = 200;
47
48 } // namespace
49
50 class AppListWinUnitTest : public testing::Test {
51 public:
52 void SetUp() override {
53 display_.set_bounds(gfx::Rect(0, 0, kScreenWidth, kScreenHeight));
54 display_.set_work_area(gfx::Rect(0, 0, kScreenWidth, kScreenHeight));
55 cursor_ = gfx::Point();
56 taskbar_rect_ = gfx::Rect();
57 center_window_ = false;
58 }
59
60 // Set the display work area.
61 void SetWorkArea(int x, int y, int width, int height) {
62 display_.set_work_area(gfx::Rect(x, y, width, height));
63 }
64
65 // Sets up the test environment with the taskbar along a given edge of the
66 // work area.
67 void PlaceTaskbar(AppListPositioner::ScreenEdge edge) {
68 const gfx::Rect& work_area = display_.work_area();
69 switch (edge) {
70 case AppListPositioner::SCREEN_EDGE_UNKNOWN:
71 taskbar_rect_ = gfx::Rect();
72 break;
73 case AppListPositioner::SCREEN_EDGE_LEFT:
74 taskbar_rect_ = gfx::Rect(
75 work_area.x(), work_area.y(), kTaskbarSize, work_area.height());
76 break;
77 case AppListPositioner::SCREEN_EDGE_RIGHT:
78 taskbar_rect_ =
79 gfx::Rect(work_area.x() + work_area.width() - kTaskbarSize,
80 work_area.y(),
81 kTaskbarSize,
82 work_area.height());
83 break;
84 case AppListPositioner::SCREEN_EDGE_TOP:
85 taskbar_rect_ = gfx::Rect(
86 work_area.x(), work_area.y(), work_area.width(), kTaskbarSize);
87 break;
88 case AppListPositioner::SCREEN_EDGE_BOTTOM:
89 taskbar_rect_ =
90 gfx::Rect(work_area.x(),
91 work_area.y() + work_area.height() - kTaskbarSize,
92 work_area.width(),
93 kTaskbarSize);
94 break;
95 }
96 }
97
98 // Set up the test mouse cursor in a given location.
99 void PlaceCursor(int x, int y) {
100 cursor_ = gfx::Point(x, y);
101 }
102
103 void EnableWindowCentering() {
104 center_window_ = true;
105 }
106
107 gfx::Point DoFindAnchorPoint() const {
108 return AppListWin::FindAnchorPoint(gfx::Size(kWindowWidth, kWindowHeight),
109 display_,
110 cursor_,
111 taskbar_rect_,
112 center_window_);
113 }
114
115 private:
116 display::Display display_;
117 gfx::Point cursor_;
118 gfx::Rect taskbar_rect_;
119 bool center_window_;
120 };
121
122 TEST_F(AppListWinUnitTest, FindAnchorPointNoTaskbar) {
123 // Position the app list when there is no taskbar on the display.
124 PlaceCursor(0, 0);
125 // Expect the app list to be in the bottom-left corner.
126 EXPECT_EQ(
127 gfx::Point(kWindowWidth / 2 + kMinDistanceFromEdge,
128 kScreenHeight - kWindowHeight / 2 - kMinDistanceFromEdge),
129 DoFindAnchorPoint());
130 }
131
132 TEST_F(AppListWinUnitTest, FindAnchorPointMouseOffTaskbar) {
133 // Position the app list when the mouse is away from the taskbar.
134
135 // Bottom taskbar. Expect the app list to be in the bottom-left corner.
136 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_BOTTOM);
137 PlaceCursor(kWindowAwayFromEdge, kScreenHeight - kCursorAwayFromTaskbar);
138 EXPECT_EQ(gfx::Point(kWindowWidth / 2 + kMinDistanceFromEdge,
139 kScreenHeight - kTaskbarSize - kWindowHeight / 2 -
140 kMinDistanceFromEdge),
141 DoFindAnchorPoint());
142
143 // Top taskbar. Expect the app list to be in the top-left corner.
144 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_TOP);
145 PlaceCursor(kWindowAwayFromEdge, kCursorAwayFromTaskbar);
146 EXPECT_EQ(gfx::Point(kWindowWidth / 2 + kMinDistanceFromEdge,
147 kTaskbarSize + kWindowHeight / 2 + kMinDistanceFromEdge),
148 DoFindAnchorPoint());
149
150 // Left taskbar. Expect the app list to be in the top-left corner.
151 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_LEFT);
152 PlaceCursor(kCursorAwayFromTaskbar, kWindowAwayFromEdge);
153 EXPECT_EQ(gfx::Point(kTaskbarSize + kWindowWidth / 2 + kMinDistanceFromEdge,
154 kWindowHeight / 2 + kMinDistanceFromEdge),
155 DoFindAnchorPoint());
156
157 // Right taskbar. Expect the app list to be in the top-right corner.
158 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_RIGHT);
159 PlaceCursor(kScreenWidth - kCursorAwayFromTaskbar, kWindowAwayFromEdge);
160 EXPECT_EQ(gfx::Point(kScreenWidth - kTaskbarSize - kWindowWidth / 2 -
161 kMinDistanceFromEdge,
162 kWindowHeight / 2 + kMinDistanceFromEdge),
163 DoFindAnchorPoint());
164 }
165
166 TEST_F(AppListWinUnitTest, FindAnchorPointMouseOnTaskbar) {
167 // Position the app list when the mouse is over the taskbar.
168
169 // Bottom taskbar (mouse well within taskbar). Expect the app list to be at
170 // the bottom centered on the mouse X coordinate.
171 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_BOTTOM);
172 PlaceCursor(kWindowAwayFromEdge, kScreenHeight - kCursorOnTaskbar);
173 EXPECT_EQ(gfx::Point(kWindowAwayFromEdge,
174 kScreenHeight - kTaskbarSize - kWindowHeight / 2 -
175 kMinDistanceFromEdge),
176 DoFindAnchorPoint());
177
178 // Bottom taskbar (outside the taskbar but still close enough).
179 // Expect the app list to be at the bottom centered on the mouse X coordinate.
180 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_BOTTOM);
181 PlaceCursor(kWindowAwayFromEdge, kScreenHeight - kCursorNearTaskbar);
182 EXPECT_EQ(gfx::Point(kWindowAwayFromEdge,
183 kScreenHeight - kTaskbarSize - kWindowHeight / 2 -
184 kMinDistanceFromEdge),
185 DoFindAnchorPoint());
186
187 // Top taskbar. Expect the app list to be at the top centered on the
188 // mouse X coordinate.
189 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_TOP);
190 PlaceCursor(kWindowAwayFromEdge, kCursorNearTaskbar);
191 EXPECT_EQ(gfx::Point(kWindowAwayFromEdge,
192 kTaskbarSize + kWindowHeight / 2 + kMinDistanceFromEdge),
193 DoFindAnchorPoint());
194
195 // Left taskbar. Expect the app list to be at the left centered on the
196 // mouse Y coordinate.
197 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_LEFT);
198 PlaceCursor(kCursorNearTaskbar, kWindowAwayFromEdge);
199 EXPECT_EQ(gfx::Point(kTaskbarSize + kWindowWidth / 2 + kMinDistanceFromEdge,
200 kWindowAwayFromEdge),
201 DoFindAnchorPoint());
202
203 // Right taskbar. Expect the app list to be at the right centered on the
204 // mouse Y coordinate.
205 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_RIGHT);
206 PlaceCursor(kScreenWidth - kCursorNearTaskbar, kWindowAwayFromEdge);
207 EXPECT_EQ(gfx::Point(kScreenWidth - kTaskbarSize - kWindowWidth / 2 -
208 kMinDistanceFromEdge,
209 kWindowAwayFromEdge),
210 DoFindAnchorPoint());
211
212 // Bottom taskbar. Mouse near left edge. App list must not go off screen.
213 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_BOTTOM);
214 PlaceCursor(kWindowNearEdge, kScreenHeight - kCursorOnTaskbar);
215 EXPECT_EQ(gfx::Point(kWindowWidth / 2 + kMinDistanceFromEdge,
216 kScreenHeight - kTaskbarSize - kWindowHeight / 2 -
217 kMinDistanceFromEdge),
218 DoFindAnchorPoint());
219
220 // Bottom taskbar. Mouse near right edge. App list must not go off screen.
221 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_BOTTOM);
222 PlaceCursor(kScreenWidth - kWindowNearEdge, kScreenHeight - kCursorOnTaskbar);
223 EXPECT_EQ(gfx::Point(kScreenWidth - kWindowWidth / 2 - kMinDistanceFromEdge,
224 kScreenHeight - kTaskbarSize - kWindowHeight / 2 -
225 kMinDistanceFromEdge),
226 DoFindAnchorPoint());
227 }
228
229 TEST_F(AppListWinUnitTest, FindAnchorPointWin8SplitScreen) {
230 // Make the work area smaller than the screen, as you would get in Windows 8
231 // when there is a split screen and the Desktop is in one side of the screen.
232 SetWorkArea(
233 kWin8SplitPoint, 0, kScreenWidth - kWin8SplitPoint, kScreenHeight);
234
235 // No taskbar. Expect the app list to be in the bottom-left corner of the work
236 // area.
237 EXPECT_EQ(
238 gfx::Point(kWin8SplitPoint + kWindowWidth / 2 + kMinDistanceFromEdge,
239 kScreenHeight - kWindowHeight / 2 - kMinDistanceFromEdge),
240 DoFindAnchorPoint());
241
242 // Bottom taskbar (mouse off-screen to the left). Expect the app list to be
243 // in the bottom-left corner of the work area.
244 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_BOTTOM);
245 PlaceCursor(kWindowAwayFromEdge, kScreenHeight - kCursorOnTaskbar);
246 EXPECT_EQ(
247 gfx::Point(kWin8SplitPoint + kWindowWidth / 2 + kMinDistanceFromEdge,
248 kScreenHeight - kTaskbarSize - kWindowHeight / 2 -
249 kMinDistanceFromEdge),
250 DoFindAnchorPoint());
251 }
252
253 TEST_F(AppListWinUnitTest, FindAnchorPointCentered) {
254 // Cursor on the top taskbar; enable centered app list mode.
255 PlaceTaskbar(AppListPositioner::SCREEN_EDGE_TOP);
256 PlaceCursor(0, 0);
257 EnableWindowCentering();
258 // Expect the app list to be in the center of the screen (ignore the cursor).
259 EXPECT_EQ(gfx::Point(kScreenWidth / 2, kScreenHeight / 2),
260 DoFindAnchorPoint());
261 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698