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

Unified Diff: ash/wm/overview/window_selector_unittest.cc

Issue 251103005: Added arrow key navigation to Overview Mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed rob's comments, clang warnings. Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: ash/wm/overview/window_selector_unittest.cc
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc
index 1b65eff9263a0190f1aa1a970e2aceae451b58fc..01fad7d9c29807220146439f26ce8a2b4e914de5 100644
--- a/ash/wm/overview/window_selector_unittest.cc
+++ b/ash/wm/overview/window_selector_unittest.cc
@@ -16,6 +16,7 @@
#include "ash/test/shell_test_api.h"
#include "ash/test/test_shelf_delegate.h"
#include "ash/wm/mru_window_tracker.h"
+#include "ash/wm/overview/window_grid.h"
#include "ash/wm/overview/window_selector.h"
#include "ash/wm/overview/window_selector_controller.h"
#include "ash/wm/overview/window_selector_item.h"
@@ -81,6 +82,9 @@ class WindowSelectorTest : public test::AshTestBase {
return CreateTestWindowInShellWithDelegate(&delegate_, -1, bounds);
}
+ aura::Window* CreateWindowWithId(const gfx::Rect& bounds, int id) {
+ return CreateTestWindowInShellWithDelegate(&delegate_, id, bounds);
+ }
aura::Window* CreateNonActivatableWindow(const gfx::Rect& bounds) {
aura::Window* window = CreateWindow(bounds);
aura::client::SetActivationDelegate(window,
@@ -154,6 +158,12 @@ class WindowSelectorTest : public test::AshTestBase {
event_generator.ClickLeftButton();
}
+ void SendKey(ui::KeyboardCode key) {
+ aura::test::EventGenerator event_generator(Shell::GetPrimaryRootWindow());
+ event_generator.PressKey(key, 0);
+ event_generator.ReleaseKey(key, 0);
+ }
+
bool IsSelecting() {
return ash::Shell::GetInstance()->window_selector_controller()->
IsSelecting();
@@ -164,11 +174,18 @@ class WindowSelectorTest : public test::AshTestBase {
Shell::GetPrimaryRootWindow())->GetFocusedWindow();
}
- ScopedVector<WindowSelectorItem>* GetWindowItems() {
- return &(ash::Shell::GetInstance()->window_selector_controller()->
- window_selector_->windows_);
+ const std::vector<WindowSelectorItem*>& GetWindowItemsForRoot(int index) {
+ return ash::Shell::GetInstance()->window_selector_controller()->
+ window_selector_->grid_list_[index]->window_list_.get();
}
+ const aura::Window* GetSelectedWindow() {
+ WindowSelector* ws = ash::Shell::GetInstance()->
+ window_selector_controller()->window_selector_.get();
+ return ws->grid_list_[ws->selected_grid_index_]->
+ SelectedWindow()->SelectionWindow();
+ }
+
views::Widget* GetLabelWidget(ash::WindowSelectorItem* window) {
return window->window_label_.get();
}
@@ -699,7 +716,7 @@ TEST_F(WindowSelectorTest, CreateLabelUnderWindow) {
base::string16 window_title = base::UTF8ToUTF16("My window");
window->set_title(window_title);
ToggleOverview();
- WindowSelectorItem* window_item = GetWindowItems()->back();
+ WindowSelectorItem* window_item = GetWindowItemsForRoot(0).back();
views::Widget* widget = GetLabelWidget(window_item);
// Has the label widget been created?
ASSERT_TRUE(widget);
@@ -728,7 +745,7 @@ TEST_F(WindowSelectorTest, CreateLabelUnderPanel) {
panel2->set_title(panel2_title);
wm::ActivateWindow(panel1.get());
ToggleOverview();
- WindowSelectorItem* window_item = GetWindowItems()->back();
+ WindowSelectorItem* window_item = GetWindowItemsForRoot(0).back();
views::Widget* widget = GetLabelWidget(window_item);
// Has the label widget been created?
ASSERT_TRUE(widget);
@@ -770,4 +787,78 @@ TEST_F(WindowSelectorTest, DisplayOrientationChanged) {
}
}
+// Tests traversing some windows in overview mode with the arrow keys in every
+// possible direction.
+TEST_F(WindowSelectorTest, BasicArrowKeyNavigation) {
+ if (!SupportsHostWindowResize())
+ return;
+ const size_t test_windows = 7;
+ UpdateDisplay("400x300");
+ ScopedVector<aura::Window> windows;
+ for (size_t i = test_windows; i > 0; i--)
+ windows.push_back(CreateWindowWithId(gfx::Rect(0, 0, 100, 100), i));
+
+ ui::KeyboardCode arrow_keys[] = {
+ ui::VKEY_RIGHT,
+ ui::VKEY_DOWN,
+ ui::VKEY_LEFT,
+ ui::VKEY_UP
+ };
+ // Expected window layout:
+ // +-------+ +-------+ +-------+
+ // | 1 | | 2 | | 3 |
+ // +-------+ +-------+ +-------+
+ // +-------+ +-------+ +-------+
+ // | 4 | | 5 | | 6 |
+ // +-------+ +-------+ +-------+
+ // +-------+
+ // | 7 |
+ // +-------+
+ // Index for each window during a full loop plus wrapping around.
+ int index_path_for_direction[][test_windows + 1] = {
+ {1, 2, 3, 4, 5, 6, 7, 1}, // Right
+ {1, 4, 7, 2, 5, 3, 6, 1}, // Down
+ {7, 6, 5, 4, 3, 2, 1, 7}, // Left
+ {6, 3, 5, 2, 7, 4, 1, 6} // Up
+ };
+
+ for (size_t key_index = 0; key_index < arraysize(arrow_keys); key_index++) {
+ ToggleOverview();
+ for (size_t i = 0; i < test_windows + 1; i++) {
+ SendKey(arrow_keys[key_index]);
+ // TODO(nsatragno): Add a more readable error message by constructing a
+ // string from the window IDs.
+ EXPECT_EQ(GetSelectedWindow()->id(),
+ index_path_for_direction[key_index][i]);
+ }
+ ToggleOverview();
+ }
+}
+
+// Tests basic selection across multiple monitors.
+TEST_F(WindowSelectorTest, BasicMultiMonitorArrowKeyNavigation) {
+ if (!SupportsMultipleDisplays())
+ return;
+
+ UpdateDisplay("400x400,400x400");
+ gfx::Rect bounds1(0, 0, 100, 100);
+ gfx::Rect bounds2(450, 0, 100, 100);
+ scoped_ptr<aura::Window> window4(CreateWindow(bounds2));
+ scoped_ptr<aura::Window> window3(CreateWindow(bounds2));
+ scoped_ptr<aura::Window> window2(CreateWindow(bounds1));
+ scoped_ptr<aura::Window> window1(CreateWindow(bounds1));
+
+
+ ToggleOverview();
+
+ SendKey(ui::VKEY_RIGHT);
+ EXPECT_EQ(GetSelectedWindow(), window1.get());
+ SendKey(ui::VKEY_RIGHT);
+ EXPECT_EQ(GetSelectedWindow(), window2.get());
+ SendKey(ui::VKEY_RIGHT);
+ EXPECT_EQ(GetSelectedWindow(), window3.get());
+ SendKey(ui::VKEY_RIGHT);
+ EXPECT_EQ(GetSelectedWindow(), window4.get());
+}
+
} // namespace ash
« ash/wm/overview/window_selector.cc ('K') | « ash/wm/overview/window_selector_item.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698