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

Side by Side Diff: src/url_util_unittest.cc

Issue 11367010: Make ResolveRelative work with all hierarchical URLs. (Closed) Base URL: http://git.chromium.org/external/google-url.git@master
Patch Set: Created 8 years 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
« src/url_util.cc ('K') | « src/url_util.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2008, Google Inc. 1 // Copyright 2008, Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 242
243 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(encode_cases); i++) { 243 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(encode_cases); i++) {
244 const char* input = encode_cases[i].input; 244 const char* input = encode_cases[i].input;
245 url_canon::RawCanonOutputT<char> buffer; 245 url_canon::RawCanonOutputT<char> buffer;
246 url_util::EncodeURIComponent(input, strlen(input), &buffer); 246 url_util::EncodeURIComponent(input, strlen(input), &buffer);
247 std::string output(buffer.data(), buffer.length()); 247 std::string output(buffer.data(), buffer.length());
248 EXPECT_EQ(encode_cases[i].output, output); 248 EXPECT_EQ(encode_cases[i].output, output);
249 } 249 }
250 } 250 }
251 251
252 TEST(URLUtilTest, TestResolveRelativeWithNonStandardBase) {
253 // This tests non-standard (in the sense that GURL::IsStandard() == false)
254 // hierarchical schemes.
255 struct ResolveRelativeCase {
256 const char* base;
257 const char* rel;
258 bool is_valid;
259 const char* out;
260 } resolve_non_standard_cases[] = {
brettw 2012/12/13 21:31:44 It would be helpful to see what's going on here if
mkosiba (inactive) 2012/12/18 18:54:07 Done.
261 // Resolving a relative path against a non-standard authority-based base
262 // URL doesn't alter the authority section.
263 {"scheme://Authority/", "../path", true, "scheme://Authority/path"},
264 // A non-standard hierarchical base is resolved with path URL
265 // canoncialization rules.
266 {"data:/Blah:Blah/", "file.html", true, "data:/Blah:Blah/file.html"},
267 {"data:/Path/../part/part2", "file.html", true, "data:/Path/../part/file.htm l"},
268 // Path URL canonicalization rules also apply to non-standard authority-
269 // based URLs.
270 {"custom://Authority/", "file.html", true, "custom://Authority/file.html"},
271 {"custom://Authority/", "other://Auth/", true, "other://Auth/"},
272 {"custom://Authority/", "../../file.html", true, "custom://Authority/file.ht ml"},
273 {"custom://Authority/path/", "file.html", true, "custom://Authority/path/fil e.html"},
274 {"custom://Authority:NoCanon/path/", "file.html", true, "custom://Authority: NoCanon/path/file.html"},
275 // It's still possible to get an invalid path URL.
276 {"custom://Invalid:!#Auth/", "file.html", false, ""},
277 // A path with an authority section gets canonicalized under standard URL
278 // rules, even though the base was non-standard.
279 {"content://content.Provider/", "//other.Provider", true, "content://other.p rovider/"},
280 };
281
282 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(resolve_non_standard_cases); i++) {
283 const ResolveRelativeCase& test_data = resolve_non_standard_cases[i];
284 url_parse::Parsed base_parsed;
285 url_parse::ParsePathURL(test_data.base, strlen(test_data.base),
286 &base_parsed);
287
288 std::string resolved;
289 url_canon::StdStringCanonOutput output(&resolved);
290 url_parse::Parsed resolved_parsed;
291 bool valid =
292 url_util::ResolveRelative(test_data.base, strlen(test_data.base),
293 base_parsed,
294 test_data.rel, strlen(test_data.rel),
295 NULL, &output, &resolved_parsed);
296 output.Complete();
297
298 EXPECT_EQ(test_data.is_valid, valid) << i;
299 if (test_data.is_valid && valid)
300 EXPECT_EQ(test_data.out, resolved) << i;
301 }
302 }
OLDNEW
« src/url_util.cc ('K') | « src/url_util.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698