| Index: chrome/browser/cocoa/location_bar/autocomplete_text_field_unittest.mm
|
| diff --git a/chrome/browser/cocoa/location_bar/autocomplete_text_field_unittest.mm b/chrome/browser/cocoa/location_bar/autocomplete_text_field_unittest.mm
|
| index 8e27682aec3710aca73add1c393e79780f555eef..341058c1880b2abe0d4c92f390aa7fad2ad3586f 100644
|
| --- a/chrome/browser/cocoa/location_bar/autocomplete_text_field_unittest.mm
|
| +++ b/chrome/browser/cocoa/location_bar/autocomplete_text_field_unittest.mm
|
| @@ -28,15 +28,11 @@ namespace {
|
| class MockDecoration : public LocationBarDecoration {
|
| public:
|
| virtual CGFloat GetWidthForSpace(CGFloat width) { return 20.0; }
|
| - virtual bool IsVisible() const { return visible_; }
|
| - void SetVisible(bool visible) { visible_ = visible; }
|
|
|
| virtual void DrawInFrame(NSRect frame, NSView* control_view) { ; }
|
| - virtual bool AcceptsMousePress() { return true; }
|
| + MOCK_METHOD0(AcceptsMousePress, bool());
|
| MOCK_METHOD1(OnMousePressed, bool(NSRect frame));
|
| MOCK_METHOD0(GetMenu, NSMenu*());
|
| -
|
| - bool visible_;
|
| };
|
|
|
| // Mock up an incrementing event number.
|
| @@ -211,21 +207,6 @@ TEST_F(AutocompleteTextFieldTest, Display) {
|
| [test_window() makePretendKeyWindowAndSetFirstResponder:field_];
|
| [field_ display];
|
| [test_window() clearPretendKeyWindowAndFirstResponder];
|
| -
|
| - // Test display of various cell configurations.
|
| - AutocompleteTextFieldCell* cell = [field_ cell];
|
| -
|
| - [cell setSearchHintString:@"Type to search" availableWidth:kWidth];
|
| - [field_ display];
|
| -
|
| - NSImage* image = [NSImage imageNamed:@"NSApplicationIcon"];
|
| - [cell setKeywordHintPrefix:@"prefix" image:image suffix:@"suffix"
|
| - availableWidth:kWidth];
|
| - [field_ display];
|
| -
|
| - [cell clearHint];
|
| -
|
| - [field_ display];
|
| }
|
|
|
| TEST_F(AutocompleteTextFieldObserverTest, FlagsChanged) {
|
| @@ -271,65 +252,29 @@ TEST_F(AutocompleteTextFieldObserverTest, FrameChanged) {
|
| // delivered by the standard focusing machinery, or by
|
| // -resetFieldEditorFrameIfNeeded.
|
| TEST_F(AutocompleteTextFieldTest, ResetFieldEditorBase) {
|
| - AutocompleteTextFieldCell* cell = [field_ cell];
|
| -
|
| // Capture the editor frame resulting from the standard focus
|
| // machinery.
|
| [test_window() makePretendKeyWindowAndSetFirstResponder:field_];
|
| - const NSRect baseEditorFrame(EditorFrame());
|
| + const NSRect baseEditorFrame = EditorFrame();
|
|
|
| - // Setting a hint should result in a strictly smaller editor frame.
|
| - EXPECT_FALSE([cell hintString]);
|
| - [cell setSearchHintString:@"search hint" availableWidth:kWidth];
|
| - EXPECT_TRUE([cell hintString]);
|
| + // A decoration should result in a strictly smaller editor frame.
|
| + mock_left_decoration_.SetVisible(true);
|
| [field_ resetFieldEditorFrameIfNeeded];
|
| EXPECT_FALSE(NSEqualRects(baseEditorFrame, EditorFrame()));
|
| EXPECT_TRUE(NSContainsRect(baseEditorFrame, EditorFrame()));
|
|
|
| - // Clearing hint string and using -resetFieldEditorFrameIfNeeded
|
| + // Removing the decoration and using -resetFieldEditorFrameIfNeeded
|
| // should result in the same frame as the standard focus machinery.
|
| - [cell clearHint];
|
| - EXPECT_FALSE([cell hintString]);
|
| - [field_ resetFieldEditorFrameIfNeeded];
|
| - 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_ cell];
|
| -
|
| - NSString* const kHintString = @"Type to search";
|
| -
|
| - // Capture the editor frame resulting from the standard focus
|
| - // machinery.
|
| - [cell setSearchHintString:kHintString availableWidth:kWidth];
|
| - EXPECT_TRUE([cell hintString]);
|
| - [test_window() makePretendKeyWindowAndSetFirstResponder:field_];
|
| - const NSRect baseEditorFrame(EditorFrame());
|
| -
|
| - // Clearing the hint should result in a strictly larger editor
|
| - // frame.
|
| - [cell clearHint];
|
| - EXPECT_FALSE([cell hintString]);
|
| - [field_ resetFieldEditorFrameIfNeeded];
|
| - 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 availableWidth:kWidth];
|
| - EXPECT_TRUE([cell hintString]);
|
| + mock_left_decoration_.SetVisible(false);
|
| [field_ resetFieldEditorFrameIfNeeded];
|
| 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) {
|
| +// -resetFieldEditorFrameIfNeeded, this time with a decoration
|
| +// pre-loaded.
|
| +TEST_F(AutocompleteTextFieldTest, ResetFieldEditorWithDecoration) {
|
| AutocompleteTextFieldCell* cell = [field_ cell];
|
|
|
| // Make sure decoration isn't already visible, then make it visible.
|
| @@ -343,7 +288,7 @@ TEST_F(AutocompleteTextFieldTest, ResetFieldEditorKeywordHint) {
|
| // machinery.
|
|
|
| [test_window() makePretendKeyWindowAndSetFirstResponder:field_];
|
| - const NSRect baseEditorFrame(EditorFrame());
|
| + const NSRect baseEditorFrame = EditorFrame();
|
|
|
| // When the decoration is not visible the frame should be strictly larger.
|
| mock_left_decoration_.SetVisible(false);
|
| @@ -369,6 +314,7 @@ TEST_F(AutocompleteTextFieldObserverTest, ResetFieldEditorContinuesEditing) {
|
| EXPECT_CALL(field_observer_, OnSetFocus(false));
|
| // Becoming first responder doesn't begin editing.
|
| [test_window() makePretendKeyWindowAndSetFirstResponder:field_];
|
| + const NSRect baseEditorFrame = EditorFrame();
|
| NSTextView* editor = static_cast<NSTextView*>([field_ currentEditor]);
|
| EXPECT_TRUE(nil != editor);
|
|
|
| @@ -378,41 +324,54 @@ TEST_F(AutocompleteTextFieldObserverTest, ResetFieldEditorContinuesEditing) {
|
| [editor shouldChangeTextInRange:NSMakeRange(0, 0) replacementString:@""];
|
| [editor didChangeText];
|
|
|
| - // No messages to |field_observer_| when resetting the frame.
|
| - AutocompleteTextFieldCell* cell = [field_ cell];
|
| - [cell setSearchHintString:@"Type to search" availableWidth:kWidth];
|
| + // No messages to |field_observer_| when the frame actually changes.
|
| + mock_left_decoration_.SetVisible(true);
|
| [field_ resetFieldEditorFrameIfNeeded];
|
| + EXPECT_FALSE(NSEqualRects(baseEditorFrame, EditorFrame()));
|
| }
|
|
|
| -// Clicking in the search hint should put the caret in the rightmost
|
| -// position.
|
| -TEST_F(AutocompleteTextFieldTest, ClickSearchHintPutsCaretRightmost) {
|
| +// Clicking in a right-hand decoration which does not handle the mouse
|
| +// puts the caret rightmost.
|
| +TEST_F(AutocompleteTextFieldTest, ClickRightDecorationPutsCaretRightmost) {
|
| + // Decoration does not handle the mouse event, so the cell should
|
| + // process it. Called at least once.
|
| + EXPECT_CALL(mock_right_decoration_, AcceptsMousePress())
|
| + .WillOnce(Return(false))
|
| + .WillRepeatedly(Return(false));
|
| +
|
| // Set the decoration before becoming responder.
|
| EXPECT_FALSE([field_ currentEditor]);
|
| - AutocompleteTextFieldCell* cell = [field_ cell];
|
| - [cell setSearchHintString:@"Type to search" availableWidth:kWidth];
|
| + mock_right_decoration_.SetVisible(true);
|
|
|
| - // Can't rely on the window machinery to make us first responder,
|
| - // here.
|
| + // Make first responder should select all.
|
| [test_window() makePretendKeyWindowAndSetFirstResponder:field_];
|
| EXPECT_TRUE([field_ currentEditor]);
|
| + const NSRange allRange = NSMakeRange(0, [[field_ stringValue] length]);
|
| + EXPECT_TRUE(NSEqualRanges(allRange, [[field_ currentEditor] selectedRange]));
|
|
|
| - const NSPoint point(NSMakePoint(300.0 - 20.0, 5.0));
|
| - NSEvent* downEvent(Event(field_, point, NSLeftMouseDown));
|
| - NSEvent* upEvent(Event(field_, point, NSLeftMouseUp));
|
| + // Generate a click on the decoration.
|
| + AutocompleteTextFieldCell* cell = [field_ cell];
|
| + const NSRect bounds = [field_ bounds];
|
| + const NSRect iconFrame =
|
| + [cell frameForDecoration:&mock_right_decoration_ inFrame:bounds];
|
| + const NSPoint point = NSMakePoint(NSMidX(iconFrame), NSMidY(iconFrame));
|
| + NSEvent* downEvent = Event(field_, point, NSLeftMouseDown);
|
| + NSEvent* upEvent = Event(field_, point, NSLeftMouseUp);
|
| [NSApp postEvent:upEvent atStart:YES];
|
| [field_ mouseDown:downEvent];
|
| - const NSRange selectedRange([[field_ currentEditor] selectedRange]);
|
| - EXPECT_EQ(selectedRange.location, [[field_ stringValue] length]);
|
| - EXPECT_EQ(selectedRange.length, 0U);
|
| +
|
| + // Selection should be a right-hand-side caret.
|
| + EXPECT_TRUE(NSEqualRanges(NSMakeRange([[field_ stringValue] length], 0),
|
| + [[field_ currentEditor] selectedRange]));
|
| }
|
|
|
| // Clicking in a left-side decoration which doesn't handle the event
|
| // puts the selection in the leftmost position.
|
| TEST_F(AutocompleteTextFieldTest, ClickLeftDecorationPutsCaretLeftmost) {
|
| // Decoration does not handle the mouse event, so the cell should
|
| - // process it.
|
| - EXPECT_CALL(mock_left_decoration_, OnMousePressed(_))
|
| + // process it. Called at least once.
|
| + EXPECT_CALL(mock_left_decoration_, AcceptsMousePress())
|
| + .WillOnce(Return(false))
|
| .WillRepeatedly(Return(false));
|
|
|
| // Set the decoration before becoming responder.
|
| @@ -427,11 +386,12 @@ TEST_F(AutocompleteTextFieldTest, ClickLeftDecorationPutsCaretLeftmost) {
|
|
|
| // Generate a click on the decoration.
|
| AutocompleteTextFieldCell* cell = [field_ cell];
|
| + const NSRect bounds = [field_ bounds];
|
| const NSRect iconFrame =
|
| - [cell frameForDecoration:&mock_left_decoration_ inFrame:[field_ bounds]];
|
| + [cell frameForDecoration:&mock_left_decoration_ inFrame:bounds];
|
| const NSPoint point = NSMakePoint(NSMidX(iconFrame), NSMidY(iconFrame));
|
| - NSEvent* downEvent(Event(field_, point, NSLeftMouseDown));
|
| - NSEvent* upEvent(Event(field_, point, NSLeftMouseUp));
|
| + NSEvent* downEvent = Event(field_, point, NSLeftMouseDown);
|
| + NSEvent* upEvent = Event(field_, point, NSLeftMouseUp);
|
| [NSApp postEvent:upEvent atStart:YES];
|
| [field_ mouseDown:downEvent];
|
|
|
| @@ -558,6 +518,8 @@ TEST_F(AutocompleteTextFieldTest, LeftDecorationMouseDown) {
|
| EXPECT_FALSE([field_ currentEditor]);
|
|
|
| mock_left_decoration_.SetVisible(true);
|
| + EXPECT_CALL(mock_left_decoration_, AcceptsMousePress())
|
| + .WillRepeatedly(Return(true));
|
|
|
| AutocompleteTextFieldCell* cell = [field_ cell];
|
| const NSRect iconFrame =
|
| @@ -603,10 +565,13 @@ TEST_F(AutocompleteTextFieldTest, RightDecorationMouseDown) {
|
| EXPECT_FALSE([field_ currentEditor]);
|
|
|
| mock_right_decoration_.SetVisible(true);
|
| + EXPECT_CALL(mock_right_decoration_, AcceptsMousePress())
|
| + .WillRepeatedly(Return(true));
|
|
|
| AutocompleteTextFieldCell* cell = [field_ cell];
|
| + const NSRect bounds = [field_ bounds];
|
| const NSRect iconFrame =
|
| - [cell frameForDecoration:&mock_right_decoration_ inFrame:[field_ bounds]];
|
| + [cell frameForDecoration:&mock_right_decoration_ inFrame:bounds];
|
| const NSPoint location = NSMakePoint(NSMidX(iconFrame), NSMidY(iconFrame));
|
| NSEvent* downEvent = Event(field_, location, NSLeftMouseDown, 1);
|
| NSEvent* upEvent = Event(field_, location, NSLeftMouseUp, 1);
|
|
|