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

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

Issue 6306011: Remove wstring from autocomplete. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/message_loop.h" 5 #include "base/message_loop.h"
6 #include "base/utf_string_conversions.h" 6 #include "base/utf_string_conversions.h"
7 #include "chrome/browser/autocomplete/autocomplete_match.h" 7 #include "chrome/browser/autocomplete/autocomplete_match.h"
8 #include "chrome/browser/autocomplete/keyword_provider.h" 8 #include "chrome/browser/autocomplete/keyword_provider.h"
9 #include "chrome/browser/search_engines/template_url.h" 9 #include "chrome/browser/search_engines/template_url.h"
10 #include "chrome/browser/search_engines/template_url_model.h" 10 #include "chrome/browser/search_engines/template_url_model.h"
11 #include "googleurl/src/gurl.h" 11 #include "googleurl/src/gurl.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 class KeywordProviderTest : public testing::Test { 14 class KeywordProviderTest : public testing::Test {
15 protected: 15 protected:
16 template<class ResultType> 16 template<class ResultType>
17 struct test_data { 17 struct test_data {
18 const std::wstring input; 18 const string16 input;
19 const size_t num_results; 19 const size_t num_results;
20 const ResultType output[3]; 20 const ResultType output[3];
21 }; 21 };
22 22
23 KeywordProviderTest() : kw_provider_(NULL) { } 23 KeywordProviderTest() : kw_provider_(NULL) { }
24 virtual ~KeywordProviderTest() { } 24 virtual ~KeywordProviderTest() { }
25 25
26 virtual void SetUp(); 26 virtual void SetUp();
27 virtual void TearDown(); 27 virtual void TearDown();
28 28
(...skipping 28 matching lines...) Expand all
57 kw_provider_ = NULL; 57 kw_provider_ = NULL;
58 } 58 }
59 59
60 template<class ResultType> 60 template<class ResultType>
61 void KeywordProviderTest::RunTest( 61 void KeywordProviderTest::RunTest(
62 test_data<ResultType>* keyword_cases, 62 test_data<ResultType>* keyword_cases,
63 int num_cases, 63 int num_cases,
64 ResultType AutocompleteMatch::* member) { 64 ResultType AutocompleteMatch::* member) {
65 ACMatches matches; 65 ACMatches matches;
66 for (int i = 0; i < num_cases; ++i) { 66 for (int i = 0; i < num_cases; ++i) {
67 AutocompleteInput input(keyword_cases[i].input, std::wstring(), true, 67 AutocompleteInput input(keyword_cases[i].input, string16(), true,
68 false, true, false); 68 false, true, false);
69 kw_provider_->Start(input, false); 69 kw_provider_->Start(input, false);
70 EXPECT_TRUE(kw_provider_->done()); 70 EXPECT_TRUE(kw_provider_->done());
71 matches = kw_provider_->matches(); 71 matches = kw_provider_->matches();
72 EXPECT_EQ(keyword_cases[i].num_results, matches.size()) << 72 EXPECT_EQ(keyword_cases[i].num_results, matches.size()) <<
73 L"Input was: " + keyword_cases[i].input; 73 ASCIIToUTF16("Input was: ") + keyword_cases[i].input;
74 if (matches.size() == keyword_cases[i].num_results) { 74 if (matches.size() == keyword_cases[i].num_results) {
75 for (size_t j = 0; j < keyword_cases[i].num_results; ++j) { 75 for (size_t j = 0; j < keyword_cases[i].num_results; ++j) {
76 EXPECT_EQ(keyword_cases[i].output[j], matches[j].*member); 76 EXPECT_EQ(keyword_cases[i].output[j], matches[j].*member);
77 } 77 }
78 } 78 }
79 } 79 }
80 } 80 }
81 81
82 TEST_F(KeywordProviderTest, Edit) { 82 TEST_F(KeywordProviderTest, Edit) {
83 test_data<std::wstring> edit_cases[] = { 83 test_data<string16> edit_cases[] = {
84 // Searching for a nonexistent prefix should give nothing. 84 // Searching for a nonexistent prefix should give nothing.
85 {L"Not Found", 0, {}}, 85 {ASCIIToUTF16("Not Found"), 0, {}},
86 {L"aaaaaNot Found", 0, {}}, 86 {ASCIIToUTF16("aaaaaNot Found"), 0, {}},
87 87
88 // Check that tokenization only collapses whitespace between first tokens, 88 // Check that tokenization only collapses whitespace between first tokens,
89 // no-query-input cases have a space appended, and action is not escaped. 89 // no-query-input cases have a space appended, and action is not escaped.
90 {L"z foo", 1, {L"z foo"}}, 90 {ASCIIToUTF16("z foo"), 1, {ASCIIToUTF16("z foo")}},
91 {L"z", 1, {L"z "}}, 91 {ASCIIToUTF16("z"), 1, {ASCIIToUTF16("z ")}},
92 {L"z \t", 1, {L"z "}}, 92 {ASCIIToUTF16("z \t"), 1, {ASCIIToUTF16("z ")}},
93 {L"z a b c++", 1, {L"z a b c++"}}, 93 {ASCIIToUTF16("z a b c++"), 1, {ASCIIToUTF16("z a b c++")}},
94 94
95 // Matches should be limited to three, and sorted in quality order, not 95 // Matches should be limited to three, and sorted in quality order, not
96 // alphabetical. 96 // alphabetical.
97 {L"aaa", 2, {L"aaaa ", L"aaaaa "}}, 97 {ASCIIToUTF16("aaa"), 2, {ASCIIToUTF16("aaaa "),
98 {L"a 1 2 3", 3, {L"aa 1 2 3", L"ab 1 2 3", L"aaaa 1 2 3"}}, 98 ASCIIToUTF16("aaaaa ")}},
99 {L"www.a", 3, {L"aa ", L"ab ", L"aaaa "}}, 99 {ASCIIToUTF16("a 1 2 3"), 3, {ASCIIToUTF16("aa 1 2 3"),
100 ASCIIToUTF16("ab 1 2 3"),
101 ASCIIToUTF16("aaaa 1 2 3")}},
102 {ASCIIToUTF16("www.a"), 3, {ASCIIToUTF16("aa "),
103 ASCIIToUTF16("ab "),
104 ASCIIToUTF16("aaaa ")}},
100 // Exact matches should prevent returning inexact matches. 105 // Exact matches should prevent returning inexact matches.
101 {L"aaaa foo", 1, {L"aaaa foo"}}, 106 {ASCIIToUTF16("aaaa foo"), 1, {ASCIIToUTF16("aaaa foo")}},
102 {L"www.aaaa foo", 1, {L"aaaa foo"}}, 107 {ASCIIToUTF16("www.aaaa foo"), 1, {ASCIIToUTF16("aaaa foo")}},
103 108
104 // Clean up keyword input properly. "http" and "https" are the only 109 // Clean up keyword input properly. "http" and "https" are the only
105 // allowed schemes. 110 // allowed schemes.
106 {L"www", 1, {L"www "}}, 111 {ASCIIToUTF16("www"), 1, {ASCIIToUTF16("www ")}},
107 {L"www.", 0, {}}, 112 {ASCIIToUTF16("www."), 0, {}},
108 {L"www.w w", 2, {L"www w", L"weasel w"}}, 113 {ASCIIToUTF16("www.w w"), 2, {ASCIIToUTF16("www w"),
109 {L"http://www", 1, {L"www "}}, 114 ASCIIToUTF16("weasel w")}},
110 {L"http://www.", 0, {}}, 115 {ASCIIToUTF16("http://www"), 1, {ASCIIToUTF16("www ")}},
111 {L"ftp: blah", 0, {}}, 116 {ASCIIToUTF16("http://www."), 0, {}},
112 {L"mailto:z", 0, {}}, 117 {ASCIIToUTF16("ftp: blah"), 0, {}},
113 {L"ftp://z", 0, {}}, 118 {ASCIIToUTF16("mailto:z"), 0, {}},
114 {L"https://z", 1, {L"z "}}, 119 {ASCIIToUTF16("ftp://z"), 0, {}},
120 {ASCIIToUTF16("https://z"), 1, {ASCIIToUTF16("z ")}},
115 }; 121 };
116 122
117 RunTest<std::wstring>(edit_cases, arraysize(edit_cases), 123 RunTest<string16>(edit_cases, arraysize(edit_cases),
118 &AutocompleteMatch::fill_into_edit); 124 &AutocompleteMatch::fill_into_edit);
119 } 125 }
120 126
121 TEST_F(KeywordProviderTest, URL) { 127 TEST_F(KeywordProviderTest, URL) {
122 test_data<GURL> url_cases[] = { 128 test_data<GURL> url_cases[] = {
123 // No query input -> empty destination URL. 129 // No query input -> empty destination URL.
124 {L"z", 1, {GURL()}}, 130 {ASCIIToUTF16("z"), 1, {GURL()}},
125 {L"z \t", 1, {GURL()}}, 131 {ASCIIToUTF16("z \t"), 1, {GURL()}},
126 132
127 // Check that tokenization only collapses whitespace between first tokens 133 // Check that tokenization only collapses whitespace between first tokens
128 // and query input, but not rest of URL, is escaped. 134 // and query input, but not rest of URL, is escaped.
129 {L"z a b c++", 1, {GURL("a+++b+++c%2B%2B=z")}}, 135 {ASCIIToUTF16("z a b c++"), 1, {GURL("a+++b+++c%2B%2B=z")}},
130 {L"www.www www", 1, {GURL(" +%2B?=wwwfoo ")}}, 136 {ASCIIToUTF16("www.www www"), 1, {GURL(" +%2B?=wwwfoo ")}},
131 137
132 // Substitution should work with various locations of the "%s". 138 // Substitution should work with various locations of the "%s".
133 {L"aaa 1a2b", 2, {GURL("http://aaaa/?aaaa=1&b=1a2b&c"), 139 {ASCIIToUTF16("aaa 1a2b"), 2, {GURL("http://aaaa/?aaaa=1&b=1a2b&c"),
134 GURL("1a2b")}}, 140 GURL("1a2b")}},
135 {L"a 1 2 3", 3, {GURL("aa.com?foo=1+2+3"), GURL("bogus URL 1+2+3"), 141 {ASCIIToUTF16("a 1 2 3"), 3, {GURL("aa.com?foo=1+2+3"),
136 GURL("http://aaaa/?aaaa=1&b=1+2+3&c")}}, 142 GURL("bogus URL 1+2+3"),
137 {L"www.w w", 2, {GURL(" +%2B?=wfoo "), GURL("weaselwweasel")}}, 143 GURL("http://aaaa/?aaaa=1&b=1+2+3&c")}},
144 {ASCIIToUTF16("www.w w"), 2, {GURL(" +%2B?=wfoo "),
145 GURL("weaselwweasel")}},
138 }; 146 };
139 147
140 RunTest<GURL>(url_cases, arraysize(url_cases), 148 RunTest<GURL>(url_cases, arraysize(url_cases),
141 &AutocompleteMatch::destination_url); 149 &AutocompleteMatch::destination_url);
142 } 150 }
143 151
144 TEST_F(KeywordProviderTest, Contents) { 152 TEST_F(KeywordProviderTest, Contents) {
145 test_data<std::wstring> contents_cases[] = { 153 test_data<string16> contents_cases[] = {
146 // No query input -> substitute "<enter query>" into contents. 154 // No query input -> substitute "<enter query>" into contents.
147 {L"z", 1, {L"Search z for <enter query>"}}, 155 {ASCIIToUTF16("z"), 1,
148 {L"z \t", 1, {L"Search z for <enter query>"}}, 156 {ASCIIToUTF16("Search z for <enter query>")}},
157 {ASCIIToUTF16("z \t"), 1,
158 {ASCIIToUTF16("Search z for <enter query>")}},
149 159
150 // Check that tokenization only collapses whitespace between first tokens 160 // Check that tokenization only collapses whitespace between first tokens
151 // and contents are not escaped or unescaped. 161 // and contents are not escaped or unescaped.
152 {L"z a b c++", 1, {L"Search z for a b c++"}}, 162 {ASCIIToUTF16("z a b c++"), 1,
153 {L"www.www www", 1, {L"Search www for www"}}, 163 {ASCIIToUTF16("Search z for a b c++")}},
164 {ASCIIToUTF16("www.www www"), 1, {ASCIIToUTF16("Search www for www")}},
154 165
155 // Substitution should work with various locations of the "%s". 166 // Substitution should work with various locations of the "%s".
156 {L"aaa", 2, {L"Search aaaa for <enter query>", 167 {ASCIIToUTF16("aaa"), 2,
157 L"Search aaaaa for <enter query>"}}, 168 {ASCIIToUTF16("Search aaaa for <enter query>"),
158 {L"a 1 2 3", 3, {L"Search aa for 1 2 3", L"Search ab for 1 2 3", 169 ASCIIToUTF16("Search aaaaa for <enter query>")}},
159 L"Search aaaa for 1 2 3"}}, 170 {ASCIIToUTF16("a 1 2 3"), 3, {ASCIIToUTF16("Search aa for 1 2 3"),
160 {L"www.w w", 2, {L"Search www for w", L"Search weasel for w"}}, 171 ASCIIToUTF16("Search ab for 1 2 3"),
172 ASCIIToUTF16("Search aaaa for 1 2 3")}},
173 {ASCIIToUTF16("www.w w"), 2, {ASCIIToUTF16("Search www for w"),
174 ASCIIToUTF16("Search weasel for w")}},
161 }; 175 };
162 176
163 RunTest<std::wstring>(contents_cases, arraysize(contents_cases), 177 RunTest<string16>(contents_cases, arraysize(contents_cases),
164 &AutocompleteMatch::contents); 178 &AutocompleteMatch::contents);
165 } 179 }
166 180
167 TEST_F(KeywordProviderTest, Description) { 181 TEST_F(KeywordProviderTest, Description) {
168 test_data<std::wstring> description_cases[] = { 182 test_data<string16> description_cases[] = {
169 // Whole keyword should be returned for both exact and inexact matches. 183 // Whole keyword should be returned for both exact and inexact matches.
170 {L"z foo", 1, {L"(Keyword: z)"}}, 184 {ASCIIToUTF16("z foo"), 1, {ASCIIToUTF16("(Keyword: z)")}},
171 {L"a foo", 3, {L"(Keyword: aa)", L"(Keyword: ab)", 185 {ASCIIToUTF16("a foo"), 3, {ASCIIToUTF16("(Keyword: aa)"),
172 L"(Keyword: aaaa)"}}, 186 ASCIIToUTF16("(Keyword: ab)"),
173 {L"ftp://www.www w", 0, {}}, 187 ASCIIToUTF16("(Keyword: aaaa)")}},
174 {L"http://www.ab w", 1, {L"(Keyword: ab)"}}, 188 {ASCIIToUTF16("ftp://www.www w"), 0, {}},
189 {ASCIIToUTF16("http://www.ab w"), 1, {ASCIIToUTF16("(Keyword: ab)")}},
175 190
176 // Keyword should be returned regardless of query input. 191 // Keyword should be returned regardless of query input.
177 {L"z", 1, {L"(Keyword: z)"}}, 192 {ASCIIToUTF16("z"), 1, {ASCIIToUTF16("(Keyword: z)")}},
178 {L"z \t", 1, {L"(Keyword: z)"}}, 193 {ASCIIToUTF16("z \t"), 1, {ASCIIToUTF16("(Keyword: z)")}},
179 {L"z a b c++", 1, {L"(Keyword: z)"}}, 194 {ASCIIToUTF16("z a b c++"), 1, {ASCIIToUTF16("(Keyword: z)")}},
180 }; 195 };
181 196
182 RunTest<std::wstring>(description_cases, arraysize(description_cases), 197 RunTest<string16>(description_cases, arraysize(description_cases),
183 &AutocompleteMatch::description); 198 &AutocompleteMatch::description);
184 } 199 }
185 200
186 TEST_F(KeywordProviderTest, AddKeyword) { 201 TEST_F(KeywordProviderTest, AddKeyword) {
187 TemplateURL* template_url = new TemplateURL(); 202 TemplateURL* template_url = new TemplateURL();
188 string16 keyword(ASCIIToUTF16("foo")); 203 string16 keyword(ASCIIToUTF16("foo"));
189 std::string url("http://www.google.com/foo?q={searchTerms}"); 204 std::string url("http://www.google.com/foo?q={searchTerms}");
190 template_url->SetURL(url, 0, 0); 205 template_url->SetURL(url, 0, 0);
191 template_url->set_keyword(keyword); 206 template_url->set_keyword(keyword);
192 template_url->set_short_name(ASCIIToUTF16("Test")); 207 template_url->set_short_name(ASCIIToUTF16("Test"));
193 model_->Add(template_url); 208 model_->Add(template_url);
194 ASSERT_TRUE(template_url == model_->GetTemplateURLForKeyword(keyword)); 209 ASSERT_TRUE(template_url == model_->GetTemplateURLForKeyword(keyword));
195 } 210 }
196 211
197 TEST_F(KeywordProviderTest, RemoveKeyword) { 212 TEST_F(KeywordProviderTest, RemoveKeyword) {
198 string16 url(ASCIIToUTF16("http://aaaa/?aaaa=1&b={searchTerms}&c")); 213 string16 url(ASCIIToUTF16("http://aaaa/?aaaa=1&b={searchTerms}&c"));
199 model_->Remove(model_->GetTemplateURLForKeyword(ASCIIToUTF16("aaaa"))); 214 model_->Remove(model_->GetTemplateURLForKeyword(ASCIIToUTF16("aaaa")));
200 ASSERT_TRUE(model_->GetTemplateURLForKeyword(ASCIIToUTF16("aaaa")) == NULL); 215 ASSERT_TRUE(model_->GetTemplateURLForKeyword(ASCIIToUTF16("aaaa")) == NULL);
201 } 216 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698