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