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.
5 #import "ui/app_list/cocoa/test/apps_grid_controller_test_helper.h"
7 #include "base/mac/foundation_util.h"
8 #include "base/strings/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 #import "ui/base/test/cocoa_test_event_utils.h"
18 const size_t AppsGridControllerTestHelper::kItemsPerPage = 16;
20 AppsGridControllerTestHelper::AppsGridControllerTestHelper() {
22 [AppsGridController setScrollAnimationDuration:0.0];
25 AppsGridControllerTestHelper::~AppsGridControllerTestHelper() {}
27 void AppsGridControllerTestHelper::SetUpWithGridController(
28 AppsGridController* grid_controller) {
29 ui::CocoaTest::SetUp();
30 apps_grid_controller_ = grid_controller;
34 void AppsGridControllerTestHelper::SimulateClick(NSView* view) {
35 std::pair<NSEvent*, NSEvent*> events(
36 cocoa_test_event_utils::MouseClickInView(view, 1));
37 [NSApp postEvent:events.first atStart:NO];
38 [NSApp postEvent:events.second atStart:NO];
41 void AppsGridControllerTestHelper::SimulateKeyAction(SEL c) {
42 [apps_grid_controller_ handleCommandBySelector:c];
45 void AppsGridControllerTestHelper::SimulateMouseEnterItemAt(size_t index) {
46 [[apps_grid_controller_ itemAtIndex:index] mouseEntered:
47 cocoa_test_event_utils::EnterExitEventWithType(NSMouseEntered)];
50 void AppsGridControllerTestHelper::SimulateMouseExitItemAt(size_t index) {
51 [[apps_grid_controller_ itemAtIndex:index] mouseExited:
52 cocoa_test_event_utils::EnterExitEventWithType(NSMouseExited)];
55 void AppsGridControllerTestHelper::ReplaceTestModel(int item_count) {
56 scoped_ptr<AppListTestModel> new_model(new AppListTestModel);
57 new_model->PopulateApps(item_count);
58 ResetModel(new_model.PassAs<AppListModel>());
61 void AppsGridControllerTestHelper::ResetModel(
62 scoped_ptr<AppListModel> new_model) {
63 [apps_grid_controller_ setModel:new_model.Pass()];
66 std::string AppsGridControllerTestHelper::GetViewContent() const {
68 for (size_t page_index = 0; page_index < [apps_grid_controller_ pageCount];
71 NSCollectionView* page_view =
72 [apps_grid_controller_ collectionViewAtPageIndex:page_index];
73 for (size_t i = 0; i < [[page_view content] count]; ++i) {
74 AppsGridViewItem* item = base::mac::ObjCCastStrict<AppsGridViewItem>(
75 [page_view itemAtIndex:i]);
78 s += [item model]->title();
85 size_t AppsGridControllerTestHelper::GetPageIndexForItem(int item_id) const {
86 const std::string search = base::StringPrintf("Item %d", item_id);
87 size_t page_index = 0;
88 NSUInteger found_at_page_index = NSNotFound;
89 for (; page_index < [apps_grid_controller_ pageCount]; ++page_index) {
90 NSCollectionView* page_view =
91 [apps_grid_controller_ collectionViewAtPageIndex:page_index];
92 for (NSUInteger i = 0; i < [[page_view content] count]; ++i) {
93 AppsGridViewItem* item = base::mac::ObjCCastStrict<AppsGridViewItem>(
94 [page_view itemAtIndex:i]);
95 if ([item model]->title() == search) {
96 if (found_at_page_index != NSNotFound)
97 return NSNotFound; // Duplicate.
98 found_at_page_index = page_index;
102 return found_at_page_index;
105 void AppsGridControllerTestHelper::DelayForCollectionView() {
106 message_loop_.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitClosure(),
107 base::TimeDelta::FromMilliseconds(100));
111 void AppsGridControllerTestHelper::SinkEvents() {
112 message_loop_.PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
116 NSButton* AppsGridControllerTestHelper::GetItemViewAt(size_t index) {
117 if (index == NSNotFound)
120 return [[apps_grid_controller_ itemAtIndex:index] button];
123 NSCollectionView* AppsGridControllerTestHelper::GetPageAt(size_t index) {
124 return [apps_grid_controller_ collectionViewAtPageIndex:index];
127 NSView* AppsGridControllerTestHelper::GetSelectedView() {
128 return GetItemViewAt([apps_grid_controller_ selectedItemIndex]);
131 AppListTestModel* AppsGridControllerTestHelper::model() {
132 return static_cast<AppListTestModel*>([apps_grid_controller_ model]);
136 } // namespace app_list