| Index: ash/wm/splitview/split_view_controller_unittest.cc
|
| diff --git a/ash/wm/splitview/split_view_controller_unittest.cc b/ash/wm/splitview/split_view_controller_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a4688963cacfecc1c002b82aae602c8d87ef53c5
|
| --- /dev/null
|
| +++ b/ash/wm/splitview/split_view_controller_unittest.cc
|
| @@ -0,0 +1,219 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ash/wm/splitview/split_view_controller.h"
|
| +#include "ash/shell.h"
|
| +#include "ash/test/ash_test_base.h"
|
| +#include "ash/wm/overview/window_selector_controller.h"
|
| +#include "ash/wm/window_state.h"
|
| +#include "ash/wm/window_util.h"
|
| +#include "ash/wm/wm_event.h"
|
| +#include "ui/aura/test/test_window_delegate.h"
|
| +
|
| +namespace ash {
|
| +
|
| +class SplitViewControllerTest : public test::AshTestBase {
|
| + public:
|
| + SplitViewControllerTest() {}
|
| + ~SplitViewControllerTest() override {}
|
| +
|
| + void SetUp() override { test::AshTestBase::SetUp(); }
|
| +
|
| + aura::Window* CreateWindow(const gfx::Rect& bounds) {
|
| + aura::Window* window =
|
| + CreateTestWindowInShellWithDelegate(&delegate_, -1, bounds);
|
| + return window;
|
| + }
|
| +
|
| + void EndSplitView() { split_view_controller()->EndSplitView(); }
|
| +
|
| + void ToggleOverview() {
|
| + Shell::Get()->window_selector_controller()->ToggleOverview();
|
| + }
|
| +
|
| + std::vector<aura::Window*> GetWindowsInOverviewGrids() {
|
| + return Shell::Get()
|
| + ->window_selector_controller()
|
| + ->GetWindowsListInOverviewGridsForTesting();
|
| + }
|
| +
|
| + SplitViewController* split_view_controller() {
|
| + return Shell::Get()->split_view_controller();
|
| + }
|
| +
|
| + private:
|
| + aura::test::TestWindowDelegate delegate_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SplitViewControllerTest);
|
| +};
|
| +
|
| +// Tests the basic functionalities.
|
| +TEST_F(SplitViewControllerTest, Basic) {
|
| + gfx::Rect bounds(0, 0, 400, 400);
|
| + std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
|
| + std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
|
| +
|
| + EXPECT_EQ(split_view_controller()->state(), SplitViewController::NOSNAP);
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| +
|
| + split_view_controller()->SetLeftWindow(window1.get());
|
| + EXPECT_EQ(split_view_controller()->state(),
|
| + SplitViewController::LEFT_SNAPPED);
|
| + EXPECT_EQ(split_view_controller()->left_window(), window1.get());
|
| + EXPECT_NE(split_view_controller()->left_window(), window2.get());
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
|
| + EXPECT_EQ(window1->GetBoundsInScreen(),
|
| + split_view_controller()->GetSnappedWindowBoundsInScreen(
|
| + window1.get(), SplitViewController::LEFT_SNAPPED));
|
| +
|
| + split_view_controller()->SetRightWindow(window2.get());
|
| + EXPECT_EQ(split_view_controller()->state(),
|
| + SplitViewController::BOTH_SNAPPED);
|
| + EXPECT_EQ(split_view_controller()->right_window(), window2.get());
|
| + EXPECT_NE(split_view_controller()->right_window(), window1.get());
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
|
| + EXPECT_EQ(window2->GetBoundsInScreen(),
|
| + split_view_controller()->GetSnappedWindowBoundsInScreen(
|
| + window2.get(), SplitViewController::RIGHT_SNAPPED));
|
| +
|
| + EndSplitView();
|
| + EXPECT_EQ(split_view_controller()->state(), SplitViewController::NOSNAP);
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| +}
|
| +
|
| +// Tests that the default snapped window is the first window that gets snapped.
|
| +TEST_F(SplitViewControllerTest, DefaultSnappedWindow) {
|
| + gfx::Rect bounds(0, 0, 400, 400);
|
| + std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
|
| + std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
|
| +
|
| + split_view_controller()->SetLeftWindow(window1.get());
|
| + split_view_controller()->SetRightWindow(window2.get());
|
| + EXPECT_EQ(window1.get(), split_view_controller()->GetDefaultSnappedWindow());
|
| +
|
| + EndSplitView();
|
| + split_view_controller()->SetLeftWindow(window2.get());
|
| + split_view_controller()->SetRightWindow(window1.get());
|
| + EXPECT_EQ(window2.get(), split_view_controller()->GetDefaultSnappedWindow());
|
| +}
|
| +
|
| +// Tests that closing one of the snapped windows exits the split view mode.
|
| +TEST_F(SplitViewControllerTest, EndSplitViewUponWindowClose) {
|
| + gfx::Rect bounds(0, 0, 400, 400);
|
| + std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
|
| + std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
|
| +
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| + split_view_controller()->SetLeftWindow(window1.get());
|
| + split_view_controller()->SetRightWindow(window2.get());
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
|
| +
|
| + window1.reset();
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| +}
|
| +
|
| +// Tests that if one of the snapped window gets minimized / maximized / full-
|
| +// screened, end the split view mode.
|
| +TEST_F(SplitViewControllerTest, WindowStateChangeTest) {
|
| + gfx::Rect bounds(0, 0, 400, 400);
|
| + std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| +
|
| + split_view_controller()->SetLeftWindow(window1.get());
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
|
| +
|
| + wm::WMEvent minimize_event(wm::WM_EVENT_MINIMIZE);
|
| + wm::GetWindowState(window1.get())->OnWMEvent(&minimize_event);
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| +
|
| + split_view_controller()->SetLeftWindow(window1.get());
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
|
| +
|
| + wm::WMEvent maximize_event(wm::WM_EVENT_MAXIMIZE);
|
| + wm::GetWindowState(window1.get())->OnWMEvent(&maximize_event);
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| +
|
| + split_view_controller()->SetLeftWindow(window1.get());
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
|
| +
|
| + wm::WMEvent fullscreen_event(wm::WM_EVENT_FULLSCREEN);
|
| + wm::GetWindowState(window1.get())->OnWMEvent(&fullscreen_event);
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| +}
|
| +
|
| +// Tests that if split view mode is active, activate another window will snap
|
| +// the window to the non-default side of the screen.
|
| +TEST_F(SplitViewControllerTest, WindowActivationTest) {
|
| + gfx::Rect bounds(0, 0, 400, 400);
|
| + std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
|
| + std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
|
| + std::unique_ptr<aura::Window> window3(CreateWindow(bounds));
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| +
|
| + split_view_controller()->SetLeftWindow(window1.get());
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
|
| + EXPECT_EQ(split_view_controller()->left_window(), window1.get());
|
| + EXPECT_EQ(split_view_controller()->state(),
|
| + SplitViewController::LEFT_SNAPPED);
|
| +
|
| + wm::ActivateWindow(window2.get());
|
| + EXPECT_EQ(split_view_controller()->right_window(), window2.get());
|
| + EXPECT_EQ(split_view_controller()->state(),
|
| + SplitViewController::BOTH_SNAPPED);
|
| +
|
| + wm::ActivateWindow(window3.get());
|
| + EXPECT_EQ(split_view_controller()->right_window(), window3.get());
|
| + EXPECT_EQ(split_view_controller()->state(),
|
| + SplitViewController::BOTH_SNAPPED);
|
| +}
|
| +
|
| +// Tests that if split view mode and overview mode are active at the same time,
|
| +// i.e., half of the screen is occupied by a snapped window and half of the
|
| +// screen is occupied by the overview windows grid, the next activatable window
|
| +// will be picked to snap when exiting the overview mode.
|
| +TEST_F(SplitViewControllerTest, ExitOverviewTest) {
|
| + gfx::Rect bounds(0, 0, 400, 400);
|
| + std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
|
| + std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
|
| + std::unique_ptr<aura::Window> window3(CreateWindow(bounds));
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), false);
|
| +
|
| + ToggleOverview();
|
| + split_view_controller()->SetLeftWindow(window1.get());
|
| + EXPECT_EQ(split_view_controller()->IsSplitViewModeActive(), true);
|
| + EXPECT_EQ(split_view_controller()->left_window(), window1.get());
|
| + EXPECT_EQ(split_view_controller()->state(),
|
| + SplitViewController::LEFT_SNAPPED);
|
| +
|
| + ToggleOverview();
|
| + EXPECT_EQ(split_view_controller()->state(),
|
| + SplitViewController::BOTH_SNAPPED);
|
| + EXPECT_EQ(split_view_controller()->right_window(), window3.get());
|
| +}
|
| +
|
| +// Tests that if split view mode is active when entering overview, the overview
|
| +// windows grid should show in the non-default side of the screen, and the
|
| +// default snapped window should not be shown in the overview window grid.
|
| +TEST_F(SplitViewControllerTest, EnterOverviewTest) {
|
| + gfx::Rect bounds(0, 0, 400, 400);
|
| + std::unique_ptr<aura::Window> window1(CreateWindow(bounds));
|
| + std::unique_ptr<aura::Window> window2(CreateWindow(bounds));
|
| + std::unique_ptr<aura::Window> window3(CreateWindow(bounds));
|
| +
|
| + split_view_controller()->SetLeftWindow(window1.get());
|
| + split_view_controller()->SetRightWindow(window2.get());
|
| + EXPECT_EQ(split_view_controller()->state(),
|
| + SplitViewController::BOTH_SNAPPED);
|
| + EXPECT_EQ(split_view_controller()->GetDefaultSnappedWindow(), window1.get());
|
| +
|
| + ToggleOverview();
|
| + EXPECT_EQ(split_view_controller()->state(),
|
| + SplitViewController::LEFT_SNAPPED);
|
| + std::vector<aura::Window*> windows = GetWindowsInOverviewGrids();
|
| + auto iter = std::find(windows.begin(), windows.end(),
|
| + split_view_controller()->GetDefaultSnappedWindow());
|
| + EXPECT_TRUE(iter == windows.end());
|
| +}
|
| +
|
| +} // namespace ash
|
|
|