OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/mac/scoped_nsobject.h" | |
6 #import "chrome/browser/ui/cocoa/cocoa_test_helper.h" | |
7 #import "chrome/browser/ui/cocoa/hyperlink_text_view.h" | |
8 #include "testing/gtest_mac.h" | |
9 | |
10 namespace { | |
11 | |
12 class HyperlinkTextViewTest : public CocoaTest { | |
13 public: | |
14 HyperlinkTextViewTest() { | |
15 NSRect frame = NSMakeRect(0, 0, 50, 50); | |
16 base::scoped_nsobject<HyperlinkTextView> view( | |
17 [[HyperlinkTextView alloc] initWithFrame:frame]); | |
18 view_ = view.get(); | |
19 [[test_window() contentView] addSubview:view_]; | |
20 } | |
21 | |
22 NSFont* GetDefaultFont() { | |
23 return [NSFont labelFontOfSize: | |
24 [NSFont systemFontSizeForControlSize:NSRegularControlSize]]; | |
25 } | |
26 | |
27 NSDictionary* GetDefaultTextAttributes() { | |
28 const float kTextBaselineShift = -1.0; | |
29 return @{ | |
30 NSForegroundColorAttributeName : [NSColor blackColor], | |
31 NSCursorAttributeName : [NSCursor arrowCursor], | |
32 NSFontAttributeName : GetDefaultFont(), | |
33 NSBaselineOffsetAttributeName : @(kTextBaselineShift) | |
34 }; | |
35 } | |
36 | |
37 NSMutableDictionary* GetDefaultLinkAttributes() { | |
38 if (!linkAttributes_.get()) { | |
39 linkAttributes_.reset( | |
40 [[NSMutableDictionary dictionaryWithDictionary: | |
41 GetDefaultTextAttributes()] retain]); | |
42 [linkAttributes_ addEntriesFromDictionary:@{ | |
43 NSForegroundColorAttributeName : [NSColor blueColor], | |
44 NSUnderlineStyleAttributeName : @(YES), | |
45 NSCursorAttributeName : [NSCursor pointingHandCursor], | |
46 NSUnderlineStyleAttributeName : @(NSSingleUnderlineStyle), | |
47 NSLinkAttributeName : @""}]; | |
48 } | |
49 return [NSMutableDictionary dictionaryWithDictionary:linkAttributes_]; | |
50 } | |
51 | |
52 HyperlinkTextView* view_; | |
53 | |
54 private: | |
55 base::scoped_nsobject<NSMutableDictionary> linkAttributes_; | |
56 }; | |
57 | |
58 TEST_VIEW(HyperlinkTextViewTest, view_); | |
59 | |
60 TEST_F(HyperlinkTextViewTest, TestViewConfiguration) { | |
61 EXPECT_FALSE([view_ isEditable]); | |
62 EXPECT_FALSE([view_ drawsBackground]); | |
63 EXPECT_FALSE([view_ isHorizontallyResizable]); | |
64 EXPECT_FALSE([view_ isVerticallyResizable]); | |
65 } | |
66 | |
67 TEST_F(HyperlinkTextViewTest, LinkInsertion) { | |
68 // Test that setMessage:withLink:... inserts the link text. | |
69 [view_ setMessageAndLink:@"This is a short text message" | |
70 withLink:@"alarmingly " | |
71 atOffset:10 | |
72 font:GetDefaultFont() | |
73 messageColor:[NSColor blackColor] | |
74 linkColor:[NSColor blueColor]]; | |
75 EXPECT_NSEQ(@"This is a alarmingly short text message", | |
76 [[view_ textStorage] string]); | |
77 | |
78 // Test insertion at end - most common use case. | |
79 NSString* message=@"This is another test message "; | |
80 [view_ setMessageAndLink:message | |
81 withLink:@"with link" | |
82 atOffset:[message length] | |
83 font:GetDefaultFont() | |
84 messageColor:[NSColor blackColor] | |
85 linkColor:[NSColor blueColor]]; | |
86 EXPECT_NSEQ(@"This is another test message with link", | |
87 [[view_ textStorage] string]); | |
88 } | |
89 | |
90 TEST_F(HyperlinkTextViewTest, AttributesForMessageWithLink) { | |
91 // Verifies text attributes are set as expected for setMessageWithLink:... | |
92 [view_ setMessageAndLink:@"aaabbbbb" | |
93 withLink:@"xxxx" | |
94 atOffset:3 | |
95 font:GetDefaultFont() | |
96 messageColor:[NSColor blackColor] | |
97 linkColor:[NSColor blueColor]]; | |
98 | |
99 NSDictionary* attributes; | |
100 NSRange rangeLimit = NSMakeRange(0, 12); | |
101 NSRange range; | |
102 attributes = [[view_ textStorage] attributesAtIndex:0 | |
103 longestEffectiveRange:&range | |
104 inRange:rangeLimit]; | |
105 EXPECT_EQ(0U, range.location); | |
106 EXPECT_EQ(3U, range.length); | |
107 EXPECT_NSEQ(GetDefaultTextAttributes(), attributes); | |
108 | |
109 attributes = [[view_ textStorage] attributesAtIndex:3 | |
110 longestEffectiveRange:&range | |
111 inRange:rangeLimit]; | |
112 EXPECT_EQ(3U, range.location); | |
113 EXPECT_EQ(4U, range.length); | |
114 EXPECT_NSEQ(GetDefaultLinkAttributes(), attributes); | |
115 | |
116 attributes = [[view_ textStorage] attributesAtIndex:7 | |
117 longestEffectiveRange:&range | |
118 inRange:rangeLimit]; | |
119 EXPECT_EQ(7U, range.location); | |
120 EXPECT_EQ(5U, range.length); | |
121 EXPECT_NSEQ(GetDefaultTextAttributes(), attributes); | |
122 | |
123 } | |
124 | |
125 TEST_F(HyperlinkTextViewTest, TestSetMessage) { | |
126 // Verifies setMessage sets text and attributes properly. | |
127 NSString* message = @"Test message"; | |
128 [view_ setMessage:message | |
129 withFont:GetDefaultFont() | |
130 messageColor:[NSColor blackColor]]; | |
131 EXPECT_NSEQ(@"Test message", [[view_ textStorage] string]); | |
132 | |
133 NSDictionary* attributes; | |
134 NSRange rangeLimit = NSMakeRange(0, [message length]); | |
135 NSRange range; | |
136 attributes = [[view_ textStorage] attributesAtIndex:0 | |
137 longestEffectiveRange:&range | |
138 inRange:rangeLimit]; | |
139 EXPECT_EQ(0U, range.location); | |
140 EXPECT_EQ([message length], range.length); | |
141 EXPECT_NSEQ(GetDefaultTextAttributes(), attributes); | |
142 } | |
143 | |
144 TEST_F(HyperlinkTextViewTest, TestAddLinkRange) { | |
145 NSString* message = @"One Two Three Four"; | |
146 [view_ setMessage:message | |
147 withFont:GetDefaultFont() | |
148 messageColor:[NSColor blackColor]]; | |
149 | |
150 NSColor* blue = [NSColor blueColor]; | |
151 [view_ addLinkRange:NSMakeRange(4,3) withName:@"Name:Two" linkColor:blue]; | |
152 [view_ addLinkRange:NSMakeRange(14,4) withName:@"Name:Four" linkColor:blue]; | |
153 | |
154 NSDictionary* attributes; | |
155 NSRange rangeLimit = NSMakeRange(0, [message length]); | |
156 NSRange range; | |
157 attributes = [[view_ textStorage] attributesAtIndex:0 | |
158 longestEffectiveRange:&range | |
159 inRange:rangeLimit]; | |
160 EXPECT_EQ(0U, range.location); | |
161 EXPECT_EQ(4U, range.length); | |
162 EXPECT_NSEQ(GetDefaultTextAttributes(), attributes); | |
163 | |
164 NSMutableDictionary* linkAttributes = GetDefaultLinkAttributes(); | |
165 [linkAttributes setObject:@"Name:Two" forKey:NSLinkAttributeName]; | |
166 attributes = [[view_ textStorage] attributesAtIndex:4 | |
167 longestEffectiveRange:&range | |
168 inRange:rangeLimit]; | |
169 EXPECT_EQ(4U, range.location); | |
170 EXPECT_EQ(3U, range.length); | |
171 EXPECT_NSEQ(linkAttributes, attributes); | |
172 | |
173 attributes = [[view_ textStorage] attributesAtIndex:7 | |
174 longestEffectiveRange:&range | |
175 inRange:rangeLimit]; | |
176 EXPECT_EQ(7U, range.location); | |
177 EXPECT_EQ(7U, range.length); | |
178 EXPECT_NSEQ(GetDefaultTextAttributes(), attributes); | |
179 | |
180 [linkAttributes setObject:@"Name:Four" forKey:NSLinkAttributeName]; | |
181 attributes = [[view_ textStorage] attributesAtIndex:14 | |
182 longestEffectiveRange:&range | |
183 inRange:rangeLimit]; | |
184 EXPECT_EQ(14U, range.location); | |
185 EXPECT_EQ(4U, range.length); | |
186 EXPECT_NSEQ(linkAttributes, attributes); | |
187 } | |
188 | |
189 TEST_F(HyperlinkTextViewTest, FirstResponderBehavior) { | |
190 // By default, accept. | |
191 EXPECT_TRUE([view_ acceptsFirstResponder]); | |
192 | |
193 [view_ setRefusesFirstResponder:YES]; | |
194 EXPECT_FALSE([view_ acceptsFirstResponder]); | |
195 } | |
196 | |
197 } // namespace | |
OLD | NEW |