bookmark_menu_cocoa_controller_unittest.mm revision dc0f95d653279beabeb9817299e2902918ba123e
1// Copyright (c) 2010 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/string16.h"
6#include "chrome/browser/bookmarks/bookmark_model.h"
7#include "chrome/browser/bookmarks/bookmark_utils.h"
8#include "chrome/browser/ui/cocoa/browser_test_helper.h"
9#import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h"
10#include "chrome/browser/ui/browser.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13@interface FakeBookmarkMenuController : BookmarkMenuCocoaController {
14 @public
15  BrowserTestHelper* helper_;
16  const BookmarkNode* nodes_[2];
17  BOOL opened_[2];
18  BOOL opened_new_foreground_tab;
19  BOOL opened_new_window;
20  BOOL opened_off_the_record;
21}
22@end
23
24@implementation FakeBookmarkMenuController
25
26- (id)init {
27  if ((self = [super init])) {
28    string16 empty;
29    helper_ = new BrowserTestHelper();
30    BookmarkModel* model = helper_->browser()->profile()->GetBookmarkModel();
31    const BookmarkNode* bookmark_bar = model->GetBookmarkBarNode();
32    nodes_[0] = model->AddURL(bookmark_bar, 0, empty, GURL("http://0.com"));
33    nodes_[1] = model->AddURL(bookmark_bar, 1, empty, GURL("http://1.com"));
34  }
35  return self;
36}
37
38- (void)dealloc {
39  delete helper_;
40  [super dealloc];
41}
42
43- (const BookmarkNode*)nodeForIdentifier:(int)identifier {
44  if ((identifier < 0) || (identifier >= 2))
45    return NULL;
46  return nodes_[identifier];
47}
48
49- (void)openURLForNode:(const BookmarkNode*)node {
50  std::string url = node->GetURL().possibly_invalid_spec();
51  if (url.find("http://0.com") != std::string::npos)
52    opened_[0] = YES;
53  if (url.find("http://1.com") != std::string::npos)
54    opened_[1] = YES;
55}
56
57- (void)openAll:(NSInteger)tag
58    withDisposition:(WindowOpenDisposition)disposition {
59  if (disposition == NEW_FOREGROUND_TAB) {
60    opened_new_foreground_tab = YES;
61  } else if (disposition == NEW_WINDOW) {
62    opened_new_window = YES;
63  } else if (disposition == OFF_THE_RECORD) {
64    opened_off_the_record = YES;
65  }
66}
67
68@end  // FakeBookmarkMenuController
69
70
71TEST(BookmarkMenuCocoaControllerTest, TestOpenItem) {
72  FakeBookmarkMenuController *c = [[FakeBookmarkMenuController alloc] init];
73  NSMenuItem *item = [[[NSMenuItem alloc] init] autorelease];
74  for (int i = 0; i < 2; i++) {
75    [item setTag:i];
76    ASSERT_EQ(c->opened_[i], NO);
77    [c openBookmarkMenuItem:item];
78    ASSERT_NE(c->opened_[i], NO);
79  }
80
81  // Test three versions of 'Open All Bookmarks' item. tag id means nothing.
82  // I just reset the tag id to zero.
83  [item setTag:0];
84  EXPECT_EQ(c->opened_new_foreground_tab, NO);
85  [c openAllBookmarks:item];
86  EXPECT_NE(c->opened_new_foreground_tab, NO);
87
88  EXPECT_EQ(c->opened_new_window, NO);
89  [c openAllBookmarksNewWindow:item];
90  EXPECT_NE(c->opened_new_window, NO);
91
92  EXPECT_EQ(c->opened_off_the_record, NO);
93  [c openAllBookmarksIncognitoWindow:item];
94  EXPECT_NE(c->opened_off_the_record, NO);
95
96  [c release];
97}
98