| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/mac/scoped_nsobject.h" | 5 #include "base/mac/scoped_nsobject.h" |
| 6 #include "base/strings/string16.h" | 6 #include "base/strings/string16.h" |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 8 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| 9 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
| 10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.h" | 10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.h" |
| 11 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h" | 11 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h" |
| 12 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h" | 12 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h" |
| 13 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h" | 13 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h" |
| 14 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" | 14 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" |
| 15 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" | 15 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" |
| 16 #import "chrome/browser/ui/cocoa/url_drop_target.h" | 16 #import "chrome/browser/ui/cocoa/url_drop_target.h" |
| 17 #include "chrome/test/base/testing_profile.h" | 17 #include "chrome/test/base/testing_profile.h" |
| 18 #include "components/bookmarks/browser/bookmark_model.h" | 18 #include "components/bookmarks/browser/bookmark_model.h" |
| 19 #include "components/bookmarks/test/bookmark_test_helpers.h" | 19 #include "components/bookmarks/test/bookmark_test_helpers.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
| 21 #include "testing/platform_test.h" | 21 #include "testing/platform_test.h" |
| 22 #import "third_party/mozilla/NSPasteboard+Utils.h" | 22 #import "third_party/mozilla/NSPasteboard+Utils.h" |
| 23 #import "third_party/ocmock/OCMock/OCMock.h" | 23 #import "third_party/ocmock/OCMock/OCMock.h" |
| 24 #import "third_party/ocmock/ocmock_extensions.h" | 24 #import "third_party/ocmock/ocmock_extensions.h" |
| 25 #include "ui/base/clipboard/clipboard_util_mac.h" |
| 25 | 26 |
| 26 using bookmarks::BookmarkModel; | 27 using bookmarks::BookmarkModel; |
| 27 using bookmarks::BookmarkNode; | 28 using bookmarks::BookmarkNode; |
| 28 | 29 |
| 29 // Allows us to verify BookmarkBarFolderView. | 30 // Allows us to verify BookmarkBarFolderView. |
| 30 @interface BookmarkBarFolderView(TestingAPI) | 31 @interface BookmarkBarFolderView(TestingAPI) |
| 31 | 32 |
| 32 @property(readonly, nonatomic) BOOL dropIndicatorShown; | 33 @property(readonly, nonatomic) BOOL dropIndicatorShown; |
| 33 @property(readonly, nonatomic) CGFloat dropIndicatorPosition; | 34 @property(readonly, nonatomic) CGFloat dropIndicatorPosition; |
| 34 | 35 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 [view_ setController:mock_controller_]; | 74 [view_ setController:mock_controller_]; |
| 74 } | 75 } |
| 75 | 76 |
| 76 void TearDown() override { | 77 void TearDown() override { |
| 77 [mock_controller_ verify]; | 78 [mock_controller_ verify]; |
| 78 CocoaProfileTest::TearDown(); | 79 CocoaProfileTest::TearDown(); |
| 79 } | 80 } |
| 80 | 81 |
| 81 id GetFakePasteboardForType(NSString* dataType) { | 82 id GetFakePasteboardForType(NSString* dataType) { |
| 82 id pasteboard = [OCMockObject mockForClass:[NSPasteboard class]]; | 83 id pasteboard = [OCMockObject mockForClass:[NSPasteboard class]]; |
| 83 if ([dataType isEqualToString:kBookmarkButtonDragType]) { | 84 if ([dataType isEqualToString:ui::ClipboardUtil::UTIForPasteboardType( |
| 85 kBookmarkButtonDragType)]) { |
| 84 BookmarkButton* button = mock_button_.get(); | 86 BookmarkButton* button = mock_button_.get(); |
| 85 [[[pasteboard stub] | 87 [[[pasteboard stub] |
| 86 andReturn:[NSData dataWithBytes:&button length:sizeof(button)]] | 88 andReturn:[NSData dataWithBytes:&button length:sizeof(button)]] |
| 87 dataForType:dataType]; | 89 dataForType:dataType]; |
| 88 } else { | 90 } else { |
| 89 [[[pasteboard stub] andReturn:[NSData data]] dataForType:dataType]; | 91 [[[pasteboard stub] andReturn:[NSData data]] dataForType:dataType]; |
| 90 } | 92 } |
| 91 [[[pasteboard stub] andReturn:nil] dataForType:OCMOCK_ANY]; | 93 [[[pasteboard stub] andReturn:nil] dataForType:OCMOCK_ANY]; |
| 92 [[[pasteboard stub] andReturnBool:YES] containsURLData]; | 94 [[[pasteboard stub] andReturnBool:YES] containsURLData]; |
| 93 [[pasteboard stub] getURLs:[OCMArg setTo:nil] | 95 [[pasteboard stub] getURLs:[OCMArg setTo:nil] |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 [[[mock_button stub] andReturnValue:OCMOCK_VALUE(node)] bookmarkNode]; | 138 [[[mock_button stub] andReturnValue:OCMOCK_VALUE(node)] bookmarkNode]; |
| 137 return [mock_button retain]; | 139 return [mock_button retain]; |
| 138 } | 140 } |
| 139 | 141 |
| 140 base::scoped_nsobject<id> mock_controller_; | 142 base::scoped_nsobject<id> mock_controller_; |
| 141 base::scoped_nsobject<BookmarkBarFolderView> view_; | 143 base::scoped_nsobject<BookmarkBarFolderView> view_; |
| 142 base::scoped_nsobject<id> mock_button_; | 144 base::scoped_nsobject<id> mock_button_; |
| 143 }; | 145 }; |
| 144 | 146 |
| 145 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDrop) { | 147 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDrop) { |
| 146 id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType); | 148 id drag_info = GetFakeDragInfoForType( |
| 149 ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType)); |
| 147 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] | 150 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
| 148 draggingEntered:drag_info]; | 151 draggingEntered:drag_info]; |
| 149 [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; | 152 [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; |
| 150 [[[mock_controller_ expect] andReturnBool:YES] dragButton:OCMOCK_ANY | 153 [[[mock_controller_ expect] andReturnBool:YES] dragButton:OCMOCK_ANY |
| 151 to:kPoint | 154 to:kPoint |
| 152 copy:NO]; | 155 copy:NO]; |
| 153 | 156 |
| 154 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); | 157 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
| 155 EXPECT_TRUE([view_ performDragOperation:drag_info]); | 158 EXPECT_TRUE([view_ performDragOperation:drag_info]); |
| 156 } | 159 } |
| 157 | 160 |
| 158 // When dragging bookmarks across profiles, we should always copy, never move. | 161 // When dragging bookmarks across profiles, we should always copy, never move. |
| 159 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDropAcrossProfiles) { | 162 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDragAndDropAcrossProfiles) { |
| 160 // |other_profile| is owned by the |testing_profile_manager|. | 163 // |other_profile| is owned by the |testing_profile_manager|. |
| 161 TestingProfile* other_profile = | 164 TestingProfile* other_profile = |
| 162 testing_profile_manager()->CreateTestingProfile("other"); | 165 testing_profile_manager()->CreateTestingProfile("other"); |
| 163 other_profile->CreateBookmarkModel(true); | 166 other_profile->CreateBookmarkModel(true); |
| 164 bookmarks::test::WaitForBookmarkModelToLoad( | 167 bookmarks::test::WaitForBookmarkModelToLoad( |
| 165 BookmarkModelFactory::GetForProfile(other_profile)); | 168 BookmarkModelFactory::GetForProfile(other_profile)); |
| 166 | 169 |
| 167 mock_controller_.reset(GetMockController( | 170 mock_controller_.reset(GetMockController( |
| 168 YES, BookmarkModelFactory::GetForProfile(other_profile))); | 171 YES, BookmarkModelFactory::GetForProfile(other_profile))); |
| 169 [view_ setController:mock_controller_]; | 172 [view_ setController:mock_controller_]; |
| 170 | 173 |
| 171 id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType); | 174 id drag_info = GetFakeDragInfoForType( |
| 175 ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType)); |
| 172 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] | 176 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
| 173 draggingEntered:drag_info]; | 177 draggingEntered:drag_info]; |
| 174 [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; | 178 [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; |
| 175 [[[mock_controller_ expect] andReturnBool:YES] dragButton:OCMOCK_ANY | 179 [[[mock_controller_ expect] andReturnBool:YES] dragButton:OCMOCK_ANY |
| 176 to:kPoint | 180 to:kPoint |
| 177 copy:YES]; | 181 copy:YES]; |
| 178 | 182 |
| 179 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); | 183 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
| 180 EXPECT_TRUE([view_ performDragOperation:drag_info]); | 184 EXPECT_TRUE([view_ performDragOperation:drag_info]); |
| 181 } | 185 } |
| 182 | 186 |
| 183 TEST_F(BookmarkBarFolderViewTest, URLDragAndDrop) { | 187 TEST_F(BookmarkBarFolderViewTest, URLDragAndDrop) { |
| 184 NSArray* dragTypes = [URLDropTargetHandler handledDragTypes]; | 188 NSArray* dragTypes = [URLDropTargetHandler handledDragTypes]; |
| 185 for (NSString* type in dragTypes) { | 189 for (NSString* type in dragTypes) { |
| 186 id drag_info = GetFakeDragInfoForType(type); | 190 id drag_info = GetFakeDragInfoForType(type); |
| 187 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] | 191 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
| 188 draggingEntered:drag_info]; | 192 draggingEntered:drag_info]; |
| 189 [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; | 193 [[[mock_controller_ expect] andReturnBool:NO] dragBookmarkData:drag_info]; |
| 190 [[[mock_controller_ expect] andReturnBool:YES] addURLs:OCMOCK_ANY | 194 [[[mock_controller_ expect] andReturnBool:YES] addURLs:OCMOCK_ANY |
| 191 withTitles:OCMOCK_ANY | 195 withTitles:OCMOCK_ANY |
| 192 at:kPoint]; | 196 at:kPoint]; |
| 193 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); | 197 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
| 194 EXPECT_TRUE([view_ performDragOperation:drag_info]); | 198 EXPECT_TRUE([view_ performDragOperation:drag_info]); |
| 195 [mock_controller_ verify]; | 199 [mock_controller_ verify]; |
| 196 } | 200 } |
| 197 } | 201 } |
| 198 | 202 |
| 199 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDropIndicator) { | 203 TEST_F(BookmarkBarFolderViewTest, BookmarkButtonDropIndicator) { |
| 200 id drag_info = GetFakeDragInfoForType(kBookmarkButtonDragType); | 204 id drag_info = GetFakeDragInfoForType( |
| 205 ui::ClipboardUtil::UTIForPasteboardType(kBookmarkButtonDragType)); |
| 201 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] | 206 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
| 202 draggingEntered:drag_info]; | 207 draggingEntered:drag_info]; |
| 203 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); | 208 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
| 204 [mock_controller_ verify]; | 209 [mock_controller_ verify]; |
| 205 EXPECT_TRUE([view_ dropIndicatorShown]); | 210 EXPECT_TRUE([view_ dropIndicatorShown]); |
| 206 EXPECT_EQ([view_ dropIndicatorPosition], kFakeIndicatorPos); | 211 EXPECT_EQ([view_ dropIndicatorPosition], kFakeIndicatorPos); |
| 207 mock_controller_.reset(GetMockController( | 212 mock_controller_.reset(GetMockController( |
| 208 NO, BookmarkModelFactory::GetForProfile(profile()))); | 213 NO, BookmarkModelFactory::GetForProfile(profile()))); |
| 209 [view_ setController:mock_controller_]; | 214 [view_ setController:mock_controller_]; |
| 210 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] | 215 [[[mock_controller_ expect] andReturnUnsignedInteger:NSDragOperationNone] |
| 211 draggingEntered:drag_info]; | 216 draggingEntered:drag_info]; |
| 212 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); | 217 EXPECT_EQ([view_ draggingEntered:drag_info], NSDragOperationMove); |
| 213 EXPECT_FALSE([view_ dropIndicatorShown]); | 218 EXPECT_FALSE([view_ dropIndicatorShown]); |
| 214 } | 219 } |
| 215 | 220 |
| 216 } // namespace | 221 } // namespace |
| OLD | NEW |