| Index: athena/wm/split_view_controller_unittest.cc
|
| diff --git a/athena/wm/split_view_controller_unittest.cc b/athena/wm/split_view_controller_unittest.cc
|
| deleted file mode 100644
|
| index 9a97f731be677ee02f8a735f1cc92fe004cd3621..0000000000000000000000000000000000000000
|
| --- a/athena/wm/split_view_controller_unittest.cc
|
| +++ /dev/null
|
| @@ -1,333 +0,0 @@
|
| -// Copyright 2014 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 "athena/wm/split_view_controller.h"
|
| -
|
| -#include "athena/screen/public/screen_manager.h"
|
| -#include "athena/test/base/athena_test_base.h"
|
| -#include "athena/test/base/test_windows.h"
|
| -#include "athena/wm/public/window_list_provider.h"
|
| -#include "athena/wm/test/window_manager_impl_test_api.h"
|
| -#include "base/memory/scoped_vector.h"
|
| -#include "ui/aura/test/test_window_delegate.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/gfx/display.h"
|
| -#include "ui/gfx/screen.h"
|
| -#include "ui/wm/core/window_util.h"
|
| -
|
| -namespace athena {
|
| -
|
| -class SplitViewControllerTest : public test::AthenaTestBase {
|
| - public:
|
| - SplitViewControllerTest() {}
|
| - ~SplitViewControllerTest() override {}
|
| -
|
| - // test::AthenaTestBase:
|
| - void SetUp() override {
|
| - test::AthenaTestBase::SetUp();
|
| - api_.reset(new test::WindowManagerImplTestApi);
|
| - }
|
| -
|
| - void TearDown() override {
|
| - api_.reset();
|
| - test::AthenaTestBase::TearDown();
|
| - }
|
| -
|
| - // Returns the topmost window in z-order.
|
| - const aura::Window* GetTopmostWindow() const {
|
| - return *api_->GetWindowListProvider()->GetWindowList().rbegin();
|
| - }
|
| -
|
| - // Returns the second topmost window in z-order.
|
| - const aura::Window* GetSecondTopmostWindow() const {
|
| - const aura::Window::Windows& list =
|
| - api_->GetWindowListProvider()->GetWindowList();
|
| - return *(list.rbegin() + 1);
|
| - }
|
| -
|
| - // Returns whether only the split view windows are visible.
|
| - bool OnlySplitViewWindowsVisible() const {
|
| - SplitViewController* controller = api_->GetSplitViewController();
|
| - DCHECK(controller->IsSplitViewModeActive());
|
| - aura::Window::Windows list =
|
| - api_->GetWindowListProvider()->GetWindowList();
|
| - for (aura::Window::Windows::const_iterator it = list.begin();
|
| - it != list.end(); ++it) {
|
| - bool in_split_view = (*it == controller->left_window() ||
|
| - *it == controller->right_window());
|
| - if (in_split_view != (*it)->IsVisible())
|
| - return false;
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - bool IsSplitViewAllowed() const {
|
| - return api_->GetSplitViewController()->CanActivateSplitViewMode();
|
| - }
|
| -
|
| - test::WindowManagerImplTestApi* api() {
|
| - return api_.get();
|
| - }
|
| -
|
| - void HandleScrollBegin(float delta) {
|
| - api_->GetSplitViewController()->HandleScrollBegin(delta);
|
| - }
|
| -
|
| - void HandleScrollUpdate(float delta) {
|
| - api_->GetSplitViewController()->HandleScrollUpdate(delta);
|
| - }
|
| -
|
| - void HandleScrollEnd(float velocity) {
|
| - api_->GetSplitViewController()->HandleScrollEnd(velocity);
|
| - }
|
| -
|
| - float GetMaxDistanceFromMiddleForTest() {
|
| - return api_->GetSplitViewController()->GetMaxDistanceFromMiddleForTest();
|
| - }
|
| -
|
| - float GetMinFlingVelocityForTest() {
|
| - return api_->GetSplitViewController()->GetMinFlingVelocityForTest();
|
| - }
|
| -
|
| - private:
|
| - scoped_ptr<test::WindowManagerImplTestApi> api_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(SplitViewControllerTest);
|
| -};
|
| -
|
| -// Tests that when split mode is activated, the windows on the left and right
|
| -// are selected correctly.
|
| -TEST_F(SplitViewControllerTest, SplitModeActivation) {
|
| - aura::test::TestWindowDelegate delegate;
|
| - ScopedVector<aura::Window> windows;
|
| - const int kNumWindows = 6;
|
| - for (size_t i = 0; i < kNumWindows; ++i) {
|
| - scoped_ptr<aura::Window> window =
|
| - test::CreateNormalWindow(nullptr, nullptr);
|
| - windows.push_back(window.release());
|
| - windows[i]->Hide();
|
| - }
|
| -
|
| - windows[kNumWindows - 1]->Show();
|
| - wm::ActivateWindow(windows[kNumWindows - 1]);
|
| -
|
| - SplitViewController* controller = api()->GetSplitViewController();
|
| - ASSERT_FALSE(controller->IsSplitViewModeActive());
|
| -
|
| - controller->ActivateSplitMode(nullptr, nullptr, nullptr);
|
| - ASSERT_TRUE(controller->IsSplitViewModeActive());
|
| - // The last two windows should be on the left and right, respectively.
|
| - EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
|
| - EXPECT_EQ(windows[kNumWindows - 2], controller->right_window());
|
| - EXPECT_EQ(windows[kNumWindows - 1], GetTopmostWindow());
|
| - EXPECT_EQ(windows[kNumWindows - 2], GetSecondTopmostWindow());
|
| - EXPECT_TRUE(OnlySplitViewWindowsVisible());
|
| -
|
| - // Select the window that is currently on the left for the right panel. The
|
| - // windows should switch.
|
| - controller->ActivateSplitMode(
|
| - nullptr, windows[kNumWindows - 1], windows[kNumWindows - 1]);
|
| - EXPECT_EQ(windows[kNumWindows - 2], controller->left_window());
|
| - EXPECT_EQ(windows[kNumWindows - 1], controller->right_window());
|
| - EXPECT_EQ(windows[kNumWindows - 1], GetTopmostWindow());
|
| - EXPECT_EQ(windows[kNumWindows - 2], GetSecondTopmostWindow());
|
| - EXPECT_TRUE(OnlySplitViewWindowsVisible());
|
| -
|
| - controller->ActivateSplitMode(
|
| - windows[kNumWindows - 1], nullptr, windows[kNumWindows - 1]);
|
| - EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
|
| - EXPECT_EQ(windows[kNumWindows - 2], controller->right_window());
|
| - EXPECT_EQ(windows[kNumWindows - 1], GetTopmostWindow());
|
| - EXPECT_EQ(windows[kNumWindows - 2], GetSecondTopmostWindow());
|
| - EXPECT_TRUE(OnlySplitViewWindowsVisible());
|
| -
|
| - // Select the same windows, but pass in a different window to activate.
|
| - controller->ActivateSplitMode(windows[kNumWindows - 1],
|
| - windows[kNumWindows - 2],
|
| - windows[kNumWindows - 2]);
|
| - EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
|
| - EXPECT_EQ(windows[kNumWindows - 2], controller->right_window());
|
| - EXPECT_EQ(windows[kNumWindows - 2], GetTopmostWindow());
|
| - EXPECT_EQ(windows[kNumWindows - 1], GetSecondTopmostWindow());
|
| - EXPECT_TRUE(OnlySplitViewWindowsVisible());
|
| -
|
| - // Select one of the windows behind the stacks for the right panel. The window
|
| - // on the left should remain unchanged.
|
| - controller->ActivateSplitMode(nullptr, windows[0], windows[0]);
|
| - EXPECT_EQ(windows[kNumWindows - 1], controller->left_window());
|
| - EXPECT_EQ(windows[0], controller->right_window());
|
| - EXPECT_EQ(windows[0], GetTopmostWindow());
|
| - EXPECT_EQ(windows[kNumWindows - 1], GetSecondTopmostWindow());
|
| - EXPECT_TRUE(OnlySplitViewWindowsVisible());
|
| -
|
| - controller->ActivateSplitMode(windows[1], nullptr, nullptr);
|
| - EXPECT_EQ(windows[1], controller->left_window());
|
| - EXPECT_EQ(windows[0], controller->right_window());
|
| - EXPECT_EQ(windows[0], GetTopmostWindow());
|
| - EXPECT_EQ(windows[1], GetSecondTopmostWindow());
|
| - EXPECT_TRUE(OnlySplitViewWindowsVisible());
|
| -
|
| - controller->ActivateSplitMode(windows[4], windows[5], windows[5]);
|
| - EXPECT_EQ(windows[4], controller->left_window());
|
| - EXPECT_EQ(windows[5], controller->right_window());
|
| - EXPECT_EQ(windows[5], GetTopmostWindow());
|
| - EXPECT_EQ(windows[4], GetSecondTopmostWindow());
|
| - EXPECT_TRUE(OnlySplitViewWindowsVisible());
|
| -
|
| - controller->ActivateSplitMode(windows[0], nullptr, windows[0]);
|
| - EXPECT_EQ(windows[0], controller->left_window());
|
| - EXPECT_EQ(windows[5], controller->right_window());
|
| - EXPECT_EQ(windows[0], GetTopmostWindow());
|
| - EXPECT_EQ(windows[5], GetSecondTopmostWindow());
|
| - EXPECT_TRUE(OnlySplitViewWindowsVisible());
|
| -}
|
| -
|
| -// Helper function used to return the x-translation value of the layer
|
| -// containing |window|.
|
| -float XTranslationForWindow(aura::Window* window) {
|
| - return window->layer()->transform().To2dTranslation().x();
|
| -}
|
| -
|
| -// Tests that calls to the methods of DragHandleScrollDelegate will disengage
|
| -// split view mode under the correct circumstances.
|
| -TEST_F(SplitViewControllerTest, ScrollDragHandle) {
|
| - aura::test::TestWindowDelegate delegate;
|
| - ScopedVector<aura::Window> windows;
|
| - const int kNumWindows = 2;
|
| - for (size_t i = 0; i < kNumWindows; ++i) {
|
| - scoped_ptr<aura::Window> window =
|
| - test::CreateNormalWindow(nullptr, nullptr);
|
| - windows.push_back(window.release());
|
| - windows[i]->Hide();
|
| - }
|
| -
|
| - SplitViewController* controller = api()->GetSplitViewController();
|
| - ASSERT_FALSE(controller->IsSplitViewModeActive());
|
| -
|
| - aura::Window* left_window = windows[0];
|
| - aura::Window* right_window = windows[1];
|
| - left_window->Show();
|
| - wm::ActivateWindow(left_window);
|
| -
|
| - // Activate split view.
|
| - controller->ActivateSplitMode(left_window, right_window, left_window);
|
| - ASSERT_TRUE(controller->IsSplitViewModeActive());
|
| - EXPECT_TRUE(OnlySplitViewWindowsVisible());
|
| - EXPECT_EQ(left_window, controller->left_window());
|
| - EXPECT_EQ(right_window, controller->right_window());
|
| -
|
| - const float small_distance = GetMaxDistanceFromMiddleForTest() - 1.0f;
|
| - const float large_distance = GetMaxDistanceFromMiddleForTest() + 1.0f;
|
| - const float slow_velocity = GetMinFlingVelocityForTest() - 1.0f;
|
| - const float fast_velocity = GetMinFlingVelocityForTest() + 1.0f;
|
| -
|
| - // Only scroll a small distance to the right, but not enough to be able to
|
| - // disengage split view.
|
| - EXPECT_EQ(0.0f, XTranslationForWindow(right_window));
|
| - HandleScrollBegin(small_distance - 1.0f);
|
| - EXPECT_EQ(small_distance - 1.0f, XTranslationForWindow(right_window));
|
| - HandleScrollUpdate(small_distance);
|
| - EXPECT_EQ(small_distance, XTranslationForWindow(right_window));
|
| - HandleScrollEnd(0.0f);
|
| - EXPECT_EQ(0.0f, XTranslationForWindow(right_window));
|
| - ASSERT_TRUE(controller->IsSplitViewModeActive());
|
| - EXPECT_EQ(left_window, controller->left_window());
|
| - EXPECT_EQ(right_window, controller->right_window());
|
| -
|
| - // Scroll far enough to the right to be able to disengage split view. Split
|
| - // view should be disengaged with the left window active.
|
| - HandleScrollBegin(small_distance);
|
| - HandleScrollUpdate(large_distance);
|
| - HandleScrollEnd(0.0f);
|
| - ASSERT_FALSE(controller->IsSplitViewModeActive());
|
| - EXPECT_EQ(nullptr, controller->left_window());
|
| - EXPECT_EQ(nullptr, controller->right_window());
|
| - EXPECT_EQ(left_window, GetTopmostWindow());
|
| -
|
| - // Re-activate split view mode.
|
| - controller->ActivateSplitMode(left_window, right_window, left_window);
|
| -
|
| - // Start scrolling a small distance and then fling, but not fast enough to
|
| - // disengage split view (see kMinFlingVelocity). Split view mode should
|
| - // remain engaged. Also verify that |right_window| is translated correctly.
|
| - EXPECT_EQ(0.0f, XTranslationForWindow(right_window));
|
| - HandleScrollBegin(-small_distance + 1.0f);
|
| - EXPECT_EQ(-small_distance + 1.0f, XTranslationForWindow(right_window));
|
| - HandleScrollUpdate(-small_distance);
|
| - EXPECT_EQ(-small_distance, XTranslationForWindow(right_window));
|
| - HandleScrollEnd(slow_velocity);
|
| - EXPECT_EQ(0.0f, XTranslationForWindow(right_window));
|
| - ASSERT_TRUE(controller->IsSplitViewModeActive());
|
| - EXPECT_EQ(left_window, controller->left_window());
|
| - EXPECT_EQ(right_window, controller->right_window());
|
| -
|
| - // Scroll far enough to the left to be able to disengage split view, then
|
| - // fling to the right (but not faster than kMinFlingVelocity). Split view
|
| - // should be disengaged with the right window active.
|
| - HandleScrollBegin(-small_distance);
|
| - HandleScrollUpdate(-large_distance);
|
| - HandleScrollEnd(slow_velocity);
|
| - ASSERT_FALSE(controller->IsSplitViewModeActive());
|
| - EXPECT_EQ(nullptr, controller->left_window());
|
| - EXPECT_EQ(nullptr, controller->right_window());
|
| - EXPECT_EQ(right_window, GetTopmostWindow());
|
| -
|
| - // Re-activate split view mode.
|
| - controller->ActivateSplitMode(left_window, right_window, left_window);
|
| -
|
| - // Scroll far enough to the left to be able to disengage split view, then
|
| - // fling to the right, this time faster than kMinFlingVelocity). Split view
|
| - // should be disengaged with the left window active.
|
| - HandleScrollBegin(-small_distance);
|
| - HandleScrollUpdate(-large_distance);
|
| - HandleScrollEnd(fast_velocity);
|
| - ASSERT_FALSE(controller->IsSplitViewModeActive());
|
| - EXPECT_EQ(nullptr, controller->left_window());
|
| - EXPECT_EQ(nullptr, controller->right_window());
|
| - EXPECT_EQ(left_window, GetTopmostWindow());
|
| -}
|
| -
|
| -TEST_F(SplitViewControllerTest, LandscapeOnly) {
|
| - aura::test::TestWindowDelegate delegate;
|
| - ScopedVector<aura::Window> windows;
|
| - const int kNumWindows = 2;
|
| - for (size_t i = 0; i < kNumWindows; ++i) {
|
| - scoped_ptr<aura::Window> window =
|
| - test::CreateNormalWindow(nullptr, nullptr);
|
| - window->Hide();
|
| - windows.push_back(window.release());
|
| - }
|
| - windows[kNumWindows - 1]->Show();
|
| - wm::ActivateWindow(windows[kNumWindows - 1]);
|
| -
|
| - ASSERT_EQ(gfx::Display::ROTATE_0,
|
| - gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().rotation());
|
| -
|
| - SplitViewController* controller = api()->GetSplitViewController();
|
| - ASSERT_TRUE(IsSplitViewAllowed());
|
| - ASSERT_FALSE(controller->IsSplitViewModeActive());
|
| -
|
| - controller->ActivateSplitMode(nullptr, nullptr, nullptr);
|
| - ASSERT_TRUE(controller->IsSplitViewModeActive());
|
| -
|
| - // Screen rotation should be locked while in splitview.
|
| - ScreenManager::Get()->SetRotation(gfx::Display::ROTATE_90);
|
| - EXPECT_EQ(gfx::Display::ROTATE_0,
|
| - gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().rotation());
|
| -
|
| - // Screen is rotated on exiting splitview.
|
| - controller->DeactivateSplitMode();
|
| - ASSERT_EQ(gfx::Display::ROTATE_90,
|
| - gfx::Screen::GetNativeScreen()->GetPrimaryDisplay().rotation());
|
| -
|
| - // Entering splitview should now be disabled now that the screen is in a
|
| - // portrait orientation.
|
| - EXPECT_FALSE(IsSplitViewAllowed());
|
| -
|
| - // Rotating back to 0 allows splitview again.
|
| - ScreenManager::Get()->SetRotation(gfx::Display::ROTATE_0);
|
| - EXPECT_TRUE(IsSplitViewAllowed());
|
| -}
|
| -
|
| -} // namespace athena
|
|
|