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