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