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 #import "base/cocoa_protocols_mac.h" | 7 #import "base/cocoa_protocols_mac.h" |
8 #include "base/scoped_nsobject.h" | 8 #include "base/scoped_nsobject.h" |
9 #import "chrome/browser/cocoa/autocomplete_text_field.h" | 9 #import "chrome/browser/cocoa/autocomplete_text_field.h" |
10 #import "chrome/browser/cocoa/autocomplete_text_field_cell.h" | 10 #import "chrome/browser/cocoa/autocomplete_text_field_cell.h" |
11 #import "chrome/browser/cocoa/autocomplete_text_field_editor.h" | 11 #import "chrome/browser/cocoa/autocomplete_text_field_editor.h" |
12 #import "chrome/browser/cocoa/autocomplete_text_field_unittest_helper.h" | 12 #import "chrome/browser/cocoa/autocomplete_text_field_unittest_helper.h" |
13 #import "chrome/browser/cocoa/cocoa_test_helper.h" | 13 #import "chrome/browser/cocoa/cocoa_test_helper.h" |
| 14 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "testing/platform_test.h" | 16 #include "testing/platform_test.h" |
16 #import "third_party/ocmock/OCMock/OCMock.h" | 17 #import "third_party/ocmock/OCMock/OCMock.h" |
17 | 18 |
18 using ::testing::InSequence; | 19 using ::testing::InSequence; |
19 | 20 |
20 // OCMock wants to mock a concrete class or protocol. This should | 21 // OCMock wants to mock a concrete class or protocol. This should |
21 // provide a correct protocol for newer versions of the SDK, while | 22 // provide a correct protocol for newer versions of the SDK, while |
22 // providing something mockable for older versions. | 23 // providing something mockable for older versions. |
23 | 24 |
24 @protocol MockTextEditingDelegate<NSControlTextEditingDelegate> | 25 @protocol MockTextEditingDelegate<NSControlTextEditingDelegate> |
25 - (void)controlTextDidBeginEditing:(NSNotification*)aNotification; | 26 - (void)controlTextDidBeginEditing:(NSNotification*)aNotification; |
26 - (BOOL)control:(NSControl*)control textShouldEndEditing:(NSText*)fieldEditor; | 27 - (BOOL)control:(NSControl*)control textShouldEndEditing:(NSText*)fieldEditor; |
27 @end | 28 @end |
28 | 29 |
29 namespace { | 30 namespace { |
| 31 // Mock a SecurityImageView. |
| 32 class MockSecurityImageView : public LocationBarViewMac::SecurityImageView { |
| 33 public: |
| 34 MockSecurityImageView(Profile* profile, ToolbarModel* model) |
| 35 : LocationBarViewMac::SecurityImageView(profile, model) {} |
| 36 |
| 37 MOCK_METHOD0(OnMousePressed, bool()); |
| 38 }; |
30 | 39 |
31 // Mock up an incrementing event number. | 40 // Mock up an incrementing event number. |
32 NSUInteger eventNumber = 0; | 41 NSUInteger eventNumber = 0; |
33 | 42 |
34 // Create an event of the indicated |type| at |point| within |view|. | 43 // Create an event of the indicated |type| at |point| within |view|. |
35 // TODO(shess): Would be nice to have a MockApplication which provided | 44 // TODO(shess): Would be nice to have a MockApplication which provided |
36 // nifty accessors to create these things and inject them. It could | 45 // nifty accessors to create these things and inject them. It could |
37 // even provide functions for "Click and drag mouse from point A to | 46 // even provide functions for "Click and drag mouse from point A to |
38 // point B". | 47 // point B". |
39 NSEvent* Event(NSView* view, const NSPoint point, const NSEventType type, | 48 NSEvent* Event(NSView* view, const NSPoint point, const NSEventType type, |
(...skipping 521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 EXPECT_TRUE([field_ currentEditor]); | 570 EXPECT_TRUE([field_ currentEditor]); |
562 | 571 |
563 // Selected the first word. | 572 // Selected the first word. |
564 const NSRange selectedRange([[field_ currentEditor] selectedRange]); | 573 const NSRange selectedRange([[field_ currentEditor] selectedRange]); |
565 EXPECT_EQ(selectedRange.location, 0U); | 574 EXPECT_EQ(selectedRange.location, 0U); |
566 EXPECT_EQ(selectedRange.length, [[field_ stringValue] length]); | 575 EXPECT_EQ(selectedRange.length, [[field_ stringValue] length]); |
567 } | 576 } |
568 | 577 |
569 TEST_F(AutocompleteTextFieldTest, SecurityIconMouseDown) { | 578 TEST_F(AutocompleteTextFieldTest, SecurityIconMouseDown) { |
570 AutocompleteTextFieldCell* cell = [field_ autocompleteTextFieldCell]; | 579 AutocompleteTextFieldCell* cell = [field_ autocompleteTextFieldCell]; |
571 scoped_nsobject<NSImage> hintIcon( | 580 |
572 [[NSImage alloc] initWithSize:NSMakeSize(20, 20)]); | 581 MockSecurityImageView security_image_view(NULL, NULL); |
573 [cell setHintIcon:hintIcon.get() label:nil color:nil]; | 582 [cell setSecurityImageView:&security_image_view]; |
574 NSRect iconFrame([cell hintImageFrameForFrame:[field_ bounds]]); | 583 security_image_view.SetImageShown( |
| 584 LocationBarViewMac::SecurityImageView::LOCK); |
| 585 security_image_view.SetVisible(true); |
| 586 |
| 587 NSRect iconFrame([cell securityImageFrameForFrame:[field_ bounds]]); |
575 NSPoint location(NSMakePoint(NSMidX(iconFrame), NSMidY(iconFrame))); | 588 NSPoint location(NSMakePoint(NSMidX(iconFrame), NSMidY(iconFrame))); |
576 NSEvent* event(Event(field_, location, NSLeftMouseDown, 1)); | 589 NSEvent* event(Event(field_, location, NSLeftMouseDown, 1)); |
577 EXPECT_CALL(field_observer_, OnSecurityIconClicked()); | 590 |
| 591 EXPECT_CALL(security_image_view, OnMousePressed()); |
578 [field_ mouseDown:event]; | 592 [field_ mouseDown:event]; |
579 } | 593 } |
580 | 594 |
581 // Verify that -setAttributedStringValue: works as expected when | 595 // Verify that -setAttributedStringValue: works as expected when |
582 // focussed or when not focussed. Our code mostly depends on about | 596 // focussed or when not focussed. Our code mostly depends on about |
583 // whether -stringValue works right. | 597 // whether -stringValue works right. |
584 TEST_F(AutocompleteTextFieldTest, SetAttributedStringBaseline) { | 598 TEST_F(AutocompleteTextFieldTest, SetAttributedStringBaseline) { |
585 EXPECT_EQ(nil, [field_ currentEditor]); | 599 EXPECT_EQ(nil, [field_ currentEditor]); |
586 | 600 |
587 // So that we can set rich text. | 601 // So that we can set rich text. |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
653 // editor's undo chain. | 667 // editor's undo chain. |
654 [field_ setStringValue:@""]; | 668 [field_ setStringValue:@""]; |
655 [editor shouldChangeTextInRange:NSMakeRange(0, 0) replacementString:@""]; | 669 [editor shouldChangeTextInRange:NSMakeRange(0, 0) replacementString:@""]; |
656 [editor didChangeText]; | 670 [editor didChangeText]; |
657 EXPECT_TRUE([undoManager canUndo]); | 671 EXPECT_TRUE([undoManager canUndo]); |
658 [field_ setAttributedStringValue:attributedString]; | 672 [field_ setAttributedStringValue:attributedString]; |
659 EXPECT_TRUE([undoManager canUndo]); | 673 EXPECT_TRUE([undoManager canUndo]); |
660 } | 674 } |
661 | 675 |
662 } // namespace | 676 } // namespace |
OLD | NEW |