Index: chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm |
=================================================================== |
--- chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm (revision 0) |
+++ chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm (revision 0) |
@@ -0,0 +1,213 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#import <Cocoa/Cocoa.h> |
+ |
+#include "base/basictypes.h" |
+#include "base/scoped_nsobject.h" |
+#import "chrome/browser/cocoa/bookmark_bubble_controller.h" |
+#include "chrome/browser/cocoa/browser_test_helper.h" |
+#import "chrome/browser/cocoa/cocoa_test_helper.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "testing/platform_test.h" |
+ |
+@interface BBDelegate : NSObject<BookmarkBubbleControllerDelegate> { |
+ NSWindow* window_; // weak |
+ int edits_; |
+ int dones_; |
+} |
+@property (readonly) int edits; |
+@property (readonly) int dones; |
+@property (readonly) NSWindow* window; |
+@end |
+ |
+@implementation BBDelegate |
+ |
+@synthesize edits = edits_; |
+@synthesize window = window_; |
+@synthesize dones = dones_; |
+ |
+- (NSPoint)topLeftForBubble { |
+ return NSMakePoint(10, 300); |
+} |
+ |
+- (void)editBookmarkNode:(const BookmarkNode*)node { |
+ edits_++; |
+} |
+ |
+- (void)doneWithBubbleController:(BookmarkBubbleController*)controller { |
+ dones_++; |
+} |
+ |
+- (void)clear { |
+ edits_ = 0; |
+ dones_ = 0; |
+} |
+ |
+@end |
+ |
+namespace { |
+ |
+class BookmarkBubbleControllerTest : public PlatformTest { |
+ public: |
+ CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc... |
+ BrowserTestHelper helper_; |
+ scoped_nsobject<BBDelegate> delegate_; |
+ scoped_nsobject<BookmarkBubbleController> controller_; |
+ |
+ BookmarkBubbleControllerTest() { |
+ delegate_.reset([[BBDelegate alloc] init]); |
+ } |
+ |
+ // Returns a controller but ownership not transferred. |
+ // Only one of these will be valid at a time. |
+ BookmarkBubbleController* ControllerForNode(const BookmarkNode* node) { |
+ controller_.reset([[BookmarkBubbleController alloc] |
+ initWithDelegate:delegate_.get() |
+ parentWindow:cocoa_helper_.window() |
+ topLeftForBubble:[delegate_ topLeftForBubble] |
+ model:helper_.profile()->GetBookmarkModel() |
+ node:node |
+ alreadyBookmarked:YES]); |
+ [controller_ view]; // force nib load |
+ return controller_.get(); |
+ } |
+ |
+ BookmarkModel* GetBookmarkModel() { |
+ return helper_.profile()->GetBookmarkModel(); |
+ } |
+}; |
+ |
+// Confirm basics about the bubble window (e.g. that it is inside the |
+// parent window) |
+TEST_F(BookmarkBubbleControllerTest, TestBubbleWindow) { |
+ BookmarkModel* model = GetBookmarkModel(); |
+ const BookmarkNode* node = model->AddURL(model->GetBookmarkBarNode(), |
+ 0, |
+ L"Bookie markie title", |
+ GURL("http://www.google.com")); |
+ BookmarkBubbleController* controller = ControllerForNode(node); |
+ EXPECT_TRUE(controller); |
+ NSWindow* window = [controller createBubbleWindow]; |
+ EXPECT_TRUE(window); |
+ EXPECT_TRUE(NSContainsRect([cocoa_helper_.window() frame], |
+ [window frame])); |
+} |
+ |
+// Confirm population of folder list |
+TEST_F(BookmarkBubbleControllerTest, TestFillInFolder) { |
+ // Create some folders, including a nested folder |
+ BookmarkModel* model = GetBookmarkModel(); |
+ const BookmarkNode* node1 = model->AddGroup(model->GetBookmarkBarNode(), |
+ 0, L"one"); |
+ const BookmarkNode* node2 = model->AddGroup(model->GetBookmarkBarNode(), |
+ 1, L"two"); |
+ const BookmarkNode* node3 = model->AddGroup(model->GetBookmarkBarNode(), |
+ 2, L"three"); |
+ const BookmarkNode* node4 = model->AddGroup(node2, |
+ 0, L"sub"); |
+ model->AddURL(node1, 0, L"title1", GURL("http://www.google.com")); |
+ model->AddURL(node3, 0, L"title2", GURL("http://www.google.com")); |
+ model->AddURL(node4, 0, L"title3", GURL("http://www.google.com/reader")); |
+ |
+ BookmarkBubbleController* controller = ControllerForNode(node4); |
+ EXPECT_TRUE(controller); |
+ |
+ NSArray* items = [[controller folderComboBox] objectValues]; |
+ EXPECT_TRUE([items containsObject:@"one"]); |
+ EXPECT_TRUE([items containsObject:@"two"]); |
+ EXPECT_TRUE([items containsObject:@"three"]); |
+ EXPECT_TRUE([items containsObject:@"sub"]); |
+ EXPECT_FALSE([items containsObject:@"title1"]); |
+ EXPECT_FALSE([items containsObject:@"title2"]); |
+} |
+ |
+// Click on edit; bubble gets closed. |
+TEST_F(BookmarkBubbleControllerTest, TestSimpleActions) { |
+ BookmarkModel* model = GetBookmarkModel(); |
+ const BookmarkNode* node = model->AddURL(model->GetBookmarkBarNode(), |
+ 0, |
+ L"Bookie markie title", |
+ GURL("http://www.google.com")); |
+ BookmarkBubbleController* controller = ControllerForNode(node); |
+ EXPECT_TRUE(controller); |
+ |
+ EXPECT_EQ([delegate_ edits], 0); |
+ EXPECT_EQ([delegate_ dones], 0); |
+ EXPECT_FALSE([controller windowHasBeenClosed]); |
+ [controller edit:controller]; |
+ EXPECT_EQ([delegate_ edits], 1); |
+ EXPECT_EQ([delegate_ dones], 1); |
+ EXPECT_TRUE([controller windowHasBeenClosed]); |
+ |
+ [delegate_ clear]; |
+ EXPECT_EQ([delegate_ edits], 0); |
+ EXPECT_EQ([delegate_ dones], 0); |
+ |
+ controller = ControllerForNode(node); |
+ EXPECT_TRUE(controller); |
+ EXPECT_FALSE([controller windowHasBeenClosed]); |
+ [controller close:controller]; |
+ EXPECT_EQ([delegate_ edits], 0); |
+ EXPECT_EQ([delegate_ dones], 1); |
+ EXPECT_TRUE([controller windowHasBeenClosed]); |
+} |
+ |
+// User changes title and parent folder in the UI |
+TEST_F(BookmarkBubbleControllerTest, TestUserEdit) { |
+ BookmarkModel* model = GetBookmarkModel(); |
+ const BookmarkNode* node = model->AddURL(model->GetBookmarkBarNode(), |
+ 0, |
+ L"short-title", |
+ GURL("http://www.google.com")); |
+ model->AddGroup(model->GetBookmarkBarNode(), 0, L"grandma"); |
+ model->AddGroup(model->GetBookmarkBarNode(), 0, L"grandpa"); |
+ BookmarkBubbleController* controller = ControllerForNode(node); |
+ EXPECT_TRUE(controller); |
+ |
+ // simulate a user edit |
+ [controller setTitle:@"oops" parentFolder:@"grandma"]; |
+ [controller edit:controller]; |
+ |
+ // Make sure bookmark has changed |
+ EXPECT_EQ(node->GetTitle(), L"oops"); |
+ EXPECT_EQ(node->GetParent()->GetTitle(), L"grandma"); |
+} |
+ |
+// Click the "remove" button |
+TEST_F(BookmarkBubbleControllerTest, TestRemove) { |
+ BookmarkModel* model = GetBookmarkModel(); |
+ GURL gurl("http://www.google.com"); |
+ const BookmarkNode* node = model->AddURL(model->GetBookmarkBarNode(), |
+ 0, |
+ L"Bookie markie title", |
+ gurl); |
+ BookmarkBubbleController* controller = ControllerForNode(node); |
+ EXPECT_TRUE(controller); |
+ EXPECT_TRUE(model->IsBookmarked(gurl)); |
+ |
+ [controller remove:controller]; |
+ EXPECT_FALSE(model->IsBookmarked(gurl)); |
+ EXPECT_TRUE([controller windowHasBeenClosed]); |
+ EXPECT_EQ([delegate_ dones], 1); |
+} |
+ |
+// Confirm picking "choose another folder" caused edit: to be called. |
+TEST_F(BookmarkBubbleControllerTest, ComboSelectionChanged) { |
+ BookmarkModel* model = GetBookmarkModel(); |
+ GURL gurl("http://www.google.com"); |
+ const BookmarkNode* node = model->AddURL(model->GetBookmarkBarNode(), |
+ 0, L"super-title", |
+ gurl); |
+ BookmarkBubbleController* controller = ControllerForNode(node); |
+ EXPECT_TRUE(controller); |
+ |
+ NSString* chooseAnotherFolder = [controller chooseAnotherFolderString]; |
+ EXPECT_EQ([delegate_ edits], 0); |
+ [controller setTitle:@"DOH!" parentFolder:chooseAnotherFolder]; |
+ EXPECT_EQ([delegate_ edits], 1); |
+} |
+ |
+ |
+} // namespace |
Property changes on: chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm |
___________________________________________________________________ |
Name: svn:eol-style |
+ LF |