Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / browser / edit_search_engine_cocoa_controller_unittest.mm
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #import "chrome/browser/ui/cocoa/browser/edit_search_engine_cocoa_controller.h"
6
7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/search_engines/template_url_service_factory.h"
9 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
10 #include "chrome/test/base/testing_profile.h"
11 #include "components/search_engines/template_url.h"
12 #include "grit/generated_resources.h"
13 #include "grit/theme_resources.h"
14 #include "grit/ui_resources.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #import "testing/gtest_mac.h"
17 #include "testing/platform_test.h"
18 #include "ui/base/l10n/l10n_util_mac.h"
19 #include "ui/base/resource/resource_bundle.h"
20 #include "ui/gfx/image/image.h"
21
22 @interface FakeEditSearchEngineController : EditSearchEngineCocoaController
23
24 - (NSTextField*)nameField;
25 - (NSTextField*)keywordField;
26 - (NSTextField*)urlField;
27 - (NSImageView*)nameImage;
28 - (NSImageView*)keywordImage;
29 - (NSImageView*)urlImage;
30 - (NSButton*)doneButton;
31
32 - (NSImage*)goodImage;
33 - (NSImage*)badImage;
34
35 @end
36
37 @implementation FakeEditSearchEngineController
38
39 - (NSTextField*)nameField {
40   return nameField_;
41 }
42
43 - (NSTextField*)keywordField {
44   return keywordField_;
45 }
46
47 - (NSTextField*)urlField {
48   return urlField_;
49 }
50
51 - (NSImageView*)nameImage {
52   return nameImage_;
53 }
54
55 - (NSImageView*)keywordImage {
56   return keywordImage_;
57 }
58
59 - (NSImageView*)urlImage {
60   return urlImage_;
61 }
62
63 - (NSButton*)doneButton {
64   return doneButton_;
65 }
66
67 - (NSImage*)goodImage {
68   ui::ResourceBundle& rb = ResourceBundle::GetSharedInstance();
69   return rb.GetNativeImageNamed(IDR_INPUT_GOOD).ToNSImage();
70 }
71
72 - (NSImage*)badImage {
73   ui::ResourceBundle& rb = ResourceBundle::GetSharedInstance();
74   return rb.GetNativeImageNamed(IDR_INPUT_ALERT).ToNSImage();
75 }
76
77 @end
78
79 namespace {
80
81 class EditSearchEngineControllerTest : public CocoaProfileTest {
82  public:
83   virtual void SetUp() {
84     CocoaProfileTest::SetUp();
85     ASSERT_TRUE(profile());
86
87     controller_ =
88        [[FakeEditSearchEngineController alloc] initWithProfile:profile()
89                                                       delegate:nil
90                                                    templateURL:nil];
91   }
92
93   virtual void TearDown() {
94     // Force the window to load so we hit |-awakeFromNib| to register as the
95     // window's delegate so that the controller can clean itself up in
96     // |-windowWillClose:|.
97     ASSERT_TRUE([controller_ window]);
98
99     [controller_ close];
100     CocoaProfileTest::TearDown();
101   }
102
103   FakeEditSearchEngineController* controller_;
104 };
105
106 TEST_F(EditSearchEngineControllerTest, ValidImageOriginals) {
107   EXPECT_TRUE([controller_ window]);  // Force the window to load.
108
109   EXPECT_TRUE([[controller_ goodImage] isKindOfClass:[NSImage class]]);
110   EXPECT_TRUE([[controller_ badImage] isKindOfClass:[NSImage class]]);
111
112   // Test window title is set correctly.
113   NSString* title = l10n_util::GetNSString(
114       IDS_SEARCH_ENGINES_EDITOR_NEW_WINDOW_TITLE);
115   EXPECT_NSEQ(title, [[controller_ window] title]);
116 }
117
118 TEST_F(EditSearchEngineControllerTest, SetImageViews) {
119   EXPECT_TRUE([controller_ window]);  // Force the window to load.
120   EXPECT_EQ([controller_ badImage], [[controller_ nameImage] image]);
121   // An empty keyword is not OK.
122   EXPECT_EQ([controller_ badImage], [[controller_ keywordImage] image]);
123   EXPECT_EQ([controller_ badImage], [[controller_ urlImage] image]);
124 }
125
126 // This test ensures that on creating a new keyword, we are in an "invalid"
127 // state that cannot save.
128 TEST_F(EditSearchEngineControllerTest, InvalidState) {
129   EXPECT_TRUE([controller_ window]);  // Force window to load.
130   NSString* toolTip = nil;
131   EXPECT_FALSE([controller_ validateFields]);
132
133   EXPECT_NSEQ(@"", [[controller_ nameField] stringValue]);
134   EXPECT_EQ([controller_ badImage], [[controller_ nameImage] image]);
135   toolTip = l10n_util::GetNSString(IDS_SEARCH_ENGINES_INVALID_TITLE_TT);
136   EXPECT_NSEQ(toolTip, [[controller_ nameField] toolTip]);
137   EXPECT_NSEQ(toolTip, [[controller_ nameImage] toolTip]);
138
139   // Keywords can not be empty strings.
140   EXPECT_NSEQ(@"", [[controller_ keywordField] stringValue]);
141   EXPECT_EQ([controller_ badImage], [[controller_ keywordImage] image]);
142   EXPECT_TRUE([[controller_ keywordField] toolTip]);
143   EXPECT_TRUE([[controller_ keywordImage] toolTip]);
144
145   EXPECT_NSEQ(@"", [[controller_ urlField] stringValue]);
146   EXPECT_EQ([controller_ badImage], [[controller_ urlImage] image]);
147   toolTip = l10n_util::GetNSString(IDS_SEARCH_ENGINES_INVALID_URL_TT);
148   EXPECT_NSEQ(toolTip, [[controller_ urlField] toolTip]);
149   EXPECT_NSEQ(toolTip, [[controller_ urlImage] toolTip]);
150 }
151
152 // Tests that the single name field validates.
153 TEST_F(EditSearchEngineControllerTest, ValidateName) {
154   EXPECT_TRUE([controller_ window]);  // Force window to load.
155
156   EXPECT_EQ([controller_ badImage], [[controller_ nameImage] image]);
157   EXPECT_FALSE([controller_ validateFields]);
158   NSString* toolTip =
159       l10n_util::GetNSString(IDS_SEARCH_ENGINES_INVALID_TITLE_TT);
160   EXPECT_NSEQ(toolTip, [[controller_ nameField] toolTip]);
161   EXPECT_NSEQ(toolTip, [[controller_ nameImage] toolTip]);
162   [[controller_ nameField] setStringValue:@"Test Name"];
163   EXPECT_FALSE([controller_ validateFields]);
164   EXPECT_EQ([controller_ goodImage], [[controller_ nameImage] image]);
165   EXPECT_FALSE([[controller_ nameField] toolTip]);
166   EXPECT_FALSE([[controller_ nameImage] toolTip]);
167   EXPECT_FALSE([[controller_ doneButton] isEnabled]);
168 }
169
170 // The keyword field is not valid if it is empty.
171 TEST_F(EditSearchEngineControllerTest, ValidateKeyword) {
172   EXPECT_TRUE([controller_ window]);  // Force window load.
173
174   EXPECT_EQ([controller_ badImage], [[controller_ keywordImage] image]);
175   EXPECT_FALSE([controller_ validateFields]);
176   EXPECT_TRUE([[controller_ keywordField] toolTip]);
177   EXPECT_TRUE([[controller_ keywordImage] toolTip]);
178   [[controller_ keywordField] setStringValue:@"foobar"];
179   EXPECT_FALSE([controller_ validateFields]);
180   EXPECT_EQ([controller_ goodImage], [[controller_ keywordImage] image]);
181   EXPECT_FALSE([[controller_ keywordField] toolTip]);
182   EXPECT_FALSE([[controller_ keywordImage] toolTip]);
183   EXPECT_FALSE([[controller_ doneButton] isEnabled]);
184 }
185
186 // Tests that the URL field validates.
187 TEST_F(EditSearchEngineControllerTest, ValidateURL) {
188   EXPECT_TRUE([controller_ window]);  // Force window to load.
189
190   EXPECT_EQ([controller_ badImage], [[controller_ urlImage] image]);
191   EXPECT_FALSE([controller_ validateFields]);
192   NSString* toolTip =
193       l10n_util::GetNSString(IDS_SEARCH_ENGINES_INVALID_URL_TT);
194   EXPECT_NSEQ(toolTip, [[controller_ urlField] toolTip]);
195   EXPECT_NSEQ(toolTip, [[controller_ urlImage] toolTip]);
196   [[controller_ urlField] setStringValue:@"http://foo-bar.com"];
197   EXPECT_FALSE([controller_ validateFields]);
198   EXPECT_EQ([controller_ goodImage], [[controller_ urlImage] image]);
199   EXPECT_FALSE([[controller_ urlField] toolTip]);
200   EXPECT_FALSE([[controller_ urlImage] toolTip]);
201   EXPECT_FALSE([[controller_ doneButton] isEnabled]);
202 }
203
204 // Tests that if the user enters all valid data that the UI reflects that
205 // and that they can save.
206 TEST_F(EditSearchEngineControllerTest, ValidateFields) {
207   EXPECT_TRUE([controller_ window]);  // Force window to load.
208
209   // State before entering data.
210   EXPECT_EQ([controller_ badImage], [[controller_ nameImage] image]);
211   EXPECT_EQ([controller_ badImage], [[controller_ keywordImage] image]);
212   EXPECT_EQ([controller_ badImage], [[controller_ urlImage] image]);
213   EXPECT_FALSE([[controller_ doneButton] isEnabled]);
214   EXPECT_FALSE([controller_ validateFields]);
215
216   [[controller_ nameField] setStringValue:@"Test Name"];
217   EXPECT_FALSE([controller_ validateFields]);
218   EXPECT_EQ([controller_ goodImage], [[controller_ nameImage] image]);
219   EXPECT_FALSE([[controller_ doneButton] isEnabled]);
220
221   [[controller_ keywordField] setStringValue:@"foobar"];
222   EXPECT_FALSE([controller_ validateFields]);
223   EXPECT_EQ([controller_ goodImage], [[controller_ keywordImage] image]);
224   EXPECT_FALSE([[controller_ doneButton] isEnabled]);
225
226   // Once the URL is entered, we should have all 3 valid fields.
227   [[controller_ urlField] setStringValue:@"http://foo-bar.com"];
228   EXPECT_TRUE([controller_ validateFields]);
229   EXPECT_EQ([controller_ goodImage], [[controller_ urlImage] image]);
230   EXPECT_TRUE([[controller_ doneButton] isEnabled]);
231 }
232
233 // Tests editing an existing TemplateURL.
234 TEST_F(EditSearchEngineControllerTest, EditTemplateURL) {
235   TemplateURLData data;
236   data.short_name = base::ASCIIToUTF16("Foobar");
237   data.SetKeyword(base::ASCIIToUTF16("keyword"));
238   std::string urlString = TemplateURLRef::DisplayURLToURLRef(
239       base::ASCIIToUTF16("http://foo-bar.com"));
240   data.SetURL(urlString);
241   TemplateURL url(data);
242   FakeEditSearchEngineController *controller =
243       [[FakeEditSearchEngineController alloc] initWithProfile:profile()
244                                                      delegate:nil
245                                                   templateURL:&url];
246   EXPECT_TRUE([controller window]);
247   NSString* title = l10n_util::GetNSString(
248       IDS_SEARCH_ENGINES_EDITOR_EDIT_WINDOW_TITLE);
249   EXPECT_NSEQ(title, [[controller window] title]);
250   NSString* nameString = [[controller nameField] stringValue];
251   EXPECT_NSEQ(@"Foobar", nameString);
252   NSString* keywordString = [[controller keywordField] stringValue];
253   EXPECT_NSEQ(@"keyword", keywordString);
254   NSString* urlValueString = [[controller urlField] stringValue];
255   EXPECT_NSEQ(@"http://foo-bar.com", urlValueString);
256   EXPECT_TRUE([controller validateFields]);
257   [controller close];
258 }
259
260 }  // namespace