Home | History | Annotate | Download | only in cocoa
      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