| Index: ash/shelf/shelf_window_watcher_unittest.cc
|
| diff --git a/ash/shelf/shelf_window_watcher_unittest.cc b/ash/shelf/shelf_window_watcher_unittest.cc
|
| index 3982c763b1f5dee684a87a1d05b3847edddce9a6..2d3bf8eeb918b2e7671ced9cf4d59247bcec6d49 100644
|
| --- a/ash/shelf/shelf_window_watcher_unittest.cc
|
| +++ b/ash/shelf/shelf_window_watcher_unittest.cc
|
| @@ -4,16 +4,21 @@
|
|
|
| #include "ash/shelf/shelf_window_watcher.h"
|
|
|
| +#include "ash/ash_switches.h"
|
| #include "ash/launcher/launcher_types.h"
|
| #include "ash/shelf/shelf_model.h"
|
| #include "ash/shelf/shelf_util.h"
|
| #include "ash/shell.h"
|
| +#include "ash/shell_window_ids.h"
|
| #include "ash/test/ash_test_base.h"
|
| #include "ash/test/shell_test_api.h"
|
| +#include "ash/wm/window_resizer.h"
|
| #include "ash/wm/window_state.h"
|
| #include "ash/wm/window_util.h"
|
| +#include "base/command_line.h"
|
| #include "ui/aura/client/aura_constants.h"
|
| #include "ui/aura/window.h"
|
| +#include "ui/base/hit_test.h"
|
|
|
| namespace ash {
|
| namespace internal {
|
| @@ -33,17 +38,14 @@ class ShelfWindowWatcherTest : public test::AshTestBase {
|
| test::AshTestBase::TearDown();
|
| }
|
|
|
| - ash::LauncherID CreateShelfItem(aura::Window* window) {
|
| + LauncherID CreateShelfItem(aura::Window* window) {
|
| LauncherID id = model_->next_id();
|
| - ash::LauncherItemDetails item_details;
|
| + LauncherItemDetails item_details;
|
| item_details.type = TYPE_PLATFORM_APP;
|
| SetShelfItemDetailsForWindow(window, item_details);
|
| return id;
|
| }
|
|
|
| - void UpdateLauncherItem(aura::Window* window) {
|
| - }
|
| -
|
| protected:
|
| ShelfModel* model_;
|
|
|
| @@ -166,10 +168,123 @@ TEST_F(ShelfWindowWatcherTest, MaximizeAndRestoreWindow) {
|
| EXPECT_FALSE(window_state->IsMaximized());
|
| // No new item is created after restoring a window |window|.
|
| EXPECT_EQ(2, model_->item_count());
|
| - // index and id are not changed after maximizing a window |window|.
|
| + // Index and id are not changed after maximizing a window |window|.
|
| EXPECT_EQ(index, model_->ItemIndexByID(id));
|
| EXPECT_EQ(id, model_->items()[index].id);
|
| }
|
|
|
| +// Check that an item is removed when its associated Window is re-parented.
|
| +TEST_F(ShelfWindowWatcherTest, ReparentWindow) {
|
| + // ShelfModel only has an APP_LIST item.
|
| + EXPECT_EQ(1, model_->item_count());
|
| +
|
| + scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0));
|
| + window->set_owned_by_parent(false);
|
| +
|
| + // Create a LauncherItem for |window|.
|
| + LauncherID id = CreateShelfItem(window.get());
|
| + EXPECT_EQ(2, model_->item_count());
|
| +
|
| + int index = model_->ItemIndexByID(id);
|
| + EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status);
|
| +
|
| + aura::Window* root_window = window->GetRootWindow();
|
| + aura::Window* default_container = Shell::GetContainer(
|
| + root_window,
|
| + kShellWindowId_DefaultContainer);
|
| + EXPECT_EQ(default_container, window->parent());
|
| +
|
| + aura::Window* new_parent = Shell::GetContainer(
|
| + root_window,
|
| + kShellWindowId_PanelContainer);
|
| +
|
| + // Check |window|'s item is removed when it is re-parented to |new_parent|
|
| + // which is not default container.
|
| + new_parent->AddChild(window.get());
|
| + EXPECT_EQ(1, model_->item_count());
|
| +
|
| + // Check |window|'s item is added when it is re-parented to
|
| + // |default_container|.
|
| + default_container->AddChild(window.get());
|
| + EXPECT_EQ(2, model_->item_count());
|
| +}
|
| +
|
| +// Check |window|'s item is not changed during the dragging.
|
| +// TODO(simonhong): Add a test for removing a Window during the dragging.
|
| +TEST_F(ShelfWindowWatcherTest, DragWindow) {
|
| + // ShelfModel only has an APP_LIST item.
|
| + EXPECT_EQ(1, model_->item_count());
|
| +
|
| + scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0));
|
| +
|
| + // Create a LauncherItem for |window|.
|
| + LauncherID id = CreateShelfItem(window.get());
|
| + EXPECT_EQ(2, model_->item_count());
|
| +
|
| + int index = model_->ItemIndexByID(id);
|
| + EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status);
|
| +
|
| + // Simulate dragging of |window| and check its item is not changed.
|
| + scoped_ptr<WindowResizer> resizer(
|
| + CreateWindowResizer(window.get(),
|
| + gfx::Point(),
|
| + HTCAPTION,
|
| + aura::client::WINDOW_MOVE_SOURCE_MOUSE));
|
| + ASSERT_TRUE(resizer.get());
|
| + resizer->Drag(gfx::Point(50, 50), 0);
|
| + resizer->CompleteDrag();
|
| +
|
| + //Index and id are not changed after dragging a |window|.
|
| + EXPECT_EQ(index, model_->ItemIndexByID(id));
|
| + EXPECT_EQ(id, model_->items()[index].id);
|
| +}
|
| +
|
| +// Check |window|'s item is removed when it is re-parented not to default
|
| +// container during the dragging.
|
| +TEST_F(ShelfWindowWatcherTest, ReparentWindowDuringTheDragging) {
|
| + // ShelfModel only has an APP_LIST item.
|
| + EXPECT_EQ(1, model_->item_count());
|
| +
|
| + scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0));
|
| + window->set_owned_by_parent(false);
|
| +
|
| + // Create a LauncherItem for |window|.
|
| + LauncherID id = CreateShelfItem(window.get());
|
| + EXPECT_EQ(2, model_->item_count());
|
| + int index = model_->ItemIndexByID(id);
|
| + EXPECT_EQ(STATUS_RUNNING, model_->items()[index].status);
|
| +
|
| + aura::Window* root_window = window->GetRootWindow();
|
| + aura::Window* default_container = Shell::GetContainer(
|
| + root_window,
|
| + kShellWindowId_DefaultContainer);
|
| + EXPECT_EQ(default_container, window->parent());
|
| +
|
| + aura::Window* new_parent = Shell::GetContainer(
|
| + root_window,
|
| + kShellWindowId_PanelContainer);
|
| +
|
| + // Simulate re-parenting to |new_parent| during the dragging.
|
| + {
|
| + scoped_ptr<WindowResizer> resizer(
|
| + CreateWindowResizer(window.get(),
|
| + gfx::Point(),
|
| + HTCAPTION,
|
| + aura::client::WINDOW_MOVE_SOURCE_MOUSE));
|
| + ASSERT_TRUE(resizer.get());
|
| + resizer->Drag(gfx::Point(50, 50), 0);
|
| + resizer->CompleteDrag();
|
| + EXPECT_EQ(2, model_->item_count());
|
| +
|
| + // Item should be removed when |window| is re-parented not to default
|
| + // container before fininshing the dragging.
|
| + EXPECT_TRUE(wm::GetWindowState(window.get())->is_dragged());
|
| + new_parent->AddChild(window.get());
|
| + EXPECT_EQ(1, model_->item_count());
|
| + }
|
| + EXPECT_FALSE(wm::GetWindowState(window.get())->is_dragged());
|
| + EXPECT_EQ(1, model_->item_count());
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace ash
|
|
|