1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
// 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/scoped_nsobject.h"
#import "chrome/browser/cocoa/bookmark_bar_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"
// Pretend BookmarkURLOpener delegate to keep track of requests
@interface BookmarkURLOpenerPong : NSObject<BookmarkURLOpener> {
@public
GURL url_;
WindowOpenDisposition disposition_;
}
@end
@implementation BookmarkURLOpenerPong
- (void)openBookmarkURL:(const GURL&)url
disposition:(WindowOpenDisposition)disposition {
url_ = url;
disposition_ = disposition;
}
@end
namespace {
static const int kContentAreaHeight = 500;
class BookmarkBarControllerTest : public testing::Test {
public:
BookmarkBarControllerTest() {
NSRect content_frame = NSMakeRect(0, 0, 800, kContentAreaHeight);
NSRect parent_frame = NSMakeRect(0, 0, 800, 50);
content_area_.reset([[NSView alloc] initWithFrame:content_frame]);
parent_view_.reset([[NSView alloc] initWithFrame:parent_frame]);
[parent_view_ setHidden:YES];
bar_.reset(
[[BookmarkBarController alloc] initWithProfile:helper_.profile()
parentView:parent_view_.get()
webContentView:content_area_.get()
delegate:nil]);
[bar_ view]; // force loading of the nib
}
CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc...
scoped_nsobject<NSView> content_area_;
scoped_nsobject<NSView> parent_view_;
BrowserTestHelper helper_;
scoped_nsobject<BookmarkBarController> bar_;
};
TEST_F(BookmarkBarControllerTest, ShowHide) {
// Assume hidden by default in a new profile.
EXPECT_FALSE([bar_ isBookmarkBarVisible]);
EXPECT_TRUE([[bar_ view] isHidden]);
// Awkwardness to look like we've been installed.
[parent_view_ addSubview:[bar_ view]];
NSRect frame = [[[bar_ view] superview] frame];
frame.origin.y = 100;
[[[bar_ view] superview] setFrame:frame];
// Show and hide it by toggling.
[bar_ toggleBookmarkBar];
EXPECT_TRUE([bar_ isBookmarkBarVisible]);
EXPECT_FALSE([[bar_ view] isHidden]);
NSRect content_frame = [content_area_ frame];
EXPECT_NE(content_frame.size.height, kContentAreaHeight);
EXPECT_GT([[bar_ view] frame].size.height, 0);
[bar_ toggleBookmarkBar];
EXPECT_FALSE([bar_ isBookmarkBarVisible]);
EXPECT_TRUE([[bar_ view] isHidden]);
content_frame = [content_area_ frame];
EXPECT_EQ(content_frame.size.height, kContentAreaHeight);
EXPECT_EQ([[bar_ view] frame].size.height, 0);
}
// Confirm openBookmark: forwards the request to the controller's delegate
TEST_F(BookmarkBarControllerTest, OpenBookmark) {
GURL gurl("http://walla.walla.ding.dong.com");
scoped_ptr<BookmarkNode> node(new BookmarkNode(gurl));
scoped_nsobject<BookmarkURLOpenerPong> pong([[BookmarkURLOpenerPong alloc]
init]);
[bar_ setDelegate:pong.get()];
scoped_nsobject<NSButtonCell> cell([[NSButtonCell alloc] init]);
scoped_nsobject<NSButton> button([[NSButton alloc] init]);
[button setCell:cell.get()];
[cell setRepresentedObject:[NSValue valueWithPointer:node.get()]];
[bar_ openBookmark:button];
EXPECT_EQ(pong.get()->url_, node->GetURL());
EXPECT_EQ(pong.get()->disposition_, CURRENT_TAB);
[bar_ setDelegate:nil];
}
// Confirm opening of bookmarks works from the menus (different
// dispositions than clicking on the button).
TEST_F(BookmarkBarControllerTest, OpenBookmarkFromMenus) {
scoped_nsobject<BookmarkURLOpenerPong> pong([[BookmarkURLOpenerPong alloc]
init]);
[bar_ setDelegate:pong.get()];
scoped_nsobject<NSMenu> menu([[NSMenu alloc] initWithTitle:@"I_dont_care"]);
scoped_nsobject<NSMenuItem> item([[NSMenuItem alloc]
initWithTitle:@"still_dont_care"
action:NULL
keyEquivalent:@""]);
scoped_nsobject<NSButtonCell> cell([[NSButtonCell alloc] init]);
[item setMenu:menu.get()];
[menu setDelegate:cell];
const char* urls[] = { "http://walla.walla.ding.dong.com",
"http://i_dont_know.com",
"http://cee.enn.enn.dot.com" };
SEL selectors[] = { @selector(openBookmarkInNewForegroundTab:),
@selector(openBookmarkInNewWindow:),
@selector(openBookmarkInIncognitoWindow:) };
WindowOpenDisposition dispositions[] = { NEW_FOREGROUND_TAB,
NEW_WINDOW,
OFF_THE_RECORD };
for (unsigned int i = 0;
i < sizeof(dispositions)/sizeof(dispositions[0]);
i++) {
scoped_ptr<BookmarkNode> node(new BookmarkNode(GURL(urls[i])));
[cell setRepresentedObject:[NSValue valueWithPointer:node.get()]];
[bar_ performSelector:selectors[i] withObject:item.get()];
EXPECT_EQ(pong.get()->url_, node->GetURL());
EXPECT_EQ(pong.get()->disposition_, dispositions[i]);
[cell setRepresentedObject:nil];
}
}
// TODO(jrg): Make sure showing the bookmark bar calls loaded: (to
// process bookmarks)
TEST_F(BookmarkBarControllerTest, ShowAndLoad) {
}
// TODO(jrg): Make sure adding 1 bookmark adds 1 subview, and removing
// 1 removes 1 subview. (We can't test for a simple Clear since there
// will soon be views in here which aren't bookmarks.)
TEST_F(BookmarkBarControllerTest, ViewChanges) {
}
// TODO(jrg): Make sure loaded: does something useful
TEST_F(BookmarkBarControllerTest, Loaded) {
// Clear; make sure no views
// Call loaded:
// Make sure subviews
}
// TODO(jrg): Test cellForBookmarkNode:
TEST_F(BookmarkBarControllerTest, Cell) {
}
// TODO(jrg): Test frameForBookmarkAtIndex
TEST_F(BookmarkBarControllerTest, FrameAtIndex) {
}
TEST_F(BookmarkBarControllerTest, Contents) {
// TODO(jrg): addNodesToBar has a LOT of TODOs; when flushed out, write
// appropriate tests.
}
// Test drawing, mostly to ensure nothing leaks or crashes.
TEST_F(BookmarkBarControllerTest, Display) {
[[bar_ view] display];
}
} // namespace
|