Index: chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm |
diff --git a/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm b/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm |
index 327684a861cc7ed58a3ab5fc3ed6d683f0a73c13..394e157157e57f356d089f4e66bde47c68ff09b4 100644 |
--- a/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm |
+++ b/chrome/browser/ui/cocoa/wrench_menu/wrench_menu_controller_unittest.mm |
@@ -3,6 +3,7 @@ |
// found in the LICENSE file. |
#include "base/memory/scoped_nsobject.h" |
+#include "base/sys_string_conversions.h" |
#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/sync/glue/session_model_associator.h" |
#include "chrome/browser/sync/profile_sync_service_factory.h" |
@@ -75,7 +76,7 @@ TEST_F(WrenchMenuControllerTest, DispatchSimple) { |
chrome::testing::NSRunLoopRunAllPending(); |
} |
-TEST_F(WrenchMenuControllerTest, RecentTabs) { |
+TEST_F(WrenchMenuControllerTest, RecentTabsFavIcon) { |
ProfileSyncService* sync_service = |
ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile()); |
browser_sync::SessionModelAssociator associator_(sync_service, true); |
@@ -115,4 +116,68 @@ TEST_F(WrenchMenuControllerTest, RecentTabs) { |
fake_model_.reset(); |
} |
+TEST_F(WrenchMenuControllerTest, RecentTabsElideTitle) { |
+ ProfileSyncService* sync_service = |
+ ProfileSyncServiceFactory::GetInstance()->GetForProfile(profile()); |
+ browser_sync::SessionModelAssociator associator_(sync_service, true); |
+ associator_.SetCurrentMachineTagForTesting("WrenchMenuControllerTest"); |
+ |
+ // Add 1 session with 1 window and 2 tabs. |
+ RecentTabsBuilderTestHelper recent_tabs_builder; |
+ recent_tabs_builder.AddSession(); |
+ recent_tabs_builder.AddWindow(0); |
+ string16 tab1_short_title = ASCIIToUTF16("Short"); |
+ recent_tabs_builder.AddTabWithInfo(0, 0, base::Time::Now(), tab1_short_title); |
+ string16 tab2_long_title = ASCIIToUTF16("Very very very very very very " |
+ "very very very very very very long"); |
+ recent_tabs_builder.AddTabWithInfo(0, 0, |
+ base::Time::Now() - base::TimeDelta::FromMinutes(10), tab2_long_title); |
+ recent_tabs_builder.RegisterRecentTabs(&associator_); |
+ |
+ RecentTabsSubMenuModel recent_tabs_sub_menu_model( |
+ NULL, browser(), &associator_); |
+ fake_model_->AddSubMenuWithStringId( |
+ IDC_RECENT_TABS_MENU, IDS_RECENT_TABS_MENU, |
+ &recent_tabs_sub_menu_model); |
+ |
+ [controller() setModel:fake_model_.get()]; |
+ NSMenu* menu = [controller() menu]; |
+ [controller() updateRecentTabsSubmenu]; |
+ |
+ NSString* title = l10n_util::GetNSStringWithFixup(IDS_RECENT_TABS_MENU); |
+ NSMenu* recent_tabs_menu = [[menu itemWithTitle:title] submenu]; |
+ EXPECT_TRUE(recent_tabs_menu); |
+ EXPECT_EQ(5, [recent_tabs_menu numberOfItems]); |
+ |
+ // Index 0: restore tabs menu item. |
+ NSString* restore_tab_label = l10n_util::FixUpWindowsStyleLabel( |
+ recent_tabs_sub_menu_model.GetLabelAt(0)); |
+ EXPECT_NSEQ(restore_tab_label, [[recent_tabs_menu itemAtIndex:0] title]); |
+ |
+ // Item 1: separator. |
+ EXPECT_TRUE([[recent_tabs_menu itemAtIndex:1] isSeparatorItem]); |
+ |
+ // Item 2: window title. |
+ EXPECT_NSEQ( |
+ base::SysUTF16ToNSString(recent_tabs_sub_menu_model.GetLabelAt(2)), |
+ [[recent_tabs_menu itemAtIndex:2] title]); |
+ |
+ // Item 3: short tab title. |
+ EXPECT_NSEQ(base::SysUTF16ToNSString(tab1_short_title), |
+ [[recent_tabs_menu itemAtIndex:3] title]); |
+ |
+ // Item 4: long tab title. |
+ NSString* tab2_actual_title = [[recent_tabs_menu itemAtIndex:4] title]; |
+ NSUInteger title_length = [tab2_actual_title length]; |
+ EXPECT_GT(tab2_long_title.size(), title_length); |
+ NSString* actual_substring = |
+ [tab2_actual_title substringToIndex:title_length - 1]; |
+ NSString* expected_substring = [base::SysUTF16ToNSString(tab2_long_title) |
+ substringToIndex:title_length - 1]; |
+ EXPECT_NSEQ(expected_substring, actual_substring); |
+ |
+ controller_.reset(); |
+ fake_model_.reset(); |
+} |
+ |
} // namespace |