OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/memory/scoped_nsobject.h" | 5 #include "base/memory/scoped_nsobject.h" |
| 6 #include "base/string16.h" |
| 7 #include "base/utf_string_conversions.h" |
6 #include "chrome/browser/bookmarks/bookmark_model.h" | 8 #include "chrome/browser/bookmarks/bookmark_model.h" |
7 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
8 #include "chrome/browser/ui/browser_window.h" | |
9 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.h" | 10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.h" |
10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h" | 11 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h" |
11 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h" | 12 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h" |
12 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h" | 13 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h" |
13 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" | 14 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" |
14 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" | 15 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
15 #import "chrome/browser/ui/cocoa/url_drop_target.h" | 16 #import "chrome/browser/ui/cocoa/url_drop_target.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
17 #include "testing/platform_test.h" | 18 #include "testing/platform_test.h" |
18 #import "third_party/mozilla/NSPasteboard+Utils.h" | 19 #import "third_party/mozilla/NSPasteboard+Utils.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 const CGFloat kFakeIndicatorPos = 7.0; | 52 const CGFloat kFakeIndicatorPos = 7.0; |
52 const NSPoint kPoint = {10, 10}; | 53 const NSPoint kPoint = {10, 10}; |
53 | 54 |
54 class BookmarkBarFolderViewTest : public CocoaProfileTest { | 55 class BookmarkBarFolderViewTest : public CocoaProfileTest { |
55 public: | 56 public: |
56 virtual void SetUp() { | 57 virtual void SetUp() { |
57 CocoaProfileTest::SetUp(); | 58 CocoaProfileTest::SetUp(); |
58 | 59 |
59 view_.reset([[BookmarkBarFolderView alloc] init]); | 60 view_.reset([[BookmarkBarFolderView alloc] init]); |
60 | 61 |
61 // The created window will be destroyed in |CocoaProfileTest::TearDown()|. | |
62 window_ = CreateBrowserWindow()->GetNativeHandle(); | |
63 mock_controller_.reset(GetMockController(YES, | 62 mock_controller_.reset(GetMockController(YES, |
64 profile()->GetBookmarkModel())); | 63 profile()->GetBookmarkModel())); |
65 | 64 |
66 mock_button_.reset(GetMockButton(mock_controller_.get())); | 65 mock_button_.reset(GetMockButton(mock_controller_.get())); |
67 [view_ awakeFromNib]; | 66 [view_ awakeFromNib]; |
68 [view_ setController:mock_controller_]; | 67 [view_ setController:mock_controller_]; |
69 } | 68 } |
70 | 69 |
71 virtual void TearDown() { | 70 virtual void TearDown() { |
72 [mock_controller_ verify]; | 71 [mock_controller_ verify]; |
73 | |
74 // Order is important here: We need to release the mock objects *prior* to | |
75 // calling |CocoaProfileTest::TearDown()|. This is because the | |
76 // |mock_controller_| retains |window_|; and if any windows remain allocated | |
77 // when |CocoaProfileTest::TearDown()| is called, this triggers an assertion | |
78 // in |ui_cocoa_test_helper.mm|. | |
79 mock_controller_.reset(); | |
80 mock_button_.reset(); | |
81 CocoaProfileTest::TearDown(); | 72 CocoaProfileTest::TearDown(); |
82 } | 73 } |
83 | 74 |
84 id GetFakePasteboardForType(NSString* dataType) { | 75 id GetFakePasteboardForType(NSString* dataType) { |
85 id pasteboard = [OCMockObject mockForClass:[NSPasteboard class]]; | 76 id pasteboard = [OCMockObject mockForClass:[NSPasteboard class]]; |
86 if ([dataType isEqualToString:kBookmarkButtonDragType]) { | 77 if ([dataType isEqualToString:kBookmarkButtonDragType]) { |
87 BookmarkButton* button = mock_button_.get(); | 78 BookmarkButton* button = mock_button_.get(); |
88 [[[pasteboard stub] | 79 [[[pasteboard stub] |
89 andReturn:[NSData dataWithBytes:&button length:sizeof(button)]] | 80 andReturn:[NSData dataWithBytes:&button length:sizeof(button)]] |
90 dataForType:dataType]; | 81 dataForType:dataType]; |
(...skipping 24 matching lines...) Expand all Loading... |
115 | 106 |
116 id GetMockController(BOOL show_indicator, BookmarkModel* model) { | 107 id GetMockController(BOOL show_indicator, BookmarkModel* model) { |
117 id mock_controller = | 108 id mock_controller = |
118 [OCMockObject mockForClass:[BookmarkBarFolderController class]]; | 109 [OCMockObject mockForClass:[BookmarkBarFolderController class]]; |
119 [[[mock_controller stub] andReturnBool:YES] | 110 [[[mock_controller stub] andReturnBool:YES] |
120 draggingAllowed:OCMOCK_ANY]; | 111 draggingAllowed:OCMOCK_ANY]; |
121 [[[mock_controller stub] andReturnBool:show_indicator] | 112 [[[mock_controller stub] andReturnBool:show_indicator] |
122 shouldShowIndicatorShownForPoint:kPoint]; | 113 shouldShowIndicatorShownForPoint:kPoint]; |
123 [[[mock_controller stub] andReturnFloat:kFakeIndicatorPos] | 114 [[[mock_controller stub] andReturnFloat:kFakeIndicatorPos] |
124 indicatorPosForDragToPoint:kPoint]; | 115 indicatorPosForDragToPoint:kPoint]; |
125 [[[mock_controller stub] andReturn:window_] browserWindow]; | |
126 [[[mock_controller stub] andReturnValue:OCMOCK_VALUE(model)] bookmarkModel]; | 116 [[[mock_controller stub] andReturnValue:OCMOCK_VALUE(model)] bookmarkModel]; |
127 return [mock_controller retain]; | 117 return [mock_controller retain]; |
128 } | 118 } |
129 | 119 |
130 id GetMockButton(id mock_controller) { | 120 id GetMockButton(id mock_controller) { |
| 121 BookmarkModel* bookmark_model = profile()->GetBookmarkModel(); |
| 122 const BookmarkNode* node = |
| 123 bookmark_model->AddURL(bookmark_model->bookmark_bar_node(), |
| 124 0, |
| 125 ASCIIToUTF16("Test Bookmark"), |
| 126 GURL("http://www.exmaple.com")); |
| 127 |
131 id mock_button = [OCMockObject mockForClass:[BookmarkButton class]]; | 128 id mock_button = [OCMockObject mockForClass:[BookmarkButton class]]; |
132 [[[mock_button stub] andReturn:mock_controller] delegate]; | 129 [[[mock_button stub] andReturnValue:OCMOCK_VALUE(node)] bookmarkNode]; |
133 return [mock_button retain]; | 130 return [mock_button retain]; |
134 } | 131 } |
135 | 132 |
136 scoped_nsobject<id> mock_controller_; | 133 scoped_nsobject<id> mock_controller_; |
137 scoped_nsobject<BookmarkBarFolderView> view_; | 134 scoped_nsobject<BookmarkBarFolderView> view_; |
138 NSWindow* window_; // WEAK, owned by CocoaProfileTest | |
139 scoped_nsobject<id> mock_button_; | 135 scoped_nsobject<id> mock_button_; |
140 }; | 136 }; |
141 | 137 |
142 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDrop) { | 138 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDrop) { |
143 id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType); | 139 id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType); |
144 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] | 140 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
145 draggingEntered:drag_info]; | 141 draggingEntered:drag_info]; |
146 [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; | 142 [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; |
147 [[[mock_controller_ expect] andReturnBool:YES] dragButton:OCMOCK_ANY | 143 [[[mock_controller_ expect] andReturnBool:YES] dragButton:OCMOCK_ANY |
148 to:kPoint | 144 to:kPoint |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 EXPECT_EQ([view_ dropIndicatorPosition], kFakeIndicatorPos); | 198 EXPECT_EQ([view_ dropIndicatorPosition], kFakeIndicatorPos); |
203 mock_controller_.reset(GetMockController(NO, profile()->GetBookmarkModel())); | 199 mock_controller_.reset(GetMockController(NO, profile()->GetBookmarkModel())); |
204 [view_ setController:mock_controller_]; | 200 [view_ setController:mock_controller_]; |
205 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] | 201 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
206 draggingEntered:drag_info]; | 202 draggingEntered:drag_info]; |
207 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); | 203 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
208 EXPECT_FALSE([view_ dropIndicatorShown]); | 204 EXPECT_FALSE([view_ dropIndicatorShown]); |
209 } | 205 } |
210 | 206 |
211 } // namespace | 207 } // namespace |
OLD | NEW |