hyperlink_button_cell_unittest.mm revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#import <Cocoa/Cocoa.h>
6
7#include "base/scoped_nsobject.h"
8#import "chrome/browser/ui/cocoa/hyperlink_button_cell.h"
9#import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
10#include "testing/gtest/include/gtest/gtest.h"
11#include "testing/platform_test.h"
12
13namespace {
14
15class HyperlinkButtonCellTest : public CocoaTest {
16 public:
17  HyperlinkButtonCellTest() {
18    NSRect frame = NSMakeRect(0, 0, 50, 30);
19    scoped_nsobject<NSButton> view([[NSButton alloc] initWithFrame:frame]);
20    view_ = view.get();
21    scoped_nsobject<HyperlinkButtonCell> cell(
22        [[HyperlinkButtonCell alloc] initTextCell:@"Testing"]);
23    cell_ = cell.get();
24    [view_ setCell:cell_];
25    [[test_window() contentView] addSubview:view_];
26  }
27
28  void TestCellCustomization(HyperlinkButtonCell* cell) {
29    EXPECT_FALSE([cell isBordered]);
30    EXPECT_EQ(NSNoCellMask, [cell_ highlightsBy]);
31    EXPECT_TRUE([cell showsBorderOnlyWhileMouseInside]);
32    EXPECT_TRUE([cell textColor]);
33  }
34
35  NSButton* view_;
36  HyperlinkButtonCell* cell_;
37};
38
39TEST_VIEW(HyperlinkButtonCellTest, view_)
40
41// Tests the three designated intializers.
42TEST_F(HyperlinkButtonCellTest, Initializers) {
43  TestCellCustomization(cell_);  // |-initTextFrame:|
44  scoped_nsobject<HyperlinkButtonCell> cell([[HyperlinkButtonCell alloc] init]);
45  TestCellCustomization(cell.get());
46
47  // Need to create a dummy archiver to test |-initWithCoder:|.
48  NSData* emptyData = [NSKeyedArchiver archivedDataWithRootObject:@""];
49  NSCoder* coder =
50    [[[NSKeyedUnarchiver alloc] initForReadingWithData:emptyData] autorelease];
51  cell.reset([[HyperlinkButtonCell alloc] initWithCoder:coder]);
52  TestCellCustomization(cell);
53}
54
55// Test set color.
56TEST_F(HyperlinkButtonCellTest, SetTextColor) {
57  NSColor* textColor = [NSColor redColor];
58  EXPECT_NE(textColor, [cell_ textColor]);
59  [cell_ setTextColor:textColor];
60  EXPECT_EQ(textColor, [cell_ textColor]);
61}
62
63// Test mouse events.
64// TODO(rsesek): See if we can synthesize mouse events to more accurately
65// test this.
66TEST_F(HyperlinkButtonCellTest, MouseHover) {
67  [[NSCursor disappearingItemCursor] push];  // Set a known state.
68  [cell_ mouseEntered:nil];
69  EXPECT_EQ([NSCursor pointingHandCursor], [NSCursor currentCursor]);
70  [cell_ mouseExited:nil];
71  EXPECT_EQ([NSCursor disappearingItemCursor], [NSCursor currentCursor]);
72  [NSCursor pop];
73}
74
75}  // namespace
76