Index: ui/app_list/views/app_list_main_view_unittest.cc |
diff --git a/ui/app_list/views/app_list_main_view_unittest.cc b/ui/app_list/views/app_list_main_view_unittest.cc |
deleted file mode 100644 |
index 08cd351bfbc404d14111386bea62998f0042bce2..0000000000000000000000000000000000000000 |
--- a/ui/app_list/views/app_list_main_view_unittest.cc |
+++ /dev/null |
@@ -1,341 +0,0 @@ |
-// Copyright 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 "ui/app_list/views/app_list_main_view.h" |
- |
-#include "base/memory/scoped_ptr.h" |
-#include "base/run_loop.h" |
-#include "base/time/time.h" |
-#include "base/timer/timer.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "ui/app_list/test/app_list_test_model.h" |
-#include "ui/app_list/test/app_list_test_view_delegate.h" |
-#include "ui/app_list/views/app_list_folder_view.h" |
-#include "ui/app_list/views/app_list_item_view.h" |
-#include "ui/app_list/views/apps_container_view.h" |
-#include "ui/app_list/views/apps_grid_view.h" |
-#include "ui/app_list/views/contents_view.h" |
-#include "ui/app_list/views/test/apps_grid_view_test_api.h" |
-#include "ui/views/test/views_test_base.h" |
-#include "ui/views/view_model.h" |
-#include "ui/views/widget/widget.h" |
- |
-namespace app_list { |
-namespace test { |
- |
-namespace { |
- |
-const int kInitialItems = 2; |
- |
-class GridViewVisibleWaiter { |
- public: |
- explicit GridViewVisibleWaiter(AppsGridView* grid_view) |
- : grid_view_(grid_view) {} |
- ~GridViewVisibleWaiter() {} |
- |
- void Wait() { |
- if (grid_view_->visible()) |
- return; |
- |
- check_timer_.Start(FROM_HERE, |
- base::TimeDelta::FromMilliseconds(50), |
- base::Bind(&GridViewVisibleWaiter::OnTimerCheck, |
- base::Unretained(this))); |
- run_loop_.reset(new base::RunLoop); |
- run_loop_->Run(); |
- check_timer_.Stop(); |
- } |
- |
- private: |
- void OnTimerCheck() { |
- if (grid_view_->visible()) |
- run_loop_->Quit(); |
- } |
- |
- AppsGridView* grid_view_; |
- scoped_ptr<base::RunLoop> run_loop_; |
- base::RepeatingTimer<GridViewVisibleWaiter> check_timer_; |
- |
- DISALLOW_COPY_AND_ASSIGN(GridViewVisibleWaiter); |
-}; |
- |
-class AppListMainViewTest : public views::ViewsTestBase { |
- public: |
- AppListMainViewTest() |
- : widget_(NULL), |
- main_view_(NULL) {} |
- |
- virtual ~AppListMainViewTest() {} |
- |
- // testing::Test overrides: |
- virtual void SetUp() override { |
- views::ViewsTestBase::SetUp(); |
- delegate_.reset(new AppListTestViewDelegate); |
- |
- // In Ash, the third argument is a container aura::Window, but it is always |
- // NULL on Windows, and not needed for tests. It is only used to determine |
- // the scale factor for preloading icons. |
- main_view_ = new AppListMainView(delegate_.get(), 0, NULL); |
- main_view_->SetPaintToLayer(true); |
- main_view_->model()->SetFoldersEnabled(true); |
- |
- widget_ = new views::Widget; |
- views::Widget::InitParams params = |
- CreateParams(views::Widget::InitParams::TYPE_POPUP); |
- params.bounds.set_size(main_view_->GetPreferredSize()); |
- widget_->Init(params); |
- |
- widget_->SetContentsView(main_view_); |
- } |
- |
- virtual void TearDown() override { |
- widget_->Close(); |
- views::ViewsTestBase::TearDown(); |
- delegate_.reset(); |
- } |
- |
- // |point| is in |grid_view|'s coordinates. |
- AppListItemView* GetItemViewAtPointInGrid(AppsGridView* grid_view, |
- const gfx::Point& point) { |
- const views::ViewModelT<AppListItemView>* view_model = |
- grid_view->view_model_for_test(); |
- for (int i = 0; i < view_model->view_size(); ++i) { |
- views::View* view = view_model->view_at(i); |
- if (view->bounds().Contains(point)) { |
- return static_cast<AppListItemView*>(view); |
- } |
- } |
- |
- return NULL; |
- } |
- |
- void SimulateClick(views::View* view) { |
- gfx::Point center = view->GetLocalBounds().CenterPoint(); |
- view->OnMousePressed(ui::MouseEvent(ui::ET_MOUSE_PRESSED, |
- center, |
- center, |
- ui::EF_LEFT_MOUSE_BUTTON, |
- ui::EF_LEFT_MOUSE_BUTTON)); |
- view->OnMouseReleased(ui::MouseEvent(ui::ET_MOUSE_RELEASED, |
- center, |
- center, |
- ui::EF_LEFT_MOUSE_BUTTON, |
- ui::EF_LEFT_MOUSE_BUTTON)); |
- } |
- |
- // |point| is in |grid_view|'s coordinates. |
- AppListItemView* SimulateInitiateDrag(AppsGridView* grid_view, |
- AppsGridView::Pointer pointer, |
- const gfx::Point& point) { |
- AppListItemView* view = GetItemViewAtPointInGrid(grid_view, point); |
- DCHECK(view); |
- |
- gfx::Point translated = |
- gfx::PointAtOffsetFromOrigin(point - view->bounds().origin()); |
- ui::MouseEvent pressed_event(ui::ET_MOUSE_PRESSED, translated, point, 0, 0); |
- grid_view->InitiateDrag(view, pointer, pressed_event); |
- return view; |
- } |
- |
- // |point| is in |grid_view|'s coordinates. |
- void SimulateUpdateDrag(AppsGridView* grid_view, |
- AppsGridView::Pointer pointer, |
- AppListItemView* drag_view, |
- const gfx::Point& point) { |
- DCHECK(drag_view); |
- gfx::Point translated = |
- gfx::PointAtOffsetFromOrigin(point - drag_view->bounds().origin()); |
- ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, translated, point, 0, 0); |
- grid_view->UpdateDragFromItem(pointer, drag_event); |
- } |
- |
- AppsGridView* RootGridView() { |
- return main_view_->contents_view()->apps_container_view()->apps_grid_view(); |
- } |
- |
- AppListFolderView* FolderView() { |
- return main_view_->contents_view() |
- ->apps_container_view() |
- ->app_list_folder_view(); |
- } |
- |
- AppsGridView* FolderGridView() { return FolderView()->items_grid_view(); } |
- |
- const views::ViewModelT<AppListItemView>* RootViewModel() { |
- return RootGridView()->view_model_for_test(); |
- } |
- |
- const views::ViewModelT<AppListItemView>* FolderViewModel() { |
- return FolderGridView()->view_model_for_test(); |
- } |
- |
- AppListItemView* CreateAndOpenSingleItemFolder() { |
- // Prepare single folder with a single item in it. |
- AppListFolderItem* folder_item = |
- delegate_->GetTestModel()->CreateSingleItemFolder("single_item_folder", |
- "single"); |
- EXPECT_EQ(folder_item, |
- delegate_->GetTestModel()->FindFolderItem("single_item_folder")); |
- EXPECT_EQ(AppListFolderItem::kItemType, folder_item->GetItemType()); |
- |
- EXPECT_EQ(1, RootViewModel()->view_size()); |
- AppListItemView* folder_item_view = |
- static_cast<AppListItemView*>(RootViewModel()->view_at(0)); |
- EXPECT_EQ(folder_item_view->item(), folder_item); |
- |
- // Click on the folder to open it. |
- EXPECT_FALSE(FolderView()->visible()); |
- SimulateClick(folder_item_view); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_TRUE(FolderView()->visible()); |
- |
-#if defined(OS_WIN) |
- AppsGridViewTestApi folder_grid_view_test_api(FolderGridView()); |
- folder_grid_view_test_api.DisableSynchronousDrag(); |
-#endif |
- return folder_item_view; |
- } |
- |
- AppListItemView* StartDragForReparent(int index_in_folder) { |
- // Start to drag the item in folder. |
- views::View* item_view = FolderViewModel()->view_at(index_in_folder); |
- gfx::Point point = item_view->bounds().CenterPoint(); |
- AppListItemView* dragged = |
- SimulateInitiateDrag(FolderGridView(), AppsGridView::MOUSE, point); |
- EXPECT_EQ(item_view, dragged); |
- EXPECT_FALSE(RootGridView()->visible()); |
- EXPECT_TRUE(FolderView()->visible()); |
- |
- // Drag it to top left corner. |
- point = gfx::Point(0, 0); |
- // Two update drags needed to actually drag the view. The first changes |
- // state and the 2nd one actually moves the view. The 2nd call can be |
- // removed when UpdateDrag is fixed. |
- SimulateUpdateDrag(FolderGridView(), AppsGridView::MOUSE, dragged, point); |
- SimulateUpdateDrag(FolderGridView(), AppsGridView::MOUSE, dragged, point); |
- base::RunLoop().RunUntilIdle(); |
- |
- // Wait until the folder view is invisible and root grid view shows up. |
- GridViewVisibleWaiter(RootGridView()).Wait(); |
- EXPECT_TRUE(RootGridView()->visible()); |
- EXPECT_EQ(0, FolderView()->layer()->opacity()); |
- |
- return dragged; |
- } |
- |
- protected: |
- views::Widget* widget_; // Owned by native window. |
- AppListMainView* main_view_; // Owned by |widget_|. |
- scoped_ptr<AppListTestViewDelegate> delegate_; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(AppListMainViewTest); |
-}; |
- |
-} // namespace |
- |
-// Tests changing the AppListModel when switching profiles. |
-TEST_F(AppListMainViewTest, ModelChanged) { |
- delegate_->GetTestModel()->PopulateApps(kInitialItems); |
- EXPECT_EQ(kInitialItems, RootViewModel()->view_size()); |
- |
- // The model is owned by a profile keyed service, which is never destroyed |
- // until after profile switching. |
- scoped_ptr<AppListModel> old_model(delegate_->ReleaseTestModel()); |
- |
- const int kReplacementItems = 5; |
- delegate_->ReplaceTestModel(kReplacementItems); |
- main_view_->ModelChanged(); |
- EXPECT_EQ(kReplacementItems, RootViewModel()->view_size()); |
-} |
- |
-// Tests dragging an item out of a single item folder and drop it at the last |
-// slot. |
-TEST_F(AppListMainViewTest, DragLastItemFromFolderAndDropAtLastSlot) { |
- AppListItemView* folder_item_view = CreateAndOpenSingleItemFolder(); |
- const gfx::Rect first_slot_tile = folder_item_view->bounds(); |
- |
- EXPECT_EQ(1, FolderViewModel()->view_size()); |
- |
- AppListItemView* dragged = StartDragForReparent(0); |
- |
- // Drop it to the slot on the right of first slot. |
- gfx::Rect drop_target_tile(first_slot_tile); |
- drop_target_tile.Offset(first_slot_tile.width() * 2, 0); |
- gfx::Point point = drop_target_tile.CenterPoint(); |
- SimulateUpdateDrag(FolderGridView(), AppsGridView::MOUSE, dragged, point); |
- |
- // Drop it. |
- FolderGridView()->EndDrag(false); |
- |
- // Folder icon view should be gone and there is only one item view. |
- EXPECT_EQ(1, RootViewModel()->view_size()); |
- EXPECT_EQ( |
- AppListItemView::kViewClassName, |
- static_cast<views::View*>(RootViewModel()->view_at(0))->GetClassName()); |
- |
- // The item view should be in slot 1 instead of slot 2 where it is dropped. |
- AppsGridViewTestApi root_grid_view_test_api(RootGridView()); |
- root_grid_view_test_api.LayoutToIdealBounds(); |
- EXPECT_EQ(first_slot_tile, RootViewModel()->view_at(0)->bounds()); |
- |
- // Single item folder should be auto removed. |
- EXPECT_EQ(NULL, |
- delegate_->GetTestModel()->FindFolderItem("single_item_folder")); |
-} |
- |
-// Tests dragging an item out of a single item folder and dropping it onto the |
-// page switcher. Regression test for http://crbug.com/415530/. |
-TEST_F(AppListMainViewTest, DragReparentItemOntoPageSwitcher) { |
- AppListItemView* folder_item_view = CreateAndOpenSingleItemFolder(); |
- const gfx::Rect first_slot_tile = folder_item_view->bounds(); |
- |
- delegate_->GetTestModel()->PopulateApps(20); |
- |
- EXPECT_EQ(1, FolderViewModel()->view_size()); |
- EXPECT_EQ(21, RootViewModel()->view_size()); |
- |
- AppListItemView* dragged = StartDragForReparent(0); |
- |
- gfx::Rect main_view_bounds = main_view_->bounds(); |
- // Drag the reparent item to the page switcher. |
- gfx::Point point = |
- gfx::Point(main_view_bounds.width() / 2, |
- main_view_bounds.bottom() - first_slot_tile.height()); |
- SimulateUpdateDrag(FolderGridView(), AppsGridView::MOUSE, dragged, point); |
- |
- // Drop it. |
- FolderGridView()->EndDrag(false); |
- |
- // The folder should be destroyed. |
- EXPECT_EQ(21, RootViewModel()->view_size()); |
- EXPECT_EQ(NULL, |
- delegate_->GetTestModel()->FindFolderItem("single_item_folder")); |
-} |
- |
-// Test that an interrupted drag while reparenting an item from a folder, when |
-// canceled via the root grid, correctly forwards the cancelation to the drag |
-// ocurring from the folder. |
-TEST_F(AppListMainViewTest, MouseDragItemOutOfFolderWithCancel) { |
- CreateAndOpenSingleItemFolder(); |
- AppListItemView* dragged = StartDragForReparent(0); |
- |
- // Now add an item to the model, not in any folder, e.g., as if by Sync. |
- EXPECT_TRUE(RootGridView()->has_dragged_view()); |
- EXPECT_TRUE(FolderGridView()->has_dragged_view()); |
- delegate_->GetTestModel()->CreateAndAddItem("Extra"); |
- |
- // The drag operation should get canceled. |
- EXPECT_FALSE(RootGridView()->has_dragged_view()); |
- EXPECT_FALSE(FolderGridView()->has_dragged_view()); |
- |
- // Additional mouse move operations should be ignored. |
- gfx::Point point(1, 1); |
- SimulateUpdateDrag(FolderGridView(), AppsGridView::MOUSE, dragged, point); |
- EXPECT_FALSE(RootGridView()->has_dragged_view()); |
- EXPECT_FALSE(FolderGridView()->has_dragged_view()); |
-} |
- |
-} // namespace test |
-} // namespace app_list |