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