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

Side by Side Diff: chrome/browser/autocomplete/keyword_provider_unittest.cc

Issue 17022004: Replace --google-base-suggest-url and --instant-url with --google-base-url. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 #include "base/command_line.h"
5 #include "base/message_loop.h" 6 #include "base/message_loop.h"
6 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
7 #include "chrome/browser/autocomplete/autocomplete_match.h" 8 #include "chrome/browser/autocomplete/autocomplete_match.h"
8 #include "chrome/browser/autocomplete/keyword_provider.h" 9 #include "chrome/browser/autocomplete/keyword_provider.h"
9 #include "chrome/browser/search_engines/template_url.h" 10 #include "chrome/browser/search_engines/template_url.h"
10 #include "chrome/browser/search_engines/template_url_service.h" 11 #include "chrome/browser/search_engines/template_url_service.h"
12 #include "chrome/common/chrome_switches.h"
11 #include "chrome/test/base/testing_browser_process.h" 13 #include "chrome/test/base/testing_browser_process.h"
12 #include "googleurl/src/gurl.h" 14 #include "googleurl/src/gurl.h"
13 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
14 16
15 class KeywordProviderTest : public testing::Test { 17 class KeywordProviderTest : public testing::Test {
16 protected: 18 protected:
17 template<class ResultType> 19 template<class ResultType>
18 struct test_data { 20 struct test_data {
19 const string16 input; 21 const string16 input;
20 const size_t num_results; 22 const size_t num_results;
21 const ResultType output[3]; 23 const ResultType output[3];
22 }; 24 };
23 25
24 KeywordProviderTest() : kw_provider_(NULL) { } 26 KeywordProviderTest() : kw_provider_(NULL) { }
25 virtual ~KeywordProviderTest() { } 27 virtual ~KeywordProviderTest() { }
26 28
27 virtual void SetUp(); 29 virtual void SetUp();
28 virtual void TearDown(); 30 virtual void TearDown();
29 31
30 template<class ResultType> 32 template<class ResultType>
31 void RunTest(test_data<ResultType>* keyword_cases, 33 void RunTest(test_data<ResultType>* keyword_cases,
32 int num_cases, 34 int num_cases,
33 ResultType AutocompleteMatch::* member); 35 ResultType AutocompleteMatch::* member);
34 36
35 protected: 37 protected:
38 static const TemplateURLService::Initializer kTestData[];
39
36 scoped_refptr<KeywordProvider> kw_provider_; 40 scoped_refptr<KeywordProvider> kw_provider_;
37 scoped_ptr<TemplateURLService> model_; 41 scoped_ptr<TemplateURLService> model_;
38 }; 42 };
39 43
44 // static
45 const TemplateURLService::Initializer KeywordProviderTest::kTestData[] = {
46 { "aa", "aa.com?foo=%s", "aa" },
47 { "aaaa", "http://aaaa/?aaaa=1&b=%s&c", "aaaa" },
48 { "aaaaa", "%s", "aaaaa" },
49 { "ab", "bogus URL %s", "ab" },
50 { "weasel", "weasel%sweasel", "weasel" },
51 { "www", " +%2B?=%sfoo ", "www" },
52 { "z", "%s=z", "z" },
53 };
54
40 void KeywordProviderTest::SetUp() { 55 void KeywordProviderTest::SetUp() {
41 static const TemplateURLService::Initializer kTestKeywordData[] = { 56 model_.reset(new TemplateURLService(kTestData, arraysize(kTestData)));
42 { "aa", "aa.com?foo=%s", "aa" },
43 { "aaaa", "http://aaaa/?aaaa=1&b=%s&c", "aaaa" },
44 { "aaaaa", "%s", "aaaaa" },
45 { "ab", "bogus URL %s", "ab" },
46 { "weasel", "weasel%sweasel", "weasel" },
47 { "www", " +%2B?=%sfoo ", "www" },
48 { "z", "%s=z", "z" },
49 };
50
51 model_.reset(new TemplateURLService(kTestKeywordData,
52 arraysize(kTestKeywordData)));
53 kw_provider_ = new KeywordProvider(NULL, model_.get()); 57 kw_provider_ = new KeywordProvider(NULL, model_.get());
54 } 58 }
55 59
56 void KeywordProviderTest::TearDown() { 60 void KeywordProviderTest::TearDown() {
57 model_.reset(); 61 model_.reset();
58 kw_provider_ = NULL; 62 kw_provider_ = NULL;
59 } 63 }
60 64
61 template<class ResultType> 65 template<class ResultType>
62 void KeywordProviderTest::RunTest( 66 void KeywordProviderTest::RunTest(
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 {ASCIIToUTF16("https://z"), 1, {ASCIIToUTF16("z ")}}, 131 {ASCIIToUTF16("https://z"), 1, {ASCIIToUTF16("z ")}},
128 }; 132 };
129 133
130 RunTest<string16>(edit_cases, arraysize(edit_cases), 134 RunTest<string16>(edit_cases, arraysize(edit_cases),
131 &AutocompleteMatch::fill_into_edit); 135 &AutocompleteMatch::fill_into_edit);
132 } 136 }
133 137
134 TEST_F(KeywordProviderTest, URL) { 138 TEST_F(KeywordProviderTest, URL) {
135 test_data<GURL> url_cases[] = { 139 test_data<GURL> url_cases[] = {
136 // No query input -> empty destination URL. 140 // No query input -> empty destination URL.
137 {ASCIIToUTF16("z"), 1, {GURL()}}, 141 {ASCIIToUTF16("z"), 1, {GURL()}},
138 {ASCIIToUTF16("z \t"), 1, {GURL()}}, 142 {ASCIIToUTF16("z \t"), 1, {GURL()}},
139 143
140 // Check that tokenization only collapses whitespace between first tokens 144 // Check that tokenization only collapses whitespace between first tokens
141 // and query input, but not rest of URL, is escaped. 145 // and query input, but not rest of URL, is escaped.
142 {ASCIIToUTF16("w bar +baz"), 2, {GURL(" +%2B?=bar+%2Bbazfoo "), 146 {ASCIIToUTF16("w bar +baz"), 2, {GURL(" +%2B?=bar+%2Bbazfoo "),
143 GURL("bar+%2Bbaz=z")}}, 147 GURL("bar+%2Bbaz=z")}},
144 148
145 // Substitution should work with various locations of the "%s". 149 // Substitution should work with various locations of the "%s".
146 {ASCIIToUTF16("aaa 1a2b"), 2, {GURL("http://aaaa/?aaaa=1&b=1a2b&c"), 150 {ASCIIToUTF16("aaa 1a2b"), 2, {GURL("http://aaaa/?aaaa=1&b=1a2b&c"),
147 GURL("1a2b")}}, 151 GURL("1a2b")}},
148 {ASCIIToUTF16("a 1 2 3"), 3, {GURL("aa.com?foo=1+2+3"), 152 {ASCIIToUTF16("a 1 2 3"), 3, {GURL("aa.com?foo=1+2+3"),
149 GURL("bogus URL 1+2+3"), 153 GURL("bogus URL 1+2+3"),
150 GURL("http://aaaa/?aaaa=1&b=1+2+3&c")}}, 154 GURL("http://aaaa/?aaaa=1&b=1+2+3&c")}},
151 {ASCIIToUTF16("www.w w"), 2, {GURL(" +%2B?=wfoo "), 155 {ASCIIToUTF16("www.w w"), 2, {GURL(" +%2B?=wfoo "),
152 GURL("weaselwweasel")}}, 156 GURL("weaselwweasel")}},
153 }; 157 };
154 158
155 RunTest<GURL>(url_cases, arraysize(url_cases), 159 RunTest<GURL>(url_cases, arraysize(url_cases),
156 &AutocompleteMatch::destination_url); 160 &AutocompleteMatch::destination_url);
157 } 161 }
158 162
159 TEST_F(KeywordProviderTest, Contents) { 163 TEST_F(KeywordProviderTest, Contents) {
160 test_data<string16> contents_cases[] = { 164 test_data<string16> contents_cases[] = {
161 // No query input -> substitute "<enter query>" into contents. 165 // No query input -> substitute "<enter query>" into contents.
162 {ASCIIToUTF16("z"), 1, 166 {ASCIIToUTF16("z"), 1,
(...skipping 19 matching lines...) Expand all
182 ASCIIToUTF16("Search weasel for w")}}, 186 ASCIIToUTF16("Search weasel for w")}},
183 // Also, check that tokenization only collapses whitespace between first 187 // Also, check that tokenization only collapses whitespace between first
184 // tokens and contents are not escaped or unescaped. 188 // tokens and contents are not escaped or unescaped.
185 {ASCIIToUTF16("a 1 2+ 3"), 3, 189 {ASCIIToUTF16("a 1 2+ 3"), 3,
186 {ASCIIToUTF16("Search aa for 1 2+ 3"), 190 {ASCIIToUTF16("Search aa for 1 2+ 3"),
187 ASCIIToUTF16("Search ab for 1 2+ 3"), 191 ASCIIToUTF16("Search ab for 1 2+ 3"),
188 ASCIIToUTF16("Search aaaa for 1 2+ 3")}}, 192 ASCIIToUTF16("Search aaaa for 1 2+ 3")}},
189 }; 193 };
190 194
191 RunTest<string16>(contents_cases, arraysize(contents_cases), 195 RunTest<string16>(contents_cases, arraysize(contents_cases),
192 &AutocompleteMatch::contents); 196 &AutocompleteMatch::contents);
193 }
194
195 TEST_F(KeywordProviderTest, DISABLED_Description) {
196 test_data<string16> description_cases[] = {
197 // Whole keyword should be returned for both exact and inexact matches.
198 {ASCIIToUTF16("z foo"), 1, {ASCIIToUTF16("(Keyword: z)")}},
199 {ASCIIToUTF16("a foo"), 3, {ASCIIToUTF16("(Keyword: aa)"),
200 ASCIIToUTF16("(Keyword: ab)"),
201 ASCIIToUTF16("(Keyword: aaaa)")}},
202 {ASCIIToUTF16("ftp://www.www w"), 0, {}},
203 {ASCIIToUTF16("http://www.ab w"), 1, {ASCIIToUTF16("(Keyword: ab)")}},
204
205 // Keyword should be returned regardless of query input.
206 {ASCIIToUTF16("z"), 1, {ASCIIToUTF16("(Keyword: z)")}},
207 {ASCIIToUTF16("z \t"), 1, {ASCIIToUTF16("(Keyword: z)")}},
208 {ASCIIToUTF16("z a b c++"), 1, {ASCIIToUTF16("(Keyword: z)")}},
209 };
210
211 RunTest<string16>(description_cases, arraysize(description_cases),
212 &AutocompleteMatch::description);
213 } 197 }
214 198
215 TEST_F(KeywordProviderTest, AddKeyword) { 199 TEST_F(KeywordProviderTest, AddKeyword) {
216 TemplateURLData data; 200 TemplateURLData data;
217 data.short_name = ASCIIToUTF16("Test"); 201 data.short_name = ASCIIToUTF16("Test");
218 string16 keyword(ASCIIToUTF16("foo")); 202 string16 keyword(ASCIIToUTF16("foo"));
219 data.SetKeyword(keyword); 203 data.SetKeyword(keyword);
220 data.SetURL("http://www.google.com/foo?q={searchTerms}"); 204 data.SetURL("http://www.google.com/foo?q={searchTerms}");
221 TemplateURL* template_url = new TemplateURL(NULL, data); 205 TemplateURL* template_url = new TemplateURL(NULL, data);
222 model_->Add(template_url); 206 model_->Add(template_url);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 KeywordProvider::GetSubstitutingTemplateURLForInput(model_.get(), 271 KeywordProvider::GetSubstitutingTemplateURLForInput(model_.get(),
288 &input); 272 &input);
289 if (cases[i].expected_url.empty()) 273 if (cases[i].expected_url.empty())
290 EXPECT_FALSE(url); 274 EXPECT_FALSE(url);
291 else 275 else
292 EXPECT_EQ(cases[i].expected_url, url->url()); 276 EXPECT_EQ(cases[i].expected_url, url->url());
293 EXPECT_EQ(ASCIIToUTF16(cases[i].updated_text), input.text()); 277 EXPECT_EQ(ASCIIToUTF16(cases[i].updated_text), input.text());
294 EXPECT_EQ(cases[i].updated_cursor_position, input.cursor_position()); 278 EXPECT_EQ(cases[i].updated_cursor_position, input.cursor_position());
295 } 279 }
296 } 280 }
281
282 // If extra query params are specified on the command line, they should be
283 // reflected (only) in the default search provider's destination URL.
284 TEST_F(KeywordProviderTest, ExtraQueryParams) {
285 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
286 switches::kExtraSearchQueryParams, "a=b");
287
288 test_data<GURL> url_cases[] = {
289 {ASCIIToUTF16("a 1 2 3"), 3, {GURL("aa.com?a=b&foo=1+2+3"),
290 GURL("bogus URL 1+2+3"),
291 GURL("http://aaaa/?aaaa=1&b=1+2+3&c")}},
292 };
293
294 RunTest<GURL>(url_cases, arraysize(url_cases),
295 &AutocompleteMatch::destination_url);
296 }
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/keyword_provider.cc ('k') | chrome/browser/autocomplete/search_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698