app_list_view_controller_unittest.mm revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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    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>()];
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  base::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