Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(457)

Side by Side Diff: chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell_unittest.mm

Issue 2576563002: [Mac] Reverse the omnibox in RTL (Closed)
Patch Set: Review comments Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 6
7 #include "base/mac/scoped_nsobject.h" 7 #include "base/mac/scoped_nsobject.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field.h" 9 #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field.h"
10 #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell.h" 10 #import "chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_cell.h"
11 #import "chrome/browser/ui/cocoa/location_bar/keyword_hint_decoration.h" 11 #import "chrome/browser/ui/cocoa/location_bar/keyword_hint_decoration.h"
12 #import "chrome/browser/ui/cocoa/location_bar/location_bar_decoration.h" 12 #import "chrome/browser/ui/cocoa/location_bar/location_bar_decoration.h"
13 #import "chrome/browser/ui/cocoa/location_bar/location_icon_decoration.h" 13 #import "chrome/browser/ui/cocoa/location_bar/location_icon_decoration.h"
14 #import "chrome/browser/ui/cocoa/location_bar/security_state_bubble_decoration.h " 14 #import "chrome/browser/ui/cocoa/location_bar/security_state_bubble_decoration.h "
15 #import "chrome/browser/ui/cocoa/location_bar/selected_keyword_decoration.h" 15 #import "chrome/browser/ui/cocoa/location_bar/selected_keyword_decoration.h"
16 #import "chrome/browser/ui/cocoa/location_bar/star_decoration.h" 16 #import "chrome/browser/ui/cocoa/location_bar/star_decoration.h"
17 #import "chrome/browser/ui/cocoa/test/cocoa_test_helper.h" 17 #import "chrome/browser/ui/cocoa/test/cocoa_test_helper.h"
18 #import "chrome/browser/ui/cocoa/test/scoped_force_rtl_mac.h"
18 #include "testing/gmock/include/gmock/gmock.h" 19 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
20 #import "testing/gtest_mac.h" 21 #import "testing/gtest_mac.h"
21 #include "testing/platform_test.h" 22 #include "testing/platform_test.h"
22 #import "third_party/ocmock/OCMock/OCMock.h" 23 #import "third_party/ocmock/OCMock/OCMock.h"
23 #include "third_party/ocmock/gtest_support.h" 24 #include "third_party/ocmock/gtest_support.h"
24 #include "ui/base/material_design/material_design_controller.h" 25 #include "ui/base/material_design/material_design_controller.h"
25 26
26 using ::testing::Return; 27 using ::testing::Return;
27 using ::testing::StrictMock; 28 using ::testing::StrictMock;
(...skipping 23 matching lines...) Expand all
51 base::scoped_nsobject<NSTextField> view( 52 base::scoped_nsobject<NSTextField> view(
52 [[NSTextField alloc] initWithFrame:frame]); 53 [[NSTextField alloc] initWithFrame:frame]);
53 view_ = view.get(); 54 view_ = view.get();
54 55
55 base::scoped_nsobject<AutocompleteTextFieldCell> cell( 56 base::scoped_nsobject<AutocompleteTextFieldCell> cell(
56 [[AutocompleteTextFieldCell alloc] initTextCell:@"Testing"]); 57 [[AutocompleteTextFieldCell alloc] initTextCell:@"Testing"]);
57 [cell setEditable:YES]; 58 [cell setEditable:YES];
58 [cell setBordered:YES]; 59 [cell setBordered:YES];
59 60
60 [cell clearDecorations]; 61 [cell clearDecorations];
61 mock_left_decoration_.SetVisible(false); 62 mock_leading_decoration_.SetVisible(false);
62 [cell addLeftDecoration:&mock_left_decoration_]; 63 [cell addLeadingDecoration:&mock_leading_decoration_];
63 mock_right_decoration0_.SetVisible(false); 64 mock_trailing_decoration0_.SetVisible(false);
64 mock_right_decoration1_.SetVisible(false); 65 mock_trailing_decoration1_.SetVisible(false);
65 [cell addRightDecoration:&mock_right_decoration0_]; 66 [cell addTrailingDecoration:&mock_trailing_decoration0_];
66 [cell addRightDecoration:&mock_right_decoration1_]; 67 [cell addTrailingDecoration:&mock_trailing_decoration1_];
67 68
68 [view_ setCell:cell.get()]; 69 [view_ setCell:cell.get()];
69 70
70 [[test_window() contentView] addSubview:view_]; 71 [[test_window() contentView] addSubview:view_];
71 } 72 }
72 73
73 NSTextField* view_; 74 NSTextField* view_;
74 MockDecoration mock_left_decoration_; 75 MockDecoration mock_leading_decoration_;
75 MockDecoration mock_right_decoration0_; 76 MockDecoration mock_trailing_decoration0_;
76 MockDecoration mock_right_decoration1_; 77 MockDecoration mock_trailing_decoration1_;
77 }; 78 };
78 79
79 // Basic view tests (AddRemove, Display). 80 // Basic view tests (AddRemove, Display).
80 TEST_VIEW(AutocompleteTextFieldCellTest, view_); 81 TEST_VIEW(AutocompleteTextFieldCellTest, view_);
81 82
82 // Test drawing, mostly to ensure nothing leaks or crashes. 83 // Test drawing, mostly to ensure nothing leaks or crashes.
83 // Flaky, disabled. Bug http://crbug.com/49522 84 // Flaky, disabled. Bug http://crbug.com/49522
84 TEST_F(AutocompleteTextFieldCellTest, DISABLED_FocusedDisplay) { 85 TEST_F(AutocompleteTextFieldCellTest, DISABLED_FocusedDisplay) {
85 [view_ display]; 86 [view_ display];
86 87
87 // Test focused drawing. 88 // Test focused drawing.
88 [test_window() makePretendKeyWindowAndSetFirstResponder:view_]; 89 [test_window() makePretendKeyWindowAndSetFirstResponder:view_];
89 [view_ display]; 90 [view_ display];
90 [test_window() clearPretendKeyWindowAndFirstResponder]; 91 [test_window() clearPretendKeyWindowAndFirstResponder];
91 92
92 // Test display of various cell configurations. 93 // Test display of various cell configurations.
93 AutocompleteTextFieldCell* cell = 94 AutocompleteTextFieldCell* cell =
94 static_cast<AutocompleteTextFieldCell*>([view_ cell]); 95 static_cast<AutocompleteTextFieldCell*>([view_ cell]);
95 96
96 // Load available decorations and try drawing. To make sure that 97 // Load available decorations and try drawing. To make sure that
97 // they are actually drawn, check that |GetWidthForSpace()| doesn't 98 // they are actually drawn, check that |GetWidthForSpace()| doesn't
98 // indicate that they should be omitted. 99 // indicate that they should be omitted.
99 const CGFloat kVeryWide = 1000.0; 100 const CGFloat kVeryWide = 1000.0;
100 101
101 SelectedKeywordDecoration selected_keyword_decoration; 102 SelectedKeywordDecoration selected_keyword_decoration;
102 selected_keyword_decoration.SetVisible(true); 103 selected_keyword_decoration.SetVisible(true);
103 selected_keyword_decoration.SetKeyword(base::ASCIIToUTF16("Google"), false); 104 selected_keyword_decoration.SetKeyword(base::ASCIIToUTF16("Google"), false);
104 [cell addLeftDecoration:&selected_keyword_decoration]; 105 [cell addLeadingDecoration:&selected_keyword_decoration];
105 EXPECT_NE(selected_keyword_decoration.GetWidthForSpace(kVeryWide), 106 EXPECT_NE(selected_keyword_decoration.GetWidthForSpace(kVeryWide),
106 LocationBarDecoration::kOmittedWidth); 107 LocationBarDecoration::kOmittedWidth);
107 108
108 // TODO(shess): This really wants a |LocationBarViewMac|, but only a 109 // TODO(shess): This really wants a |LocationBarViewMac|, but only a
109 // few methods reference it, so this works well enough. But 110 // few methods reference it, so this works well enough. But
110 // something better would be nice. 111 // something better would be nice.
111 LocationIconDecoration location_icon_decoration(NULL); 112 LocationIconDecoration location_icon_decoration(NULL);
112 location_icon_decoration.SetVisible(true); 113 location_icon_decoration.SetVisible(true);
113 location_icon_decoration.SetImage([NSImage imageNamed:@"NSApplicationIcon"]); 114 location_icon_decoration.SetImage([NSImage imageNamed:@"NSApplicationIcon"]);
114 [cell addLeftDecoration:&location_icon_decoration]; 115 [cell addLeadingDecoration:&location_icon_decoration];
115 EXPECT_NE(location_icon_decoration.GetWidthForSpace(kVeryWide), 116 EXPECT_NE(location_icon_decoration.GetWidthForSpace(kVeryWide),
116 LocationBarDecoration::kOmittedWidth); 117 LocationBarDecoration::kOmittedWidth);
117 118
118 SecurityStateBubbleDecoration security_state_bubble_decoration( 119 SecurityStateBubbleDecoration security_state_bubble_decoration(
119 &location_icon_decoration, nullptr); 120 &location_icon_decoration, nullptr);
120 security_state_bubble_decoration.SetVisible(true); 121 security_state_bubble_decoration.SetVisible(true);
121 security_state_bubble_decoration.SetImage( 122 security_state_bubble_decoration.SetImage(
122 [NSImage imageNamed:@"NSApplicationIcon"]); 123 [NSImage imageNamed:@"NSApplicationIcon"]);
123 security_state_bubble_decoration.SetLabel(@"Application"); 124 security_state_bubble_decoration.SetLabel(@"Application");
124 [cell addLeftDecoration:&security_state_bubble_decoration]; 125 [cell addLeadingDecoration:&security_state_bubble_decoration];
125 EXPECT_NE(security_state_bubble_decoration.GetWidthForSpace(kVeryWide), 126 EXPECT_NE(security_state_bubble_decoration.GetWidthForSpace(kVeryWide),
126 LocationBarDecoration::kOmittedWidth); 127 LocationBarDecoration::kOmittedWidth);
127 128
128 StarDecoration star_decoration(NULL); 129 StarDecoration star_decoration(NULL);
129 star_decoration.SetVisible(true); 130 star_decoration.SetVisible(true);
130 [cell addRightDecoration:&star_decoration]; 131 [cell addTrailingDecoration:&star_decoration];
131 EXPECT_NE(star_decoration.GetWidthForSpace(kVeryWide), 132 EXPECT_NE(star_decoration.GetWidthForSpace(kVeryWide),
132 LocationBarDecoration::kOmittedWidth); 133 LocationBarDecoration::kOmittedWidth);
133 134
134 KeywordHintDecoration keyword_hint_decoration; 135 KeywordHintDecoration keyword_hint_decoration;
135 keyword_hint_decoration.SetVisible(true); 136 keyword_hint_decoration.SetVisible(true);
136 keyword_hint_decoration.SetKeyword(base::ASCIIToUTF16("google"), false); 137 keyword_hint_decoration.SetKeyword(base::ASCIIToUTF16("google"), false);
137 [cell addRightDecoration:&keyword_hint_decoration]; 138 [cell addTrailingDecoration:&keyword_hint_decoration];
138 EXPECT_NE(keyword_hint_decoration.GetWidthForSpace(kVeryWide), 139 EXPECT_NE(keyword_hint_decoration.GetWidthForSpace(kVeryWide),
139 LocationBarDecoration::kOmittedWidth); 140 LocationBarDecoration::kOmittedWidth);
140 141
141 // Make sure we're actually calling |DrawInFrame()|. 142 // Make sure we're actually calling |DrawInFrame()|.
142 StrictMock<MockDecoration> mock_decoration; 143 StrictMock<MockDecoration> mock_decoration;
143 mock_decoration.SetVisible(true); 144 mock_decoration.SetVisible(true);
144 [cell addLeftDecoration:&mock_decoration]; 145 [cell addLeadingDecoration:&mock_decoration];
145 EXPECT_CALL(mock_decoration, DrawInFrame(_, _)); 146 EXPECT_CALL(mock_decoration, DrawInFrame(_, _));
146 EXPECT_NE(mock_decoration.GetWidthForSpace(kVeryWide), 147 EXPECT_NE(mock_decoration.GetWidthForSpace(kVeryWide),
147 LocationBarDecoration::kOmittedWidth); 148 LocationBarDecoration::kOmittedWidth);
148 149
149 [view_ display]; 150 [view_ display];
150 151
151 [cell clearDecorations]; 152 [cell clearDecorations];
152 } 153 }
153 154
154 TEST_F(AutocompleteTextFieldCellTest, TextFrame) { 155 TEST_F(AutocompleteTextFieldCellTest, TextFrame) {
155 AutocompleteTextFieldCell* cell = 156 AutocompleteTextFieldCell* cell =
156 static_cast<AutocompleteTextFieldCell*>([view_ cell]); 157 static_cast<AutocompleteTextFieldCell*>([view_ cell]);
157 const NSRect bounds([view_ bounds]); 158 const NSRect bounds([view_ bounds]);
158 NSRect textFrame; 159 NSRect textFrame;
159 160
160 // The cursor frame should stay the same throughout. 161 // The cursor frame should stay the same throughout.
161 const NSRect cursorFrame([cell textCursorFrameForFrame:bounds]); 162 const NSRect cursorFrame([cell textCursorFrameForFrame:bounds]);
162 EXPECT_NSEQ(cursorFrame, bounds); 163 EXPECT_NSEQ(cursorFrame, bounds);
163 164
164 // At default settings, everything goes to the text area. 165 // At default settings, everything goes to the text area.
165 textFrame = [cell textFrameForFrame:bounds]; 166 textFrame = [cell textFrameForFrame:bounds];
166 EXPECT_FALSE(NSIsEmptyRect(textFrame)); 167 EXPECT_FALSE(NSIsEmptyRect(textFrame));
167 EXPECT_TRUE(NSContainsRect(bounds, textFrame)); 168 EXPECT_TRUE(NSContainsRect(bounds, textFrame));
168 EXPECT_EQ(1, NSMinX(textFrame)); 169 EXPECT_EQ(1, NSMinX(textFrame));
169 EXPECT_EQ(NSMaxX(bounds), NSMaxX(textFrame)); 170 EXPECT_EQ(NSMaxX(bounds), NSMaxX(textFrame));
170 EXPECT_TRUE(NSContainsRect(cursorFrame, textFrame)); 171 EXPECT_TRUE(NSContainsRect(cursorFrame, textFrame));
171 172
172 // Decoration on the left takes up space. 173 // Leading decoration takes up space.
173 mock_left_decoration_.SetVisible(true); 174 mock_leading_decoration_.SetVisible(true);
174 textFrame = [cell textFrameForFrame:bounds]; 175 textFrame = [cell textFrameForFrame:bounds];
175 EXPECT_FALSE(NSIsEmptyRect(textFrame)); 176 EXPECT_FALSE(NSIsEmptyRect(textFrame));
176 EXPECT_TRUE(NSContainsRect(bounds, textFrame)); 177 EXPECT_TRUE(NSContainsRect(bounds, textFrame));
177 EXPECT_GT(NSMinX(textFrame), NSMinX(bounds)); 178 EXPECT_GT(NSMinX(textFrame), NSMinX(bounds));
178 EXPECT_TRUE(NSContainsRect(cursorFrame, textFrame)); 179 EXPECT_TRUE(NSContainsRect(cursorFrame, textFrame));
179 } 180 }
180 181
181 // The editor frame should be slightly inset from the text frame. 182 // The editor frame should be slightly inset from the text frame.
182 TEST_F(AutocompleteTextFieldCellTest, DrawingRectForBounds) { 183 TEST_F(AutocompleteTextFieldCellTest, DrawingRectForBounds) {
183 AutocompleteTextFieldCell* cell = 184 AutocompleteTextFieldCell* cell =
184 static_cast<AutocompleteTextFieldCell*>([view_ cell]); 185 static_cast<AutocompleteTextFieldCell*>([view_ cell]);
185 const NSRect bounds([view_ bounds]); 186 const NSRect bounds([view_ bounds]);
186 NSRect textFrame, drawingRect; 187 NSRect textFrame, drawingRect;
187 188
188 textFrame = [cell textFrameForFrame:bounds]; 189 textFrame = [cell textFrameForFrame:bounds];
189 drawingRect = [cell drawingRectForBounds:bounds]; 190 drawingRect = [cell drawingRectForBounds:bounds];
190 EXPECT_FALSE(NSIsEmptyRect(drawingRect)); 191 EXPECT_FALSE(NSIsEmptyRect(drawingRect));
191 EXPECT_TRUE(NSContainsRect(textFrame, NSInsetRect(drawingRect, 1, 1))); 192 EXPECT_TRUE(NSContainsRect(textFrame, NSInsetRect(drawingRect, 1, 1)));
192 193
193 // Save the starting frame for after clear. 194 // Save the starting frame for after clear.
194 const NSRect originalDrawingRect = drawingRect; 195 const NSRect originalDrawingRect = drawingRect;
195 196
196 mock_left_decoration_.SetVisible(true); 197 mock_leading_decoration_.SetVisible(true);
197 textFrame = [cell textFrameForFrame:bounds]; 198 textFrame = [cell textFrameForFrame:bounds];
198 drawingRect = [cell drawingRectForBounds:bounds]; 199 drawingRect = [cell drawingRectForBounds:bounds];
199 EXPECT_FALSE(NSIsEmptyRect(drawingRect)); 200 EXPECT_FALSE(NSIsEmptyRect(drawingRect));
200 EXPECT_TRUE(NSContainsRect(NSInsetRect(textFrame, 1, 1), drawingRect)); 201 EXPECT_TRUE(NSContainsRect(NSInsetRect(textFrame, 1, 1), drawingRect));
201 202
202 mock_right_decoration0_.SetVisible(true); 203 mock_trailing_decoration0_.SetVisible(true);
203 textFrame = [cell textFrameForFrame:bounds]; 204 textFrame = [cell textFrameForFrame:bounds];
204 drawingRect = [cell drawingRectForBounds:bounds]; 205 drawingRect = [cell drawingRectForBounds:bounds];
205 EXPECT_FALSE(NSIsEmptyRect(drawingRect)); 206 EXPECT_FALSE(NSIsEmptyRect(drawingRect));
206 EXPECT_TRUE(NSContainsRect(NSInsetRect(textFrame, 1, 1), drawingRect)); 207 EXPECT_TRUE(NSContainsRect(NSInsetRect(textFrame, 1, 1), drawingRect));
207 208
208 mock_left_decoration_.SetVisible(false); 209 mock_leading_decoration_.SetVisible(false);
209 mock_right_decoration0_.SetVisible(false); 210 mock_trailing_decoration0_.SetVisible(false);
210 drawingRect = [cell drawingRectForBounds:bounds]; 211 drawingRect = [cell drawingRectForBounds:bounds];
211 EXPECT_FALSE(NSIsEmptyRect(drawingRect)); 212 EXPECT_FALSE(NSIsEmptyRect(drawingRect));
212 EXPECT_NSEQ(drawingRect, originalDrawingRect); 213 EXPECT_NSEQ(drawingRect, originalDrawingRect);
213 } 214 }
214 215
215 // Test that left decorations are at the correct edge of the cell. 216 // Test that leading decorations are at the correct edge of the cell.
216 TEST_F(AutocompleteTextFieldCellTest, LeftDecorationFrame) { 217 TEST_F(AutocompleteTextFieldCellTest, LeadingDecorationFrame) {
217 AutocompleteTextFieldCell* cell = 218 AutocompleteTextFieldCell* cell =
218 static_cast<AutocompleteTextFieldCell*>([view_ cell]); 219 static_cast<AutocompleteTextFieldCell*>([view_ cell]);
219 const NSRect bounds = [view_ bounds]; 220 const NSRect bounds = [view_ bounds];
220 221
221 mock_left_decoration_.SetVisible(true); 222 mock_leading_decoration_.SetVisible(true);
222 const NSRect decorationRect = 223 const NSRect decorationRect =
223 [cell frameForDecoration:&mock_left_decoration_ inFrame:bounds]; 224 [cell frameForDecoration:&mock_leading_decoration_ inFrame:bounds];
224 EXPECT_FALSE(NSIsEmptyRect(decorationRect)); 225 EXPECT_FALSE(NSIsEmptyRect(decorationRect));
225 EXPECT_TRUE(NSContainsRect(bounds, decorationRect)); 226 EXPECT_TRUE(NSContainsRect(bounds, decorationRect));
226 227
227 // Decoration should be left of |drawingRect|. 228 // Decoration should be left of |drawingRect|.
228 const NSRect drawingRect = [cell drawingRectForBounds:bounds]; 229 const NSRect drawingRect = [cell drawingRectForBounds:bounds];
229 EXPECT_GT(NSMinX(drawingRect), NSMinX(decorationRect)); 230 EXPECT_GT(NSMinX(drawingRect), NSMinX(decorationRect));
230 231
231 // Decoration should be left of |textFrame|. 232 // Decoration should be left of |textFrame|.
232 const NSRect textFrame = [cell textFrameForFrame:bounds]; 233 const NSRect textFrame = [cell textFrameForFrame:bounds];
233 EXPECT_GT(NSMinX(textFrame), NSMinX(decorationRect)); 234 EXPECT_GT(NSMinX(textFrame), NSMinX(decorationRect));
234 } 235 }
235 236
236 // Test that right decorations are at the correct edge of the cell. 237 // Test that trailing decorations are at the correct edge of the cell.
237 TEST_F(AutocompleteTextFieldCellTest, RightDecorationFrame) { 238 TEST_F(AutocompleteTextFieldCellTest, TrailingDecorationFrame) {
238 AutocompleteTextFieldCell* cell = 239 AutocompleteTextFieldCell* cell =
239 static_cast<AutocompleteTextFieldCell*>([view_ cell]); 240 static_cast<AutocompleteTextFieldCell*>([view_ cell]);
240 const NSRect bounds = [view_ bounds]; 241 const NSRect bounds = [view_ bounds];
241 242
242 mock_right_decoration0_.SetVisible(true); 243 mock_trailing_decoration0_.SetVisible(true);
243 mock_right_decoration1_.SetVisible(true); 244 mock_trailing_decoration1_.SetVisible(true);
244 245
245 const NSRect decoration0Rect = 246 const NSRect decoration0Rect =
246 [cell frameForDecoration:&mock_right_decoration0_ inFrame:bounds]; 247 [cell frameForDecoration:&mock_trailing_decoration0_ inFrame:bounds];
247 EXPECT_FALSE(NSIsEmptyRect(decoration0Rect)); 248 EXPECT_FALSE(NSIsEmptyRect(decoration0Rect));
248 EXPECT_TRUE(NSContainsRect(bounds, decoration0Rect)); 249 EXPECT_TRUE(NSContainsRect(bounds, decoration0Rect));
249 250
250 // Right-side decorations are ordered from rightmost to leftmost. 251 // Trailing decorations are ordered from innermost to outermost.
251 // Outer decoration (0) to right of inner decoration (1). 252 // Outer decoration (0) to right of inner decoration (1).
252 const NSRect decoration1Rect = 253 const NSRect decoration1Rect =
253 [cell frameForDecoration:&mock_right_decoration1_ inFrame:bounds]; 254 [cell frameForDecoration:&mock_trailing_decoration1_ inFrame:bounds];
254 EXPECT_FALSE(NSIsEmptyRect(decoration1Rect)); 255 EXPECT_FALSE(NSIsEmptyRect(decoration1Rect));
255 EXPECT_TRUE(NSContainsRect(bounds, decoration1Rect)); 256 EXPECT_TRUE(NSContainsRect(bounds, decoration1Rect));
256 EXPECT_LT(NSMinX(decoration1Rect), NSMinX(decoration0Rect)); 257 EXPECT_LT(NSMinX(decoration1Rect), NSMinX(decoration0Rect));
257 258
258 // Decoration should be right of |drawingRect|. 259 // Decoration should be right of |drawingRect|.
259 const NSRect drawingRect = [cell drawingRectForBounds:bounds]; 260 const NSRect drawingRect = [cell drawingRectForBounds:bounds];
260 EXPECT_LT(NSMinX(drawingRect), NSMinX(decoration1Rect)); 261 EXPECT_LT(NSMinX(drawingRect), NSMinX(decoration1Rect));
261 262
262 // Decoration should be right of |textFrame|. 263 // Decoration should be right of |textFrame|.
263 const NSRect textFrame = [cell textFrameForFrame:bounds]; 264 const NSRect textFrame = [cell textFrameForFrame:bounds];
264 EXPECT_LT(NSMinX(textFrame), NSMinX(decoration1Rect)); 265 EXPECT_LT(NSMinX(textFrame), NSMinX(decoration1Rect));
265 } 266 }
266 267
267 // Verify -[AutocompleteTextFieldCell 268 // Verify -[AutocompleteTextFieldCell
268 // updateMouseTrackingAndToolTipsInRect:ofView:]. 269 // updateMouseTrackingAndToolTipsInRect:ofView:].
269 TEST_F(AutocompleteTextFieldCellTest, UpdateToolTips) { 270 TEST_F(AutocompleteTextFieldCellTest, UpdateToolTips) {
270 NSString* tooltip = @"tooltip"; 271 NSString* tooltip = @"tooltip";
271 272
272 // Left decoration returns a tooltip, make sure it is called at 273 // Leading decoration returns a tooltip, make sure it is called at
273 // least once. 274 // least once.
274 mock_left_decoration_.SetVisible(true); 275 mock_leading_decoration_.SetVisible(true);
275 EXPECT_CALL(mock_left_decoration_, GetToolTip()) 276 EXPECT_CALL(mock_leading_decoration_, GetToolTip())
276 .WillOnce(Return(tooltip)) 277 .WillOnce(Return(tooltip))
277 .WillRepeatedly(Return(tooltip)); 278 .WillRepeatedly(Return(tooltip));
278 279
279 // Right decoration returns no tooltip, make sure it is called at 280 // Right decoration returns no tooltip, make sure it is called at
280 // least once. 281 // least once.
281 mock_right_decoration0_.SetVisible(true); 282 mock_trailing_decoration0_.SetVisible(true);
282 EXPECT_CALL(mock_right_decoration0_, GetToolTip()) 283 EXPECT_CALL(mock_trailing_decoration0_, GetToolTip())
283 .WillOnce(Return((NSString*)nil)) 284 .WillOnce(Return((NSString*)nil))
284 .WillRepeatedly(Return((NSString*)nil)); 285 .WillRepeatedly(Return((NSString*)nil));
285 286
286 AutocompleteTextFieldCell* cell = 287 AutocompleteTextFieldCell* cell =
287 static_cast<AutocompleteTextFieldCell*>([view_ cell]); 288 static_cast<AutocompleteTextFieldCell*>([view_ cell]);
288 const NSRect bounds = [view_ bounds]; 289 const NSRect bounds = [view_ bounds];
289 const NSRect leftDecorationRect = 290 const NSRect leadingDecorationRect =
290 [cell frameForDecoration:&mock_left_decoration_ inFrame:bounds]; 291 [cell frameForDecoration:&mock_leading_decoration_ inFrame:bounds];
291 292
292 // |controlView| gets the tooltip for the left decoration. 293 // |controlView| gets the tooltip for the leading decoration.
293 id controlView = [OCMockObject mockForClass:[AutocompleteTextField class]]; 294 id controlView = [OCMockObject mockForClass:[AutocompleteTextField class]];
294 [[controlView expect] addToolTip:tooltip forRect:leftDecorationRect]; 295 [[controlView expect] addToolTip:tooltip forRect:leadingDecorationRect];
295 296
296 [cell updateMouseTrackingAndToolTipsInRect:bounds ofView:controlView]; 297 [cell updateMouseTrackingAndToolTipsInRect:bounds ofView:controlView];
297 298
298 EXPECT_OCMOCK_VERIFY(controlView); 299 EXPECT_OCMOCK_VERIFY(controlView);
299 } 300 }
300 301
302 class AutocompleteTextFieldCellTestRTL : public AutocompleteTextFieldCellTest {
303 private:
304 cocoa_l10n_util::ScopedForceRTLMac rtl_;
305 };
306
307 // Test that leading decorations are at the correct edge of the cell.
308 TEST_F(AutocompleteTextFieldCellTestRTL, LeadingDecorationFrame) {
309 AutocompleteTextFieldCell* cell =
310 static_cast<AutocompleteTextFieldCell*>([view_ cell]);
311 const NSRect bounds = [view_ bounds];
312
313 mock_leading_decoration_.SetVisible(true);
314 const NSRect decorationRect =
315 [cell frameForDecoration:&mock_leading_decoration_ inFrame:bounds];
316 EXPECT_FALSE(NSIsEmptyRect(decorationRect));
317 EXPECT_TRUE(NSContainsRect(bounds, decorationRect));
318 // Decoration should be right of |drawingRect|.
319 const NSRect drawingRect = [cell drawingRectForBounds:bounds];
320 EXPECT_LT(NSMinX(drawingRect), NSMinX(decorationRect));
321
322 // Decoration should be right of |textFrame|.
323 const NSRect textFrame = [cell textFrameForFrame:bounds];
324 EXPECT_LT(NSMinX(textFrame), NSMinX(decorationRect));
325 }
326
327 // Test that trailing decorations are at the correct edge of the cell.
328 TEST_F(AutocompleteTextFieldCellTestRTL, TrailingDecorationFrame) {
329 AutocompleteTextFieldCell* cell =
330 static_cast<AutocompleteTextFieldCell*>([view_ cell]);
331 const NSRect bounds = [view_ bounds];
332
333 mock_trailing_decoration0_.SetVisible(true);
334 mock_trailing_decoration1_.SetVisible(true);
335
336 const NSRect decoration0Rect =
337 [cell frameForDecoration:&mock_trailing_decoration0_ inFrame:bounds];
338 EXPECT_FALSE(NSIsEmptyRect(decoration0Rect));
339 EXPECT_TRUE(NSContainsRect(bounds, decoration0Rect));
340
341 // Trailing decorations are ordered from front to back..
342 // Outer decoration (0) to the left of inner decoration (1).
343 const NSRect decoration1Rect =
344 [cell frameForDecoration:&mock_trailing_decoration1_ inFrame:bounds];
345 EXPECT_FALSE(NSIsEmptyRect(decoration1Rect));
346 EXPECT_TRUE(NSContainsRect(bounds, decoration1Rect));
347 EXPECT_GT(NSMinX(decoration1Rect), NSMinX(decoration0Rect));
348
349 // Decoration should be left of |drawingRect|.
350 const NSRect drawingRect = [cell drawingRectForBounds:bounds];
351 EXPECT_GT(NSMinX(drawingRect), NSMinX(decoration1Rect));
352
353 // Decoration should be left of |textFrame|.
354 const NSRect textFrame = [cell textFrameForFrame:bounds];
355 EXPECT_GT(NSMinX(textFrame), NSMinX(decoration1Rect));
356 }
357
301 } // namespace 358 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698