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 3// found in the LICENSE file. 4 5#import "chrome/browser/ui/cocoa/bookmarks/bookmark_menu_cocoa_controller.h" 6 7#import "base/mac/scoped_nsobject.h" 8#include "base/strings/string16.h" 9#include "chrome/browser/bookmarks/bookmark_model_factory.h" 10#include "chrome/browser/ui/browser.h" 11#include "chrome/browser/ui/cocoa/test/cocoa_test_helper.h" 12#include "chrome/test/base/browser_with_test_window_test.h" 13#include "chrome/test/base/testing_profile.h" 14#include "components/bookmarks/browser/bookmark_model.h" 15#include "components/bookmarks/browser/bookmark_utils.h" 16#include "components/bookmarks/test/bookmark_test_helpers.h" 17#include "testing/gtest/include/gtest/gtest.h" 18 19using bookmarks::BookmarkModel; 20using bookmarks::BookmarkNode; 21 22@interface FakeBookmarkMenuController : BookmarkMenuCocoaController { 23 @public 24 const BookmarkNode* _nodes[2]; 25 BOOL _opened[2]; 26} 27- (id)initWithProfile:(Profile*)profile; 28@end 29 30@implementation FakeBookmarkMenuController 31 32- (id)initWithProfile:(Profile*)profile { 33 if ((self = [super init])) { 34 base::string16 empty; 35 BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile); 36 const BookmarkNode* bookmark_bar = model->bookmark_bar_node(); 37 _nodes[0] = model->AddURL(bookmark_bar, 0, empty, GURL("http://0.com")); 38 _nodes[1] = model->AddURL(bookmark_bar, 1, empty, GURL("http://1.com")); 39 } 40 return self; 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->url().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@end // FakeBookmarkMenuController 58 59class BookmarkMenuCocoaControllerTest : public BrowserWithTestWindowTest { 60 public: 61 void SetUp() override { 62 BrowserWithTestWindowTest::SetUp(); 63 64 bookmarks::test::WaitForBookmarkModelToLoad( 65 BookmarkModelFactory::GetForBrowserContext(profile())); 66 controller_.reset( 67 [[FakeBookmarkMenuController alloc] initWithProfile:profile()]); 68 } 69 70 TestingProfile::TestingFactories GetTestingFactories() override { 71 return {{BookmarkModelFactory::GetInstance(), 72 BookmarkModelFactory::GetDefaultFactory()}}; 73 } 74 75 FakeBookmarkMenuController* controller() { return controller_.get(); } 76 77 private: 78 CocoaTestHelper cocoa_test_helper_; 79 base::scoped_nsobject<FakeBookmarkMenuController> controller_; 80}; 81 82TEST_F(BookmarkMenuCocoaControllerTest, TestOpenItem) { 83 FakeBookmarkMenuController* c = controller(); 84 NSMenuItem *item = [[[NSMenuItem alloc] init] autorelease]; 85 for (int i = 0; i < 2; i++) { 86 [item setTag:i]; 87 ASSERT_EQ(c->_opened[i], NO); 88 [c openBookmarkMenuItem:item]; 89 ASSERT_NE(c->_opened[i], NO); 90 } 91} 92