app_list_view_controller_unittest.mm revision 3551c9c881056c480085172ff9840cab31610854
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/signin_delegate.h" 11#include "ui/app_list/test/app_list_test_model.h" 12#include "ui/app_list/test/app_list_test_view_delegate.h" 13 14namespace app_list { 15namespace test { 16 17class AppListViewControllerTest : public AppsGridControllerTestHelper, 18 public SigninDelegate { 19 public: 20 AppListViewControllerTest() {} 21 22 virtual void SetUp() OVERRIDE { 23 app_list_view_controller_.reset([[AppListViewController alloc] init]); 24 SetUpWithGridController([app_list_view_controller_ appsGridController]); 25 [[test_window() contentView] addSubview:[app_list_view_controller_ view]]; 26 } 27 28 virtual void TearDown() OVERRIDE { 29 [app_list_view_controller_ 30 setDelegate:scoped_ptr<app_list::AppListViewDelegate>()]; 31 app_list_view_controller_.reset(); 32 AppsGridControllerTestHelper::TearDown(); 33 } 34 35 virtual void ResetModel(scoped_ptr<AppListModel> new_model) OVERRIDE { 36 scoped_ptr<AppListTestViewDelegate> delegate(new AppListTestViewDelegate); 37 delegate->set_test_signin_delegate(this); 38 [app_list_view_controller_ 39 setDelegate:delegate.PassAs<AppListViewDelegate>() 40 withTestModel:new_model.Pass()]; 41 } 42 43 // SigninDelegate overrides: 44 virtual bool NeedSignin() OVERRIDE { return false; } 45 virtual void ShowSignin() OVERRIDE {} 46 virtual void OpenLearnMore() OVERRIDE {} 47 virtual void OpenSettings() OVERRIDE {} 48 49 virtual base::string16 GetSigninHeading() OVERRIDE { 50 return base::string16(); 51 } 52 virtual base::string16 GetSigninText() OVERRIDE { return base::string16(); } 53 virtual base::string16 GetSigninButtonText() OVERRIDE { 54 return base::string16(); 55 } 56 virtual base::string16 GetLearnMoreLinkText() OVERRIDE { 57 return base::string16(); 58 } 59 virtual base::string16 GetSettingsLinkText() OVERRIDE { 60 return base::string16(); 61 } 62 63 protected: 64 base::scoped_nsobject<AppListViewController> app_list_view_controller_; 65 66 private: 67 DISALLOW_COPY_AND_ASSIGN(AppListViewControllerTest); 68}; 69 70TEST_VIEW(AppListViewControllerTest, [app_list_view_controller_ view]); 71 72// Test that adding and removing pages updates the pager. 73TEST_F(AppListViewControllerTest, PagerSegmentCounts) { 74 NSSegmentedControl* pager = [app_list_view_controller_ pagerControl]; 75 EXPECT_EQ(1, [pager segmentCount]); 76 77 ReplaceTestModel(kItemsPerPage * 2); 78 EXPECT_EQ(2, [pager segmentCount]); 79 model()->PopulateApps(1); 80 EXPECT_EQ(3, [pager segmentCount]); 81 82 ReplaceTestModel(1); 83 EXPECT_EQ(1, [pager segmentCount]); 84} 85 86// Test that clicking the pager changes pages. 87TEST_F(AppListViewControllerTest, PagerChangingPage) { 88 NSSegmentedControl* pager = [app_list_view_controller_ pagerControl]; 89 ReplaceTestModel(kItemsPerPage * 3); 90 EXPECT_EQ(3, [pager segmentCount]); 91 92 EXPECT_EQ(0, [pager selectedSegment]); 93 EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); 94 EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:0]); 95 EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:1]); 96 97 // Emulate a click on the second segment to navigate to the second page. 98 [pager setSelectedSegment:1]; 99 [[pager target] performSelector:[pager action] 100 withObject:pager]; 101 102 EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]); 103 EXPECT_EQ(1, [pager selectedSegment]); 104 EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:0]); 105 EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:1]); 106 107 // Replace with a single page model, and ensure we go back to the first page. 108 ReplaceTestModel(1); 109 EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]); 110 EXPECT_EQ(0, [pager selectedSegment]); 111 EXPECT_EQ(1, [pager segmentCount]); 112 EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:0]); 113} 114 115// Test the view when the user is already signed in. 116TEST_F(AppListViewControllerTest, SignedIn) { 117 // There should be just 1, visible subview when signed in. 118 EXPECT_EQ(1u, [[[app_list_view_controller_ view] subviews] count]); 119 EXPECT_FALSE([[app_list_view_controller_ backgroundView] isHidden]); 120} 121 122// Test the view when signin is required. 123TEST_F(AppListViewControllerTest, NeedsSignin) { 124 // Begin the test with a signed out app list. 125 scoped_ptr<AppListModel> new_model(new AppListModel); 126 new_model->SetSignedIn(false); 127 ResetModel(new_model.Pass()); 128 EXPECT_EQ(2u, [[[app_list_view_controller_ view] subviews] count]); 129 EXPECT_TRUE([[app_list_view_controller_ backgroundView] isHidden]); 130 131 // Simulate signing in, should enter the SignedIn state. 132 model()->SetSignedIn(true); 133 EXPECT_EQ(1u, [[[app_list_view_controller_ view] subviews] count]); 134 EXPECT_FALSE([[app_list_view_controller_ backgroundView] isHidden]); 135} 136 137} // namespace test 138} // namespace app_list 139