Index: chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_unittest.mm |
diff --git a/chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_unittest.mm b/chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_unittest.mm |
index 6d138011b2687a550b13f28c65cb701d7d1a5b86..0cc3afef6ab7c4b839078980c87c8d61d7b45835 100644 |
--- a/chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_unittest.mm |
+++ b/chrome/browser/ui/cocoa/location_bar/autocomplete_text_field_unittest.mm |
@@ -51,7 +51,6 @@ class MockButtonDecoration : public ButtonDecoration { |
IMAGE_GRID(IDR_OMNIBOX_EV_BUBBLE), |
IDR_OMNIBOX_EV_BUBBLE_CENTER, |
3) {} |
- void Hide() { SetVisible(false); } |
MOCK_METHOD2(OnMousePressed, bool(NSRect frame, NSPoint location)); |
}; |
Scott Hess - ex-Googler
2015/05/08 19:38:28
Given the current code, this class seems like it i
erikchen
2015/05/08 20:02:20
Yup, removed.
|
@@ -170,6 +169,31 @@ class AutocompleteTextFieldObserverTest : public AutocompleteTextFieldTest { |
AutocompleteTextFieldTest::TearDown(); |
} |
+ // Returns the center point of the decoration. |
+ NSPoint ClickLocationForDecoration(LocationBarDecoration* decoration) { |
+ AutocompleteTextFieldCell* cell = [field_ cell]; |
+ NSRect decoration_rect = |
+ [cell frameForDecoration:decoration inFrame:[field_ bounds]]; |
+ EXPECT_FALSE(NSIsEmptyRect(decoration_rect)); |
+ return NSMakePoint(NSMidX(decoration_rect), NSMidY(decoration_rect)); |
+ } |
+ |
+ void SendMouseClickToDecoration(LocationBarDecoration* decoration) { |
+ NSPoint point = ClickLocationForDecoration(decoration); |
+ NSEvent* downEvent = Event(field_, point, NSLeftMouseDown); |
+ NSEvent* upEvent = Event(field_, point, NSLeftMouseUp); |
+ |
+ // Can't just use -sendEvent:, since that doesn't populate -currentEvent. |
+ [NSApp postEvent:downEvent atStart:YES]; |
+ [NSApp postEvent:upEvent atStart:NO]; |
+ |
+ NSEvent* next_event = [NSApp nextEventMatchingMask:NSAnyEventMask |
+ untilDate:nil |
+ inMode:NSDefaultRunLoopMode |
+ dequeue:YES]; |
+ [NSApp sendEvent:next_event]; |
+ } |
+ |
StrictMock<MockAutocompleteTextFieldObserver> field_observer_; |
}; |
@@ -594,8 +618,10 @@ TEST_F(AutocompleteTextFieldTest, LeftDecorationMouseDown) { |
.WillOnce(Return(true)); |
[field_ mouseDown:downEvent]; |
+ // The text field should no longer be first responder. |
// The selection should not have changed. |
- EXPECT_TRUE(NSEqualRanges(allRange, [[field_ currentEditor] selectedRange])); |
+ EXPECT_FALSE([base::mac::ObjCCast<NSView>([[field_ window] firstResponder]) |
+ isDescendantOf:field_]); |
// TODO(shess): Test that mouse drags are initiated if the next |
// event is a drag, or if the mouse-up takes too long to arrive. |
@@ -789,61 +815,49 @@ TEST_F(AutocompleteTextFieldTest, HideFocusState) { |
EXPECT_TRUE([FieldEditor() shouldDrawInsertionPoint]); |
} |
-// Verify that OnSetFocus for button decorations is only sent after the |
-// decoration is picked as the target for the subsequent -mouseDown:. Otherwise |
-// hiding a ButtonDecoration in OnSetFocus will prevent a call to |
-// OnMousePressed, since it is already hidden at the time of mouseDown. |
-TEST_F(AutocompleteTextFieldObserverTest, ButtonDecorationFocus) { |
- // Add the mock button. |
- MockButtonDecoration mock_button; |
- mock_button.SetVisible(true); |
+// Verify that clicking decorations defocuses the omnibox. |
+TEST_F(AutocompleteTextFieldObserverTest, ClickingDecorationDefocusesOmnibox) { |
AutocompleteTextFieldCell* cell = [field_ cell]; |
- [cell addLeftDecoration:&mock_button]; |
- // Ensure button is hidden when OnSetFocus() is called. |
- EXPECT_CALL(field_observer_, OnSetFocus(false)).WillOnce( |
- testing::InvokeWithoutArgs(&mock_button, &MockButtonDecoration::Hide)); |
+ // Set up a non-interactive decoration. |
+ MockDecoration noninteractive_decoration; |
+ noninteractive_decoration.SetVisible(true); |
+ EXPECT_CALL(noninteractive_decoration, AcceptsMousePress()) |
+ .WillRepeatedly(testing::Return(false)); |
+ [cell addLeftDecoration:&noninteractive_decoration]; |
+ |
+ // Set up an interactive decoration. |
+ MockButtonDecoration interactive_decoration; |
+ interactive_decoration.SetVisible(true); |
+ [cell addLeftDecoration:&interactive_decoration]; |
+ EXPECT_CALL(interactive_decoration, OnMousePressed(_, _)) |
+ .WillOnce(testing::Return(true)); |
- // Ignore incidental calls. |
+ // Ignore incidental calls. The exact frequency of these calls doesn't |
+ // matter, as they auxiliary to the behavior being tested. |
Scott Hess - ex-Googler
2015/05/08 19:38:28
probably "they are auxiliary"
erikchen
2015/05/08 20:02:21
Done.
|
EXPECT_CALL(field_observer_, SelectionRangeForProposedRange(_)) |
.WillRepeatedly(testing::Return(NSMakeRange(0, 0))); |
- EXPECT_CALL(field_observer_, OnMouseDown(_)); |
- |
- // Still expect an OnMousePressed on the button. |
- EXPECT_CALL(mock_button, OnMousePressed(_, _)) |
- .WillOnce(testing::Return(true)); |
- |
- // Get click point for button decoration. |
- NSRect button_rect = |
- [cell frameForDecoration:&mock_button inFrame:[field_ bounds]]; |
- EXPECT_FALSE(NSIsEmptyRect(button_rect)); |
- NSPoint click_location = |
- NSMakePoint(NSMidX(button_rect), NSMidY(button_rect)); |
+ EXPECT_CALL(field_observer_, OnMouseDown(_)).Times(testing::AnyNumber()); |
+ EXPECT_CALL(field_observer_, OnSetFocus(false)).Times(testing::AnyNumber()); |
+ EXPECT_CALL(field_observer_, OnKillFocus()).Times(testing::AnyNumber()); |
+ EXPECT_CALL(field_observer_, OnDidEndEditing()).Times(testing::AnyNumber()); |
// Ensure the field is currently not first responder. |
[test_window() makePretendKeyWindowAndSetFirstResponder:nil]; |
- EXPECT_NSNE([[field_ window] firstResponder], field_); |
- |
- // Execute button click event sequence. |
- NSEvent* downEvent = Event(field_, click_location, NSLeftMouseDown); |
- NSEvent* upEvent = Event(field_, click_location, NSLeftMouseUp); |
- |
- // Can't just use -sendEvent:, since that doesn't populate -currentEvent. |
- [NSApp postEvent:downEvent atStart:YES]; |
- [NSApp postEvent:upEvent atStart:NO]; |
- NSEvent* next_event = [NSApp nextEventMatchingMask:NSAnyEventMask |
- untilDate:nil |
- inMode:NSDefaultRunLoopMode |
- dequeue:YES]; |
- [NSApp sendEvent:next_event]; |
- |
- // Expectations check that both OnSetFocus and OnMouseDown were called. |
- // Additionally, ensure button is hidden and field is firstResponder. |
- EXPECT_FALSE(mock_button.IsVisible()); |
- EXPECT_TRUE(NSIsEmptyRect([cell frameForDecoration:&mock_left_decoration_ |
- inFrame:[field_ bounds]])); |
- EXPECT_TRUE([base::mac::ObjCCastStrict<NSView>( |
- [[field_ window] firstResponder]) isDescendantOf:field_]); |
+ EXPECT_FALSE([base::mac::ObjCCast<NSView>([[field_ window] firstResponder]) |
+ isDescendantOf:field_]); |
+ |
+ SendMouseClickToDecoration(&noninteractive_decoration); |
+ EXPECT_TRUE([base::mac::ObjCCast<NSView>([[field_ window] firstResponder]) |
+ isDescendantOf:field_]); |
+ |
+ SendMouseClickToDecoration(&interactive_decoration); |
+ EXPECT_FALSE([base::mac::ObjCCast<NSView>([[field_ window] firstResponder]) |
+ isDescendantOf:field_]); |
Scott Hess - ex-Googler
2015/05/08 19:38:28
This ties in with the comment in the implementatio
erikchen
2015/05/08 20:02:20
See my response to the earlier comment.
|
+ |
+ SendMouseClickToDecoration(&noninteractive_decoration); |
+ EXPECT_TRUE([base::mac::ObjCCast<NSView>([[field_ window] firstResponder]) |
+ isDescendantOf:field_]); |
} |
TEST_F(AutocompleteTextFieldObserverTest, SendsEditingMessages) { |