Chromium Code Reviews| Index: ash/shelf/shelf_widget_unittest.cc |
| diff --git a/ash/shelf/shelf_widget_unittest.cc b/ash/shelf/shelf_widget_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..a6fa43dba4f750100fed4cf087366da7f210d810 |
| --- /dev/null |
| +++ b/ash/shelf/shelf_widget_unittest.cc |
| @@ -0,0 +1,155 @@ |
| +// 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/launcher/launcher_button.h" |
| +#include "ash/launcher/launcher_model.h" |
| +#include "ash/launcher/launcher_view.h" |
| +#include "ash/shelf/shelf_layout_manager.h" |
| +#include "ash/shell.h" |
| +#include "ash/test/ash_test_base.h" |
| +#include "ash/test/launcher_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(); |
| +} |
| + |
| +} |
|
Mr4D (OOO till 08-26)
2013/03/02 02:02:12
} // namespace
<newline>
...
Harry McCleave
2013/03/04 02:47:41
Done.
|
| +typedef test::AshTestBase ShelfWidgetTest; |
| + |
| +// Launcher can't be activated on mouse click, but it is activable from |
| +// the focus cycler or as fallback. |
| +TEST_F(ShelfWidgetTest, ActivateAsFallback) { |
| + // TODO(mtomasz): make this test work with the FocusController. |
| + if (views::corewm::UseFocusController()) |
| + return; |
| + |
| + 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::RootWindow* 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 400x352"); |
| + } |
| + { |
| + SCOPED_TRACE("Single Right"); |
| + TestLauncherAlignment(Shell::GetPrimaryRootWindow(), |
| + SHELF_ALIGNMENT_RIGHT, |
| + "0,0 348x400"); |
| + } |
| + { |
| + SCOPED_TRACE("Single Left"); |
| + TestLauncherAlignment(Shell::GetPrimaryRootWindow(), |
| + SHELF_ALIGNMENT_LEFT, |
| + "52,0 348x400"); |
| + } |
| + UpdateDisplay("300x300,500x500"); |
| + Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
| + { |
| + SCOPED_TRACE("Primary Bottom"); |
| + TestLauncherAlignment(root_windows[0], |
| + SHELF_ALIGNMENT_BOTTOM, |
| + "0,0 300x252"); |
| + } |
| + { |
| + SCOPED_TRACE("Primary Right"); |
| + TestLauncherAlignment(root_windows[0], |
| + SHELF_ALIGNMENT_RIGHT, |
| + "0,0 248x300"); |
| + } |
| + { |
| + SCOPED_TRACE("Primary Left"); |
| + TestLauncherAlignment(root_windows[0], |
| + SHELF_ALIGNMENT_LEFT, |
| + "52,0 248x300"); |
| + } |
| + if (Shell::IsLauncherPerDisplayEnabled()) { |
| + { |
| + SCOPED_TRACE("Secondary Bottom"); |
| + TestLauncherAlignment(root_windows[1], |
| + SHELF_ALIGNMENT_BOTTOM, |
| + "300,0 500x452"); |
| + } |
| + { |
| + SCOPED_TRACE("Secondary Right"); |
| + TestLauncherAlignment(root_windows[1], |
| + SHELF_ALIGNMENT_RIGHT, |
| + "300,0 448x500"); |
| + } |
| + { |
| + SCOPED_TRACE("Secondary Left"); |
| + TestLauncherAlignment(root_windows[1], |
| + SHELF_ALIGNMENT_LEFT, |
| + "352,0 448x500"); |
| + } |
| + } |
| +} |
| + |
| +// 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 is better be. |
| + EXPECT_GT(status_width, 0); |
| + EXPECT_EQ(status_width, shelf_widget->GetContentsView()->width() - |
| + launcher->GetLauncherViewForTest()->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); |
| +} |
| + |
| +} // namespace ash |