- add sources.
[platform/framework/web/crosswalk.git] / src / ui / app_list / cocoa / test / apps_grid_controller_test_helper.mm
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_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"
14
15 namespace app_list {
16 namespace test {
17
18 const size_t AppsGridControllerTestHelper::kItemsPerPage = 16;
19
20 AppsGridControllerTestHelper::AppsGridControllerTestHelper() {
21   Init();
22   [AppsGridController setScrollAnimationDuration:0.0];
23 }
24
25 AppsGridControllerTestHelper::~AppsGridControllerTestHelper() {}
26
27 void AppsGridControllerTestHelper::SetUpWithGridController(
28     AppsGridController* grid_controller) {
29   ui::CocoaTest::SetUp();
30   apps_grid_controller_ = grid_controller;
31   ReplaceTestModel(0);
32 }
33
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];
39 }
40
41 void AppsGridControllerTestHelper::SimulateKeyAction(SEL c) {
42   [apps_grid_controller_ handleCommandBySelector:c];
43 }
44
45 void AppsGridControllerTestHelper::SimulateMouseEnterItemAt(size_t index) {
46   [[apps_grid_controller_ itemAtIndex:index] mouseEntered:
47       cocoa_test_event_utils::EnterExitEventWithType(NSMouseEntered)];
48 }
49
50 void AppsGridControllerTestHelper::SimulateMouseExitItemAt(size_t index) {
51   [[apps_grid_controller_ itemAtIndex:index] mouseExited:
52       cocoa_test_event_utils::EnterExitEventWithType(NSMouseExited)];
53 }
54
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>());
59 }
60
61 void AppsGridControllerTestHelper::ResetModel(
62     scoped_ptr<AppListModel> new_model) {
63   [apps_grid_controller_ setModel:new_model.Pass()];
64 }
65
66 std::string AppsGridControllerTestHelper::GetViewContent() const {
67   std::string s;
68   for (size_t page_index = 0; page_index < [apps_grid_controller_ pageCount];
69        ++page_index) {
70     s += '|';
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]);
76       if (i != 0)
77         s += ',';
78       s += [item model]->title();
79     }
80     s += '|';
81   }
82   return s;
83 }
84
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;
99       }
100     }
101   }
102   return found_at_page_index;
103 }
104
105 void AppsGridControllerTestHelper::DelayForCollectionView() {
106   message_loop_.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitClosure(),
107                                 base::TimeDelta::FromMilliseconds(100));
108   message_loop_.Run();
109 }
110
111 void AppsGridControllerTestHelper::SinkEvents() {
112   message_loop_.PostTask(FROM_HERE, base::MessageLoop::QuitClosure());
113   message_loop_.Run();
114 }
115
116 NSButton* AppsGridControllerTestHelper::GetItemViewAt(size_t index) {
117   if (index == NSNotFound)
118     return nil;
119
120   return [[apps_grid_controller_ itemAtIndex:index] button];
121 }
122
123 NSCollectionView* AppsGridControllerTestHelper::GetPageAt(size_t index) {
124   return [apps_grid_controller_ collectionViewAtPageIndex:index];
125 }
126
127 NSView* AppsGridControllerTestHelper::GetSelectedView() {
128   return GetItemViewAt([apps_grid_controller_ selectedItemIndex]);
129 }
130
131 AppListTestModel* AppsGridControllerTestHelper::model() {
132   return static_cast<AppListTestModel*>([apps_grid_controller_ model]);
133 }
134
135 }  // namespace test
136 }  // namespace app_list