app_list_view_controller_unittest.mm revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/mac/scoped_nsobject.h" 6#import "testing/gtest_mac.h" 7#import "ui/app_list/cocoa/app_list_view_controller.h" 8#import "ui/app_list/cocoa/apps_grid_controller.h" 9#import "ui/app_list/cocoa/test/apps_grid_controller_test_helper.h" 10#include "ui/app_list/test/app_list_test_model.h" 11#include "ui/app_list/test/app_list_test_view_delegate.h" 12 13namespace app_list { 14namespace test { 15 16class AppListViewControllerTest : public AppsGridControllerTestHelper { 17 public: 18 AppListViewControllerTest() {} 19 20 virtual void SetUp() OVERRIDE { 21 app_list_view_controller_.reset([[AppListViewController alloc] init]); 22 scoped_ptr<AppListTestViewDelegate> delegate(new AppListTestViewDelegate); 23 [app_list_view_controller_ 24 setDelegate:delegate.PassAs<app_list::AppListViewDelegate>()]; 25 SetUpWithGridController([app_list_view_controller_ appsGridController]); 26 [[test_window() contentView] addSubview:[app_list_view_controller_ view]]; 27 } 28 29 virtual void TearDown() OVERRIDE { 30 [app_list_view_controller_ 31 setDelegate:scoped_ptr<app_list::AppListViewDelegate>()]; 32 app_list_view_controller_.reset(); 33 AppsGridControllerTestHelper::TearDown(); 34 } 35 36 void ReplaceTestModel(int item_count) { 37 [app_list_view_controller_ 38 setDelegate:scoped_ptr<app_list::AppListViewDelegate>()]; 39 scoped_ptr<AppListTestViewDelegate> delegate(new AppListTestViewDelegate); 40 delegate->ReplaceTestModel(item_count); 41 [app_list_view_controller_ 42 setDelegate:delegate.PassAs<app_list::AppListViewDelegate>()]; 43 } 44 45 AppListTestViewDelegate* delegate() { 46 return static_cast<AppListTestViewDelegate*>( 47 [app_list_view_controller_ delegate]); 48 } 49 50 AppListTestModel* model() { 51 return delegate()->GetTestModel(); 52 } 53 54 protected: 55 base::scoped_nsobject<AppListViewController> app_list_view_controller_; 56 57 private: 58 DISALLOW_COPY_AND_ASSIGN(AppListViewControllerTest); 59}; 60 61TEST_VIEW(AppListViewControllerTest, [app_list_view_controller_ view]); 62 63// Test that adding and removing pages updates the pager. 64TEST_F(AppListViewControllerTest, PagerSegmentCounts) { 65 NSSegmentedControl* pager = [app_list_view_controller_ pagerControl]; 66 EXPECT_EQ(1, [pager segmentCount]); 67 68 ReplaceTestModel(kItemsPerPage * 2); 69 EXPECT_EQ(2, [pager segmentCount]); 70 model()->PopulateApps(1); 71 EXPECT_EQ(3, [pager segmentCount]); 72 73 ReplaceTestModel(1); 74 EXPECT_EQ(1, [pager segmentCount]); 75} 76 77// Test that clicking the pager changes pages. 78TEST_F(AppListViewControllerTest, PagerChangingPage) { 79 NSSegmentedControl* pager = [app_list_view_controller_ pagerControl]; 80 ReplaceTestModel(kItemsPerPage * 3); 81 EXPECT_EQ(3, [pager segmentCount]); 82 83 EXPECT_EQ(0, [pager selectedSegment]); 84 EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); 85 EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:0]); 86 EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:1]); 87 88 // Emulate a click on the second segment to navigate to the second page. 89 [pager setSelectedSegment:1]; 90 [[pager target] performSelector:[pager action] 91 withObject:pager]; 92 93 EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); 94 EXPECT_EQ(1, [pager selectedSegment]); 95 EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:0]); 96 EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:1]); 97 98 // Replace with a single page model, and ensure we go back to the first page. 99 ReplaceTestModel(1); 100 EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); 101 EXPECT_EQ(0, [pager selectedSegment]); 102 EXPECT_EQ(1, [pager segmentCount]); 103 EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:0]); 104} 105 106} // namespace test 107} // namespace app_list 108