Index: chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm |
=================================================================== |
--- chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm (revision 29973) |
+++ chrome/browser/cocoa/bookmark_bubble_controller_unittest.mm (working copy) |
@@ -13,21 +13,27 @@ |
#include "testing/platform_test.h" |
@interface BBDelegate : NSObject<BookmarkBubbleControllerDelegate> { |
- NSWindow* window_; // weak |
+ @private |
+ BOOL windowClosed_; |
int edits_; |
- int dones_; |
} |
+ |
@property (readonly) int edits; |
-@property (readonly) int dones; |
-@property (readonly) NSWindow* window; |
+@property (readonly) BOOL windowClosed; |
+ |
@end |
@implementation BBDelegate |
@synthesize edits = edits_; |
-@synthesize window = window_; |
-@synthesize dones = dones_; |
+@synthesize windowClosed = windowClosed_; |
+- (void)dealloc { |
+ NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; |
+ [nc removeObserver:self]; |
+ [super dealloc]; |
+} |
+ |
- (NSPoint)topLeftForBubble { |
return NSMakePoint(10, 300); |
} |
@@ -36,42 +42,54 @@ |
edits_++; |
} |
-- (void)doneWithBubbleController:(BookmarkBubbleController*)controller { |
- dones_++; |
+- (void)setWindowController:(NSWindowController *)controller { |
+ NSNotificationCenter* nc = [NSNotificationCenter defaultCenter]; |
+ [nc removeObserver:self]; |
+ if (controller) { |
+ [nc addObserver:self |
+ selector:@selector(windowWillClose:) |
+ name:NSWindowWillCloseNotification |
+ object:[controller window]]; |
+ } |
+ windowClosed_ = NO; |
} |
-- (void)clear { |
- edits_ = 0; |
- dones_ = 0; |
+- (void)windowWillClose:(NSNotification*)notification { |
+ windowClosed_ = YES; |
} |
- |
@end |
namespace { |
-class BookmarkBubbleControllerTest : public PlatformTest { |
+class BookmarkBubbleControllerTest : public CocoaTest { |
public: |
- CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc... |
BrowserTestHelper helper_; |
scoped_nsobject<BBDelegate> delegate_; |
- scoped_nsobject<BookmarkBubbleController> controller_; |
+ BookmarkBubbleController* controller_; |
- BookmarkBubbleControllerTest() { |
+ BookmarkBubbleControllerTest() : controller_(nil) { |
delegate_.reset([[BBDelegate alloc] init]); |
} |
+ virtual void TearDown() { |
+ [controller_ close]; |
+ CocoaTest::TearDown(); |
+ } |
+ |
// 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(); |
+ DCHECK(controller_ == nil); |
+ controller_ = [[BookmarkBubbleController alloc] |
+ initWithDelegate:delegate_.get() |
+ parentWindow:test_window() |
+ topLeftForBubble:[delegate_ topLeftForBubble] |
+ model:helper_.profile()->GetBookmarkModel() |
+ node:node |
+ alreadyBookmarked:YES]; |
+ EXPECT_TRUE([controller_ window]); |
+ [delegate_ setWindowController:controller_]; |
+ return controller_; |
} |
BookmarkModel* GetBookmarkModel() { |
@@ -89,9 +107,9 @@ |
GURL("http://www.google.com")); |
BookmarkBubbleController* controller = ControllerForNode(node); |
EXPECT_TRUE(controller); |
- NSWindow* window = [controller createBubbleWindow]; |
+ NSWindow* window = [controller window]; |
EXPECT_TRUE(window); |
- EXPECT_TRUE(NSContainsRect([cocoa_helper_.window() frame], |
+ EXPECT_TRUE(NSContainsRect([test_window() frame], |
[window frame])); |
} |
@@ -124,7 +142,7 @@ |
} |
// Click on edit; bubble gets closed. |
-TEST_F(BookmarkBubbleControllerTest, TestSimpleActions) { |
+TEST_F(BookmarkBubbleControllerTest, TestEdit) { |
BookmarkModel* model = GetBookmarkModel(); |
const BookmarkNode* node = model->AddURL(model->GetBookmarkBarNode(), |
0, |
@@ -134,24 +152,27 @@ |
EXPECT_TRUE(controller); |
EXPECT_EQ([delegate_ edits], 0); |
- EXPECT_EQ([delegate_ dones], 0); |
- EXPECT_FALSE([controller windowHasBeenClosed]); |
+ EXPECT_FALSE([delegate_ windowClosed]); |
[controller edit:controller]; |
EXPECT_EQ([delegate_ edits], 1); |
- EXPECT_EQ([delegate_ dones], 1); |
- EXPECT_TRUE([controller windowHasBeenClosed]); |
+ EXPECT_TRUE([delegate_ windowClosed]); |
+} |
- [delegate_ clear]; |
+// CallClose; bubble gets closed. |
+TEST_F(BookmarkBubbleControllerTest, TestClose) { |
+ BookmarkModel* model = GetBookmarkModel(); |
+ const BookmarkNode* node = model->AddURL(model->GetBookmarkBarNode(), |
+ 0, |
+ L"Bookie markie title", |
+ GURL("http://www.google.com")); |
EXPECT_EQ([delegate_ edits], 0); |
- EXPECT_EQ([delegate_ dones], 0); |
- controller = ControllerForNode(node); |
+ BookmarkBubbleController* controller = ControllerForNode(node); |
EXPECT_TRUE(controller); |
- EXPECT_FALSE([controller windowHasBeenClosed]); |
- [controller close:controller]; |
+ EXPECT_FALSE([delegate_ windowClosed]); |
+ [controller ok:controller]; |
EXPECT_EQ([delegate_ edits], 0); |
- EXPECT_EQ([delegate_ dones], 1); |
- EXPECT_TRUE([controller windowHasBeenClosed]); |
+ EXPECT_TRUE([delegate_ windowClosed]); |
} |
// User changes title and parent folder in the UI |
@@ -189,8 +210,7 @@ |
[controller remove:controller]; |
EXPECT_FALSE(model->IsBookmarked(gurl)); |
- EXPECT_TRUE([controller windowHasBeenClosed]); |
- EXPECT_EQ([delegate_ dones], 1); |
+ EXPECT_TRUE([delegate_ windowClosed]); |
} |
// Confirm picking "choose another folder" caused edit: to be called. |
@@ -219,16 +239,16 @@ |
0, |
L"Bookie markie title", |
gurl); |
- scoped_nsobject<BookmarkBubbleController> controller( |
+ BookmarkBubbleController* controller = |
[[BookmarkBubbleController alloc] |
initWithDelegate:delegate_.get() |
- parentWindow:cocoa_helper_.window() |
+ parentWindow:test_window() |
topLeftForBubble:[delegate_ topLeftForBubble] |
model:helper_.profile()->GetBookmarkModel() |
node:node |
- alreadyBookmarked:NO]); // The last param is the key difference. |
- EXPECT_TRUE(controller); |
- |
+ alreadyBookmarked:NO]; // The last param is the key difference. |
+ EXPECT_TRUE([controller window]); |
+ // Calls release on controller. |
[controller cancel:nil]; |
EXPECT_FALSE(model->IsBookmarked(gurl)); |
} |