| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 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 | 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/scoped_nsobject.h" | 7 #include "base/scoped_nsobject.h" |
| 8 #import "chrome/browser/cocoa/autocomplete_text_field_cell.h" | 8 #import "chrome/browser/cocoa/autocomplete_text_field_cell.h" |
| 9 #import "chrome/browser/cocoa/cocoa_test_helper.h" | 9 #import "chrome/browser/cocoa/cocoa_test_helper.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 [cell setKeywordHintPrefix:@"prefix" image:image suffix:@"suffix" | 66 [cell setKeywordHintPrefix:@"prefix" image:image suffix:@"suffix" |
| 67 availableWidth:kWidth]; | 67 availableWidth:kWidth]; |
| 68 [view_ display]; | 68 [view_ display]; |
| 69 | 69 |
| 70 [cell setKeywordString:@"Search Engine:" | 70 [cell setKeywordString:@"Search Engine:" |
| 71 partialString:@"Search Eng:" | 71 partialString:@"Search Eng:" |
| 72 availableWidth:kWidth]; | 72 availableWidth:kWidth]; |
| 73 [view_ display]; | 73 [view_ display]; |
| 74 } | 74 } |
| 75 | 75 |
| 76 TEST_F(AutocompleteTextFieldCellTest, SearchHint) { | 76 // Verify that transitions between states clear other states. |
| 77 AutocompleteTextFieldCell* cell = | 77 TEST_F(AutocompleteTextFieldCellTest, StateTransitionsResetOthers) { |
| 78 static_cast<AutocompleteTextFieldCell*>([view_ cell]); | |
| 79 | |
| 80 // At default settings, everything is already good to go. | |
| 81 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 82 | |
| 83 // Setting a search hint will need a reset. | |
| 84 [cell setSearchHintString:@"Type to search" availableWidth:kWidth]; | |
| 85 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 86 [cell setFieldEditorNeedsReset:NO]; | |
| 87 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 88 | |
| 89 // Changing the search hint needs a reset. | |
| 90 [cell setSearchHintString:@"Type to find" availableWidth:kWidth]; | |
| 91 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 92 [cell setFieldEditorNeedsReset:NO]; | |
| 93 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 94 | |
| 95 // Changing to an identical string doesn't need a reset. | |
| 96 [cell setSearchHintString:@"Type to find" availableWidth:kWidth]; | |
| 97 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 98 } | |
| 99 | |
| 100 TEST_F(AutocompleteTextFieldCellTest, KeywordHint) { | |
| 101 AutocompleteTextFieldCell* cell = | 78 AutocompleteTextFieldCell* cell = |
| 102 static_cast<AutocompleteTextFieldCell*>([view_ cell]); | 79 static_cast<AutocompleteTextFieldCell*>([view_ cell]); |
| 103 NSImage* image = [NSImage imageNamed:@"NSApplicationIcon"]; | 80 NSImage* image = [NSImage imageNamed:@"NSApplicationIcon"]; |
| 104 | 81 |
| 105 // At default settings, everything is already good to go. | 82 // Setting hint leaves keyword empty. |
| 106 EXPECT_FALSE([cell fieldEditorNeedsReset]); | 83 [cell setSearchHintString:@"Type to search" availableWidth:kWidth]; |
| 84 EXPECT_TRUE([cell hintString]); |
| 85 EXPECT_FALSE([cell keywordString]); |
| 107 | 86 |
| 108 // Setting a keyword hint will need a reset. | 87 // Setting keyword clears hint. |
| 109 [cell setKeywordHintPrefix:@"Press " image:image suffix:@" to search Engine" | |
| 110 availableWidth:kWidth]; | |
| 111 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 112 [cell setFieldEditorNeedsReset:NO]; | |
| 113 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 114 | |
| 115 // Changing the keyword hint needs a reset. | |
| 116 [cell setKeywordHintPrefix:@"Type " image:image suffix:@" to search Engine" | |
| 117 availableWidth:kWidth]; | |
| 118 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 119 [cell setFieldEditorNeedsReset:NO]; | |
| 120 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 121 | |
| 122 // Changing to identical strings doesn't need a reset. | |
| 123 [cell setKeywordHintPrefix:@"Type " image:image suffix:@" to search Engine" | |
| 124 availableWidth:kWidth]; | |
| 125 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 126 } | |
| 127 | |
| 128 TEST_F(AutocompleteTextFieldCellTest, KeywordString) { | |
| 129 AutocompleteTextFieldCell* cell = | |
| 130 static_cast<AutocompleteTextFieldCell*>([view_ cell]); | |
| 131 | |
| 132 // At default settings, everything is already good to go. | |
| 133 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 134 | |
| 135 // Setting a keyword string will need a reset. | |
| 136 [cell setKeywordString:@"Search Engine:" | 88 [cell setKeywordString:@"Search Engine:" |
| 137 partialString:@"Search Eng:" | 89 partialString:@"Search Eng:" |
| 138 availableWidth:kWidth]; | 90 availableWidth:kWidth]; |
| 139 EXPECT_TRUE([cell fieldEditorNeedsReset]); | 91 EXPECT_FALSE([cell hintString]); |
| 140 [cell setFieldEditorNeedsReset:NO]; | 92 EXPECT_TRUE([cell keywordString]); |
| 141 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 142 | 93 |
| 143 // Changing the keyword string needs a reset. | 94 // Setting hint clears keyword. |
| 144 [cell setKeywordString:@"Search on Engine:" | |
| 145 partialString:@"Search Eng:" | |
| 146 availableWidth:kWidth]; | |
| 147 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 148 [cell setFieldEditorNeedsReset:NO]; | |
| 149 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 150 | |
| 151 // Changing to an identical string doesn't need a reset. | |
| 152 [cell setKeywordString:@"Search on Engine:" | |
| 153 partialString:@"Search Eng:" | |
| 154 availableWidth:kWidth]; | |
| 155 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 156 } | |
| 157 | |
| 158 TEST_F(AutocompleteTextFieldCellTest, SecurityIcon) { | |
| 159 AutocompleteTextFieldCell* cell = | |
| 160 static_cast<AutocompleteTextFieldCell*>([view_ cell]); | |
| 161 | |
| 162 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 163 | |
| 164 NSImage* image1 = [NSImage imageNamed:@"NSApplicationIcon"]; | |
| 165 // Setting a security icon will need a reset. | |
| 166 [cell setHintIcon:image1 label:nil color:nil]; | |
| 167 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 168 [cell setFieldEditorNeedsReset:NO]; | |
| 169 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 170 | |
| 171 // Changing the security icon needs a reset. | |
| 172 NSImage* image2 = [NSImage imageNamed:@"NSComputer"]; | |
| 173 [cell setHintIcon:image2 label:nil color:nil]; | |
| 174 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 175 [cell setFieldEditorNeedsReset:NO]; | |
| 176 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 177 | |
| 178 // Changing to an identical security icon doesn't need a reset. | |
| 179 [cell setHintIcon:image2 label:nil color:nil]; | |
| 180 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 181 | |
| 182 // Adding a label without changing the icon needs a reset. | |
| 183 NSColor *color = [NSColor blackColor]; | |
| 184 [cell setHintIcon:image2 label:@"New Label" color:color]; | |
| 185 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 186 | |
| 187 // Removing the label without changing the icon needs a reset. | |
| 188 [cell setHintIcon:image2 label:nil color:nil]; | |
| 189 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 190 } | |
| 191 | |
| 192 TEST_F(AutocompleteTextFieldCellTest, SecurityIconLabel) { | |
| 193 AutocompleteTextFieldCell* cell = | |
| 194 static_cast<AutocompleteTextFieldCell*>([view_ cell]); | |
| 195 NSColor *color = [NSColor blackColor]; | |
| 196 | |
| 197 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 198 | |
| 199 NSImage* image = [NSImage imageNamed:@"NSApplicationIcon"]; | |
| 200 // Setting a security icon will need a reset. | |
| 201 [cell setHintIcon:image label:@"Hello, world" color:color]; | |
| 202 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 203 [cell setFieldEditorNeedsReset:NO]; | |
| 204 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 205 | |
| 206 // Changing the label needs a reset. | |
| 207 [cell setHintIcon:image label:@"Hello, you" color:color]; | |
| 208 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 209 [cell setFieldEditorNeedsReset:NO]; | |
| 210 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 211 | |
| 212 // Changing to an identical label doesn't need a reset | |
| 213 [cell setHintIcon:image label:@"Hello, you" color:color]; | |
| 214 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 215 } | |
| 216 | |
| 217 // Test that transitions between various modes set the reset flag. | |
| 218 TEST_F(AutocompleteTextFieldCellTest, Transitions) { | |
| 219 AutocompleteTextFieldCell* cell = | |
| 220 static_cast<AutocompleteTextFieldCell*>([view_ cell]); | |
| 221 NSImage* image = [NSImage imageNamed:@"NSApplicationIcon"]; | |
| 222 | |
| 223 // Transitions from hint to keyword string, keyword hint, and | |
| 224 // cleared. | |
| 225 [cell setSearchHintString:@"Type to search" availableWidth:kWidth]; | |
| 226 [cell setFieldEditorNeedsReset:NO]; | |
| 227 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 228 [cell setKeywordString:@"Search Engine:" | |
| 229 partialString:@"Search Eng:" | |
| 230 availableWidth:kWidth]; | |
| 231 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 232 | |
| 233 [cell setSearchHintString:@"Type to search" availableWidth:kWidth]; | |
| 234 [cell setFieldEditorNeedsReset:NO]; | |
| 235 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 236 [cell setKeywordHintPrefix:@"Press " image:image suffix:@" to search Engine" | 95 [cell setKeywordHintPrefix:@"Press " image:image suffix:@" to search Engine" |
| 237 availableWidth:kWidth]; | 96 availableWidth:kWidth]; |
| 238 EXPECT_TRUE([cell fieldEditorNeedsReset]); | 97 EXPECT_TRUE([cell hintString]); |
| 98 EXPECT_FALSE([cell keywordString]); |
| 239 | 99 |
| 100 // Clear clears keyword. |
| 101 [cell clearKeywordAndHint]; |
| 102 EXPECT_FALSE([cell hintString]); |
| 103 EXPECT_FALSE([cell keywordString]); |
| 104 |
| 105 // Clear clears hint. |
| 240 [cell setSearchHintString:@"Type to search" availableWidth:kWidth]; | 106 [cell setSearchHintString:@"Type to search" availableWidth:kWidth]; |
| 241 [cell setFieldEditorNeedsReset:NO]; | 107 EXPECT_TRUE([cell hintString]); |
| 242 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 243 [cell clearKeywordAndHint]; | 108 [cell clearKeywordAndHint]; |
| 244 EXPECT_TRUE([cell fieldEditorNeedsReset]); | 109 EXPECT_FALSE([cell hintString]); |
| 245 | 110 EXPECT_FALSE([cell keywordString]); |
| 246 // Transitions from keyword hint to keyword string, simple hint, and | |
| 247 // cleared. | |
| 248 [cell setKeywordHintPrefix:@"Press " image:image suffix:@" to search Engine" | |
| 249 availableWidth:kWidth]; | |
| 250 [cell setFieldEditorNeedsReset:NO]; | |
| 251 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 252 [cell setSearchHintString:@"Type to search" availableWidth:kWidth]; | |
| 253 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 254 | |
| 255 [cell setKeywordHintPrefix:@"Press " image:image suffix:@" to search Engine" | |
| 256 availableWidth:kWidth]; | |
| 257 [cell setFieldEditorNeedsReset:NO]; | |
| 258 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 259 [cell setKeywordString:@"Search Engine:" | |
| 260 partialString:@"Search Eng:" | |
| 261 availableWidth:kWidth]; | |
| 262 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 263 | |
| 264 [cell setKeywordHintPrefix:@"Press " image:image suffix:@" to search Engine" | |
| 265 availableWidth:kWidth]; | |
| 266 [cell setFieldEditorNeedsReset:NO]; | |
| 267 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 268 [cell clearKeywordAndHint]; | |
| 269 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 270 | |
| 271 // Transitions from keyword string to either type of hint, or | |
| 272 // cleared. | |
| 273 [cell setKeywordString:@"Search on Engine:" | |
| 274 partialString:@"Search Eng:" | |
| 275 availableWidth:kWidth]; | |
| 276 [cell setFieldEditorNeedsReset:NO]; | |
| 277 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 278 [cell setSearchHintString:@"Type to search" availableWidth:kWidth]; | |
| 279 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 280 | |
| 281 [cell setKeywordString:@"Search on Engine:" | |
| 282 partialString:@"Search Eng:" | |
| 283 availableWidth:kWidth]; | |
| 284 [cell setFieldEditorNeedsReset:NO]; | |
| 285 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 286 [cell setKeywordHintPrefix:@"Press " image:image suffix:@" to search Engine" | |
| 287 availableWidth:kWidth]; | |
| 288 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 289 | |
| 290 [cell setKeywordString:@"Search on Engine:" | |
| 291 partialString:@"Search Eng:" | |
| 292 availableWidth:kWidth]; | |
| 293 [cell setFieldEditorNeedsReset:NO]; | |
| 294 EXPECT_FALSE([cell fieldEditorNeedsReset]); | |
| 295 [cell clearKeywordAndHint]; | |
| 296 EXPECT_TRUE([cell fieldEditorNeedsReset]); | |
| 297 } | 111 } |
| 298 | 112 |
| 299 TEST_F(AutocompleteTextFieldCellTest, TextFrame) { | 113 TEST_F(AutocompleteTextFieldCellTest, TextFrame) { |
| 300 AutocompleteTextFieldCell* cell = | 114 AutocompleteTextFieldCell* cell = |
| 301 static_cast<AutocompleteTextFieldCell*>([view_ cell]); | 115 static_cast<AutocompleteTextFieldCell*>([view_ cell]); |
| 302 const NSRect bounds([view_ bounds]); | 116 const NSRect bounds([view_ bounds]); |
| 303 NSRect textFrame; | 117 NSRect textFrame; |
| 304 | 118 |
| 305 // The cursor frame should stay the same throughout. | 119 // The cursor frame should stay the same throughout. |
| 306 const NSRect cursorFrame([cell textCursorFrameForFrame:bounds]); | 120 const NSRect cursorFrame([cell textCursorFrameForFrame:bounds]); |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 EXPECT_TRUE([[[cell hintString] string] hasPrefix:kHintPrefix]); | 344 EXPECT_TRUE([[[cell hintString] string] hasPrefix:kHintPrefix]); |
| 531 EXPECT_TRUE([[[cell hintString] string] hasSuffix:kHintSuffix]); | 345 EXPECT_TRUE([[[cell hintString] string] hasSuffix:kHintSuffix]); |
| 532 | 346 |
| 533 // Narrow width suppresses everything but the image. | 347 // Narrow width suppresses everything but the image. |
| 534 [cell setKeywordHintPrefix:kHintPrefix image:image suffix:kHintSuffix | 348 [cell setKeywordHintPrefix:kHintPrefix image:image suffix:kHintSuffix |
| 535 availableWidth:kNarrowWidth]; | 349 availableWidth:kNarrowWidth]; |
| 536 EXPECT_EQ([[cell hintString] length], 1U); | 350 EXPECT_EQ([[cell hintString] length], 1U); |
| 537 } | 351 } |
| 538 | 352 |
| 539 } // namespace | 353 } // namespace |
| OLD | NEW |