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

Side by Side Diff: chrome/browser/cocoa/autocomplete_text_field_editor_unittest.mm

Issue 211030: [Mac] Expose AutocompleteEditViewMac to Cocoa code. (Closed)
Patch Set: Rohit's comments 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 unified diff | Download patch
OLDNEW
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 "chrome/browser/cocoa/autocomplete_text_field_editor.h" 5 #import "chrome/browser/cocoa/autocomplete_text_field_editor.h"
6 6
7 #include "base/scoped_nsobject.h" 7 #include "base/scoped_nsobject.h"
8 #include "base/scoped_ptr.h" 8 #include "base/scoped_ptr.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #import "chrome/browser/cocoa/autocomplete_text_field_unittest_helper.h"
10 #import "chrome/browser/cocoa/cocoa_test_helper.h" 11 #import "chrome/browser/cocoa/cocoa_test_helper.h"
11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
12 #include "testing/platform_test.h" 13 #include "testing/platform_test.h"
13 14
14 @interface AutocompleteTextFieldEditorTestDelegate : NSObject {
15 BOOL textShouldPaste_;
16 BOOL receivedTextShouldPaste_;
17 }
18 - initWithTextShouldPaste:(BOOL)flag;
19 - (BOOL)receivedTextShouldPaste;
20 @end
21
22 namespace { 15 namespace {
23 16
24 int NumTypesOnPasteboard(NSPasteboard* pb) { 17 int NumTypesOnPasteboard(NSPasteboard* pb) {
25 return [[pb types] count]; 18 return [[pb types] count];
26 } 19 }
27 20
28 void ClearPasteboard(NSPasteboard* pb) { 21 void ClearPasteboard(NSPasteboard* pb) {
29 [pb declareTypes:[NSArray array] owner:nil]; 22 [pb declareTypes:[NSArray array] owner:nil];
30 } 23 }
31 24
32 bool NoRichTextOnClipboard(NSPasteboard* pb) { 25 bool NoRichTextOnClipboard(NSPasteboard* pb) {
33 return ([pb dataForType:NSRTFPboardType] == nil) && 26 return ([pb dataForType:NSRTFPboardType] == nil) &&
34 ([pb dataForType:NSRTFDPboardType] == nil) && 27 ([pb dataForType:NSRTFDPboardType] == nil) &&
35 ([pb dataForType:NSHTMLPboardType] == nil); 28 ([pb dataForType:NSHTMLPboardType] == nil);
36 } 29 }
37 30
38 bool ClipboardContainsText(NSPasteboard* pb, NSString* cmp) { 31 bool ClipboardContainsText(NSPasteboard* pb, NSString* cmp) {
39 NSString* clipboard_text = [pb stringForType:NSStringPboardType]; 32 NSString* clipboard_text = [pb stringForType:NSStringPboardType];
40 return [clipboard_text isEqualToString:cmp]; 33 return [clipboard_text isEqualToString:cmp];
41 } 34 }
42 35
43 class AutocompleteTextFieldEditorTest : public PlatformTest { 36 class AutocompleteTextFieldEditorTest : public PlatformTest {
44 public: 37 public:
45 AutocompleteTextFieldEditorTest() 38 AutocompleteTextFieldEditorTest()
46 : pb_([NSPasteboard pasteboardWithUniqueName]) { 39 : pb_([NSPasteboard pasteboardWithUniqueName]) {
47 NSRect frame = NSMakeRect(0, 0, 50, 30); 40 NSRect frame = NSMakeRect(0, 0, 50, 30);
48 editor_.reset([[AutocompleteTextFieldEditor alloc] initWithFrame:frame]); 41 field_.reset([[AutocompleteTextField alloc] initWithFrame:frame]);
49 [editor_ setString:@"Testing"]; 42 [field_ setStringValue:@"Testing"];
50 [cocoa_helper_.contentView() addSubview:editor_.get()]; 43 [field_ setObserver:&field_observer_];
44 [cocoa_helper_.contentView() addSubview:field_.get()];
45
46 // Arrange for |field_| to get the right field editor.
47 window_delegate_.reset(
48 [[AutocompleteTextFieldWindowTestDelegate alloc] init]);
49 [cocoa_helper_.window() setDelegate:window_delegate_];
50
51 // Get the field editor setup.
52 cocoa_helper_.makeFirstResponder(field_);
53 id editor = [field_.get() currentEditor];
54 editor_.reset([static_cast<AutocompleteTextFieldEditor*>(editor) retain]);
51 } 55 }
52 56
57 virtual void SetUp() {
58 EXPECT_TRUE(editor_.get() != nil);
59 EXPECT_TRUE(
60 [editor_.get() isKindOfClass:[AutocompleteTextFieldEditor class]]);
61 }
62
63 // The removeFromSuperview call is needed to prevent crashes in
64 // later tests.
65 // TODO(shess): -removeromSuperview should not be necessary. Fix
66 // it. Also in autocomplete_text_field_unittest.mm.
53 virtual ~AutocompleteTextFieldEditorTest() { 67 virtual ~AutocompleteTextFieldEditorTest() {
68 [cocoa_helper_.window() setDelegate:nil];
69 [field_ removeFromSuperview];
54 [pb_ releaseGlobally]; 70 [pb_ releaseGlobally];
55 } 71 }
56 72
57 NSPasteboard *clipboard() { 73 NSPasteboard *clipboard() {
58 DCHECK(pb_); 74 DCHECK(pb_);
59 return pb_; 75 return pb_;
60 } 76 }
61 77
62 CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc... 78 CocoaTestHelper cocoa_helper_; // Inits Cocoa, creates window, etc...
63 scoped_nsobject<AutocompleteTextFieldEditor> editor_; 79 scoped_nsobject<AutocompleteTextFieldEditor> editor_;
80 scoped_nsobject<AutocompleteTextField> field_;
81 AutocompleteTextFieldObserverMock field_observer_;
82 scoped_nsobject<AutocompleteTextFieldWindowTestDelegate> window_delegate_;
64 83
65 private: 84 private:
66 NSPasteboard *pb_; 85 NSPasteboard *pb_;
67 }; 86 };
68 87
88 // Test that the field editor is linked in correctly.
89 TEST_F(AutocompleteTextFieldEditorTest, FirstResponder) {
90 EXPECT_EQ(editor_.get(), [field_ currentEditor]);
91 EXPECT_TRUE([editor_.get() isDescendantOf:field_.get()]);
92 EXPECT_EQ([editor_.get() delegate], field_.get());
93 EXPECT_EQ([editor_.get() observer], [field_.get() observer]);
94 }
95
69 TEST_F(AutocompleteTextFieldEditorTest, CutCopyTest) { 96 TEST_F(AutocompleteTextFieldEditorTest, CutCopyTest) {
70 // Make sure pasteboard is empty before we start. 97 // Make sure pasteboard is empty before we start.
71 ASSERT_EQ(NumTypesOnPasteboard(clipboard()), 0); 98 ASSERT_EQ(NumTypesOnPasteboard(clipboard()), 0);
72 99
73 NSString* test_string_1 = @"astring"; 100 NSString* test_string_1 = @"astring";
74 NSString* test_string_2 = @"another string"; 101 NSString* test_string_2 = @"another string";
75 102
76 [editor_.get() setRichText:YES]; 103 [editor_.get() setRichText:YES];
77 104
78 // Put some text on the clipboard. 105 // Put some text on the clipboard.
(...skipping 13 matching lines...) Expand all
92 [editor_.get() alignLeft:nil]; // Add a rich text attribute. 119 [editor_.get() alignLeft:nil]; // Add a rich text attribute.
93 [editor_.get() performCut:clipboard()]; 120 [editor_.get() performCut:clipboard()];
94 ASSERT_TRUE(NoRichTextOnClipboard(clipboard())); 121 ASSERT_TRUE(NoRichTextOnClipboard(clipboard()));
95 ASSERT_TRUE(ClipboardContainsText(clipboard(), test_string_2)); 122 ASSERT_TRUE(ClipboardContainsText(clipboard(), test_string_2));
96 ASSERT_EQ([[editor_.get() textStorage] length], 0U); 123 ASSERT_EQ([[editor_.get() textStorage] length], 0U);
97 } 124 }
98 125
99 // Test adding/removing from the view hierarchy, mostly to ensure nothing 126 // Test adding/removing from the view hierarchy, mostly to ensure nothing
100 // leaks or crashes. 127 // leaks or crashes.
101 TEST_F(AutocompleteTextFieldEditorTest, AddRemove) { 128 TEST_F(AutocompleteTextFieldEditorTest, AddRemove) {
102 EXPECT_EQ(cocoa_helper_.contentView(), [editor_ superview]); 129 EXPECT_EQ(cocoa_helper_.contentView(), [field_ superview]);
103 [editor_.get() removeFromSuperview]; 130
104 EXPECT_FALSE([editor_ superview]); 131 // TODO(shess): For some reason, -removeFromSuperview while |field_|
132 // is first-responder causes AutocompleteTextFieldWindowTestDelegate
133 // -windowWillReturnFieldEditor:toObject: to be passed an object of
134 // class AutocompleteTextFieldEditor. Which is weird. Changing
135 // first responder will remove the field editor.
136 cocoa_helper_.makeFirstResponder(nil);
137 EXPECT_FALSE([field_.get() currentEditor]);
138 EXPECT_FALSE([editor_.get() superview]);
139
140 [field_.get() removeFromSuperview];
141 EXPECT_FALSE([field_.get() superview]);
105 } 142 }
106 143
107 // Test drawing, mostly to ensure nothing leaks or crashes. 144 // Test drawing, mostly to ensure nothing leaks or crashes.
108 TEST_F(AutocompleteTextFieldEditorTest, Display) { 145 TEST_F(AutocompleteTextFieldEditorTest, Display) {
146 [field_ display];
109 [editor_ display]; 147 [editor_ display];
110 } 148 }
111 149
112 // Test that -shouldPaste properly queries the delegate. 150 // Test that -paste: is correctly delegated to the observer.
113 TEST_F(AutocompleteTextFieldEditorTest, TextShouldPaste) { 151 TEST_F(AutocompleteTextFieldEditorTest, Paste) {
114 EXPECT_TRUE(![editor_ delegate]); 152 field_observer_.Reset();
115 EXPECT_TRUE([editor_ shouldPaste]); 153 EXPECT_FALSE(field_observer_.on_paste_called_);
116 154 [editor_.get() paste:nil];
117 scoped_nsobject<AutocompleteTextFieldEditorTestDelegate> shouldPaste( 155 EXPECT_TRUE(field_observer_.on_paste_called_);
118 [[AutocompleteTextFieldEditorTestDelegate alloc]
119 initWithTextShouldPaste:YES]);
120 [editor_ setDelegate:shouldPaste];
121 EXPECT_FALSE([shouldPaste receivedTextShouldPaste]);
122 EXPECT_TRUE([editor_ shouldPaste]);
123 EXPECT_TRUE([shouldPaste receivedTextShouldPaste]);
124
125 scoped_nsobject<AutocompleteTextFieldEditorTestDelegate> shouldNotPaste(
126 [[AutocompleteTextFieldEditorTestDelegate alloc]
127 initWithTextShouldPaste:NO]);
128 [editor_ setDelegate:shouldNotPaste];
129 EXPECT_FALSE([shouldNotPaste receivedTextShouldPaste]);
130 EXPECT_FALSE([editor_ shouldPaste]);
131 EXPECT_TRUE([shouldNotPaste receivedTextShouldPaste]);
132 } 156 }
133 157
134 } // namespace 158 } // namespace
135
136 @implementation AutocompleteTextFieldEditorTestDelegate
137
138 - initWithTextShouldPaste:(BOOL)flag {
139 self = [super init];
140 if (self) {
141 textShouldPaste_ = flag;
142 receivedTextShouldPaste_ = NO;
143 }
144 return self;
145 }
146
147 - (BOOL)receivedTextShouldPaste {
148 return receivedTextShouldPaste_;
149 }
150
151 - (BOOL)textShouldPaste:(NSText*)fieldEditor {
152 receivedTextShouldPaste_ = YES;
153 return textShouldPaste_;
154 }
155
156 @end
OLDNEW
« no previous file with comments | « chrome/browser/cocoa/autocomplete_text_field_editor.mm ('k') | chrome/browser/cocoa/autocomplete_text_field_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698