Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Side by Side Diff: chrome/browser/ui/cocoa/app_menu/app_menu_controller_unittest.mm

Issue 1419993010: chrome: Rename WrenchMenuController to AppMenuController. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixes Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/mac/scoped_nsobject.h" 6 #include "base/mac/scoped_nsobject.h"
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/strings/sys_string_conversions.h" 8 #include "base/strings/sys_string_conversions.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/app/chrome_command_ids.h" 10 #include "chrome/app/chrome_command_ids.h"
11 #include "chrome/browser/sync/profile_sync_service.h" 11 #include "chrome/browser/sync/profile_sync_service.h"
12 #include "chrome/browser/sync/profile_sync_service_factory.h" 12 #include "chrome/browser/sync/profile_sync_service_factory.h"
13 #include "chrome/browser/sync/sessions/sessions_sync_manager.h" 13 #include "chrome/browser/sync/sessions/sessions_sync_manager.h"
14 #include "chrome/browser/ui/browser_list.h" 14 #include "chrome/browser/ui/browser_list.h"
15 #include "chrome/browser/ui/browser_list_observer.h" 15 #include "chrome/browser/ui/browser_list_observer.h"
16 #import "chrome/browser/ui/cocoa/app_menu/app_menu_controller.h"
16 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" 17 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
17 #include "chrome/browser/ui/cocoa/run_loop_testing.h" 18 #include "chrome/browser/ui/cocoa/run_loop_testing.h"
18 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h" 19 #import "chrome/browser/ui/cocoa/toolbar/toolbar_controller.h"
19 #import "chrome/browser/ui/cocoa/view_resizer_pong.h" 20 #import "chrome/browser/ui/cocoa/view_resizer_pong.h"
20 #import "chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller.h"
21 #include "chrome/browser/ui/sync/browser_synced_window_delegates_getter.h" 21 #include "chrome/browser/ui/sync/browser_synced_window_delegates_getter.h"
22 #include "chrome/browser/ui/toolbar/app_menu_model.h" 22 #include "chrome/browser/ui/toolbar/app_menu_model.h"
23 #include "chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h" 23 #include "chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h"
24 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h" 24 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h"
25 #include "chrome/common/chrome_switches.h" 25 #include "chrome/common/chrome_switches.h"
26 #include "chrome/grit/generated_resources.h" 26 #include "chrome/grit/generated_resources.h"
27 #include "chrome/test/base/testing_profile.h" 27 #include "chrome/test/base/testing_profile.h"
28 #include "components/sync_driver/local_device_info_provider_mock.h" 28 #include "components/sync_driver/local_device_info_provider_mock.h"
29 #include "components/sync_driver/sync_client.h" 29 #include "components/sync_driver/sync_client.h"
30 #include "grit/theme_resources.h" 30 #include "grit/theme_resources.h"
(...skipping 16 matching lines...) Expand all
47 }; 47 };
48 48
49 class DummyRouter : public browser_sync::LocalSessionEventRouter { 49 class DummyRouter : public browser_sync::LocalSessionEventRouter {
50 public: 50 public:
51 ~DummyRouter() override {} 51 ~DummyRouter() override {}
52 void StartRoutingTo( 52 void StartRoutingTo(
53 browser_sync::LocalSessionEventHandler* handler) override {} 53 browser_sync::LocalSessionEventHandler* handler) override {}
54 void Stop() override {} 54 void Stop() override {}
55 }; 55 };
56 56
57 class WrenchMenuControllerTest 57 class AppMenuControllerTest : public CocoaProfileTest {
58 : public CocoaProfileTest {
59 public: 58 public:
60 WrenchMenuControllerTest() 59 AppMenuControllerTest()
61 : local_device_(new sync_driver::LocalDeviceInfoProviderMock( 60 : local_device_(new sync_driver::LocalDeviceInfoProviderMock(
62 "WrenchMenuControllerTest", 61 "AppMenuControllerTest",
63 "Test Machine", 62 "Test Machine",
64 "Chromium 10k", 63 "Chromium 10k",
65 "Chrome 10k", 64 "Chrome 10k",
66 sync_pb::SyncEnums_DeviceType_TYPE_LINUX, 65 sync_pb::SyncEnums_DeviceType_TYPE_LINUX,
67 "device_id")) { 66 "device_id")) {
68 } 67 }
69 68
70 void SetUp() override { 69 void SetUp() override {
71 CocoaProfileTest::SetUp(); 70 CocoaProfileTest::SetUp();
72 ASSERT_TRUE(browser()); 71 ASSERT_TRUE(browser());
73 72
74 controller_.reset([[WrenchMenuController alloc] initWithBrowser:browser()]); 73 controller_.reset([[AppMenuController alloc] initWithBrowser:browser()]);
75 fake_model_.reset(new MockAppMenuModel); 74 fake_model_.reset(new MockAppMenuModel);
76 75
77 manager_.reset(new browser_sync::SessionsSyncManager( 76 manager_.reset(new browser_sync::SessionsSyncManager(
78 ProfileSyncServiceFactory::GetForProfile(profile()) 77 ProfileSyncServiceFactory::GetForProfile(profile())
79 ->GetSyncClient() 78 ->GetSyncClient()
80 ->GetSyncSessionsClient(), 79 ->GetSyncSessionsClient(),
81 profile(), local_device_.get(), 80 profile(), local_device_.get(),
82 scoped_ptr<browser_sync::LocalSessionEventRouter>(new DummyRouter()))); 81 scoped_ptr<browser_sync::LocalSessionEventRouter>(new DummyRouter())));
83 manager_->MergeDataAndStartSyncing( 82 manager_->MergeDataAndStartSyncing(
84 syncer::SESSIONS, 83 syncer::SESSIONS,
(...skipping 12 matching lines...) Expand all
97 return manager_.get(); 96 return manager_.get();
98 } 97 }
99 98
100 void TearDown() override { 99 void TearDown() override {
101 fake_model_.reset(); 100 fake_model_.reset();
102 controller_.reset(); 101 controller_.reset();
103 manager_.reset(); 102 manager_.reset();
104 CocoaProfileTest::TearDown(); 103 CocoaProfileTest::TearDown();
105 } 104 }
106 105
107 WrenchMenuController* controller() { 106 AppMenuController* controller() {
108 return controller_.get(); 107 return controller_.get();
109 } 108 }
110 109
111 base::scoped_nsobject<WrenchMenuController> controller_; 110 base::scoped_nsobject<AppMenuController> controller_;
112 111
113 scoped_ptr<MockAppMenuModel> fake_model_; 112 scoped_ptr<MockAppMenuModel> fake_model_;
114 113
115 private: 114 private:
116 scoped_ptr<browser_sync::SessionsSyncManager> manager_; 115 scoped_ptr<browser_sync::SessionsSyncManager> manager_;
117 scoped_ptr<sync_driver::LocalDeviceInfoProviderMock> local_device_; 116 scoped_ptr<sync_driver::LocalDeviceInfoProviderMock> local_device_;
118 }; 117 };
119 118
120 TEST_F(WrenchMenuControllerTest, Initialized) { 119 TEST_F(AppMenuControllerTest, Initialized) {
121 EXPECT_TRUE([controller() menu]); 120 EXPECT_TRUE([controller() menu]);
122 EXPECT_GE([[controller() menu] numberOfItems], 5); 121 EXPECT_GE([[controller() menu] numberOfItems], 5);
123 } 122 }
124 123
125 TEST_F(WrenchMenuControllerTest, DispatchSimple) { 124 TEST_F(AppMenuControllerTest, DispatchSimple) {
126 base::scoped_nsobject<NSButton> button([[NSButton alloc] init]); 125 base::scoped_nsobject<NSButton> button([[NSButton alloc] init]);
127 [button setTag:IDC_ZOOM_PLUS]; 126 [button setTag:IDC_ZOOM_PLUS];
128 127
129 // Set fake model to test dispatching. 128 // Set fake model to test dispatching.
130 EXPECT_CALL(*fake_model_, ExecuteCommand(IDC_ZOOM_PLUS, 0)); 129 EXPECT_CALL(*fake_model_, ExecuteCommand(IDC_ZOOM_PLUS, 0));
131 [controller() setModel:fake_model_.get()]; 130 [controller() setModel:fake_model_.get()];
132 131
133 [controller() dispatchWrenchMenuCommand:button.get()]; 132 [controller() dispatchAppMenuCommand:button.get()];
134 chrome::testing::NSRunLoopRunAllPending(); 133 chrome::testing::NSRunLoopRunAllPending();
135 } 134 }
136 135
137 TEST_F(WrenchMenuControllerTest, RecentTabsFavIcon) { 136 TEST_F(AppMenuControllerTest, RecentTabsFavIcon) {
138 RecentTabsBuilderTestHelper recent_tabs_builder; 137 RecentTabsBuilderTestHelper recent_tabs_builder;
139 recent_tabs_builder.AddSession(); 138 recent_tabs_builder.AddSession();
140 recent_tabs_builder.AddWindow(0); 139 recent_tabs_builder.AddWindow(0);
141 recent_tabs_builder.AddTab(0, 0); 140 recent_tabs_builder.AddTab(0, 0);
142 RegisterRecentTabs(&recent_tabs_builder); 141 RegisterRecentTabs(&recent_tabs_builder);
143 142
144 RecentTabsSubMenuModel recent_tabs_sub_menu_model( 143 RecentTabsSubMenuModel recent_tabs_sub_menu_model(
145 NULL, browser(), GetOpenTabsDelegate()); 144 NULL, browser(), GetOpenTabsDelegate());
146 fake_model_->AddSubMenuWithStringId( 145 fake_model_->AddSubMenuWithStringId(
147 IDC_RECENT_TABS_MENU, IDS_RECENT_TABS_MENU, 146 IDC_RECENT_TABS_MENU, IDS_RECENT_TABS_MENU,
(...skipping 14 matching lines...) Expand all
162 recent_tabs_sub_menu_model.SetIcon(3, icon); 161 recent_tabs_sub_menu_model.SetIcon(3, icon);
163 EXPECT_NSNE(icon.ToNSImage(), [[recent_tabs_menu itemAtIndex:3] image]); 162 EXPECT_NSNE(icon.ToNSImage(), [[recent_tabs_menu itemAtIndex:3] image]);
164 recent_tabs_sub_menu_model.GetMenuModelDelegate()->OnIconChanged(3); 163 recent_tabs_sub_menu_model.GetMenuModelDelegate()->OnIconChanged(3);
165 EXPECT_TRUE([[recent_tabs_menu itemAtIndex:3] image]); 164 EXPECT_TRUE([[recent_tabs_menu itemAtIndex:3] image]);
166 EXPECT_NSEQ(icon.ToNSImage(), [[recent_tabs_menu itemAtIndex:3] image]); 165 EXPECT_NSEQ(icon.ToNSImage(), [[recent_tabs_menu itemAtIndex:3] image]);
167 166
168 controller_.reset(); 167 controller_.reset();
169 fake_model_.reset(); 168 fake_model_.reset();
170 } 169 }
171 170
172 TEST_F(WrenchMenuControllerTest, RecentTabsElideTitle) { 171 TEST_F(AppMenuControllerTest, RecentTabsElideTitle) {
173 // Add 1 session with 1 window and 2 tabs. 172 // Add 1 session with 1 window and 2 tabs.
174 RecentTabsBuilderTestHelper recent_tabs_builder; 173 RecentTabsBuilderTestHelper recent_tabs_builder;
175 recent_tabs_builder.AddSession(); 174 recent_tabs_builder.AddSession();
176 recent_tabs_builder.AddWindow(0); 175 recent_tabs_builder.AddWindow(0);
177 base::string16 tab1_short_title = base::ASCIIToUTF16("Short"); 176 base::string16 tab1_short_title = base::ASCIIToUTF16("Short");
178 recent_tabs_builder.AddTabWithInfo(0, 0, base::Time::Now(), tab1_short_title); 177 recent_tabs_builder.AddTabWithInfo(0, 0, base::Time::Now(), tab1_short_title);
179 base::string16 tab2_long_title = base::ASCIIToUTF16( 178 base::string16 tab2_long_title = base::ASCIIToUTF16(
180 "Very very very very very very very very very very very very long"); 179 "Very very very very very very very very very very very very long");
181 recent_tabs_builder.AddTabWithInfo(0, 0, 180 recent_tabs_builder.AddTabWithInfo(0, 0,
182 base::Time::Now() - base::TimeDelta::FromMinutes(10), tab2_long_title); 181 base::Time::Now() - base::TimeDelta::FromMinutes(10), tab2_long_title);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 NSString* expected_substring = [base::SysUTF16ToNSString(tab2_long_title) 225 NSString* expected_substring = [base::SysUTF16ToNSString(tab2_long_title)
227 substringToIndex:title_length - 1]; 226 substringToIndex:title_length - 1];
228 EXPECT_NSEQ(expected_substring, actual_substring); 227 EXPECT_NSEQ(expected_substring, actual_substring);
229 228
230 controller_.reset(); 229 controller_.reset();
231 fake_model_.reset(); 230 fake_model_.reset();
232 } 231 }
233 232
234 // Verify that |RecentTabsMenuModelDelegate| is deleted before the model 233 // Verify that |RecentTabsMenuModelDelegate| is deleted before the model
235 // it's observing. 234 // it's observing.
236 TEST_F(WrenchMenuControllerTest, RecentTabDeleteOrder) { 235 TEST_F(AppMenuControllerTest, RecentTabDeleteOrder) {
237 [controller_ menuNeedsUpdate:[controller_ menu]]; 236 [controller_ menuNeedsUpdate:[controller_ menu]];
238 // If the delete order is wrong then the test will crash on exit. 237 // If the delete order is wrong then the test will crash on exit.
239 } 238 }
240 239
241 class BrowserRemovedObserver : public chrome::BrowserListObserver { 240 class BrowserRemovedObserver : public chrome::BrowserListObserver {
242 public: 241 public:
243 BrowserRemovedObserver() { BrowserList::AddObserver(this); } 242 BrowserRemovedObserver() { BrowserList::AddObserver(this); }
244 ~BrowserRemovedObserver() override { BrowserList::RemoveObserver(this); } 243 ~BrowserRemovedObserver() override { BrowserList::RemoveObserver(this); }
245 void WaitUntilBrowserRemoved() { run_loop_.Run(); } 244 void WaitUntilBrowserRemoved() { run_loop_.Run(); }
246 void OnBrowserRemoved(Browser* browser) override { run_loop_.Quit(); } 245 void OnBrowserRemoved(Browser* browser) override { run_loop_.Quit(); }
247 246
248 private: 247 private:
249 base::RunLoop run_loop_; 248 base::RunLoop run_loop_;
250 249
251 DISALLOW_COPY_AND_ASSIGN(BrowserRemovedObserver); 250 DISALLOW_COPY_AND_ASSIGN(BrowserRemovedObserver);
252 }; 251 };
253 252
254 // Test that WrenchMenuController can be destroyed after the Browser. 253 // Test that AppMenuController can be destroyed after the Browser.
Peter Kasting 2015/11/06 22:21:28 Nit: Rewrap comment
255 // This can happen because the WrenchMenuController's owner (ToolbarController) 254 // This can happen because the AppMenuController's owner (ToolbarController)
256 // can outlive the Browser. 255 // can outlive the Browser.
257 TEST_F(WrenchMenuControllerTest, DestroyedAfterBrowser) { 256 TEST_F(AppMenuControllerTest, DestroyedAfterBrowser) {
258 BrowserRemovedObserver observer; 257 BrowserRemovedObserver observer;
259 // This is normally called by ToolbarController, but since |controller_| is 258 // This is normally called by ToolbarController, but since |controller_| is
260 // not owned by one, call it here. 259 // not owned by one, call it here.
261 [controller_ browserWillBeDestroyed]; 260 [controller_ browserWillBeDestroyed];
262 CloseBrowserWindow(); 261 CloseBrowserWindow();
263 observer.WaitUntilBrowserRemoved(); 262 observer.WaitUntilBrowserRemoved();
264 // |controller_| is released in TearDown(). 263 // |controller_| is released in TearDown().
265 } 264 }
266 265
267 } // namespace 266 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698