Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Side by Side Diff: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm

Issue 8404022: Fix yet another crash with bookmarks drag&drop on Mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm ('k') | chrome/browser/ui/cocoa/bookmarks/bookmark_bar_view.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698