Index: ui/app_list/cocoa/apps_grid_controller_unittest.mm |
diff --git a/ui/app_list/cocoa/apps_grid_controller_unittest.mm b/ui/app_list/cocoa/apps_grid_controller_unittest.mm |
deleted file mode 100644 |
index f580fd7f54f1a58fa2474d4eaffbc44c3e2de076..0000000000000000000000000000000000000000 |
--- a/ui/app_list/cocoa/apps_grid_controller_unittest.mm |
+++ /dev/null |
@@ -1,991 +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 "base/mac/foundation_util.h" |
-#include "base/mac/scoped_nsobject.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "skia/ext/skia_utils_mac.h" |
-#import "testing/gtest_mac.h" |
-#include "ui/app_list/app_list_constants.h" |
-#include "ui/app_list/app_list_item.h" |
-#import "ui/app_list/cocoa/apps_collection_view_drag_manager.h" |
-#import "ui/app_list/cocoa/apps_grid_controller.h" |
-#import "ui/app_list/cocoa/apps_grid_view_item.h" |
-#import "ui/app_list/cocoa/apps_pagination_model_observer.h" |
-#import "ui/app_list/cocoa/test/apps_grid_controller_test_helper.h" |
-#include "ui/app_list/test/app_list_test_model.h" |
-#include "ui/app_list/test/app_list_test_view_delegate.h" |
-#include "ui/base/models/simple_menu_model.h" |
-#import "ui/events/test/cocoa_test_event_utils.h" |
- |
-@interface TestPaginationObserver : NSObject<AppsPaginationModelObserver> { |
- @private |
- NSInteger hoveredSegmentForTest_; |
- int totalPagesChangedCount_; |
- int selectedPageChangedCount_; |
- int lastNewSelectedPage_; |
- bool visibilityDidChange_; |
-} |
- |
-@property(assign, nonatomic) NSInteger hoveredSegmentForTest; |
-@property(assign, nonatomic) int totalPagesChangedCount; |
-@property(assign, nonatomic) int selectedPageChangedCount; |
-@property(assign, nonatomic) int lastNewSelectedPage; |
- |
-- (bool)readVisibilityDidChange; |
- |
-@end |
- |
-@implementation TestPaginationObserver |
- |
-@synthesize hoveredSegmentForTest = hoveredSegmentForTest_; |
-@synthesize totalPagesChangedCount = totalPagesChangedCount_; |
-@synthesize selectedPageChangedCount = selectedPageChangedCount_; |
-@synthesize lastNewSelectedPage = lastNewSelectedPage_; |
- |
-- (id)init { |
- if ((self = [super init])) |
- hoveredSegmentForTest_ = -1; |
- |
- return self; |
-} |
- |
-- (bool)readVisibilityDidChange { |
- bool truth = visibilityDidChange_; |
- visibilityDidChange_ = false; |
- return truth; |
-} |
- |
-- (void)totalPagesChanged { |
- ++totalPagesChangedCount_; |
-} |
- |
-- (void)selectedPageChanged:(int)newSelected { |
- ++selectedPageChangedCount_; |
- lastNewSelectedPage_ = newSelected; |
-} |
- |
-- (void)pageVisibilityChanged { |
- visibilityDidChange_ = true; |
-} |
- |
-- (NSInteger)pagerSegmentAtLocation:(NSPoint)locationInWindow { |
- return hoveredSegmentForTest_; |
-} |
- |
-@end |
- |
-namespace app_list { |
-namespace test { |
- |
-namespace { |
- |
-class AppsGridControllerTest : public AppsGridControllerTestHelper { |
- public: |
- AppsGridControllerTest() {} |
- |
- AppListTestViewDelegate* delegate() { |
- return owned_delegate_.get(); |
- } |
- |
- NSColor* ButtonTitleColorAt(size_t index) { |
- NSDictionary* attributes = |
- [[[GetItemViewAt(index) cell] attributedTitle] attributesAtIndex:0 |
- effectiveRange:NULL]; |
- return [attributes objectForKey:NSForegroundColorAttributeName]; |
- } |
- |
- virtual void SetUp() override { |
- owned_apps_grid_controller_.reset([[AppsGridController alloc] init]); |
- owned_delegate_.reset(new AppListTestViewDelegate); |
- [owned_apps_grid_controller_ setDelegate:owned_delegate_.get()]; |
- AppsGridControllerTestHelper::SetUpWithGridController( |
- owned_apps_grid_controller_.get()); |
- |
- [[test_window() contentView] addSubview:[apps_grid_controller_ view]]; |
- [test_window() makePretendKeyWindowAndSetFirstResponder: |
- [apps_grid_controller_ collectionViewAtPageIndex:0]]; |
- } |
- |
- virtual void TearDown() override { |
- [owned_apps_grid_controller_ setDelegate:NULL]; |
- owned_apps_grid_controller_.reset(); |
- AppsGridControllerTestHelper::TearDown(); |
- } |
- |
- void ReplaceTestModel(int item_count) { |
- // Clear the delegate before reseting and destroying the model. |
- [owned_apps_grid_controller_ setDelegate:NULL]; |
- |
- owned_delegate_->ReplaceTestModel(item_count); |
- [owned_apps_grid_controller_ setDelegate:owned_delegate_.get()]; |
- } |
- |
- AppListTestModel* model() { return owned_delegate_->GetTestModel(); } |
- |
- private: |
- base::scoped_nsobject<AppsGridController> owned_apps_grid_controller_; |
- scoped_ptr<AppListTestViewDelegate> owned_delegate_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AppsGridControllerTest); |
-}; |
- |
-class AppListItemWithMenu : public AppListItem { |
- public: |
- explicit AppListItemWithMenu(const std::string& id) |
- : AppListItem(id), |
- menu_model_(NULL), |
- menu_ready_(true) { |
- SetName(id); |
- menu_model_.AddItem(0, base::UTF8ToUTF16("Menu For: " + id)); |
- } |
- |
- void SetMenuReadyForTesting(bool ready) { |
- menu_ready_ = ready; |
- } |
- |
- ui::MenuModel* GetContextMenuModel() override { |
- if (!menu_ready_) |
- return NULL; |
- |
- return &menu_model_; |
- } |
- |
- private: |
- ui::SimpleMenuModel menu_model_; |
- bool menu_ready_; |
- |
- DISALLOW_COPY_AND_ASSIGN(AppListItemWithMenu); |
-}; |
- |
-// Generate a mouse event at the centre of the view in |page| with the given |
-// |index_in_page| that can be used to initiate, update and complete drag |
-// operations. |
-NSEvent* MouseEventInCell(NSCollectionView* page, size_t index_in_page) { |
- NSRect cell_rect = [page frameForItemAtIndex:index_in_page]; |
- NSPoint point_in_view = NSMakePoint(NSMidX(cell_rect), NSMidY(cell_rect)); |
- NSPoint point_in_window = [page convertPoint:point_in_view |
- toView:nil]; |
- return cocoa_test_event_utils::LeftMouseDownAtPoint(point_in_window); |
-} |
- |
-NSEvent* MouseEventForScroll(NSView* view, CGFloat relative_x) { |
- NSRect view_rect = [view frame]; |
- NSPoint point_in_view = NSMakePoint(NSMidX(view_rect), NSMidY(view_rect)); |
- point_in_view.x += point_in_view.x * relative_x; |
- NSPoint point_in_window = [view convertPoint:point_in_view |
- toView:nil]; |
- return cocoa_test_event_utils::LeftMouseDownAtPoint(point_in_window); |
-} |
- |
-} // namespace |
- |
-TEST_VIEW(AppsGridControllerTest, [apps_grid_controller_ view]); |
- |
-// Test showing with an empty model. |
-TEST_F(AppsGridControllerTest, EmptyModelAndShow) { |
- EXPECT_TRUE([[apps_grid_controller_ view] superview]); |
- |
- // First page should always exist, even if empty. |
- EXPECT_EQ(1u, [apps_grid_controller_ pageCount]); |
- EXPECT_EQ(0u, [[GetPageAt(0) content] count]); |
- EXPECT_TRUE([GetPageAt(0) superview]); // The pages container. |
- EXPECT_TRUE([[GetPageAt(0) superview] superview]); |
-} |
- |
-// Test with a single item. |
-// This test is disabled in builders until the delay to wait for the collection |
-// view to load subviews can be removed, or some other solution is found. |
-TEST_F(AppsGridControllerTest, DISABLED_SingleEntryModel) { |
- // We need to "wake up" the NSCollectionView, otherwise it does not |
- // immediately update its subviews later in this function. |
- // When this test is run by itself, it's enough just to send a keypress (and |
- // this delay is not needed). |
- DelayForCollectionView(); |
- EXPECT_EQ(1u, [apps_grid_controller_ pageCount]); |
- EXPECT_EQ(0u, [[GetPageAt(0) content] count]); |
- |
- model()->PopulateApps(1); |
- SinkEvents(); |
- EXPECT_FALSE([GetPageAt(0) animations]); |
- |
- EXPECT_EQ(1u, [[GetPageAt(0) content] count]); |
- NSArray* subviews = [GetPageAt(0) subviews]; |
- EXPECT_EQ(1u, [subviews count]); |
- |
- // Note that using GetItemViewAt(0) here also works, and returns non-nil even |
- // without the delay, but a "click" on it does not register without the delay. |
- NSView* subview = [subviews objectAtIndex:0]; |
- |
- // Launch the item. |
- SimulateClick(subview); |
- SinkEvents(); |
- EXPECT_EQ(1, model()->activate_count()); |
- ASSERT_TRUE(model()->last_activated()); |
- EXPECT_EQ(std::string("Item 0"), model()->last_activated()->name()); |
-} |
- |
-// Test activating an item on the second page (the 17th item). |
-TEST_F(AppsGridControllerTest, DISABLED_TwoPageModel) { |
- DelayForCollectionView(); |
- ReplaceTestModel(kItemsPerPage * 2); |
- [apps_grid_controller_ scrollToPage:1]; |
- |
- // The NSScrollView animator ignores the duration configured on the |
- // NSAnimationContext (set by CocoaTest::Init), so we need to delay here. |
- DelayForCollectionView(); |
- NSArray* subviews = [GetPageAt(1) subviews]; |
- NSView* subview = [subviews objectAtIndex:0]; |
- // Launch the item. |
- SimulateClick(subview); |
- SinkEvents(); |
- EXPECT_EQ(1, model()->activate_count()); |
- ASSERT_TRUE(model()->last_activated()); |
- EXPECT_EQ(std::string("Item 16"), model()->last_activated()->name()); |
-} |
- |
-// Test setModel. |
-TEST_F(AppsGridControllerTest, ReplaceModel) { |
- const size_t kOrigItems = 1; |
- const size_t kNewItems = 2; |
- |
- model()->PopulateApps(kOrigItems); |
- EXPECT_EQ(kOrigItems, [[GetPageAt(0) content] count]); |
- |
- ReplaceTestModel(kNewItems); |
- EXPECT_EQ(kNewItems, [[GetPageAt(0) content] count]); |
-} |
- |
-// Test pagination. |
-TEST_F(AppsGridControllerTest, Pagination) { |
- model()->PopulateApps(1); |
- EXPECT_EQ(1u, [apps_grid_controller_ pageCount]); |
- EXPECT_EQ(1u, [[GetPageAt(0) content] count]); |
- |
- ReplaceTestModel(kItemsPerPage); |
- EXPECT_EQ(1u, [apps_grid_controller_ pageCount]); |
- EXPECT_EQ(kItemsPerPage, [[GetPageAt(0) content] count]); |
- |
- // Test adding an item onto the next page. |
- model()->PopulateApps(1); // Now 17 items. |
- EXPECT_EQ(2u, [apps_grid_controller_ pageCount]); |
- EXPECT_EQ(kItemsPerPage, [[GetPageAt(0) content] count]); |
- EXPECT_EQ(1u, [[GetPageAt(1) content] count]); |
- |
- // Test N pages with the last page having one empty spot. |
- const size_t kPagesToTest = 3; |
- ReplaceTestModel(kPagesToTest * kItemsPerPage - 1); |
- EXPECT_EQ(kPagesToTest, [apps_grid_controller_ pageCount]); |
- for (size_t page_index = 0; page_index < kPagesToTest - 1; ++page_index) { |
- EXPECT_EQ(kItemsPerPage, [[GetPageAt(page_index) content] count]); |
- } |
- EXPECT_EQ(kItemsPerPage - 1, [[GetPageAt(kPagesToTest - 1) content] count]); |
- |
- // Test removing pages. |
- ReplaceTestModel(1); |
- EXPECT_EQ(1u, [apps_grid_controller_ pageCount]); |
- EXPECT_EQ(1u, [[GetPageAt(0) content] count]); |
-} |
- |
-// Tests that selecting an item changes the text color correctly. |
-TEST_F(AppsGridControllerTest, SelectionChangesTextColor) { |
- model()->PopulateApps(2); |
- [apps_grid_controller_ selectItemAtIndex:0]; |
- EXPECT_NSEQ(ButtonTitleColorAt(0), |
- gfx::SkColorToSRGBNSColor(app_list::kGridTitleHoverColor)); |
- EXPECT_NSEQ(ButtonTitleColorAt(1), |
- gfx::SkColorToSRGBNSColor(app_list::kGridTitleColor)); |
- |
- [apps_grid_controller_ selectItemAtIndex:1]; |
- EXPECT_NSEQ(ButtonTitleColorAt(0), |
- gfx::SkColorToSRGBNSColor(app_list::kGridTitleColor)); |
- EXPECT_NSEQ(ButtonTitleColorAt(1), |
- gfx::SkColorToSRGBNSColor(app_list::kGridTitleHoverColor)); |
-} |
- |
-// Tests basic keyboard navigation on the first page. |
-TEST_F(AppsGridControllerTest, FirstPageKeyboardNavigation) { |
- model()->PopulateApps(kItemsPerPage - 2); |
- EXPECT_EQ(kItemsPerPage - 2, [[GetPageAt(0) content] count]); |
- |
- SimulateKeyAction(@selector(moveRight:)); |
- EXPECT_EQ(0u, [apps_grid_controller_ selectedItemIndex]); |
- |
- SimulateKeyAction(@selector(moveRight:)); |
- EXPECT_EQ(1u, [apps_grid_controller_ selectedItemIndex]); |
- |
- SimulateKeyAction(@selector(moveDown:)); |
- EXPECT_EQ(5u, [apps_grid_controller_ selectedItemIndex]); |
- |
- SimulateKeyAction(@selector(moveLeft:)); |
- EXPECT_EQ(4u, [apps_grid_controller_ selectedItemIndex]); |
- |
- SimulateKeyAction(@selector(moveUp:)); |
- EXPECT_EQ(0u, [apps_grid_controller_ selectedItemIndex]); |
- |
- // Go to the third item, and launch it. |
- SimulateKeyAction(@selector(moveRight:)); |
- SimulateKeyAction(@selector(moveRight:)); |
- EXPECT_EQ(2u, [apps_grid_controller_ selectedItemIndex]); |
- SimulateKeyAction(@selector(insertNewline:)); |
- EXPECT_EQ(1, model()->activate_count()); |
- ASSERT_TRUE(model()->last_activated()); |
- EXPECT_EQ(std::string("Item 2"), model()->last_activated()->name()); |
-} |
- |
-// Tests keyboard navigation across pages. |
-TEST_F(AppsGridControllerTest, CrossPageKeyboardNavigation) { |
- model()->PopulateApps(kItemsPerPage + 10); |
- EXPECT_EQ(kItemsPerPage, [[GetPageAt(0) content] count]); |
- EXPECT_EQ(10u, [[GetPageAt(1) content] count]); |
- |
- // Moving Left, Up, or PageUp from the top-left corner of the first page does |
- // nothing. |
- [apps_grid_controller_ selectItemAtIndex:0]; |
- SimulateKeyAction(@selector(moveLeft:)); |
- EXPECT_EQ(0u, [apps_grid_controller_ selectedItemIndex]); |
- SimulateKeyAction(@selector(moveUp:)); |
- EXPECT_EQ(0u, [apps_grid_controller_ selectedItemIndex]); |
- SimulateKeyAction(@selector(scrollPageUp:)); |
- EXPECT_EQ(0u, [apps_grid_controller_ selectedItemIndex]); |
- |
- // Moving Right from the right side goes to the next page. Moving Left goes |
- // back to the first page. |
- [apps_grid_controller_ selectItemAtIndex:3]; |
- SimulateKeyAction(@selector(moveRight:)); |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(kItemsPerPage, [apps_grid_controller_ selectedItemIndex]); |
- SimulateKeyAction(@selector(moveLeft:)); |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(3u, [apps_grid_controller_ selectedItemIndex]); |
- |
- // Moving Down from the bottom does nothing. |
- [apps_grid_controller_ selectItemAtIndex:13]; |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- SimulateKeyAction(@selector(moveDown:)); |
- EXPECT_EQ(13u, [apps_grid_controller_ selectedItemIndex]); |
- |
- // Moving Right into a non-existent square on the next page will select the |
- // last item. |
- [apps_grid_controller_ selectItemAtIndex:15]; |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- SimulateKeyAction(@selector(moveRight:)); |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(kItemsPerPage + 9, [apps_grid_controller_ selectedItemIndex]); |
- |
- // PageDown and PageUp switches pages while maintaining the same selection |
- // position. |
- [apps_grid_controller_ selectItemAtIndex:6]; |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- SimulateKeyAction(@selector(scrollPageDown:)); |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(kItemsPerPage + 6, [apps_grid_controller_ selectedItemIndex]); |
- SimulateKeyAction(@selector(scrollPageUp:)); |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(6u, [apps_grid_controller_ selectedItemIndex]); |
- |
- // PageDown into a non-existent square on the next page will select the last |
- // item. |
- [apps_grid_controller_ selectItemAtIndex:11]; |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- SimulateKeyAction(@selector(scrollPageDown:)); |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(kItemsPerPage + 9, [apps_grid_controller_ selectedItemIndex]); |
- |
- // Moving Right, Down, or PageDown from the bottom-right corner of the last |
- // page (not the last item) does nothing. |
- [apps_grid_controller_ selectItemAtIndex:kItemsPerPage + 9]; |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- SimulateKeyAction(@selector(moveRight:)); |
- EXPECT_EQ(kItemsPerPage + 9, [apps_grid_controller_ selectedItemIndex]); |
- SimulateKeyAction(@selector(moveDown:)); |
- EXPECT_EQ(kItemsPerPage + 9, [apps_grid_controller_ selectedItemIndex]); |
- SimulateKeyAction(@selector(scrollPageDown:)); |
- EXPECT_EQ(kItemsPerPage + 9, [apps_grid_controller_ selectedItemIndex]); |
- |
- // After page switch, arrow keys select first item on current page. |
- [apps_grid_controller_ scrollToPage:0]; |
- [apps_grid_controller_ scrollToPage:1]; |
- EXPECT_EQ(NSNotFound, [apps_grid_controller_ selectedItemIndex]); |
- SimulateKeyAction(@selector(moveUp:)); |
- EXPECT_EQ(kItemsPerPage, [apps_grid_controller_ selectedItemIndex]); |
-} |
- |
-// Highlighting an item should cause the page it's on to be visible. |
-TEST_F(AppsGridControllerTest, EnsureHighlightedVisible) { |
- model()->PopulateApps(3 * kItemsPerPage); |
- EXPECT_EQ(kItemsPerPage, [[GetPageAt(2) content] count]); |
- |
- // First and last items of first page. |
- [apps_grid_controller_ selectItemAtIndex:0]; |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- [apps_grid_controller_ selectItemAtIndex:kItemsPerPage - 1]; |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- |
- // First item of second page. |
- [apps_grid_controller_ selectItemAtIndex:kItemsPerPage + 1]; |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- |
- // Last item in model. |
- [apps_grid_controller_ selectItemAtIndex:3 * kItemsPerPage - 1]; |
- EXPECT_EQ(2u, [apps_grid_controller_ visiblePage]); |
-} |
- |
-// Test runtime updates: adding items, removing items, and moving items (e.g. in |
-// response to app install, uninstall, and chrome sync changes. Also test |
-// changing titles and icons. |
-TEST_F(AppsGridControllerTest, ModelUpdate) { |
- model()->PopulateApps(2); |
- EXPECT_EQ(2u, [[GetPageAt(0) content] count]); |
- EXPECT_EQ(std::string("|Item 0,Item 1|"), GetViewContent()); |
- |
- // Add an item (PopulateApps will create a new "Item 2"). |
- model()->PopulateApps(1); |
- EXPECT_EQ(3u, [[GetPageAt(0) content] count]); |
- NSButton* button = GetItemViewAt(2); |
- EXPECT_NSEQ(@"Item 2", [button title]); |
- EXPECT_EQ(std::string("|Item 0,Item 1,Item 2|"), GetViewContent()); |
- |
- // Update the title via the ItemModelObserver. |
- app_list::AppListItem* item_model = |
- model()->top_level_item_list()->item_at(2); |
- model()->SetItemName(item_model, "UpdatedItem"); |
- EXPECT_NSEQ(@"UpdatedItem", [button title]); |
- |
- // Test icon updates through the model observer by ensuring the icon changes. |
- item_model->SetIcon(gfx::ImageSkia(), false); |
- NSSize icon_size = [[button image] size]; |
- EXPECT_EQ(0, icon_size.width); |
- EXPECT_EQ(0, icon_size.height); |
- |
- SkBitmap bitmap; |
- const int kTestImageSize = 10; |
- const int kTargetImageSize = 48; |
- bitmap.setInfo(SkImageInfo::MakeN32Premul(kTestImageSize, kTestImageSize)); |
- item_model->SetIcon(gfx::ImageSkia::CreateFrom1xBitmap(bitmap), false); |
- icon_size = [[button image] size]; |
- // Icon should always be resized to 48x48. |
- EXPECT_EQ(kTargetImageSize, icon_size.width); |
- EXPECT_EQ(kTargetImageSize, icon_size.height); |
-} |
- |
-TEST_F(AppsGridControllerTest, ModelAdd) { |
- model()->PopulateApps(2); |
- EXPECT_EQ(2u, [[GetPageAt(0) content] count]); |
- EXPECT_EQ(std::string("|Item 0,Item 1|"), GetViewContent()); |
- |
- app_list::AppListItemList* item_list = model()->top_level_item_list(); |
- |
- model()->CreateAndAddItem("Item 2"); |
- ASSERT_EQ(3u, item_list->item_count()); |
- EXPECT_EQ(3u, [apps_grid_controller_ itemCount]); |
- EXPECT_EQ(std::string("|Item 0,Item 1,Item 2|"), GetViewContent()); |
- |
- // Test adding an item whose position is in the middle. |
- app_list::AppListItem* item0 = item_list->item_at(0); |
- app_list::AppListItem* item1 = item_list->item_at(1); |
- app_list::AppListItem* item3 = model()->CreateItem("Item Three"); |
- model()->AddItem(item3); |
- item_list->SetItemPosition( |
- item3, item0->position().CreateBetween(item1->position())); |
- EXPECT_EQ(4u, [apps_grid_controller_ itemCount]); |
- EXPECT_EQ(std::string("|Item 0,Item Three,Item 1,Item 2|"), GetViewContent()); |
-} |
- |
-TEST_F(AppsGridControllerTest, ModelMove) { |
- model()->PopulateApps(3); |
- EXPECT_EQ(3u, [[GetPageAt(0) content] count]); |
- EXPECT_EQ(std::string("|Item 0,Item 1,Item 2|"), GetViewContent()); |
- |
- // Test swapping items (e.g. rearranging via sync). |
- model()->top_level_item_list()->MoveItem(1, 2); |
- EXPECT_EQ(std::string("|Item 0,Item 2,Item 1|"), GetViewContent()); |
-} |
- |
-TEST_F(AppsGridControllerTest, ModelRemove) { |
- model()->PopulateApps(3); |
- EXPECT_EQ(3u, [[GetPageAt(0) content] count]); |
- EXPECT_EQ(std::string("|Item 0,Item 1,Item 2|"), GetViewContent()); |
- |
- // Test removing an item at the end. |
- model()->DeleteItem("Item 2"); |
- EXPECT_EQ(2u, [apps_grid_controller_ itemCount]); |
- EXPECT_EQ(std::string("|Item 0,Item 1|"), GetViewContent()); |
- |
- // Test removing in the middle. |
- model()->CreateAndAddItem("Item 2"); |
- EXPECT_EQ(3u, [apps_grid_controller_ itemCount]); |
- EXPECT_EQ(std::string("|Item 0,Item 1,Item 2|"), GetViewContent()); |
- model()->DeleteItem("Item 1"); |
- EXPECT_EQ(2u, [apps_grid_controller_ itemCount]); |
- EXPECT_EQ(std::string("|Item 0,Item 2|"), GetViewContent()); |
-} |
- |
-TEST_F(AppsGridControllerTest, ModelRemoveSeveral) { |
- model()->PopulateApps(3); |
- EXPECT_EQ(3u, [[GetPageAt(0) content] count]); |
- EXPECT_EQ(std::string("|Item 0,Item 1,Item 2|"), GetViewContent()); |
- |
- // Test removing multiple items via the model. |
- model()->DeleteItem("Item 0"); |
- model()->DeleteItem("Item 1"); |
- model()->DeleteItem("Item 2"); |
- EXPECT_EQ(0u, [apps_grid_controller_ itemCount]); |
- EXPECT_EQ(std::string("||"), GetViewContent()); |
-} |
- |
-TEST_F(AppsGridControllerTest, ModelRemovePage) { |
- app_list::AppListItemList* item_list = model()->top_level_item_list(); |
- |
- model()->PopulateApps(kItemsPerPage + 1); |
- ASSERT_EQ(kItemsPerPage + 1, item_list->item_count()); |
- EXPECT_EQ(kItemsPerPage + 1, [apps_grid_controller_ itemCount]); |
- EXPECT_EQ(2u, [apps_grid_controller_ pageCount]); |
- |
- // Test removing the last item when there is one item on the second page. |
- app_list::AppListItem* last_item = item_list->item_at(kItemsPerPage); |
- model()->DeleteItem(last_item->id()); |
- EXPECT_EQ(kItemsPerPage, item_list->item_count()); |
- EXPECT_EQ(kItemsPerPage, [apps_grid_controller_ itemCount]); |
- EXPECT_EQ(1u, [apps_grid_controller_ pageCount]); |
-} |
- |
-// Test install progress bars, and install flow with item highlighting. |
-TEST_F(AppsGridControllerTest, ItemInstallProgress) { |
- ReplaceTestModel(kItemsPerPage + 1); |
- EXPECT_EQ(2u, [apps_grid_controller_ pageCount]); |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- // The single item on the second page. |
- int kTestItemIndex = kItemsPerPage; |
- app_list::AppListItem* item_model = |
- model()->top_level_item_list()->item_at(kTestItemIndex); |
- |
- // Highlighting an item should activate the page it is on. |
- model()->HighlightItemAt(kTestItemIndex); |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- |
- // Starting install should add a progress bar, and temporarily clear the |
- // button title. |
- NSButton* button = GetItemViewAt(kTestItemIndex); |
- NSView* containerView = [button superview]; |
- EXPECT_EQ(1u, [[containerView subviews] count]); |
- EXPECT_NSEQ(@"Item 16", [button title]); |
- model()->HighlightItemAt(kTestItemIndex); |
- item_model->SetIsInstalling(true); |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- |
- EXPECT_EQ(2u, [[containerView subviews] count]); |
- EXPECT_NSEQ(@"", [button title]); |
- NSProgressIndicator* progressIndicator = |
- [[containerView subviews] objectAtIndex:1]; |
- EXPECT_FALSE([progressIndicator isIndeterminate]); |
- EXPECT_EQ(0.0, [progressIndicator doubleValue]); |
- |
- // Updating the progress in the model should update the progress bar. |
- item_model->SetPercentDownloaded(50); |
- EXPECT_EQ(50.0, [progressIndicator doubleValue]); |
- |
- // Two things can be installing simultaneously. When one starts or completes |
- // the model builder will ask for the item to be highlighted. |
- const int kAlternateTestItemIndex = 0; |
- model()->HighlightItemAt(kAlternateTestItemIndex); |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- |
- // Update the first item (page doesn't change on updates). |
- item_model->SetPercentDownloaded(100); |
- EXPECT_EQ(100.0, [progressIndicator doubleValue]); |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- |
- // A percent of -1 indicates the download is complete and the unpack/install |
- // process has started. |
- item_model->SetPercentDownloaded(-1); |
- EXPECT_TRUE([progressIndicator isIndeterminate]); |
- |
- // Completing install removes the progress bar, and restores the title. |
- // ExtensionAppModelBuilder will reload the ExtensionAppItem, which also |
- // highlights. Do the same here. |
- model()->HighlightItemAt(kTestItemIndex); |
- item_model->SetIsInstalling(false); |
- EXPECT_EQ(1u, [[containerView subviews] count]); |
- EXPECT_NSEQ(@"Item 16", [button title]); |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- |
- // Things should cleanup OK with |alternate_item_model| left installing. |
-} |
- |
-// Test mouseover selection. |
-TEST_F(AppsGridControllerTest, MouseoverSelects) { |
- model()->PopulateApps(2); |
- EXPECT_EQ(nil, GetSelectedView()); |
- |
- // Test entering and exiting the first item. |
- SimulateMouseEnterItemAt(0); |
- EXPECT_EQ(GetItemViewAt(0), GetSelectedView()); |
- SimulateMouseExitItemAt(0); |
- EXPECT_EQ(nil, GetSelectedView()); |
- |
- // AppKit doesn't guarantee the order, so test moving between items. |
- SimulateMouseEnterItemAt(0); |
- EXPECT_EQ(GetItemViewAt(0), GetSelectedView()); |
- SimulateMouseEnterItemAt(1); |
- EXPECT_EQ(GetItemViewAt(1), GetSelectedView()); |
- SimulateMouseExitItemAt(0); |
- EXPECT_EQ(GetItemViewAt(1), GetSelectedView()); |
- SimulateMouseExitItemAt(1); |
- EXPECT_EQ(nil, GetSelectedView()); |
-} |
- |
-// Test AppsGridPaginationObserver totalPagesChanged(). |
-TEST_F(AppsGridControllerTest, PaginationObserverPagesChanged) { |
- base::scoped_nsobject<TestPaginationObserver> observer( |
- [[TestPaginationObserver alloc] init]); |
- [apps_grid_controller_ setPaginationObserver:observer]; |
- |
- // Test totalPagesChanged. |
- model()->PopulateApps(kItemsPerPage); |
- EXPECT_EQ(0, [observer totalPagesChangedCount]); |
- EXPECT_EQ(1u, [apps_grid_controller_ pageCount]); |
- model()->PopulateApps(1); |
- EXPECT_EQ(1, [observer totalPagesChangedCount]); |
- EXPECT_EQ(2u, [apps_grid_controller_ pageCount]); |
- ReplaceTestModel(0); |
- EXPECT_EQ(2, [observer totalPagesChangedCount]); |
- EXPECT_EQ(1u, [apps_grid_controller_ pageCount]); |
- ReplaceTestModel(kItemsPerPage * 3 + 1); |
- EXPECT_EQ(3, [observer totalPagesChangedCount]); |
- EXPECT_EQ(4u, [apps_grid_controller_ pageCount]); |
- |
- EXPECT_FALSE([observer readVisibilityDidChange]); |
- EXPECT_EQ(0, [observer selectedPageChangedCount]); |
- |
- [apps_grid_controller_ setPaginationObserver:nil]; |
-} |
- |
-// Test AppsGridPaginationObserver selectedPageChanged(). |
-TEST_F(AppsGridControllerTest, PaginationObserverSelectedPageChanged) { |
- base::scoped_nsobject<TestPaginationObserver> observer( |
- [[TestPaginationObserver alloc] init]); |
- [apps_grid_controller_ setPaginationObserver:observer]; |
- EXPECT_EQ(0, [[NSAnimationContext currentContext] duration]); |
- |
- ReplaceTestModel(kItemsPerPage * 3 + 1); |
- EXPECT_EQ(1, [observer totalPagesChangedCount]); |
- EXPECT_EQ(4u, [apps_grid_controller_ pageCount]); |
- |
- EXPECT_FALSE([observer readVisibilityDidChange]); |
- EXPECT_EQ(0, [observer selectedPageChangedCount]); |
- |
- [apps_grid_controller_ scrollToPage:1]; |
- EXPECT_EQ(1, [observer selectedPageChangedCount]); |
- EXPECT_EQ(1, [observer lastNewSelectedPage]); |
- EXPECT_TRUE([observer readVisibilityDidChange]); |
- EXPECT_FALSE([observer readVisibilityDidChange]); // Testing test behaviour. |
- EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:0]); |
- EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:1]); |
- EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:2]); |
- EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:3]); |
- |
- [apps_grid_controller_ scrollToPage:0]; |
- EXPECT_EQ(2, [observer selectedPageChangedCount]); |
- EXPECT_EQ(0, [observer lastNewSelectedPage]); |
- EXPECT_TRUE([observer readVisibilityDidChange]); |
- EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:0]); |
- EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:1]); |
- |
- [apps_grid_controller_ scrollToPage:3]; |
- // Note: with no animations, there is only a single page change. However, with |
- // animations we expect multiple updates depending on the rate that the scroll |
- // view updates and sends out NSViewBoundsDidChangeNotification. |
- EXPECT_EQ(3, [observer selectedPageChangedCount]); |
- EXPECT_EQ(3, [observer lastNewSelectedPage]); |
- EXPECT_TRUE([observer readVisibilityDidChange]); |
- EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:0]); |
- EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:3]); |
- |
- [apps_grid_controller_ setPaginationObserver:nil]; |
-} |
- |
-// Test basic item moves with two items; swapping them around, dragging outside |
-// of the view bounds, and dragging on the background. |
-TEST_F(AppsGridControllerTest, DragAndDropSimple) { |
- model()->PopulateApps(2); |
- NSCollectionView* page = [apps_grid_controller_ collectionViewAtPageIndex:0]; |
- NSEvent* mouse_at_cell_0 = MouseEventInCell(page, 0); |
- NSEvent* mouse_at_cell_1 = MouseEventInCell(page, 1); |
- NSEvent* mouse_at_page_centre = MouseEventInCell(page, 6); |
- NSEvent* mouse_off_page = MouseEventInCell(page, kItemsPerPage * 2); |
- |
- const std::string kOrdered = "Item 0,Item 1"; |
- const std::string kSwapped = "Item 1,Item 0"; |
- const std::string kOrderedView = "|Item 0,Item 1|"; |
- const std::string kSwappedView = "|Item 1,Item 0|"; |
- |
- EXPECT_EQ(kOrdered, model()->GetModelContent()); |
- EXPECT_EQ(kOrderedView, GetViewContent()); |
- AppsCollectionViewDragManager* drag_manager = |
- [apps_grid_controller_ dragManager]; |
- |
- // Drag first item over the second item and release. |
- [drag_manager onMouseDownInPage:page |
- withEvent:mouse_at_cell_0]; |
- [drag_manager onMouseDragged:mouse_at_cell_1]; |
- EXPECT_EQ(kOrdered, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); // View swaps first. |
- [drag_manager onMouseUp:mouse_at_cell_1]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); |
- |
- // Drag item back. |
- [drag_manager onMouseDownInPage:page |
- withEvent:mouse_at_cell_1]; |
- [drag_manager onMouseDragged:mouse_at_cell_0]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kOrderedView, GetViewContent()); |
- [drag_manager onMouseUp:mouse_at_cell_0]; |
- EXPECT_EQ(kOrdered, model()->GetModelContent()); |
- EXPECT_EQ(kOrderedView, GetViewContent()); |
- |
- // Drag first item to centre of view (should put in last place). |
- [drag_manager onMouseDownInPage:page |
- withEvent:mouse_at_cell_0]; |
- [drag_manager onMouseDragged:mouse_at_page_centre]; |
- EXPECT_EQ(kOrdered, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); |
- [drag_manager onMouseUp:mouse_at_page_centre]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); |
- |
- // Drag item to centre again (should leave it in the last place). |
- [drag_manager onMouseDownInPage:page |
- withEvent:mouse_at_cell_1]; |
- [drag_manager onMouseDragged:mouse_at_page_centre]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); |
- [drag_manager onMouseUp:mouse_at_page_centre]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); |
- |
- // Drag starting in the centre of the view, should do nothing. |
- [drag_manager onMouseDownInPage:page |
- withEvent:mouse_at_page_centre]; |
- [drag_manager onMouseDragged:mouse_at_cell_0]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); |
- [drag_manager onMouseUp:mouse_at_cell_0]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); |
- |
- // Click off page. |
- [drag_manager onMouseDownInPage:page |
- withEvent:mouse_off_page]; |
- [drag_manager onMouseDragged:mouse_at_cell_0]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); |
- [drag_manager onMouseUp:mouse_at_cell_0]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kSwappedView, GetViewContent()); |
- |
- // Drag to first over second item, then off page. |
- [drag_manager onMouseDownInPage:page |
- withEvent:mouse_at_cell_0]; |
- [drag_manager onMouseDragged:mouse_at_cell_1]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kOrderedView, GetViewContent()); |
- [drag_manager onMouseDragged:mouse_off_page]; |
- EXPECT_EQ(kSwapped, model()->GetModelContent()); |
- EXPECT_EQ(kOrderedView, GetViewContent()); |
- [drag_manager onMouseUp:mouse_off_page]; |
- EXPECT_EQ(kOrdered, model()->GetModelContent()); |
- EXPECT_EQ(kOrderedView, GetViewContent()); |
- |
- // Replace with an empty model, and ensure we do not break. |
- ReplaceTestModel(0); |
- EXPECT_EQ(std::string(), model()->GetModelContent()); |
- EXPECT_EQ(std::string("||"), GetViewContent()); |
- [drag_manager onMouseDownInPage:page |
- withEvent:mouse_at_cell_0]; |
- [drag_manager onMouseDragged:mouse_at_cell_1]; |
- [drag_manager onMouseUp:mouse_at_cell_1]; |
- EXPECT_EQ(std::string(), model()->GetModelContent()); |
- EXPECT_EQ(std::string("||"), GetViewContent()); |
-} |
- |
-// Test item moves between pages. |
-TEST_F(AppsGridControllerTest, DragAndDropMultiPage) { |
- const size_t kPagesToTest = 3; |
- // Put one item on the last page to hit more edge cases. |
- ReplaceTestModel(kItemsPerPage * (kPagesToTest - 1) + 1); |
- NSCollectionView* page[kPagesToTest]; |
- for (size_t i = 0; i < kPagesToTest; ++i) |
- page[i] = [apps_grid_controller_ collectionViewAtPageIndex:i]; |
- |
- const std::string kSecondItemMovedToSecondPage = |
- "|Item 0,Item 2,Item 3,Item 4,Item 5,Item 6,Item 7,Item 8," |
- "Item 9,Item 10,Item 11,Item 12,Item 13,Item 14,Item 15,Item 16|" |
- "|Item 17,Item 1,Item 18,Item 19,Item 20,Item 21,Item 22,Item 23," |
- "Item 24,Item 25,Item 26,Item 27,Item 28,Item 29,Item 30,Item 31|" |
- "|Item 32|"; |
- |
- NSEvent* mouse_at_cell_0 = MouseEventInCell(page[0], 0); |
- NSEvent* mouse_at_cell_1 = MouseEventInCell(page[0], 1); |
- AppsCollectionViewDragManager* drag_manager = |
- [apps_grid_controller_ dragManager]; |
- [drag_manager onMouseDownInPage:page[0] |
- withEvent:mouse_at_cell_1]; |
- |
- // Initiate dragging before changing pages. |
- [drag_manager onMouseDragged:mouse_at_cell_0]; |
- |
- // Scroll to the second page. |
- [apps_grid_controller_ scrollToPage:1]; |
- [drag_manager onMouseDragged:mouse_at_cell_1]; |
- |
- // Do one exhaustive check, and then spot-check corner cases. |
- EXPECT_EQ(kSecondItemMovedToSecondPage, GetViewContent()); |
- EXPECT_EQ(0u, GetPageIndexForItem(0)); |
- EXPECT_EQ(1u, GetPageIndexForItem(1)); |
- EXPECT_EQ(0u, GetPageIndexForItem(2)); |
- EXPECT_EQ(0u, GetPageIndexForItem(16)); |
- EXPECT_EQ(1u, GetPageIndexForItem(17)); |
- EXPECT_EQ(1u, GetPageIndexForItem(31)); |
- EXPECT_EQ(2u, GetPageIndexForItem(32)); |
- |
- // Scroll to the third page and drag some more. |
- [apps_grid_controller_ scrollToPage:2]; |
- [drag_manager onMouseDragged:mouse_at_cell_1]; |
- EXPECT_EQ(2u, GetPageIndexForItem(1)); |
- EXPECT_EQ(1u, GetPageIndexForItem(31)); |
- EXPECT_EQ(1u, GetPageIndexForItem(32)); |
- |
- // Scroll backwards. |
- [apps_grid_controller_ scrollToPage:1]; |
- [drag_manager onMouseDragged:mouse_at_cell_1]; |
- EXPECT_EQ(kSecondItemMovedToSecondPage, GetViewContent()); |
- EXPECT_EQ(1u, GetPageIndexForItem(1)); |
- EXPECT_EQ(1u, GetPageIndexForItem(31)); |
- EXPECT_EQ(2u, GetPageIndexForItem(32)); |
- |
- // Simulate installing an item while dragging (or have it appear during sync). |
- model()->PopulateAppWithId(33); |
- // Item should go back to its position before the drag. |
- EXPECT_EQ(0u, GetPageIndexForItem(1)); |
- EXPECT_EQ(1u, GetPageIndexForItem(31)); |
- EXPECT_EQ(2u, GetPageIndexForItem(32)); |
- // New item should appear at end. |
- EXPECT_EQ(2u, GetPageIndexForItem(33)); |
- |
- // Scroll to end again, and keep dragging (should be ignored). |
- [apps_grid_controller_ scrollToPage:2]; |
- [drag_manager onMouseDragged:mouse_at_cell_0]; |
- EXPECT_EQ(0u, GetPageIndexForItem(1)); |
- [drag_manager onMouseUp:mouse_at_cell_0]; |
- EXPECT_EQ(0u, GetPageIndexForItem(1)); |
-} |
- |
-// Test scrolling when dragging past edge or over the pager. |
-TEST_F(AppsGridControllerTest, ScrollingWhileDragging) { |
- base::scoped_nsobject<TestPaginationObserver> observer( |
- [[TestPaginationObserver alloc] init]); |
- [apps_grid_controller_ setPaginationObserver:observer]; |
- |
- ReplaceTestModel(kItemsPerPage * 3); |
- // Start on the middle page. |
- [apps_grid_controller_ scrollToPage:1]; |
- NSCollectionView* page = [apps_grid_controller_ collectionViewAtPageIndex:1]; |
- NSEvent* mouse_at_cell_0 = MouseEventInCell(page, 0); |
- |
- NSEvent* at_center = MouseEventForScroll([apps_grid_controller_ view], 0.0); |
- NSEvent* at_left = MouseEventForScroll([apps_grid_controller_ view], -1.1); |
- NSEvent* at_right = MouseEventForScroll([apps_grid_controller_ view], 1.1); |
- |
- AppsCollectionViewDragManager* drag_manager = |
- [apps_grid_controller_ dragManager]; |
- [drag_manager onMouseDownInPage:page |
- withEvent:mouse_at_cell_0]; |
- [drag_manager onMouseDragged:at_center]; |
- |
- // Nothing should be scheduled: target page is visible page. |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(1u, [apps_grid_controller_ scheduledScrollPage]); |
- |
- // Drag to the left, should go to first page and no further. |
- [drag_manager onMouseDragged:at_left]; |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(0u, [apps_grid_controller_ scheduledScrollPage]); |
- [apps_grid_controller_ scrollToPage:0]; // Commit without timer for testing. |
- [drag_manager onMouseDragged:at_left]; |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(0u, [apps_grid_controller_ scheduledScrollPage]); |
- |
- // Drag to the right, should go to last page and no futher. |
- [drag_manager onMouseDragged:at_right]; |
- EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(1u, [apps_grid_controller_ scheduledScrollPage]); |
- [apps_grid_controller_ scrollToPage:1]; |
- [drag_manager onMouseDragged:at_right]; |
- EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(2u, [apps_grid_controller_ scheduledScrollPage]); |
- [apps_grid_controller_ scrollToPage:2]; |
- [drag_manager onMouseDragged:at_right]; |
- EXPECT_EQ(2u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(2u, [apps_grid_controller_ scheduledScrollPage]); |
- |
- // Simulate a hover over the first pager segment. |
- [observer setHoveredSegmentForTest:0]; |
- [drag_manager onMouseDragged:at_center]; |
- EXPECT_EQ(2u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(0u, [apps_grid_controller_ scheduledScrollPage]); |
- |
- // Drag it back, should cancel schedule. |
- [observer setHoveredSegmentForTest:-1]; |
- [drag_manager onMouseDragged:at_center]; |
- EXPECT_EQ(2u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(2u, [apps_grid_controller_ scheduledScrollPage]); |
- |
- // Hover again, now over middle segment, and ensure a release also cancels. |
- [observer setHoveredSegmentForTest:1]; |
- [drag_manager onMouseDragged:at_center]; |
- EXPECT_EQ(2u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(1u, [apps_grid_controller_ scheduledScrollPage]); |
- [drag_manager onMouseUp:at_center]; |
- EXPECT_EQ(2u, [apps_grid_controller_ visiblePage]); |
- EXPECT_EQ(2u, [apps_grid_controller_ scheduledScrollPage]); |
- |
- [apps_grid_controller_ setPaginationObserver:nil]; |
-} |
- |
-TEST_F(AppsGridControllerTest, ContextMenus) { |
- AppListItemWithMenu* item_two_model = new AppListItemWithMenu("Item Two"); |
- model()->AddItem(new AppListItemWithMenu("Item One")); |
- model()->AddItem(item_two_model); |
- EXPECT_EQ(2u, [apps_grid_controller_ itemCount]); |
- |
- NSCollectionView* page = [apps_grid_controller_ collectionViewAtPageIndex:0]; |
- NSEvent* mouse_at_cell_0 = MouseEventInCell(page, 0); |
- NSEvent* mouse_at_cell_1 = MouseEventInCell(page, 1); |
- |
- NSMenu* menu = [page menuForEvent:mouse_at_cell_0]; |
- EXPECT_EQ(1, [menu numberOfItems]); |
- EXPECT_NSEQ(@"Menu For: Item One", [[menu itemAtIndex:0] title]); |
- |
- // Test a context menu request while the item is still installing. |
- item_two_model->SetMenuReadyForTesting(false); |
- menu = [page menuForEvent:mouse_at_cell_1]; |
- EXPECT_EQ(nil, menu); |
- |
- item_two_model->SetMenuReadyForTesting(true); |
- menu = [page menuForEvent:mouse_at_cell_1]; |
- EXPECT_EQ(1, [menu numberOfItems]); |
- EXPECT_NSEQ(@"Menu For: Item Two", [[menu itemAtIndex:0] title]); |
- |
- // Test that a button being held down with the left button does not also show |
- // a context menu. |
- [GetItemViewAt(0) highlight:YES]; |
- EXPECT_FALSE([page menuForEvent:mouse_at_cell_0]); |
- [GetItemViewAt(0) highlight:NO]; |
- EXPECT_TRUE([page menuForEvent:mouse_at_cell_0]); |
-} |
- |
-} // namespace test |
-} // namespace app_list |