Home | History | Annotate | Download | only in cocoa
      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 
     13 namespace app_list {
     14 namespace test {
     15 
     16 class AppListViewControllerTest : public AppsGridControllerTestHelper {
     17  public:
     18   AppListViewControllerTest() {}
     19 
     20   virtual void SetUp() OVERRIDE {
     21     app_list_view_controller_.reset([[AppListViewController alloc] init]);
     22     delegate_.reset(new AppListTestViewDelegate);
     23     [app_list_view_controller_ setDelegate:delegate_.get()];
     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_ setDelegate:NULL];
     30     app_list_view_controller_.reset();
     31     AppsGridControllerTestHelper::TearDown();
     32   }
     33 
     34   void ReplaceTestModel(int item_count) {
     35     [app_list_view_controller_ setDelegate:NULL];
     36     delegate_.reset(new AppListTestViewDelegate);
     37     delegate_->ReplaceTestModel(item_count);
     38     [app_list_view_controller_ setDelegate:delegate_.get()];
     39   }
     40 
     41   AppListTestModel* model() { return delegate_->GetTestModel(); }
     42 
     43  protected:
     44   scoped_ptr<AppListTestViewDelegate> delegate_;
     45   base::scoped_nsobject<AppListViewController> app_list_view_controller_;
     46 
     47  private:
     48   DISALLOW_COPY_AND_ASSIGN(AppListViewControllerTest);
     49 };
     50 
     51 TEST_VIEW(AppListViewControllerTest, [app_list_view_controller_ view]);
     52 
     53 // Test that adding and removing pages updates the pager.
     54 TEST_F(AppListViewControllerTest, PagerSegmentCounts) {
     55   NSSegmentedControl* pager = [app_list_view_controller_ pagerControl];
     56   EXPECT_EQ(1, [pager segmentCount]);
     57 
     58   ReplaceTestModel(kItemsPerPage * 2);
     59   EXPECT_EQ(2, [pager segmentCount]);
     60   model()->PopulateApps(1);
     61   EXPECT_EQ(3, [pager segmentCount]);
     62 
     63   ReplaceTestModel(1);
     64   EXPECT_EQ(1, [pager segmentCount]);
     65 }
     66 
     67 // Test that clicking the pager changes pages.
     68 TEST_F(AppListViewControllerTest, PagerChangingPage) {
     69   NSSegmentedControl* pager = [app_list_view_controller_ pagerControl];
     70   ReplaceTestModel(kItemsPerPage * 3);
     71   EXPECT_EQ(3, [pager segmentCount]);
     72 
     73   EXPECT_EQ(0, [pager selectedSegment]);
     74   EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]);
     75   EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:0]);
     76   EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:1]);
     77 
     78   // Emulate a click on the second segment to navigate to the second page.
     79   [pager setSelectedSegment:1];
     80   [[pager target] performSelector:[pager action]
     81                        withObject:pager];
     82 
     83   EXPECT_EQ(1u, [apps_grid_controller_ visiblePage]);
     84   EXPECT_EQ(1, [pager selectedSegment]);
     85   EXPECT_EQ(0.0, [apps_grid_controller_ visiblePortionOfPage:0]);
     86   EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:1]);
     87 
     88   // Replace with a single page model, and ensure we go back to the first page.
     89   ReplaceTestModel(1);
     90   EXPECT_EQ(0u, [apps_grid_controller_ visiblePage]);
     91   EXPECT_EQ(0, [pager selectedSegment]);
     92   EXPECT_EQ(1, [pager segmentCount]);
     93   EXPECT_EQ(1.0, [apps_grid_controller_ visiblePortionOfPage:0]);
     94 }
     95 
     96 }  // namespace test
     97 }  // namespace app_list
     98