OLD | NEW |
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/base_paths.h" | 5 #include "base/base_paths.h" |
6 #include "base/string_util.h" | 6 #include "base/string_util.h" |
7 #include "base/utf_string_conversions.h" | 7 #include "base/utf_string_conversions.h" |
8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
9 #include "chrome/browser/rlz/rlz.h" | 9 #include "chrome/browser/rlz/rlz.h" |
10 #include "chrome/browser/search_engines/search_terms_data.h" | 10 #include "chrome/browser/search_engines/search_terms_data.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 const std::string& base_url, | 51 const std::string& base_url, |
52 const std::string& base_suggest_url) const { | 52 const std::string& base_suggest_url) const { |
53 TestSearchTermsData search_terms_data(base_url); | 53 TestSearchTermsData search_terms_data(base_url); |
54 EXPECT_EQ(base_suggest_url, search_terms_data.GoogleBaseSuggestURLValue()); | 54 EXPECT_EQ(base_suggest_url, search_terms_data.GoogleBaseSuggestURLValue()); |
55 } | 55 } |
56 | 56 |
57 | 57 |
58 // Actual tests --------------------------------------------------------------- | 58 // Actual tests --------------------------------------------------------------- |
59 | 59 |
60 TEST_F(TemplateURLTest, Defaults) { | 60 TEST_F(TemplateURLTest, Defaults) { |
61 TemplateURL url; | 61 TemplateURLData data; |
62 EXPECT_FALSE(url.show_in_default_list()); | 62 EXPECT_FALSE(data.show_in_default_list); |
63 EXPECT_FALSE(url.safe_for_autoreplace()); | 63 EXPECT_FALSE(data.safe_for_autoreplace); |
64 EXPECT_EQ(0, url.prepopulate_id()); | 64 EXPECT_EQ(0, data.prepopulate_id); |
65 } | 65 } |
66 | 66 |
67 TEST_F(TemplateURLTest, TestValidWithComplete) { | 67 TEST_F(TemplateURLTest, TestValidWithComplete) { |
68 TemplateURL url; | 68 TemplateURLData data; |
69 url.SetURL("{searchTerms}"); | 69 data.SetURL("{searchTerms}"); |
| 70 TemplateURL url(data); |
70 EXPECT_TRUE(url.url_ref().IsValid()); | 71 EXPECT_TRUE(url.url_ref().IsValid()); |
71 } | 72 } |
72 | 73 |
73 TEST_F(TemplateURLTest, URLRefTestSearchTerms) { | 74 TEST_F(TemplateURLTest, URLRefTestSearchTerms) { |
74 struct SearchTermsCase { | 75 struct SearchTermsCase { |
75 const char* url; | 76 const char* url; |
76 const string16 terms; | 77 const string16 terms; |
77 const std::string output; | 78 const std::string output; |
78 bool valid_url; | 79 bool valid_url; |
79 } search_term_cases[] = { | 80 } search_term_cases[] = { |
80 { "http://foo{searchTerms}", ASCIIToUTF16("sea rch/bar"), | 81 { "http://foo{searchTerms}", ASCIIToUTF16("sea rch/bar"), |
81 "http://foosea%20rch%2Fbar", false }, | 82 "http://foosea%20rch%2Fbar", false }, |
82 { "http://foo{searchTerms}?boo=abc", ASCIIToUTF16("sea rch/bar"), | 83 { "http://foo{searchTerms}?boo=abc", ASCIIToUTF16("sea rch/bar"), |
83 "http://foosea%20rch%2Fbar?boo=abc", false }, | 84 "http://foosea%20rch%2Fbar?boo=abc", false }, |
84 { "http://foo/?boo={searchTerms}", ASCIIToUTF16("sea rch/bar"), | 85 { "http://foo/?boo={searchTerms}", ASCIIToUTF16("sea rch/bar"), |
85 "http://foo/?boo=sea+rch%2Fbar", true }, | 86 "http://foo/?boo=sea+rch%2Fbar", true }, |
86 { "http://en.wikipedia.org/{searchTerms}", ASCIIToUTF16("wiki/?"), | 87 { "http://en.wikipedia.org/{searchTerms}", ASCIIToUTF16("wiki/?"), |
87 "http://en.wikipedia.org/wiki%2F%3F", true } | 88 "http://en.wikipedia.org/wiki%2F%3F", true } |
88 }; | 89 }; |
89 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(search_term_cases); ++i) { | 90 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(search_term_cases); ++i) { |
90 const SearchTermsCase& value = search_term_cases[i]; | 91 const SearchTermsCase& value = search_term_cases[i]; |
91 TemplateURL url; | 92 TemplateURLData data; |
92 url.SetURL(value.url); | 93 data.SetURL(value.url); |
| 94 TemplateURL url(data); |
93 EXPECT_TRUE(url.url_ref().IsValid()); | 95 EXPECT_TRUE(url.url_ref().IsValid()); |
94 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 96 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
95 std::string result = url.url_ref().ReplaceSearchTerms(value.terms, | 97 std::string result = url.url_ref().ReplaceSearchTerms(value.terms, |
96 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16()); | 98 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16()); |
97 EXPECT_EQ(value.output, result); | 99 EXPECT_EQ(value.output, result); |
98 GURL result_url(result); | 100 GURL result_url(result); |
99 EXPECT_EQ(value.valid_url, result_url.is_valid()); | 101 EXPECT_EQ(value.valid_url, result_url.is_valid()); |
100 } | 102 } |
101 } | 103 } |
102 | 104 |
103 TEST_F(TemplateURLTest, URLRefTestCount) { | 105 TEST_F(TemplateURLTest, URLRefTestCount) { |
104 TemplateURL url; | 106 TemplateURLData data; |
105 url.SetURL("http://foo{searchTerms}{count?}"); | 107 data.SetURL("http://foo{searchTerms}{count?}"); |
| 108 TemplateURL url(data); |
106 EXPECT_TRUE(url.url_ref().IsValid()); | 109 EXPECT_TRUE(url.url_ref().IsValid()); |
107 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 110 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
108 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), | 111 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), |
109 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 112 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
110 ASSERT_TRUE(result.is_valid()); | 113 ASSERT_TRUE(result.is_valid()); |
111 EXPECT_EQ("http://foox/", result.spec()); | 114 EXPECT_EQ("http://foox/", result.spec()); |
112 } | 115 } |
113 | 116 |
114 TEST_F(TemplateURLTest, URLRefTestCount2) { | 117 TEST_F(TemplateURLTest, URLRefTestCount2) { |
115 TemplateURL url; | 118 TemplateURLData data; |
116 url.SetURL("http://foo{searchTerms}{count}"); | 119 data.SetURL("http://foo{searchTerms}{count}"); |
| 120 TemplateURL url(data); |
117 EXPECT_TRUE(url.url_ref().IsValid()); | 121 EXPECT_TRUE(url.url_ref().IsValid()); |
118 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 122 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
119 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), | 123 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), |
120 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 124 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
121 ASSERT_TRUE(result.is_valid()); | 125 ASSERT_TRUE(result.is_valid()); |
122 EXPECT_EQ("http://foox10/", result.spec()); | 126 EXPECT_EQ("http://foox10/", result.spec()); |
123 } | 127 } |
124 | 128 |
125 TEST_F(TemplateURLTest, URLRefTestIndices) { | 129 TEST_F(TemplateURLTest, URLRefTestIndices) { |
126 TemplateURL url; | 130 TemplateURLData data; |
127 url.SetURL("http://foo{searchTerms}x{startIndex?}y{startPage?}"); | 131 data.SetURL("http://foo{searchTerms}x{startIndex?}y{startPage?}"); |
| 132 TemplateURL url(data); |
128 EXPECT_TRUE(url.url_ref().IsValid()); | 133 EXPECT_TRUE(url.url_ref().IsValid()); |
129 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 134 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
130 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), | 135 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), |
131 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 136 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
132 ASSERT_TRUE(result.is_valid()); | 137 ASSERT_TRUE(result.is_valid()); |
133 EXPECT_EQ("http://fooxxy/", result.spec()); | 138 EXPECT_EQ("http://fooxxy/", result.spec()); |
134 } | 139 } |
135 | 140 |
136 TEST_F(TemplateURLTest, URLRefTestIndices2) { | 141 TEST_F(TemplateURLTest, URLRefTestIndices2) { |
137 TemplateURL url; | 142 TemplateURLData data; |
138 url.SetURL("http://foo{searchTerms}x{startIndex}y{startPage}"); | 143 data.SetURL("http://foo{searchTerms}x{startIndex}y{startPage}"); |
| 144 TemplateURL url(data); |
139 EXPECT_TRUE(url.url_ref().IsValid()); | 145 EXPECT_TRUE(url.url_ref().IsValid()); |
140 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 146 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
141 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), | 147 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), |
142 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 148 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
143 ASSERT_TRUE(result.is_valid()); | 149 ASSERT_TRUE(result.is_valid()); |
144 EXPECT_EQ("http://fooxx1y1/", result.spec()); | 150 EXPECT_EQ("http://fooxx1y1/", result.spec()); |
145 } | 151 } |
146 | 152 |
147 TEST_F(TemplateURLTest, URLRefTestEncoding) { | 153 TEST_F(TemplateURLTest, URLRefTestEncoding) { |
148 TemplateURL url; | 154 TemplateURLData data; |
149 url.SetURL("http://foo{searchTerms}x{inputEncoding?}y{outputEncoding?}a"); | 155 data.SetURL("http://foo{searchTerms}x{inputEncoding?}y{outputEncoding?}a"); |
| 156 TemplateURL url(data); |
150 EXPECT_TRUE(url.url_ref().IsValid()); | 157 EXPECT_TRUE(url.url_ref().IsValid()); |
151 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 158 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
152 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), | 159 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), |
153 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 160 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
154 ASSERT_TRUE(result.is_valid()); | 161 ASSERT_TRUE(result.is_valid()); |
155 EXPECT_EQ("http://fooxxutf-8ya/", result.spec()); | 162 EXPECT_EQ("http://fooxxutf-8ya/", result.spec()); |
156 } | 163 } |
157 | 164 |
158 // Test that setting the prepopulate ID from TemplateURL causes the stored | 165 // Test that setting the prepopulate ID from TemplateURL causes the stored |
159 // TemplateURLRef to handle parsing the URL parameters differently. | 166 // TemplateURLRef to handle parsing the URL parameters differently. |
160 TEST_F(TemplateURLTest, SetPrepopulatedAndParse) { | 167 TEST_F(TemplateURLTest, SetPrepopulatedAndParse) { |
161 TemplateURL url; | 168 TemplateURLData data; |
162 url.SetURL("http://foo{fhqwhgads}"); | 169 data.SetURL("http://foo{fhqwhgads}"); |
| 170 TemplateURL url(data); |
163 TemplateURLRef::Replacements replacements; | 171 TemplateURLRef::Replacements replacements; |
164 bool valid = false; | 172 bool valid = false; |
165 EXPECT_EQ("http://foo{fhqwhgads}", | 173 EXPECT_EQ("http://foo{fhqwhgads}", |
166 url.url_ref().ParseURL("http://foo{fhqwhgads}", &replacements, &valid)); | 174 url.url_ref().ParseURL("http://foo{fhqwhgads}", &replacements, &valid)); |
167 EXPECT_TRUE(replacements.empty()); | 175 EXPECT_TRUE(replacements.empty()); |
168 EXPECT_TRUE(valid); | 176 EXPECT_TRUE(valid); |
169 | 177 |
170 url.SetPrepopulateId(123); | 178 data.prepopulate_id = 123; |
171 EXPECT_EQ("http://foo", | 179 TemplateURL url2(data); |
172 url.url_ref().ParseURL("http://foo{fhqwhgads}", &replacements, &valid)); | 180 EXPECT_EQ("http://foo", url2.url_ref().ParseURL("http://foo{fhqwhgads}", |
| 181 &replacements, &valid)); |
173 EXPECT_TRUE(replacements.empty()); | 182 EXPECT_TRUE(replacements.empty()); |
174 EXPECT_TRUE(valid); | 183 EXPECT_TRUE(valid); |
175 } | 184 } |
176 | 185 |
177 TEST_F(TemplateURLTest, InputEncodingBeforeSearchTerm) { | 186 TEST_F(TemplateURLTest, InputEncodingBeforeSearchTerm) { |
178 TemplateURL url; | 187 TemplateURLData data; |
179 url.SetURL("http://foox{inputEncoding?}a{searchTerms}y{outputEncoding?}b"); | 188 data.SetURL("http://foox{inputEncoding?}a{searchTerms}y{outputEncoding?}b"); |
| 189 TemplateURL url(data); |
180 EXPECT_TRUE(url.url_ref().IsValid()); | 190 EXPECT_TRUE(url.url_ref().IsValid()); |
181 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 191 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
182 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), | 192 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), |
183 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 193 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
184 ASSERT_TRUE(result.is_valid()); | 194 ASSERT_TRUE(result.is_valid()); |
185 EXPECT_EQ("http://fooxutf-8axyb/", result.spec()); | 195 EXPECT_EQ("http://fooxutf-8axyb/", result.spec()); |
186 } | 196 } |
187 | 197 |
188 TEST_F(TemplateURLTest, URLRefTestEncoding2) { | 198 TEST_F(TemplateURLTest, URLRefTestEncoding2) { |
189 TemplateURL url; | 199 TemplateURLData data; |
190 url.SetURL("http://foo{searchTerms}x{inputEncoding}y{outputEncoding}a"); | 200 data.SetURL("http://foo{searchTerms}x{inputEncoding}y{outputEncoding}a"); |
| 201 TemplateURL url(data); |
191 EXPECT_TRUE(url.url_ref().IsValid()); | 202 EXPECT_TRUE(url.url_ref().IsValid()); |
192 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 203 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
193 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), | 204 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), |
194 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 205 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
195 ASSERT_TRUE(result.is_valid()); | 206 ASSERT_TRUE(result.is_valid()); |
196 EXPECT_EQ("http://fooxxutf-8yutf-8a/", result.spec()); | 207 EXPECT_EQ("http://fooxxutf-8yutf-8a/", result.spec()); |
197 } | 208 } |
198 | 209 |
199 TEST_F(TemplateURLTest, URLRefTestSearchTermsUsingTermsData) { | 210 TEST_F(TemplateURLTest, URLRefTestSearchTermsUsingTermsData) { |
200 struct SearchTermsCase { | 211 struct SearchTermsCase { |
201 const char* url; | 212 const char* url; |
202 const string16 terms; | 213 const string16 terms; |
203 const char* output; | 214 const char* output; |
204 } search_term_cases[] = { | 215 } search_term_cases[] = { |
205 { "{google:baseURL}{language}{searchTerms}", string16(), | 216 { "{google:baseURL}{language}{searchTerms}", string16(), |
206 "http://example.com/e/en" }, | 217 "http://example.com/e/en" }, |
207 { "{google:baseSuggestURL}{searchTerms}", string16(), | 218 { "{google:baseSuggestURL}{searchTerms}", string16(), |
208 "http://example.com/complete/" } | 219 "http://example.com/complete/" } |
209 }; | 220 }; |
210 | 221 |
211 TestSearchTermsData search_terms_data("http://example.com/e/"); | 222 TestSearchTermsData search_terms_data("http://example.com/e/"); |
212 TemplateURL url; | 223 TemplateURLData data; |
213 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(search_term_cases); ++i) { | 224 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(search_term_cases); ++i) { |
214 const SearchTermsCase& value = search_term_cases[i]; | 225 const SearchTermsCase& value = search_term_cases[i]; |
215 url.SetURL(value.url); | 226 data.SetURL(value.url); |
| 227 TemplateURL url(data); |
216 EXPECT_TRUE(url.url_ref().IsValid()); | 228 EXPECT_TRUE(url.url_ref().IsValid()); |
217 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 229 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
218 GURL result(url.url_ref().ReplaceSearchTermsUsingTermsData(value.terms, | 230 GURL result(url.url_ref().ReplaceSearchTermsUsingTermsData(value.terms, |
219 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16(), | 231 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16(), |
220 search_terms_data)); | 232 search_terms_data)); |
221 ASSERT_TRUE(result.is_valid()); | 233 ASSERT_TRUE(result.is_valid()); |
222 EXPECT_EQ(value.output, result.spec()); | 234 EXPECT_EQ(value.output, result.spec()); |
223 } | 235 } |
224 } | 236 } |
225 | 237 |
(...skipping 11 matching lines...) Expand all Loading... |
237 {"%e4%bd%a05%e5%a5%bd+to+you", WideToUTF16(L"\x4f60\x35\x597d to you")}, | 249 {"%e4%bd%a05%e5%a5%bd+to+you", WideToUTF16(L"\x4f60\x35\x597d to you")}, |
238 // Undecodable input should stay escaped. | 250 // Undecodable input should stay escaped. |
239 {"%91%01+abcd", WideToUTF16(L"%91%01 abcd")}, | 251 {"%91%01+abcd", WideToUTF16(L"%91%01 abcd")}, |
240 // Make sure we convert %2B to +. | 252 // Make sure we convert %2B to +. |
241 {"C%2B%2B", ASCIIToUTF16("C++")}, | 253 {"C%2B%2B", ASCIIToUTF16("C++")}, |
242 // C%2B is escaped as C%252B, make sure we unescape it properly. | 254 // C%2B is escaped as C%252B, make sure we unescape it properly. |
243 {"C%252B", ASCIIToUTF16("C%2B")}, | 255 {"C%252B", ASCIIToUTF16("C%2B")}, |
244 }; | 256 }; |
245 | 257 |
246 // Set one input encoding: big-5. This is so we can test fallback to UTF-8. | 258 // Set one input encoding: big-5. This is so we can test fallback to UTF-8. |
247 TemplateURL url; | 259 TemplateURLData data; |
248 url.SetURL("http://foo?q={searchTerms}"); | 260 data.SetURL("http://foo?q={searchTerms}"); |
249 url.add_input_encoding("big-5"); | 261 data.input_encodings.push_back("big-5"); |
| 262 TemplateURL url(data); |
250 EXPECT_TRUE(url.url_ref().IsValid()); | 263 EXPECT_TRUE(url.url_ref().IsValid()); |
251 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 264 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
252 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(to_wide_cases); i++) { | 265 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(to_wide_cases); i++) { |
253 EXPECT_EQ(to_wide_cases[i].expected_decoded_term, | 266 EXPECT_EQ(to_wide_cases[i].expected_decoded_term, |
254 url.url_ref().SearchTermToString16( | 267 url.url_ref().SearchTermToString16( |
255 to_wide_cases[i].encoded_search_term)); | 268 to_wide_cases[i].encoded_search_term)); |
256 } | 269 } |
257 } | 270 } |
258 | 271 |
259 TEST_F(TemplateURLTest, DisplayURLToURLRef) { | 272 TEST_F(TemplateURLTest, DisplayURLToURLRef) { |
260 struct TestData { | 273 struct TestData { |
261 const std::string url; | 274 const std::string url; |
262 const string16 expected_result; | 275 const string16 expected_result; |
263 } test_data[] = { | 276 } test_data[] = { |
264 { "http://foo{searchTerms}x{inputEncoding}y{outputEncoding}a", | 277 { "http://foo{searchTerms}x{inputEncoding}y{outputEncoding}a", |
265 ASCIIToUTF16("http://foo%sx{inputEncoding}y{outputEncoding}a") }, | 278 ASCIIToUTF16("http://foo%sx{inputEncoding}y{outputEncoding}a") }, |
266 { "http://X", | 279 { "http://X", |
267 ASCIIToUTF16("http://X") }, | 280 ASCIIToUTF16("http://X") }, |
268 { "http://foo{searchTerms", | 281 { "http://foo{searchTerms", |
269 ASCIIToUTF16("http://foo{searchTerms") }, | 282 ASCIIToUTF16("http://foo{searchTerms") }, |
270 { "http://foo{searchTerms}{language}", | 283 { "http://foo{searchTerms}{language}", |
271 ASCIIToUTF16("http://foo%s{language}") }, | 284 ASCIIToUTF16("http://foo%s{language}") }, |
272 }; | 285 }; |
| 286 TemplateURLData data; |
273 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 287 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { |
274 TemplateURL url; | 288 data.SetURL(test_data[i].url); |
275 url.SetURL(test_data[i].url); | 289 TemplateURL url(data); |
276 EXPECT_EQ(test_data[i].expected_result, url.url_ref().DisplayURL()); | 290 EXPECT_EQ(test_data[i].expected_result, url.url_ref().DisplayURL()); |
277 EXPECT_EQ(test_data[i].url, | 291 EXPECT_EQ(test_data[i].url, |
278 TemplateURLRef::DisplayURLToURLRef(url.url_ref().DisplayURL())); | 292 TemplateURLRef::DisplayURLToURLRef(url.url_ref().DisplayURL())); |
279 } | 293 } |
280 } | 294 } |
281 | 295 |
282 TEST_F(TemplateURLTest, ReplaceSearchTerms) { | 296 TEST_F(TemplateURLTest, ReplaceSearchTerms) { |
283 struct TestData { | 297 struct TestData { |
284 const std::string url; | 298 const std::string url; |
285 const std::string expected_result; | 299 const std::string expected_result; |
(...skipping 16 matching lines...) Expand all Loading... |
302 "http://foo/{language}aUTF-8aXa" }, | 316 "http://foo/{language}aUTF-8aXa" }, |
303 { "http://foo/{searchTerms}a{language}a{inputEncoding}a", | 317 { "http://foo/{searchTerms}a{language}a{inputEncoding}a", |
304 "http://foo/Xa{language}aUTF-8a" }, | 318 "http://foo/Xa{language}aUTF-8a" }, |
305 { "http://foo/{searchTerms}a{inputEncoding}a{language}a", | 319 { "http://foo/{searchTerms}a{inputEncoding}a{language}a", |
306 "http://foo/XaUTF-8a{language}a" }, | 320 "http://foo/XaUTF-8a{language}a" }, |
307 { "http://foo/{inputEncoding}a{searchTerms}a{language}a", | 321 { "http://foo/{inputEncoding}a{searchTerms}a{language}a", |
308 "http://foo/UTF-8aXa{language}a" }, | 322 "http://foo/UTF-8aXa{language}a" }, |
309 { "http://foo/{inputEncoding}a{language}a{searchTerms}a", | 323 { "http://foo/{inputEncoding}a{language}a{searchTerms}a", |
310 "http://foo/UTF-8a{language}aXa" }, | 324 "http://foo/UTF-8a{language}aXa" }, |
311 }; | 325 }; |
312 TemplateURL url; | 326 TemplateURLData data; |
313 url.add_input_encoding("UTF-8"); | 327 data.input_encodings.push_back("UTF-8"); |
314 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 328 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { |
315 url.SetURL(test_data[i].url); | 329 data.SetURL(test_data[i].url); |
| 330 TemplateURL url(data); |
316 EXPECT_TRUE(url.url_ref().IsValid()); | 331 EXPECT_TRUE(url.url_ref().IsValid()); |
317 EXPECT_TRUE(url.url_ref().SupportsReplacement()); | 332 EXPECT_TRUE(url.url_ref().SupportsReplacement()); |
318 std::string expected_result = test_data[i].expected_result; | 333 std::string expected_result = test_data[i].expected_result; |
319 ReplaceSubstringsAfterOffset(&expected_result, 0, "{language}", | 334 ReplaceSubstringsAfterOffset(&expected_result, 0, "{language}", |
320 g_browser_process->GetApplicationLocale()); | 335 g_browser_process->GetApplicationLocale()); |
321 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), | 336 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("X"), |
322 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 337 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
323 ASSERT_TRUE(result.is_valid()); | 338 ASSERT_TRUE(result.is_valid()); |
324 EXPECT_EQ(expected_result, result.spec()); | 339 EXPECT_EQ(expected_result, result.spec()); |
325 } | 340 } |
(...skipping 15 matching lines...) Expand all Loading... |
341 { "UTF-8", ASCIIToUTF16("blah"), | 356 { "UTF-8", ASCIIToUTF16("blah"), |
342 "http://foo/?{searchTerms}{inputEncoding}", | 357 "http://foo/?{searchTerms}{inputEncoding}", |
343 "http://foo/?blahUTF-8" }, | 358 "http://foo/?blahUTF-8" }, |
344 { "Shift_JIS", UTF8ToUTF16("\xe3\x81\x82"), | 359 { "Shift_JIS", UTF8ToUTF16("\xe3\x81\x82"), |
345 "http://foo/{searchTerms}/bar", | 360 "http://foo/{searchTerms}/bar", |
346 "http://foo/%82%A0/bar"}, | 361 "http://foo/%82%A0/bar"}, |
347 { "Shift_JIS", UTF8ToUTF16("\xe3\x81\x82 \xe3\x81\x84"), | 362 { "Shift_JIS", UTF8ToUTF16("\xe3\x81\x82 \xe3\x81\x84"), |
348 "http://foo/{searchTerms}/bar", | 363 "http://foo/{searchTerms}/bar", |
349 "http://foo/%82%A0%20%82%A2/bar"}, | 364 "http://foo/%82%A0%20%82%A2/bar"}, |
350 }; | 365 }; |
| 366 TemplateURLData data; |
351 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 367 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { |
352 TemplateURL url; | 368 data.SetURL(test_data[i].url); |
353 url.SetURL(test_data[i].url); | 369 data.input_encodings.clear(); |
354 url.add_input_encoding(test_data[i].encoding); | 370 data.input_encodings.push_back(test_data[i].encoding); |
| 371 TemplateURL url(data); |
355 GURL result(url.url_ref().ReplaceSearchTerms(test_data[i].search_term, | 372 GURL result(url.url_ref().ReplaceSearchTerms(test_data[i].search_term, |
356 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 373 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
357 ASSERT_TRUE(result.is_valid()); | 374 ASSERT_TRUE(result.is_valid()); |
358 EXPECT_EQ(test_data[i].expected_result, result.spec()); | 375 EXPECT_EQ(test_data[i].expected_result, result.spec()); |
359 } | 376 } |
360 } | 377 } |
361 | 378 |
362 TEST_F(TemplateURLTest, Suggestions) { | 379 TEST_F(TemplateURLTest, Suggestions) { |
363 struct TestData { | 380 struct TestData { |
364 const int accepted_suggestion; | 381 const int accepted_suggestion; |
365 const string16 original_query_for_suggestion; | 382 const string16 original_query_for_suggestion; |
366 const std::string expected_result; | 383 const std::string expected_result; |
367 } test_data[] = { | 384 } test_data[] = { |
368 { TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16(), | 385 { TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16(), |
369 "http://bar/foo?q=foobar" }, | 386 "http://bar/foo?q=foobar" }, |
370 { TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, ASCIIToUTF16("foo"), | 387 { TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, ASCIIToUTF16("foo"), |
371 "http://bar/foo?q=foobar" }, | 388 "http://bar/foo?q=foobar" }, |
372 { TemplateURLRef::NO_SUGGESTION_CHOSEN, string16(), | 389 { TemplateURLRef::NO_SUGGESTION_CHOSEN, string16(), |
373 "http://bar/foo?aq=f&q=foobar" }, | 390 "http://bar/foo?aq=f&q=foobar" }, |
374 { TemplateURLRef::NO_SUGGESTION_CHOSEN, ASCIIToUTF16("foo"), | 391 { TemplateURLRef::NO_SUGGESTION_CHOSEN, ASCIIToUTF16("foo"), |
375 "http://bar/foo?aq=f&q=foobar" }, | 392 "http://bar/foo?aq=f&q=foobar" }, |
376 { 0, string16(), "http://bar/foo?aq=0&oq=&q=foobar" }, | 393 { 0, string16(), "http://bar/foo?aq=0&oq=&q=foobar" }, |
377 { 1, ASCIIToUTF16("foo"), "http://bar/foo?aq=1&oq=foo&q=foobar" }, | 394 { 1, ASCIIToUTF16("foo"), "http://bar/foo?aq=1&oq=foo&q=foobar" }, |
378 }; | 395 }; |
379 TemplateURL url; | 396 TemplateURLData data; |
380 url.add_input_encoding("UTF-8"); | 397 data.SetURL("http://bar/foo?{google:acceptedSuggestion}" |
381 url.SetURL("http://bar/foo?{google:acceptedSuggestion}" | 398 "{google:originalQueryForSuggestion}q={searchTerms}"); |
382 "{google:originalQueryForSuggestion}q={searchTerms}"); | 399 data.input_encodings.push_back("UTF-8"); |
| 400 TemplateURL url(data); |
383 ASSERT_TRUE(url.url_ref().IsValid()); | 401 ASSERT_TRUE(url.url_ref().IsValid()); |
384 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 402 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
385 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 403 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { |
386 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("foobar"), | 404 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("foobar"), |
387 test_data[i].accepted_suggestion, | 405 test_data[i].accepted_suggestion, |
388 test_data[i].original_query_for_suggestion)); | 406 test_data[i].original_query_for_suggestion)); |
389 ASSERT_TRUE(result.is_valid()); | 407 ASSERT_TRUE(result.is_valid()); |
390 EXPECT_EQ(test_data[i].expected_result, result.spec()); | 408 EXPECT_EQ(test_data[i].expected_result, result.spec()); |
391 } | 409 } |
392 } | 410 } |
393 | 411 |
394 #if defined(OS_WIN) || defined(OS_MACOSX) | 412 #if defined(OS_WIN) || defined(OS_MACOSX) |
395 TEST_F(TemplateURLTest, RLZ) { | 413 TEST_F(TemplateURLTest, RLZ) { |
396 string16 rlz_string; | 414 string16 rlz_string; |
397 #if defined(ENABLE_RLZ) | 415 #if defined(ENABLE_RLZ) |
398 std::string brand; | 416 std::string brand; |
399 if (google_util::GetBrand(&brand) && !brand.empty() && | 417 if (google_util::GetBrand(&brand) && !brand.empty() && |
400 !google_util::IsOrganic(brand)) { | 418 !google_util::IsOrganic(brand)) { |
401 RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz_string); | 419 RLZTracker::GetAccessPointRlz(rlz_lib::CHROME_OMNIBOX, &rlz_string); |
402 } | 420 } |
403 #endif | 421 #endif |
404 | 422 |
405 TemplateURL url; | 423 TemplateURLData data; |
406 url.SetURL("http://bar/?{google:RLZ}{searchTerms}"); | 424 data.SetURL("http://bar/?{google:RLZ}{searchTerms}"); |
| 425 TemplateURL url(data); |
407 EXPECT_TRUE(url.url_ref().IsValid()); | 426 EXPECT_TRUE(url.url_ref().IsValid()); |
408 ASSERT_TRUE(url.url_ref().SupportsReplacement()); | 427 ASSERT_TRUE(url.url_ref().SupportsReplacement()); |
409 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("x"), | 428 GURL result(url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("x"), |
410 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); | 429 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); |
411 ASSERT_TRUE(result.is_valid()); | 430 ASSERT_TRUE(result.is_valid()); |
412 std::string expected_url = "http://bar/?"; | 431 std::string expected_url = "http://bar/?"; |
413 if (!rlz_string.empty()) | 432 if (!rlz_string.empty()) |
414 expected_url += "rlz=" + UTF16ToUTF8(rlz_string) + "&"; | 433 expected_url += "rlz=" + UTF16ToUTF8(rlz_string) + "&"; |
415 expected_url += "x"; | 434 expected_url += "x"; |
416 EXPECT_EQ(expected_url, result.spec()); | 435 EXPECT_EQ(expected_url, result.spec()); |
417 } | 436 } |
418 #endif | 437 #endif |
419 | 438 |
420 TEST_F(TemplateURLTest, HostAndSearchTermKey) { | 439 TEST_F(TemplateURLTest, HostAndSearchTermKey) { |
421 struct TestData { | 440 struct TestData { |
422 const std::string url; | 441 const std::string url; |
423 const std::string host; | 442 const std::string host; |
424 const std::string path; | 443 const std::string path; |
425 const std::string search_term_key; | 444 const std::string search_term_key; |
426 } data[] = { | 445 } test_data[] = { |
427 { "http://blah/?foo=bar&q={searchTerms}&b=x", "blah", "/", "q"}, | 446 { "http://blah/?foo=bar&q={searchTerms}&b=x", "blah", "/", "q"}, |
428 | 447 |
429 // No query key should result in empty values. | 448 // No query key should result in empty values. |
430 { "http://blah/{searchTerms}", "", "", ""}, | 449 { "http://blah/{searchTerms}", "", "", ""}, |
431 | 450 |
432 // No term should result in empty values. | 451 // No term should result in empty values. |
433 { "http://blah/", "", "", ""}, | 452 { "http://blah/", "", "", ""}, |
434 | 453 |
435 // Multiple terms should result in empty values. | 454 // Multiple terms should result in empty values. |
436 { "http://blah/?q={searchTerms}&x={searchTerms}", "", "", ""}, | 455 { "http://blah/?q={searchTerms}&x={searchTerms}", "", "", ""}, |
437 | 456 |
438 // Term in the host shouldn't match. | 457 // Term in the host shouldn't match. |
439 { "http://{searchTerms}", "", "", ""}, | 458 { "http://{searchTerms}", "", "", ""}, |
440 | 459 |
441 { "http://blah/?q={searchTerms}", "blah", "/", "q"}, | 460 { "http://blah/?q={searchTerms}", "blah", "/", "q"}, |
442 | 461 |
443 // Single term with extra chars in value should match. | 462 // Single term with extra chars in value should match. |
444 { "http://blah/?q=stock:{searchTerms}", "blah", "/", "q"}, | 463 { "http://blah/?q=stock:{searchTerms}", "blah", "/", "q"}, |
445 }; | 464 }; |
446 | 465 |
447 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) { | 466 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { |
448 TemplateURL url; | 467 TemplateURLData data; |
449 url.SetURL(data[i].url); | 468 data.SetURL(test_data[i].url); |
450 EXPECT_EQ(data[i].host, url.url_ref().GetHost()); | 469 TemplateURL url(data); |
451 EXPECT_EQ(data[i].path, url.url_ref().GetPath()); | 470 EXPECT_EQ(test_data[i].host, url.url_ref().GetHost()); |
452 EXPECT_EQ(data[i].search_term_key, url.url_ref().GetSearchTermKey()); | 471 EXPECT_EQ(test_data[i].path, url.url_ref().GetPath()); |
| 472 EXPECT_EQ(test_data[i].search_term_key, url.url_ref().GetSearchTermKey()); |
453 } | 473 } |
454 } | 474 } |
455 | 475 |
456 TEST_F(TemplateURLTest, GoogleBaseSuggestURL) { | 476 TEST_F(TemplateURLTest, GoogleBaseSuggestURL) { |
457 static const struct { | 477 static const struct { |
458 const char* const base_url; | 478 const char* const base_url; |
459 const char* const base_suggest_url; | 479 const char* const base_suggest_url; |
460 } data[] = { | 480 } data[] = { |
461 { "http://google.com/", "http://google.com/complete/", }, | 481 { "http://google.com/", "http://google.com/complete/", }, |
462 { "http://www.google.com/", "http://www.google.com/complete/", }, | 482 { "http://www.google.com/", "http://www.google.com/complete/", }, |
463 { "http://www.google.co.uk/", "http://www.google.co.uk/complete/", }, | 483 { "http://www.google.co.uk/", "http://www.google.co.uk/complete/", }, |
464 { "http://www.google.com.by/", "http://www.google.com.by/complete/", }, | 484 { "http://www.google.com.by/", "http://www.google.com.by/complete/", }, |
465 { "http://google.com/intl/xx/", "http://google.com/complete/", }, | 485 { "http://google.com/intl/xx/", "http://google.com/complete/", }, |
466 }; | 486 }; |
467 | 487 |
468 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) | 488 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(data); ++i) |
469 CheckSuggestBaseURL(data[i].base_url, data[i].base_suggest_url); | 489 CheckSuggestBaseURL(data[i].base_url, data[i].base_suggest_url); |
470 } | 490 } |
471 | 491 |
472 TEST_F(TemplateURLTest, Keyword) { | 492 TEST_F(TemplateURLTest, Keyword) { |
473 TemplateURL url; | 493 TemplateURLData data; |
474 url.SetURL("http://www.google.com/search"); | 494 data.SetURL("http://www.google.com/search"); |
475 EXPECT_FALSE(url.autogenerate_keyword()); | 495 EXPECT_FALSE(data.autogenerate_keyword()); |
476 url.set_keyword(ASCIIToUTF16("foo")); | 496 data.SetKeyword(ASCIIToUTF16("foo")); |
477 EXPECT_EQ(ASCIIToUTF16("foo"), url.keyword()); | 497 EXPECT_EQ(ASCIIToUTF16("foo"), TemplateURL(data).keyword()); |
478 url.set_autogenerate_keyword(true); | 498 data.SetAutogenerateKeyword(true); |
479 EXPECT_TRUE(url.autogenerate_keyword()); | 499 EXPECT_TRUE(data.autogenerate_keyword()); |
480 EXPECT_EQ(ASCIIToUTF16("google.com"), url.keyword()); | 500 EXPECT_EQ(ASCIIToUTF16("google.com"), TemplateURL(data).keyword()); |
481 url.set_keyword(ASCIIToUTF16("foo")); | 501 data.SetKeyword(ASCIIToUTF16("foo")); |
482 EXPECT_FALSE(url.autogenerate_keyword()); | 502 EXPECT_FALSE(data.autogenerate_keyword()); |
483 EXPECT_EQ(ASCIIToUTF16("foo"), url.keyword()); | 503 EXPECT_EQ(ASCIIToUTF16("foo"), TemplateURL(data).keyword()); |
484 } | 504 } |
485 | 505 |
486 TEST_F(TemplateURLTest, ParseParameterKnown) { | 506 TEST_F(TemplateURLTest, ParseParameterKnown) { |
487 std::string parsed_url("{searchTerms}"); | 507 std::string parsed_url("{searchTerms}"); |
488 TemplateURL url; | 508 TemplateURLData data; |
489 url.SetURL(parsed_url); | 509 data.SetURL(parsed_url); |
| 510 TemplateURL url(data); |
490 TemplateURLRef::Replacements replacements; | 511 TemplateURLRef::Replacements replacements; |
491 EXPECT_TRUE(url.url_ref().ParseParameter(0, 12, &parsed_url, &replacements)); | 512 EXPECT_TRUE(url.url_ref().ParseParameter(0, 12, &parsed_url, &replacements)); |
492 EXPECT_EQ(std::string(), parsed_url); | 513 EXPECT_EQ(std::string(), parsed_url); |
493 ASSERT_EQ(1U, replacements.size()); | 514 ASSERT_EQ(1U, replacements.size()); |
494 EXPECT_EQ(0U, replacements[0].index); | 515 EXPECT_EQ(0U, replacements[0].index); |
495 EXPECT_EQ(TemplateURLRef::SEARCH_TERMS, replacements[0].type); | 516 EXPECT_EQ(TemplateURLRef::SEARCH_TERMS, replacements[0].type); |
496 } | 517 } |
497 | 518 |
498 TEST_F(TemplateURLTest, ParseParameterUnknown) { | 519 TEST_F(TemplateURLTest, ParseParameterUnknown) { |
499 std::string parsed_url("{fhqwhgads}"); | 520 std::string parsed_url("{fhqwhgads}"); |
500 TemplateURL url; | 521 TemplateURLData data; |
501 url.SetURL(parsed_url); | 522 data.SetURL(parsed_url); |
| 523 TemplateURL url(data); |
502 TemplateURLRef::Replacements replacements; | 524 TemplateURLRef::Replacements replacements; |
503 | 525 |
504 // By default, TemplateURLRef should not consider itself prepopulated. | 526 // By default, TemplateURLRef should not consider itself prepopulated. |
505 // Therefore we should not replace the unknown parameter. | 527 // Therefore we should not replace the unknown parameter. |
506 EXPECT_FALSE(url.url_ref().ParseParameter(0, 10, &parsed_url, &replacements)); | 528 EXPECT_FALSE(url.url_ref().ParseParameter(0, 10, &parsed_url, &replacements)); |
507 EXPECT_EQ("{fhqwhgads}", parsed_url); | 529 EXPECT_EQ("{fhqwhgads}", parsed_url); |
508 EXPECT_TRUE(replacements.empty()); | 530 EXPECT_TRUE(replacements.empty()); |
509 | 531 |
510 // If the TemplateURLRef is prepopulated, we should remove unknown parameters. | 532 // If the TemplateURLRef is prepopulated, we should remove unknown parameters. |
511 parsed_url = "{fhqwhgads}"; | 533 parsed_url = "{fhqwhgads}"; |
512 url.SetPrepopulateId(1); | 534 data.prepopulate_id = 1; |
513 EXPECT_FALSE(url.url_ref().ParseParameter(0, 10, &parsed_url, &replacements)); | 535 TemplateURL url2(data); |
| 536 EXPECT_FALSE(url2.url_ref().ParseParameter(0, 10, &parsed_url, |
| 537 &replacements)); |
514 EXPECT_EQ(std::string(), parsed_url); | 538 EXPECT_EQ(std::string(), parsed_url); |
515 EXPECT_TRUE(replacements.empty()); | 539 EXPECT_TRUE(replacements.empty()); |
516 } | 540 } |
517 | 541 |
518 TEST_F(TemplateURLTest, ParseURLEmpty) { | 542 TEST_F(TemplateURLTest, ParseURLEmpty) { |
519 TemplateURL url; | 543 TemplateURLData data; |
| 544 TemplateURL url(data); |
520 TemplateURLRef::Replacements replacements; | 545 TemplateURLRef::Replacements replacements; |
521 bool valid = false; | 546 bool valid = false; |
522 EXPECT_EQ(std::string(), | 547 EXPECT_EQ(std::string(), |
523 url.url_ref().ParseURL(std::string(), &replacements, &valid)); | 548 url.url_ref().ParseURL(std::string(), &replacements, &valid)); |
524 EXPECT_TRUE(replacements.empty()); | 549 EXPECT_TRUE(replacements.empty()); |
525 EXPECT_TRUE(valid); | 550 EXPECT_TRUE(valid); |
526 } | 551 } |
527 | 552 |
528 TEST_F(TemplateURLTest, ParseURLNoTemplateEnd) { | 553 TEST_F(TemplateURLTest, ParseURLNoTemplateEnd) { |
529 TemplateURL url; | 554 TemplateURLData data; |
530 url.SetURL("{"); | 555 data.SetURL("{"); |
| 556 TemplateURL url(data); |
531 TemplateURLRef::Replacements replacements; | 557 TemplateURLRef::Replacements replacements; |
532 bool valid = false; | 558 bool valid = false; |
533 EXPECT_EQ(std::string(), url.url_ref().ParseURL("{", &replacements, &valid)); | 559 EXPECT_EQ(std::string(), url.url_ref().ParseURL("{", &replacements, &valid)); |
534 EXPECT_TRUE(replacements.empty()); | 560 EXPECT_TRUE(replacements.empty()); |
535 EXPECT_FALSE(valid); | 561 EXPECT_FALSE(valid); |
536 } | 562 } |
537 | 563 |
538 TEST_F(TemplateURLTest, ParseURLNoKnownParameters) { | 564 TEST_F(TemplateURLTest, ParseURLNoKnownParameters) { |
539 TemplateURL url; | 565 TemplateURLData data; |
540 url.SetURL("{}"); | 566 data.SetURL("{}"); |
| 567 TemplateURL url(data); |
541 TemplateURLRef::Replacements replacements; | 568 TemplateURLRef::Replacements replacements; |
542 bool valid = false; | 569 bool valid = false; |
543 EXPECT_EQ("{}", url.url_ref().ParseURL("{}", &replacements, &valid)); | 570 EXPECT_EQ("{}", url.url_ref().ParseURL("{}", &replacements, &valid)); |
544 EXPECT_TRUE(replacements.empty()); | 571 EXPECT_TRUE(replacements.empty()); |
545 EXPECT_TRUE(valid); | 572 EXPECT_TRUE(valid); |
546 } | 573 } |
547 | 574 |
548 TEST_F(TemplateURLTest, ParseURLTwoParameters) { | 575 TEST_F(TemplateURLTest, ParseURLTwoParameters) { |
549 TemplateURL url; | 576 TemplateURLData data; |
550 url.SetURL("{}{{%s}}"); | 577 data.SetURL("{}{{%s}}"); |
| 578 TemplateURL url(data); |
551 TemplateURLRef::Replacements replacements; | 579 TemplateURLRef::Replacements replacements; |
552 bool valid = false; | 580 bool valid = false; |
553 EXPECT_EQ("{}{}", | 581 EXPECT_EQ("{}{}", |
554 url.url_ref().ParseURL("{}{{searchTerms}}", &replacements, &valid)); | 582 url.url_ref().ParseURL("{}{{searchTerms}}", &replacements, &valid)); |
555 ASSERT_EQ(1U, replacements.size()); | 583 ASSERT_EQ(1U, replacements.size()); |
556 EXPECT_EQ(3U, replacements[0].index); | 584 EXPECT_EQ(3U, replacements[0].index); |
557 EXPECT_EQ(TemplateURLRef::SEARCH_TERMS, replacements[0].type); | 585 EXPECT_EQ(TemplateURLRef::SEARCH_TERMS, replacements[0].type); |
558 EXPECT_TRUE(valid); | 586 EXPECT_TRUE(valid); |
559 } | 587 } |
560 | 588 |
561 TEST_F(TemplateURLTest, ParseURLNestedParameter) { | 589 TEST_F(TemplateURLTest, ParseURLNestedParameter) { |
562 TemplateURL url; | 590 TemplateURLData data; |
563 url.SetURL("{%s"); | 591 data.SetURL("{%s"); |
| 592 TemplateURL url(data); |
564 TemplateURLRef::Replacements replacements; | 593 TemplateURLRef::Replacements replacements; |
565 bool valid = false; | 594 bool valid = false; |
566 EXPECT_EQ("{", | 595 EXPECT_EQ("{", |
567 url.url_ref().ParseURL("{{searchTerms}", &replacements, &valid)); | 596 url.url_ref().ParseURL("{{searchTerms}", &replacements, &valid)); |
568 ASSERT_EQ(1U, replacements.size()); | 597 ASSERT_EQ(1U, replacements.size()); |
569 EXPECT_EQ(1U, replacements[0].index); | 598 EXPECT_EQ(1U, replacements[0].index); |
570 EXPECT_EQ(TemplateURLRef::SEARCH_TERMS, replacements[0].type); | 599 EXPECT_EQ(TemplateURLRef::SEARCH_TERMS, replacements[0].type); |
571 EXPECT_TRUE(valid); | 600 EXPECT_TRUE(valid); |
572 } | 601 } |
OLD | NEW |