Index: ui/app_list/apps_grid_view_unittest.cc |
diff --git a/ui/app_list/apps_grid_view_unittest.cc b/ui/app_list/apps_grid_view_unittest.cc |
deleted file mode 100644 |
index 8c611a84a3d19552e111026bbbb2f723ed3e7de0..0000000000000000000000000000000000000000 |
--- a/ui/app_list/apps_grid_view_unittest.cc |
+++ /dev/null |
@@ -1,395 +0,0 @@ |
-// Copyright (c) 2012 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/apps_grid_view.h" |
- |
-#include <string> |
- |
-#include "base/basictypes.h" |
-#include "base/compiler_specific.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/message_loop.h" |
-#include "base/stringprintf.h" |
-#include "base/timer.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "ui/app_list/app_list_item_model.h" |
-#include "ui/app_list/app_list_item_view.h" |
-#include "ui/app_list/app_list_model.h" |
-#include "ui/app_list/pagination_model.h" |
-#include "ui/app_list/test/apps_grid_view_test_api.h" |
- |
-namespace app_list { |
-namespace test { |
- |
-namespace { |
- |
-const int kIconDimension = 48; |
-const int kCols = 2; |
-const int kRows = 2; |
-const int kTilesPerPage = kCols * kRows; |
- |
-const int kWidth = 320; |
-const int kHeight = 240; |
- |
-class PageFlipWaiter : public PaginationModelObserver { |
- public: |
- PageFlipWaiter(MessageLoopForUI* ui_loop, |
- PaginationModel* model) |
- : ui_loop_(ui_loop), |
- model_(model), |
- wait_(false), |
- page_changed_(false) { |
- model_->AddObserver(this); |
- } |
- |
- virtual ~PageFlipWaiter() { |
- model_->RemoveObserver(this); |
- } |
- |
- bool Wait(int time_out_ms) { |
- DCHECK(!wait_); |
- wait_ = true; |
- page_changed_ = false; |
- wait_timer_.Stop(); |
- wait_timer_.Start(FROM_HERE, |
- base::TimeDelta::FromMilliseconds(time_out_ms), |
- this, &PageFlipWaiter::OnWaitTimeOut); |
- ui_loop_->Run(); |
- wait_ = false; |
- return page_changed_; |
- } |
- |
- private: |
- void OnWaitTimeOut() { |
- ui_loop_->Quit(); |
- } |
- |
- // PaginationModelObserver overrides: |
- virtual void TotalPagesChanged() OVERRIDE { |
- } |
- virtual void SelectedPageChanged(int old_selected, |
- int new_selected) OVERRIDE { |
- page_changed_ = true; |
- if (wait_) |
- ui_loop_->Quit(); |
- } |
- virtual void TransitionChanged() OVERRIDE { |
- } |
- |
- MessageLoopForUI* ui_loop_; |
- PaginationModel* model_; |
- bool wait_; |
- bool page_changed_; |
- base::OneShotTimer<PageFlipWaiter> wait_timer_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PageFlipWaiter); |
-}; |
- |
-} // namespace |
- |
-class AppsGridViewTest : public testing::Test { |
- public: |
- AppsGridViewTest() {} |
- virtual ~AppsGridViewTest() {} |
- |
- // testing::Test overrides: |
- virtual void SetUp() OVERRIDE { |
- model_.reset(new AppListModel); |
- pagination_model_.reset(new PaginationModel); |
- |
- apps_grid_view_.reset(new AppsGridView(NULL, pagination_model_.get())); |
- apps_grid_view_->SetLayout(kIconDimension, kCols, kRows); |
- apps_grid_view_->SetBoundsRect(gfx::Rect(gfx::Size(kWidth, kHeight))); |
- apps_grid_view_->SetModel(model_.get()); |
- |
- test_api_.reset(new AppsGridViewTestApi(apps_grid_view_.get())); |
- } |
- virtual void TearDown() OVERRIDE { |
- apps_grid_view_.reset(); // Release apps grid view before models. |
- } |
- |
- protected: |
- void PopulateApps(int n) { |
- for (int i = 0; i < n; ++i) { |
- std::string title = base::StringPrintf("Item %d", i); |
- model_->apps()->Add(CreateItem(title)); |
- } |
- } |
- |
- // Get a string of all apps in |model| joined with ','. |
- std::string GetModelContent() { |
- std::string content; |
- for (size_t i = 0; i < model_->apps()->item_count(); ++i) { |
- if (i > 0) |
- content += ','; |
- content += model_->apps()->GetItemAt(i)->title(); |
- } |
- return content; |
- } |
- |
- AppListItemModel* CreateItem(const std::string& title) { |
- AppListItemModel* item = new AppListItemModel; |
- item->SetTitle(title); |
- return item; |
- } |
- |
- void HighlightItemAt(int index) { |
- AppListItemModel* item = model_->apps()->GetItemAt(index); |
- item->SetHighlighted(true); |
- } |
- |
- AppListItemView* GetItemViewAt(int index) { |
- return static_cast<AppListItemView*>( |
- test_api_->GetViewAtModelIndex(index)); |
- } |
- |
- AppListItemView* GetItemViewForPoint(const gfx::Point& point) { |
- for (size_t i = 0; i < model_->apps()->item_count(); ++i) { |
- AppListItemView* view = GetItemViewAt(i); |
- if (view->bounds().Contains(point)) |
- return view; |
- } |
- return NULL; |
- } |
- |
- gfx::Rect GetItemTileRectAt(int row, int col) { |
- DCHECK_GT(model_->apps()->item_count(), 0u); |
- |
- gfx::Insets insets(apps_grid_view_->GetInsets()); |
- gfx::Rect rect(gfx::Point(insets.left(), insets.top()), |
- GetItemViewAt(0)->bounds().size()); |
- rect.Offset(col * rect.width(), row * rect.height()); |
- return rect; |
- } |
- |
- // Points are in |apps_grid_view_|'s coordinates. |
- void SimulateDrag(AppsGridView::Pointer pointer, |
- const gfx::Point& from, |
- const gfx::Point& to) { |
- AppListItemView* view = GetItemViewForPoint(from); |
- DCHECK(view); |
- |
- gfx::Point translated_from = gfx::PointAtOffsetFromOrigin( |
- from - view->bounds().origin()); |
- gfx::Point translated_to = gfx::PointAtOffsetFromOrigin( |
- to - view->bounds().origin()); |
- |
- ui::MouseEvent pressed_event(ui::ET_MOUSE_PRESSED, |
- translated_from, from, 0); |
- apps_grid_view_->InitiateDrag(view, pointer, pressed_event); |
- |
- ui::MouseEvent drag_event(ui::ET_MOUSE_DRAGGED, |
- translated_to, to, 0); |
- apps_grid_view_->UpdateDrag(view, pointer, drag_event); |
- } |
- |
- void SimulateKeyPress(ui::KeyboardCode key_code) { |
- ui::KeyEvent key_event(ui::ET_KEY_PRESSED, key_code, 0, false); |
- apps_grid_view_->OnKeyPressed(key_event); |
- } |
- |
- scoped_ptr<AppListModel> model_; |
- scoped_ptr<PaginationModel> pagination_model_; |
- scoped_ptr<AppsGridView> apps_grid_view_; |
- scoped_ptr<AppsGridViewTestApi> test_api_; |
- |
- MessageLoopForUI message_loop_; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(AppsGridViewTest); |
-}; |
- |
-TEST_F(AppsGridViewTest, CreatePage) { |
- // Fully populates a page. |
- const int kPages = 1; |
- PopulateApps(kPages * kTilesPerPage); |
- EXPECT_EQ(kPages, pagination_model_->total_pages()); |
- |
- // Adds one more and gets a new page created. |
- model_->apps()->Add(CreateItem(std::string("Extra"))); |
- EXPECT_EQ(kPages + 1, pagination_model_->total_pages()); |
-} |
- |
-TEST_F(AppsGridViewTest, EnsureHighlightedVisible) { |
- const int kPages = 3; |
- PopulateApps(kPages * kTilesPerPage); |
- EXPECT_EQ(kPages, pagination_model_->total_pages()); |
- EXPECT_EQ(0, pagination_model_->selected_page()); |
- |
- // Highlight first one and last one one first page and first page should be |
- // selected. |
- HighlightItemAt(0); |
- EXPECT_EQ(0, pagination_model_->selected_page()); |
- HighlightItemAt(kTilesPerPage - 1); |
- EXPECT_EQ(0, pagination_model_->selected_page()); |
- |
- // Highlight first one on 2nd page and 2nd page should be selected. |
- HighlightItemAt(kTilesPerPage + 1); |
- EXPECT_EQ(1, pagination_model_->selected_page()); |
- |
- // Highlight last one in the model and last page should be selected. |
- HighlightItemAt(model_->apps()->item_count() - 1); |
- EXPECT_EQ(kPages - 1, pagination_model_->selected_page()); |
-} |
- |
-TEST_F(AppsGridViewTest, RemoveSelectedLastApp) { |
- const int kTotalItems = 2; |
- const int kLastItemIndex = kTotalItems - 1; |
- |
- PopulateApps(kTotalItems); |
- |
- AppListItemView* last_view = GetItemViewAt(kLastItemIndex); |
- apps_grid_view_->SetSelectedView(last_view); |
- model_->apps()->DeleteAt(kLastItemIndex); |
- |
- EXPECT_FALSE(apps_grid_view_->IsSelectedView(last_view)); |
- |
- // No crash happens. |
- AppListItemView* view = GetItemViewAt(0); |
- apps_grid_view_->SetSelectedView(view); |
- EXPECT_TRUE(apps_grid_view_->IsSelectedView(view)); |
-} |
- |
-TEST_F(AppsGridViewTest, MouseDrag) { |
- const int kTotalItems = 4; |
- PopulateApps(kTotalItems); |
- EXPECT_EQ(std::string("Item 0,Item 1,Item 2,Item 3"), |
- GetModelContent()); |
- |
- gfx::Point from = GetItemTileRectAt(0, 0).CenterPoint(); |
- gfx::Point to = GetItemTileRectAt(0, 1).CenterPoint(); |
- |
- // Dragging changes model order. |
- SimulateDrag(AppsGridView::MOUSE, from, to); |
- apps_grid_view_->EndDrag(false); |
- EXPECT_EQ(std::string("Item 1,Item 0,Item 2,Item 3"), |
- GetModelContent()); |
- test_api_->LayoutToIdealBounds(); |
- |
- // Canceling drag should keep existing order. |
- SimulateDrag(AppsGridView::MOUSE, from, to); |
- apps_grid_view_->EndDrag(true); |
- EXPECT_EQ(std::string("Item 1,Item 0,Item 2,Item 3"), |
- GetModelContent()); |
- test_api_->LayoutToIdealBounds(); |
- |
- // Deleting an item keeps remaining intact. |
- SimulateDrag(AppsGridView::MOUSE, from, to); |
- model_->apps()->DeleteAt(1); |
- apps_grid_view_->EndDrag(false); |
- EXPECT_EQ(std::string("Item 1,Item 2,Item 3"), |
- GetModelContent()); |
- test_api_->LayoutToIdealBounds(); |
- |
- // Adding a launcher item cancels the drag and respects the order. |
- SimulateDrag(AppsGridView::MOUSE, from, to); |
- model_->apps()->Add(CreateItem(std::string("Extra"))); |
- apps_grid_view_->EndDrag(false); |
- EXPECT_EQ(std::string("Item 1,Item 2,Item 3,Extra"), |
- GetModelContent()); |
- test_api_->LayoutToIdealBounds(); |
-} |
- |
-TEST_F(AppsGridViewTest, MouseDragFlipPage) { |
- test_api_->SetPageFlipDelay(10); |
- pagination_model_->SetTransitionDurations(10, 10); |
- |
- PageFlipWaiter page_flip_waiter(&message_loop_, |
- pagination_model_.get()); |
- |
- const int kPages = 3; |
- PopulateApps(kPages * kTilesPerPage); |
- EXPECT_EQ(kPages, pagination_model_->total_pages()); |
- EXPECT_EQ(0, pagination_model_->selected_page()); |
- |
- gfx::Point from = GetItemTileRectAt(0, 0).CenterPoint(); |
- gfx::Point to = gfx::Point(apps_grid_view_->width(), |
- apps_grid_view_->height() / 2); |
- |
- // Drag to right edge. |
- SimulateDrag(AppsGridView::MOUSE, from, to); |
- |
- // Page should be flipped after sometime. |
- EXPECT_TRUE(page_flip_waiter.Wait(100)); |
- EXPECT_EQ(1, pagination_model_->selected_page()); |
- |
- // Stay there and page should be flipped again. |
- EXPECT_TRUE(page_flip_waiter.Wait(100)); |
- EXPECT_EQ(2, pagination_model_->selected_page()); |
- |
- // Stay there longer and no page flip happen since we are at the last page. |
- EXPECT_FALSE(page_flip_waiter.Wait(100)); |
- EXPECT_EQ(2, pagination_model_->selected_page()); |
- |
- apps_grid_view_->EndDrag(true); |
- |
- // Now drag to the left edge and test the other direction. |
- to.set_x(0); |
- |
- SimulateDrag(AppsGridView::MOUSE, from, to); |
- |
- EXPECT_TRUE(page_flip_waiter.Wait(100)); |
- EXPECT_EQ(1, pagination_model_->selected_page()); |
- |
- EXPECT_TRUE(page_flip_waiter.Wait(100)); |
- EXPECT_EQ(0, pagination_model_->selected_page()); |
- |
- EXPECT_FALSE(page_flip_waiter.Wait(100)); |
- EXPECT_EQ(0, pagination_model_->selected_page()); |
- apps_grid_view_->EndDrag(true); |
-} |
- |
-TEST_F(AppsGridViewTest, SimultaneousDrag) { |
- const int kTotalItems = 4; |
- PopulateApps(kTotalItems); |
- EXPECT_EQ(std::string("Item 0,Item 1,Item 2,Item 3"), |
- GetModelContent()); |
- |
- gfx::Point mouse_from = GetItemTileRectAt(0, 0).CenterPoint(); |
- gfx::Point mouse_to = GetItemTileRectAt(0, 1).CenterPoint(); |
- |
- gfx::Point touch_from = GetItemTileRectAt(1, 0).CenterPoint(); |
- gfx::Point touch_to = GetItemTileRectAt(1, 1).CenterPoint(); |
- |
- // Starts a mouse drag first then a touch drag. |
- SimulateDrag(AppsGridView::MOUSE, mouse_from, mouse_to); |
- SimulateDrag(AppsGridView::TOUCH, touch_from, touch_to); |
- // Finishes the drag and mouse drag wins. |
- apps_grid_view_->EndDrag(false); |
- EXPECT_EQ(std::string("Item 1,Item 0,Item 2,Item 3"), |
- GetModelContent()); |
- test_api_->LayoutToIdealBounds(); |
- |
- // Starts a touch drag first then a mouse drag. |
- SimulateDrag(AppsGridView::TOUCH, touch_from, touch_to); |
- SimulateDrag(AppsGridView::MOUSE, mouse_from, mouse_to); |
- // Finishes the drag and touch drag wins. |
- apps_grid_view_->EndDrag(false); |
- EXPECT_EQ(std::string("Item 1,Item 0,Item 3,Item 2"), |
- GetModelContent()); |
- test_api_->LayoutToIdealBounds(); |
-} |
- |
-TEST_F(AppsGridViewTest, HighlightWithKeyboard) { |
- const int kTotalitems = 2; |
- PopulateApps(kTotalitems); |
- apps_grid_view_->SetSelectedView(GetItemViewAt(0)); |
- |
- // Try moving off the item to an invalid location. |
- SimulateKeyPress(ui::VKEY_UP); |
- EXPECT_TRUE(apps_grid_view_->IsSelectedView(GetItemViewAt(0))); |
- SimulateKeyPress(ui::VKEY_DOWN); |
- EXPECT_TRUE(apps_grid_view_->IsSelectedView(GetItemViewAt(0))); |
- SimulateKeyPress(ui::VKEY_LEFT); |
- EXPECT_TRUE(apps_grid_view_->IsSelectedView(GetItemViewAt(0))); |
- |
- // Move to the second item and try to go past it. |
- SimulateKeyPress(ui::VKEY_RIGHT); |
- EXPECT_TRUE(apps_grid_view_->IsSelectedView(GetItemViewAt(1))); |
- SimulateKeyPress(ui::VKEY_RIGHT); |
- EXPECT_TRUE(apps_grid_view_->IsSelectedView(GetItemViewAt(1))); |
-} |
- |
-} // namespace test |
-} // namespace app_list |