summaryrefslogtreecommitdiff
path: root/chromium/ui/base/cocoa/controls/hyperlink_button_cell_unittest.mm
blob: 3d24f01fa908eff4ccdf35f3523ed89f1de8848f (plain)
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
// Copyright 2013 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 "ui/base/cocoa/controls/hyperlink_button_cell.h"

#import <Cocoa/Cocoa.h>

#include "base/mac/foundation_util.h"
#include "base/mac/scoped_nsobject.h"
#import "testing/gtest_mac.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
#import "ui/base/test/ui_cocoa_test_helper.h"

namespace ui {

namespace {

class HyperlinkButtonCellTest : public CocoaTest {
 public:
  HyperlinkButtonCellTest() {
    NSRect frame = NSMakeRect(0, 0, 50, 30);
    base::scoped_nsobject<NSButton> view(
        [[NSButton alloc] initWithFrame:frame]);
    view_ = view.get();
    base::scoped_nsobject<HyperlinkButtonCell> cell(
        [[HyperlinkButtonCell alloc] initTextCell:@"Testing"]);
    cell_ = cell.get();
    [view_ setCell:cell_];
    [[test_window() contentView] addSubview:view_];
  }

  void TestCellCustomization(HyperlinkButtonCell* cell) {
    EXPECT_FALSE([cell isBordered]);
    EXPECT_EQ(NSNoCellMask, [cell_ highlightsBy]);
    EXPECT_TRUE([cell showsBorderOnlyWhileMouseInside]);
    EXPECT_TRUE([cell textColor]);
  }

 protected:
  bool HasUnderlineAttribute(NSDictionary* attributes) {
    NSNumber* number = base::mac::ObjCCastStrict<NSNumber>(
        [attributes objectForKey:NSUnderlineStyleAttributeName]);
    return [number unsignedIntegerValue] != 0;
  }

  NSButton* view_;
  HyperlinkButtonCell* cell_;
};

TEST_VIEW(HyperlinkButtonCellTest, view_)

// Tests the three designated intializers.
TEST_F(HyperlinkButtonCellTest, Initializers) {
  TestCellCustomization(cell_);  // |-initTextFrame:|
  base::scoped_nsobject<HyperlinkButtonCell> cell(
      [[HyperlinkButtonCell alloc] init]);
  TestCellCustomization(cell.get());

  // Need to create a dummy archiver to test |-initWithCoder:|.
  NSData* emptyData = [NSKeyedArchiver archivedDataWithRootObject:@""];
  NSCoder* coder =
    [[[NSKeyedUnarchiver alloc] initForReadingWithData:emptyData] autorelease];
  cell.reset([[HyperlinkButtonCell alloc] initWithCoder:coder]);
  TestCellCustomization(cell);
}

// Test set color.
TEST_F(HyperlinkButtonCellTest, SetTextColor) {
  NSColor* textColor = [NSColor redColor];
  EXPECT_NE(textColor, [cell_ textColor]);
  [cell_ setTextColor:textColor];
  EXPECT_EQ(textColor, [cell_ textColor]);
}

// Test mouse events.
// TODO(rsesek): See if we can synthesize mouse events to more accurately
// test this.
TEST_F(HyperlinkButtonCellTest, MouseHover) {
  [[NSCursor disappearingItemCursor] push];  // Set a known state.
  [cell_ mouseEntered:nil];
  EXPECT_EQ([NSCursor pointingHandCursor], [NSCursor currentCursor]);
  [cell_ mouseExited:nil];
  EXPECT_EQ([NSCursor disappearingItemCursor], [NSCursor currentCursor]);
  [NSCursor pop];
}

// Test mouse events when button is disabled. {
TEST_F(HyperlinkButtonCellTest, MouseHoverWhenDisabled) {
  [cell_ setEnabled:NO];

  [[NSCursor disappearingItemCursor] push];  // Set a known state.
  [cell_ mouseEntered:nil];
  EXPECT_EQ([NSCursor disappearingItemCursor], [NSCursor currentCursor]);

  [cell_ mouseExited:nil];
  EXPECT_EQ([NSCursor disappearingItemCursor], [NSCursor currentCursor]);
  [NSCursor pop];
  [NSCursor pop];
}

// Test underline on hover.
TEST_F(HyperlinkButtonCellTest, UnderlineOnHover) {
  EXPECT_TRUE(HasUnderlineAttribute([cell_ linkAttributes]));
  [cell_ mouseEntered:nil];
  EXPECT_TRUE(HasUnderlineAttribute([cell_ linkAttributes]));
  [cell_ mouseExited:nil];
  EXPECT_TRUE(HasUnderlineAttribute([cell_ linkAttributes]));

  [cell_ setUnderlineOnHover:YES];
  EXPECT_FALSE(HasUnderlineAttribute([cell_ linkAttributes]));
  [cell_ mouseEntered:nil];
  EXPECT_TRUE(HasUnderlineAttribute([cell_ linkAttributes]));
  [cell_ mouseExited:nil];
  EXPECT_FALSE(HasUnderlineAttribute([cell_ linkAttributes]));
}

TEST_F(HyperlinkButtonCellTest, Copy) {
  base::scoped_nsobject<HyperlinkButtonCell> cell1([[HyperlinkButtonCell alloc]
      initTextCell:@"Cell"]);
  [cell1 setTextColor:[NSColor redColor]];

  base::scoped_nsobject<HyperlinkButtonCell> cell2([cell1 copy]);
  EXPECT_NSEQ([cell1 textColor], [cell2 textColor]);
  [cell1 setTextColor:[NSColor purpleColor]];
  [cell2 setTextColor:[NSColor greenColor]];
}

}  // namespace

}  // namespace ui