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