1 // Copyright (c) 2011 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 #include "base/memory/scoped_nsobject.h" 6 #include "base/memory/scoped_ptr.h" 7 #include "base/string_util.h" 8 #include "base/sys_string_conversions.h" 9 #include "chrome/app/chrome_command_ids.h" 10 #include "chrome/browser/ui/cocoa/browser_test_helper.h" 11 #include "chrome/browser/ui/cocoa/cocoa_test_helper.h" 12 #include "chrome/browser/ui/cocoa/history_menu_bridge.h" 13 #include "chrome/browser/ui/cocoa/history_menu_cocoa_controller.h" 14 #include "testing/gtest/include/gtest/gtest.h" 15 16 @interface FakeHistoryMenuController : HistoryMenuCocoaController { 17 @public 18 BOOL opened_[2]; 19 } 20 @end 21 22 @implementation FakeHistoryMenuController 23 24 - (id)initTest { 25 if ((self = [super init])) { 26 opened_[0] = NO; 27 opened_[1] = NO; 28 } 29 return self; 30 } 31 32 - (void)openURLForItem:(HistoryMenuBridge::HistoryItem*)item { 33 opened_[item->session_id] = YES; 34 } 35 36 @end // FakeHistoryMenuController 37 38 class HistoryMenuCocoaControllerTest : public CocoaTest { 39 public: 40 41 virtual void SetUp() { 42 CocoaTest::SetUp(); 43 bridge_.reset(new HistoryMenuBridge(browser_test_helper_.profile())); 44 bridge_->controller_.reset( 45 [[FakeHistoryMenuController alloc] initWithBridge:bridge_.get()]); 46 [controller() initTest]; 47 } 48 49 void CreateItems(NSMenu* menu) { 50 HistoryMenuBridge::HistoryItem* item = new HistoryMenuBridge::HistoryItem(); 51 item->url = GURL("http://google.com"); 52 item->session_id = 0; 53 bridge_->AddItemToMenu(item, menu, HistoryMenuBridge::kMostVisited, 0); 54 55 item = new HistoryMenuBridge::HistoryItem(); 56 item->url = GURL("http://apple.com"); 57 item->session_id = 1; 58 bridge_->AddItemToMenu(item, menu, HistoryMenuBridge::kMostVisited, 1); 59 } 60 61 std::map<NSMenuItem*, HistoryMenuBridge::HistoryItem*>& menu_item_map() { 62 return bridge_->menu_item_map_; 63 } 64 65 FakeHistoryMenuController* controller() { 66 return static_cast<FakeHistoryMenuController*>(bridge_->controller_.get()); 67 } 68 69 private: 70 BrowserTestHelper browser_test_helper_; 71 scoped_ptr<HistoryMenuBridge> bridge_; 72 }; 73 74 TEST_F(HistoryMenuCocoaControllerTest, OpenURLForItem) { 75 76 scoped_nsobject<NSMenu> menu([[NSMenu alloc] initWithTitle:@"History"]); 77 CreateItems(menu.get()); 78 79 std::map<NSMenuItem*, HistoryMenuBridge::HistoryItem*>& items = 80 menu_item_map(); 81 std::map<NSMenuItem*, HistoryMenuBridge::HistoryItem*>::iterator it = 82 items.begin(); 83 84 for ( ; it != items.end(); ++it) { 85 HistoryMenuBridge::HistoryItem* item = it->second; 86 EXPECT_FALSE(controller()->opened_[item->session_id]); 87 [controller() openHistoryMenuItem:it->first]; 88 EXPECT_TRUE(controller()->opened_[item->session_id]); 89 } 90 } 91