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