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