| 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
|
|
|