Chromium Code Reviews| 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 |
| index cae06439a5922c0d284917f3dfb2c609d66352db..8d44df19ecf870a3942c9573959cc93281024f86 100644 |
| --- a/ui/app_list/cocoa/apps_grid_controller_unittest.mm |
| +++ b/ui/app_list/cocoa/apps_grid_controller_unittest.mm |
| @@ -16,12 +16,14 @@ |
| @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; |
| @@ -32,10 +34,18 @@ |
| @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; |
| @@ -55,6 +65,10 @@ |
| visibilityDidChange_ = true; |
| } |
| +- (NSInteger)pagerSegmentAtLocation:(NSPoint)locationInWindow { |
| + return hoveredSegmentForTest_; |
| +} |
| + |
| @end |
| namespace app_list { |
| @@ -226,8 +240,6 @@ TEST_F(AppsGridControllerTest, FirstPageKeyboardNavigation) { |
| // Tests keyboard navigation across pages. |
| TEST_F(AppsGridControllerTest, CrossPageKeyboardNavigation) { |
| - [AppsGridController setScrollAnimationDuration:0.0]; |
| - |
| model()->PopulateApps(2 * kItemsPerPage); |
| EXPECT_EQ(kItemsPerPage, [[GetPageAt(0) content] count]); |
| EXPECT_EQ(kItemsPerPage, [[GetPageAt(1) content] count]); |
| @@ -460,7 +472,6 @@ TEST_F(AppsGridControllerTest, PaginationObserverPagesChanged) { |
| // Test AppsGridPaginationObserver selectedPageChanged(). |
| TEST_F(AppsGridControllerTest, PaginationObserverSelectedPageChanged) { |
| - [AppsGridController setScrollAnimationDuration:0.0]; |
| scoped_nsobject<TestPaginationObserver> observer( |
| [[TestPaginationObserver alloc] init]); |
| [apps_grid_controller_ setPaginationObserver:observer]; |
| @@ -625,7 +636,6 @@ TEST_F(AppsGridControllerTest, DragAndDropSimple) { |
| // Test item moves between pages. |
| TEST_F(AppsGridControllerTest, DragAndDropMultiPage) { |
| - [AppsGridController setScrollAnimationDuration:0.0]; |
| const size_t kPagesToTest = 3; |
| // Put one item on the last page to hit more edge cases. |
| ReplaceTestModel(kItemsPerPage * (kPagesToTest - 1) + 1); |
| @@ -696,5 +706,90 @@ TEST_F(AppsGridControllerTest, DragAndDropMultiPage) { |
| EXPECT_EQ(0u, GetPageIndexForItem(1)); |
| } |
| +namespace { |
| + |
| +NSEvent* MouseEventForScroll(NSView* view, CGFloat relative_x) { |
|
sail
2013/05/17 19:16:13
move to top of file?
tapted
2013/05/17 23:25:29
Done.
|
| + 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 scrolling when dragging past edge or over the pager. |
| +TEST_F(AppsGridControllerTest, ScrollingWhileDragging) { |
| + 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]; |
| +} |
| + |
| } // namespace test |
| } // namespace app_list |