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
|
// 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.
#include "base/scoped_nsobject.h"
#import "chrome/browser/cocoa/bookmark_button_cell.h"
#import "chrome/browser/cocoa/bookmark_menu.h"
#include "chrome/browser/cocoa/browser_test_helper.h"
#import "chrome/browser/cocoa/cocoa_test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
// Simple class to remember how many mouseEntered: and mouseExited:
// calls it gets. Only used by BookmarkMouseForwarding but placed
// at the top of the file to keep it outside the anon namespace.
@interface ButtonRemembersMouseEnterExit : NSButton {
@public
int enters_;
int exits_;
}
@end
@implementation ButtonRemembersMouseEnterExit
- (void)mouseEntered:(NSEvent*)event {
enters_++;
}
- (void)mouseExited:(NSEvent*)event {
exits_++;
}
@end
namespace {
class BookmarkButtonCellTest : public CocoaTest {
};
// Make sure it's not totally bogus
TEST_F(BookmarkButtonCellTest, SizeForBounds) {
NSRect frame = NSMakeRect(0, 0, 50, 30);
scoped_nsobject<NSButton> view([[NSButton alloc] initWithFrame:frame]);
scoped_nsobject<BookmarkButtonCell> cell(
[[BookmarkButtonCell alloc] initTextCell:@"Testing"]);
[view setCell:cell.get()];
[[test_window() contentView] addSubview:view];
NSRect r = NSMakeRect(0, 0, 100, 100);
NSSize size = [cell.get() cellSizeForBounds:r];
EXPECT_TRUE(size.width > 0 && size.height > 0);
EXPECT_TRUE(size.width < 200 && size.height < 200);
}
// Make sure the default from the base class is overridden.
TEST_F(BookmarkButtonCellTest, MouseEnterStuff) {
scoped_nsobject<BookmarkButtonCell> cell(
[[BookmarkButtonCell alloc] initTextCell:@"Testing"]);
[cell setMenu:[[[BookmarkMenu alloc] initWithTitle:@"foo"] autorelease]];
EXPECT_TRUE([cell.get() showsBorderOnlyWhileMouseInside]);
EXPECT_TRUE([cell menu]);
[cell setEmpty:YES];
EXPECT_FALSE([cell.get() showsBorderOnlyWhileMouseInside]);
EXPECT_FALSE([cell menu]);
}
TEST_F(BookmarkButtonCellTest, BookmarkNode) {
BrowserTestHelper helper_;
BookmarkModel& model(*(helper_.profile()->GetBookmarkModel()));
scoped_nsobject<BookmarkButtonCell> cell(
[[BookmarkButtonCell alloc] initTextCell:@"Testing"]);
const BookmarkNode* node = model.GetBookmarkBarNode();
[cell setBookmarkNode:node];
EXPECT_EQ(node, [cell bookmarkNode]);
node = model.other_node();
[cell setBookmarkNode:node];
EXPECT_EQ(node, [cell bookmarkNode]);
}
TEST_F(BookmarkButtonCellTest, BookmarkMouseForwarding) {
scoped_nsobject<BookmarkButtonCell> cell(
[[BookmarkButtonCell alloc] initTextCell:@"Testing"]);
scoped_nsobject<ButtonRemembersMouseEnterExit>
button([[ButtonRemembersMouseEnterExit alloc]
initWithFrame:NSMakeRect(0,0,50,50)]);
[button setCell:cell.get()];
EXPECT_EQ(0, button.get()->enters_);
EXPECT_EQ(0, button.get()->exits_);
NSEvent* event = [NSEvent mouseEventWithType:NSMouseMoved
location:NSMakePoint(10,10)
modifierFlags:0
timestamp:0
windowNumber:0
context:nil
eventNumber:0
clickCount:0
pressure:0];
[cell mouseEntered:event];
EXPECT_TRUE(button.get()->enters_ && !button.get()->exits_);
for (int i = 0; i < 3; i++)
[cell mouseExited:event];
EXPECT_EQ(button.get()->enters_, 1);
EXPECT_EQ(button.get()->exits_, 3);
}
} // namespace
|