diff options
Diffstat (limited to 'chromium/ash/shelf/shelf_widget_unittest.cc')
-rw-r--r-- | chromium/ash/shelf/shelf_widget_unittest.cc | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/chromium/ash/shelf/shelf_widget_unittest.cc b/chromium/ash/shelf/shelf_widget_unittest.cc new file mode 100644 index 00000000000..c4e9b875f6f --- /dev/null +++ b/chromium/ash/shelf/shelf_widget_unittest.cc @@ -0,0 +1,194 @@ +// Copyright (c) 2013 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/shelf/shelf_widget.h" + +#include "ash/launcher/launcher.h" +#include "ash/root_window_controller.h" +#include "ash/shelf/shelf_button.h" +#include "ash/shelf/shelf_layout_manager.h" +#include "ash/shelf/shelf_model.h" +#include "ash/shelf/shelf_view.h" +#include "ash/shell.h" +#include "ash/test/ash_test_base.h" +#include "ash/test/launcher_test_api.h" +#include "ash/test/shelf_view_test_api.h" +#include "ash/wm/window_util.h" +#include "ui/aura/root_window.h" +#include "ui/gfx/display.h" +#include "ui/gfx/screen.h" +#include "ui/views/corewm/corewm_switches.h" +#include "ui/views/view.h" +#include "ui/views/widget/widget.h" + +namespace ash { + +namespace { + +ShelfWidget* GetShelfWidget() { + return Launcher::ForPrimaryDisplay()->shelf_widget(); +} + +internal::ShelfLayoutManager* GetShelfLayoutManager() { + return GetShelfWidget()->shelf_layout_manager(); +} + +} // namespace + +typedef test::AshTestBase ShelfWidgetTest; + +// Shelf can't be activated on mouse click, but it is activable from +// the focus cycler or as fallback. +// TODO(mtomasz): make this test work with the FocusController. +// crbug.com/285364. +TEST_F(ShelfWidgetTest, DISABLED_ActivateAsFallback) { + Launcher* launcher = Launcher::ForPrimaryDisplay(); + ShelfWidget* shelf_widget = launcher->shelf_widget(); + EXPECT_FALSE(shelf_widget->CanActivate()); + + shelf_widget->WillActivateAsFallback(); + EXPECT_TRUE(shelf_widget->CanActivate()); + + wm::ActivateWindow(shelf_widget->GetNativeWindow()); + EXPECT_FALSE(shelf_widget->CanActivate()); +} + +void TestLauncherAlignment(aura::Window* root, + ShelfAlignment alignment, + const std::string& expected) { + Shell::GetInstance()->SetShelfAlignment(alignment, root); + gfx::Screen* screen = gfx::Screen::GetScreenFor(root); + EXPECT_EQ(expected, + screen->GetDisplayNearestWindow(root).work_area().ToString()); +} + +TEST_F(ShelfWidgetTest, TestAlignment) { + Launcher* launcher = Launcher::ForPrimaryDisplay(); + UpdateDisplay("400x400"); + ASSERT_TRUE(launcher); + { + SCOPED_TRACE("Single Bottom"); + TestLauncherAlignment(Shell::GetPrimaryRootWindow(), + SHELF_ALIGNMENT_BOTTOM, + "0,0 400x353"); + } + { + SCOPED_TRACE("Single Right"); + TestLauncherAlignment(Shell::GetPrimaryRootWindow(), + SHELF_ALIGNMENT_RIGHT, + "0,0 353x400"); + } + { + SCOPED_TRACE("Single Left"); + TestLauncherAlignment(Shell::GetPrimaryRootWindow(), + SHELF_ALIGNMENT_LEFT, + "47,0 353x400"); + } + if (!SupportsMultipleDisplays()) + return; + + UpdateDisplay("300x300,500x500"); + aura::Window::Windows root_windows = Shell::GetAllRootWindows(); + { + SCOPED_TRACE("Primary Bottom"); + TestLauncherAlignment(root_windows[0], + SHELF_ALIGNMENT_BOTTOM, + "0,0 300x253"); + } + { + SCOPED_TRACE("Primary Right"); + TestLauncherAlignment(root_windows[0], + SHELF_ALIGNMENT_RIGHT, + "0,0 253x300"); + } + { + SCOPED_TRACE("Primary Left"); + TestLauncherAlignment(root_windows[0], + SHELF_ALIGNMENT_LEFT, + "47,0 253x300"); + } + { + SCOPED_TRACE("Secondary Bottom"); + TestLauncherAlignment(root_windows[1], + SHELF_ALIGNMENT_BOTTOM, + "300,0 500x453"); + } + { + SCOPED_TRACE("Secondary Right"); + TestLauncherAlignment(root_windows[1], + SHELF_ALIGNMENT_RIGHT, + "300,0 453x500"); + } + { + SCOPED_TRACE("Secondary Left"); + TestLauncherAlignment(root_windows[1], + SHELF_ALIGNMENT_LEFT, + "347,0 453x500"); + } +} + +// Makes sure the launcher is initially sized correctly. +TEST_F(ShelfWidgetTest, LauncherInitiallySized) { + ShelfWidget* shelf_widget = GetShelfWidget(); + Launcher* launcher = shelf_widget->launcher(); + ASSERT_TRUE(launcher); + internal::ShelfLayoutManager* shelf_layout_manager = GetShelfLayoutManager(); + ASSERT_TRUE(shelf_layout_manager); + ASSERT_TRUE(shelf_widget->status_area_widget()); + int status_width = shelf_widget->status_area_widget()-> + GetWindowBoundsInScreen().width(); + // Test only makes sense if the status is > 0, which it better be. + EXPECT_GT(status_width, 0); + EXPECT_EQ(status_width, shelf_widget->GetContentsView()->width() - + test::LauncherTestAPI(launcher).shelf_view()->width()); +} + +// Verifies when the shell is deleted with a full screen window we don't crash. +TEST_F(ShelfWidgetTest, DontReferenceLauncherAfterDeletion) { + views::Widget* widget = new views::Widget; + views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); + params.bounds = gfx::Rect(0, 0, 200, 200); + params.context = CurrentContext(); + // Widget is now owned by the parent window. + widget->Init(params); + widget->SetFullscreen(true); +} + +#if defined(OS_CHROMEOS) +// Verifies launcher is created with correct size after user login and when its +// container and status widget has finished sizing. +// See http://crbug.com/252533 +TEST_F(ShelfWidgetTest, LauncherInitiallySizedAfterLogin) { + SetUserLoggedIn(false); + UpdateDisplay("300x200,400x300"); + + ShelfWidget* shelf = NULL; + Shell::RootWindowControllerList controllers( + Shell::GetAllRootWindowControllers()); + for (Shell::RootWindowControllerList::const_iterator i = controllers.begin(); + i != controllers.end(); + ++i) { + if (!(*i)->shelf()->launcher()) { + shelf = (*i)->shelf(); + break; + } + } + ASSERT_TRUE(shelf != NULL); + + SetUserLoggedIn(true); + Shell::GetInstance()->CreateLauncher(); + + Launcher* launcher = shelf->launcher(); + ASSERT_TRUE(launcher != NULL); + + const int status_width = + shelf->status_area_widget()->GetWindowBoundsInScreen().width(); + EXPECT_GT(status_width, 0); + EXPECT_EQ(status_width, + shelf->GetContentsView()->width() - + test::LauncherTestAPI(launcher).shelf_view()->width()); +} +#endif + +} // namespace ash |