app_list_view_controller_unittest.mm revision 868fa2fe829687343ffae624259930155e16dbd8
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/memory/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 SetUpWithGridController([app_list_view_controller_ appsGridController]); 23 [[test_window() contentView] addSubview:[app_list_view_controller_ view]]; 24 } 25 26 virtual void TearDown() OVERRIDE { 27 [app_list_view_controller_ 28 setDelegate:scoped_ptr<app_list::AppListViewDelegate>(NULL)]; 29 app_list_view_controller_.reset(); 30 AppsGridControllerTestHelper::TearDown(); 31 } 32 33 virtual void ResetModel(scoped_ptr<AppListModel> new_model) OVERRIDE { 34 scoped_ptr<AppListViewDelegate> delegate_(new AppListTestViewDelegate); 35 [app_list_view_controller_ setDelegate:delegate_.Pass() 36 withTestModel:new_model.Pass()]; 37 } 38 39 protected: 40 scoped_nsobject<AppListViewController> app_list_view_controller_; 41 42 private: 43 DISALLOW_COPY_AND_ASSIGN(AppListViewControllerTest); 44}; 45 46TEST_VIEW(AppListViewControllerTest, [app_list_view_controller_ view]); 47 48// Test that adding and removing pages updates the pager. 49TEST_F(AppListViewControllerTest, PagerSegmentCounts) { 50 NSSegmentedControl* pager = [app_list_view_controller_ pagerControl]; 51 EXPECT_EQ(1, [pager segmentCount]); 52 53 ReplaceTestModel(kItemsPerPage * 2); 54 EXPECT_EQ(2, [pager segmentCount]); 55 model()->PopulateApps(1); 56 EXPECT_EQ(3, [pager segmentCount]); 57 58 ReplaceTestModel(1); 59 EXPECT_EQ(1, [pager segmentCount]); 60} 61 62// Test that clicking the pager changes pages. 63TEST_F(AppListViewControllerTest, PagerChangingPage) { 64 NSSegmentedControl* pager = [app_list_view_controller_ pagerControl]; 65 ReplaceTestModel(kItemsPerPage * 3); 66 EXPECT_EQ(3, [pager segmentCount]); 67 68 EXPECT_EQ(0, [pager selectedSegment]); 69 EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); 70 EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:0]); 71 EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:1]); 72 73 // Emulate a click on the second segment to navigate to the second page. 74 [pager setSelectedSegment:1]; 75 [[pager target] performSelector:[pager action] 76 withObject:pager]; 77 78 EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); 79 EXPECT_EQ(1, [pager selectedSegment]); 80 EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:0]); 81 EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:1]); 82 83 // Replace with a single page model, and ensure we go back to the first page. 84 ReplaceTestModel(1); 85 EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); 86 EXPECT_EQ(0, [pager selectedSegment]); 87 EXPECT_EQ(1, [pager segmentCount]); 88 EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:0]); 89} 90 91} // namespace test 92} // namespace app_list 93