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

Unified Diff: chrome/browser/cocoa/autocomplete_text_field_unittest.mm

Issue 219003: [Mac] Rewrite Omnibox field-editor frame-changing tests. (Closed)
Patch Set: Created 11 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/cocoa/autocomplete_text_field_unittest.mm
diff --git a/chrome/browser/cocoa/autocomplete_text_field_unittest.mm b/chrome/browser/cocoa/autocomplete_text_field_unittest.mm
index 52fe284eb67050de4b5cfe22ec95dca351142ad2..6d4f843821730559f6bed2c423260b59023ac57f 100644
--- a/chrome/browser/cocoa/autocomplete_text_field_unittest.mm
+++ b/chrome/browser/cocoa/autocomplete_text_field_unittest.mm
@@ -65,6 +65,19 @@ class AutocompleteTextFieldTest : public PlatformTest {
keyCode:'a'];
}
+ // Helper to return the field-editor frame being used w/in |field_|.
+ NSRect EditorFrame() {
+ EXPECT_TRUE([field_.get() currentEditor]);
rohitrao (ping after 24h) 2009/09/23 22:05:35 I want this to be an ASSERT_TRUE, but I have a fee
Scott Hess - ex-Googler 2009/09/23 23:06:26 Yes, ASSERT_TRUE won't work (it's more relevant fo
+ EXPECT_EQ([[field_.get() subviews] count], 1U);
+ if ([[field_.get() subviews] count] > 0) {
+ return [[[field_.get() subviews] objectAtIndex:0] frame];
+ } else {
+ // Return something which won't work so the caller can soldier
+ // on.
+ return NSZeroRect;
+ }
+ }
+
CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc...
scoped_nsobject<AutocompleteTextField> field_;
MockAutocompleteTextFieldObserver field_observer_;
@@ -92,6 +105,20 @@ TEST_F(AutocompleteTextFieldTest, Cell) {
EXPECT_TRUE(cell != nil);
}
+// Test that becoming first responder sets things up correctly.
+TEST_F(AutocompleteTextFieldTest, FirstResponder) {
+ EXPECT_EQ(nil, [field_ currentEditor]);
+ EXPECT_EQ([[field_ subviews] count], 0U);
+ cocoa_helper_.makeFirstResponder(field_);
+ EXPECT_FALSE(nil == [field_ currentEditor]);
+ EXPECT_EQ([[field_ subviews] count], 1U);
+ EXPECT_TRUE([[field_ currentEditor] isDescendantOf:field_.get()]);
+
+ // Check that the window delegate is providing the right editor.
+ Class c = [AutocompleteTextFieldEditor class];
+ EXPECT_TRUE([[field_ currentEditor] isKindOfClass:c]);
+}
+
// Test drawing, mostly to ensure nothing leaks or crashes.
TEST_F(AutocompleteTextFieldTest, Display) {
[field_ display];
@@ -149,81 +176,113 @@ TEST_F(AutocompleteTextFieldTest, FieldEditorFlagsChanged) {
[firstResponder flagsChanged:KeyDownEventWithFlags(NSControlKeyMask)];
}
-// Test that the field editor is reset correctly when search keyword
-// or hints change.
-TEST_F(AutocompleteTextFieldTest, ResetFieldEditor) {
- EXPECT_EQ(nil, [field_ currentEditor]);
- EXPECT_EQ([[field_ subviews] count], 0U);
- [[field_ window] makeFirstResponder:field_];
- EXPECT_FALSE(nil == [field_ currentEditor]);
- EXPECT_EQ([[field_ subviews] count], 1U);
+// Test that the field editor gets the same bounds when focus is
+// delivered by the standard focusing machinery, or by
+// -resetFieldEditorFrameIfNeeded.
+TEST_F(AutocompleteTextFieldTest, ResetFieldEditorBase) {
+ AutocompleteTextFieldCell* cell = [field_ autocompleteTextFieldCell];
+ EXPECT_FALSE([cell fieldEditorNeedsReset]);
- // Check that the window delegate is working right.
- {
- Class c = [AutocompleteTextFieldEditor class];
- EXPECT_TRUE([[field_ currentEditor] isKindOfClass:c]);
- }
+ // Capture the editor frame resulting from the standard focus
+ // machinery.
+ cocoa_helper_.makeFirstResponder(field_);
+ const NSRect baseEditorFrame(EditorFrame());
- // The field editor may not be an immediate subview of |field_|, it
- // may be a subview of a clipping view (for purposes of scrolling).
- // So just look at the immediate subview.
- EXPECT_EQ([[field_ subviews] count], 1U);
- const NSRect baseEditorFrame([[[field_ subviews] objectAtIndex:0] frame]);
+ // Setting a hint should result in a strictly smaller editor frame.
+ [cell setSearchHintString:@"search hint"];
+ EXPECT_TRUE([cell fieldEditorNeedsReset]);
+ [field_ resetFieldEditorFrameIfNeeded];
+ EXPECT_FALSE([cell fieldEditorNeedsReset]);
+ EXPECT_FALSE(NSEqualRects(baseEditorFrame, EditorFrame()));
+ EXPECT_TRUE(NSContainsRect(baseEditorFrame, EditorFrame()));
+ // Clearing hint string and using -resetFieldEditorFrameIfNeeded
+ // should result in the same frame as the standard focus machinery.
+ [cell clearKeywordAndHint];
+ EXPECT_TRUE([cell fieldEditorNeedsReset]);
+ [field_ resetFieldEditorFrameIfNeeded];
+ EXPECT_FALSE([cell fieldEditorNeedsReset]);
+ EXPECT_TRUE(NSEqualRects(baseEditorFrame, EditorFrame()));
+}
+
+// Test that the field editor gets the same bounds when focus is
+// delivered by the standard focusing machinery, or by
+// -resetFieldEditorFrameIfNeeded.
+TEST_F(AutocompleteTextFieldTest, ResetFieldEditorSearchHint) {
AutocompleteTextFieldCell* cell = [field_ autocompleteTextFieldCell];
EXPECT_FALSE([cell fieldEditorNeedsReset]);
- // Asking the cell to add a search hint should leave the field
- // editor alone until -resetFieldEditorFrameIfNeeded is called.
- // Then the field editor should be moved to a smaller region with
- // the same left-hand side.
- [cell setSearchHintString:@"Type to search"];
+ const NSString* kHintString(@"Type to search");
+
+ // Capture the editor frame resulting from the standard focus
+ // machinery.
+ [cell setSearchHintString:kHintString];
+ EXPECT_TRUE([cell fieldEditorNeedsReset]);
+ [cell setFieldEditorNeedsReset:NO];
+ EXPECT_FALSE([cell fieldEditorNeedsReset]);
+ cocoa_helper_.makeFirstResponder(field_);
+ const NSRect baseEditorFrame(EditorFrame());
+
+ // Clearing the hint should result in a strictly larger editor
+ // frame.
+ [cell clearKeywordAndHint];
EXPECT_TRUE([cell fieldEditorNeedsReset]);
- NSRect r = [[[field_ subviews] objectAtIndex:0] frame];
- EXPECT_TRUE(NSEqualRects(r, baseEditorFrame));
[field_ resetFieldEditorFrameIfNeeded];
- r = [[[field_ subviews] objectAtIndex:0] frame];
EXPECT_FALSE([cell fieldEditorNeedsReset]);
- EXPECT_FALSE(NSEqualRects(r, baseEditorFrame));
- EXPECT_TRUE(NSContainsRect(baseEditorFrame, r));
- EXPECT_EQ(NSMinX(r), NSMinX(baseEditorFrame));
- EXPECT_LT(NSWidth(r), NSWidth(baseEditorFrame));
-
- // Save the search-hint editor frame for later.
- const NSRect searchHintEditorFrame(r);
-
- // Asking the cell to change to keyword mode should leave the field
- // editor alone until -resetFieldEditorFrameIfNeeded is called.
- // Then the field editor should be moved to a smaller region with
- // the same right-hand side.
- [cell setKeywordString:@"Search Engine:"];
+ EXPECT_FALSE(NSEqualRects(baseEditorFrame, EditorFrame()));
+ EXPECT_TRUE(NSContainsRect(EditorFrame(), baseEditorFrame));
+
+ // Setting the same hint string and using
+ // -resetFieldEditorFrameIfNeeded should result in the same frame as
+ // the standard focus machinery.
+ [cell setSearchHintString:kHintString];
EXPECT_TRUE([cell fieldEditorNeedsReset]);
- r = [[[field_ subviews] objectAtIndex:0] frame];
- EXPECT_TRUE(NSEqualRects(r, searchHintEditorFrame));
[field_ resetFieldEditorFrameIfNeeded];
- r = [[[field_ subviews] objectAtIndex:0] frame];
EXPECT_FALSE([cell fieldEditorNeedsReset]);
- EXPECT_FALSE(NSEqualRects(r, baseEditorFrame));
- EXPECT_FALSE(NSEqualRects(r, searchHintEditorFrame));
- EXPECT_TRUE(NSContainsRect(baseEditorFrame, r));
- EXPECT_EQ(NSMaxX(r), NSMaxX(baseEditorFrame));
- EXPECT_LT(NSWidth(r), NSWidth(baseEditorFrame));
-
- // Asking the cell to clear everything should leave the field editor
- // alone until -resetFieldEditorFrameIfNeeded is called. Then the
- // field editor should be back to baseEditorFrame.
+ EXPECT_TRUE(NSEqualRects(baseEditorFrame, EditorFrame()));
+}
+
+// Test that the field editor gets the same bounds when focus is
+// delivered by the standard focusing machinery, or by
+// -resetFieldEditorFrameIfNeeded.
+TEST_F(AutocompleteTextFieldTest, ResetFieldEditorKeywordHint) {
+ AutocompleteTextFieldCell* cell = [field_ autocompleteTextFieldCell];
+ EXPECT_FALSE([cell fieldEditorNeedsReset]);
+
+ const NSString* kHintString(@"Search Engine:");
+
+ // Capture the editor frame resulting from the standard focus
+ // machinery.
+ [cell setKeywordString:kHintString];
+ EXPECT_TRUE([cell fieldEditorNeedsReset]);
+ [cell setFieldEditorNeedsReset:NO];
+ EXPECT_FALSE([cell fieldEditorNeedsReset]);
+ cocoa_helper_.makeFirstResponder(field_);
+ const NSRect baseEditorFrame(EditorFrame());
+
+ // Clearing the hint should result in a strictly larger editor
+ // frame.
[cell clearKeywordAndHint];
EXPECT_TRUE([cell fieldEditorNeedsReset]);
[field_ resetFieldEditorFrameIfNeeded];
- r = [[[field_ subviews] objectAtIndex:0] frame];
EXPECT_FALSE([cell fieldEditorNeedsReset]);
- EXPECT_TRUE(NSEqualRects(r, baseEditorFrame));
+ EXPECT_FALSE(NSEqualRects(baseEditorFrame, EditorFrame()));
+ EXPECT_TRUE(NSContainsRect(EditorFrame(), baseEditorFrame));
+
+ // Setting the same hint string and using
+ // -resetFieldEditorFrameIfNeeded should result in the same frame as
+ // the standard focus machinery.
+ [cell setKeywordString:kHintString];
+ EXPECT_TRUE([cell fieldEditorNeedsReset]);
+ [field_ resetFieldEditorFrameIfNeeded];
+ EXPECT_FALSE([cell fieldEditorNeedsReset]);
+ EXPECT_TRUE(NSEqualRects(baseEditorFrame, EditorFrame()));
}
-// Test that the field editor is reset correctly when search keyword
-// or hints change.
+// Test that resetting the field editor bounds does not cause untoward
+// messages to the field's delegate.
TEST_F(AutocompleteTextFieldTest, ResetFieldEditorBlocksEndEditing) {
- [[field_ window] makeFirstResponder:field_];
+ cocoa_helper_.makeFirstResponder(field_);
// First, test that -makeFirstResponder: sends
// -controlTextDidBeginEditing: and -control:textShouldEndEditing at
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698