apps_grid_controller_test_helper.mm revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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#import "ui/app_list/cocoa/test/apps_grid_controller_test_helper.h"
6
7#include "base/mac/foundation_util.h"
8#include "base/stringprintf.h"
9#include "ui/app_list/app_list_item_model.h"
10#import "ui/app_list/cocoa/apps_grid_controller.h"
11#import "ui/app_list/cocoa/apps_grid_view_item.h"
12#include "ui/app_list/test/app_list_test_model.h"
13#include "ui/app_list/test/app_list_test_view_delegate.h"
14#import "ui/base/test/cocoa_test_event_utils.h"
15
16namespace app_list {
17namespace test {
18
19const size_t AppsGridControllerTestHelper::kItemsPerPage = 16;
20
21AppsGridControllerTestHelper::AppsGridControllerTestHelper() {
22  Init();
23  delegate_.reset(new AppListTestViewDelegate);
24  [AppsGridController setScrollAnimationDuration:0.0];
25}
26
27AppsGridControllerTestHelper::~AppsGridControllerTestHelper() {}
28
29void AppsGridControllerTestHelper::SetUpWithGridController(
30    AppsGridController* grid_controller) {
31  ui::CocoaTest::SetUp();
32  apps_grid_controller_ = grid_controller;
33  scoped_ptr<AppListModel> model(new AppListTestModel);
34  [apps_grid_controller_ setModel:model.Pass()];
35}
36
37void AppsGridControllerTestHelper::SimulateClick(NSView* view) {
38  std::pair<NSEvent*, NSEvent*> events(
39      cocoa_test_event_utils::MouseClickInView(view, 1));
40  [NSApp postEvent:events.first atStart:NO];
41  [NSApp postEvent:events.second atStart:NO];
42}
43
44void AppsGridControllerTestHelper::SimulateKeyAction(SEL c) {
45  [apps_grid_controller_ handleCommandBySelector:c];
46}
47
48void AppsGridControllerTestHelper::SimulateMouseEnterItemAt(size_t index) {
49  [[apps_grid_controller_ itemAtIndex:index] mouseEntered:
50      cocoa_test_event_utils::EnterExitEventWithType(NSMouseEntered)];
51}
52
53void AppsGridControllerTestHelper::SimulateMouseExitItemAt(size_t index) {
54  [[apps_grid_controller_ itemAtIndex:index] mouseExited:
55      cocoa_test_event_utils::EnterExitEventWithType(NSMouseExited)];
56}
57
58void AppsGridControllerTestHelper::ReplaceTestModel(int item_count) {
59  scoped_ptr<AppListTestModel> new_model(new AppListTestModel);
60  new_model->PopulateApps(item_count);
61  [apps_grid_controller_ setModel:new_model.PassAs<AppListModel>()];
62}
63
64std::string AppsGridControllerTestHelper::GetViewContent() const {
65  std::string s;
66  for (size_t page_index = 0; page_index < [apps_grid_controller_ pageCount];
67       ++page_index) {
68    s += '|';
69    NSCollectionView* page_view =
70        [apps_grid_controller_ collectionViewAtPageIndex:page_index];
71    for (size_t i = 0; i < [[page_view content] count]; ++i) {
72      AppsGridViewItem* item = base::mac::ObjCCastStrict<AppsGridViewItem>(
73          [page_view itemAtIndex:i]);
74      if (i != 0)
75        s += ',';
76      s += [item model]->title();
77    }
78    s += '|';
79  }
80  return s;
81}
82
83size_t AppsGridControllerTestHelper::GetPageIndexForItem(int item_id) const {
84  const std::string search = base::StringPrintf("Item %d", item_id);
85  size_t page_index = 0;
86  NSUInteger found_at_page_index = NSNotFound;
87  for (; page_index < [apps_grid_controller_ pageCount]; ++page_index) {
88    NSCollectionView* page_view =
89        [apps_grid_controller_ collectionViewAtPageIndex:page_index];
90    for (NSUInteger i = 0; i < [[page_view content] count]; ++i) {
91      AppsGridViewItem* item = base::mac::ObjCCastStrict<AppsGridViewItem>(
92          [page_view itemAtIndex:i]);
93      if ([item model]->title() == search) {
94        if (found_at_page_index != NSNotFound)
95          return NSNotFound;  // Duplicate.
96        found_at_page_index = page_index;
97      }
98    }
99  }
100  return found_at_page_index;
101}
102
103void AppsGridControllerTestHelper::DelayForCollectionView() {
104  message_loop_.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitClosure(),
105                                base::TimeDelta::FromMilliseconds(100));
106  message_loop_.Run();
107}
108
109void AppsGridControllerTestHelper::SinkEvents() {
110  message_loop_.PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
111  message_loop_.Run();
112}
113
114NSButton* AppsGridControllerTestHelper::GetItemViewAt(size_t index) {
115  if (index == NSNotFound)
116    return nil;
117
118  return [[apps_grid_controller_ itemAtIndex:index] button];
119}
120
121NSCollectionView* AppsGridControllerTestHelper::GetPageAt(size_t index) {
122  return [apps_grid_controller_ collectionViewAtPageIndex:index];
123}
124
125NSView* AppsGridControllerTestHelper::GetSelectedView() {
126  return GetItemViewAt([apps_grid_controller_ selectedItemIndex]);
127}
128
129AppListTestViewDelegate* AppsGridControllerTestHelper::delegate() {
130  return static_cast<AppListTestViewDelegate*>(delegate_.get());
131}
132
133AppListTestModel* AppsGridControllerTestHelper::model() {
134  return static_cast<AppListTestModel*>([apps_grid_controller_ model]);
135}
136
137}  // namespace test
138}  // namespace app_list
139