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

Side by Side Diff: runtime/vm/uri_test.cc

Issue 2011543002: Canonicalize uris in C++ instead of Dart for the standalone embedder. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: more code review fixes Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 #include "vm/uri.h"
6 #include "vm/unit_test.h"
7
8 namespace dart {
9
10 TEST_CASE(ParseUri_WithScheme_NoQueryNoUser) {
11 ParsedUri uri;
12 EXPECT(ParseUri("foo://example.com:8042/over/there", &uri));
13 EXPECT_STREQ("foo", uri.scheme);
14 EXPECT(uri.userinfo == NULL);
15 EXPECT_STREQ("example.com", uri.host);
16 EXPECT_STREQ("8042", uri.port);
17 EXPECT_STREQ("/over/there", uri.path);
18 EXPECT(uri.query == NULL);
19 EXPECT(uri.fragment == NULL);
20 }
21
22
23 TEST_CASE(ParseUri_WithScheme_WithQuery) {
24 ParsedUri uri;
25 EXPECT(ParseUri("foo://example.com:8042/over/there?name=ferret", &uri));
26 EXPECT_STREQ("foo", uri.scheme);
27 EXPECT(uri.userinfo == NULL);
28 EXPECT_STREQ("example.com", uri.host);
29 EXPECT_STREQ("8042", uri.port);
30 EXPECT_STREQ("/over/there", uri.path);
31 EXPECT_STREQ("name=ferret", uri.query);
32 EXPECT(uri.fragment == NULL);
33 }
34
35
36 TEST_CASE(ParseUri_WithScheme_WithFragment) {
37 ParsedUri uri;
38 EXPECT(ParseUri("foo://example.com:8042/over/there#fragment", &uri));
39 EXPECT_STREQ("foo", uri.scheme);
40 EXPECT(uri.userinfo == NULL);
41 EXPECT_STREQ("example.com", uri.host);
42 EXPECT_STREQ("8042", uri.port);
43 EXPECT_STREQ("/over/there", uri.path);
44 EXPECT(uri.query == NULL);
45 EXPECT_STREQ("fragment", uri.fragment);
46 }
47
48
49 TEST_CASE(ParseUri_WithScheme_WithQueryWithFragment) {
50 ParsedUri uri;
51 EXPECT(ParseUri("foo://example.com:8042/over/there?name=ferret#fragment",
52 &uri));
53 EXPECT_STREQ("foo", uri.scheme);
54 EXPECT(uri.userinfo == NULL);
55 EXPECT_STREQ("example.com", uri.host);
56 EXPECT_STREQ("8042", uri.port);
57 EXPECT_STREQ("/over/there", uri.path);
58 EXPECT_STREQ("name=ferret", uri.query);
59 EXPECT_STREQ("fragment", uri.fragment);
60 }
61
62
63 TEST_CASE(ParseUri_WithScheme_WithUser) {
64 ParsedUri uri;
65 EXPECT(ParseUri("foo://user@example.com:8042/over/there", &uri));
66 EXPECT_STREQ("foo", uri.scheme);
67 EXPECT_STREQ("user", uri.userinfo);
68 EXPECT_STREQ("example.com", uri.host);
69 EXPECT_STREQ("8042", uri.port);
70 EXPECT_STREQ("/over/there", uri.path);
71 EXPECT(uri.query == NULL);
72 EXPECT(uri.fragment == NULL);
73 }
74
75
76 TEST_CASE(ParseUri_WithScheme_ShortPath) {
77 ParsedUri uri;
78 EXPECT(ParseUri("foo://example.com:8042/", &uri));
79 EXPECT_STREQ("foo", uri.scheme);
80 EXPECT(uri.userinfo == NULL);
81 EXPECT_STREQ("example.com", uri.host);
82 EXPECT_STREQ("8042", uri.port);
83 EXPECT_STREQ("/", uri.path);
84 EXPECT(uri.query == NULL);
85 EXPECT(uri.fragment == NULL);
86 }
87
88
89 TEST_CASE(ParseUri_WithScheme_EmptyPath) {
90 ParsedUri uri;
91 EXPECT(ParseUri("foo://example.com:8042", &uri));
92 EXPECT_STREQ("foo", uri.scheme);
93 EXPECT(uri.userinfo == NULL);
94 EXPECT_STREQ("example.com", uri.host);
95 EXPECT_STREQ("8042", uri.port);
96 EXPECT_STREQ("", uri.path);
97 EXPECT(uri.query == NULL);
98 EXPECT(uri.fragment == NULL);
99 }
100
101
102 TEST_CASE(ParseUri_WithScheme_Rootless1) {
103 ParsedUri uri;
104 EXPECT(ParseUri("foo:here", &uri));
105 EXPECT_STREQ("foo", uri.scheme);
106 EXPECT(uri.userinfo == NULL);
107 EXPECT(uri.host == NULL);
108 EXPECT(uri.port == NULL);
109 EXPECT_STREQ("here", uri.path);
110 EXPECT(uri.query == NULL);
111 EXPECT(uri.fragment == NULL);
112 }
113
114
115 TEST_CASE(ParseUri_WithScheme_Rootless2) {
116 ParsedUri uri;
117 EXPECT(ParseUri("foo:or/here", &uri));
118 EXPECT_STREQ("foo", uri.scheme);
119 EXPECT(uri.userinfo == NULL);
120 EXPECT(uri.host == NULL);
121 EXPECT(uri.port == NULL);
122 EXPECT_STREQ("or/here", uri.path);
123 EXPECT(uri.query == NULL);
124 EXPECT(uri.fragment == NULL);
125 }
126
127
128 TEST_CASE(ParseUri_NoScheme_AbsPath_WithAuthority) {
129 ParsedUri uri;
130 EXPECT(ParseUri("//example.com:8042/over/there", &uri));
131 EXPECT(uri.scheme == NULL);
132 EXPECT(uri.userinfo == NULL);
133 EXPECT_STREQ("example.com", uri.host);
134 EXPECT_STREQ("8042", uri.port);
135 EXPECT_STREQ("/over/there", uri.path);
136 EXPECT(uri.query == NULL);
137 EXPECT(uri.fragment == NULL);
138 }
139
140
141 TEST_CASE(ParseUri_NoScheme_AbsPath_NoAuthority) {
142 ParsedUri uri;
143 EXPECT(ParseUri("/over/there", &uri));
144 EXPECT(uri.scheme == NULL);
145 EXPECT(uri.userinfo == NULL);
146 EXPECT(uri.host == NULL);
147 EXPECT(uri.port == NULL);
148 EXPECT_STREQ("/over/there", uri.path);
149 EXPECT(uri.query == NULL);
150 EXPECT(uri.fragment == NULL);
151 }
152
153
154 // Colons are permitted in path segments, in many cases.
155 TEST_CASE(ParseUri_NoScheme_AbsPath_StrayColon) {
156 ParsedUri uri;
157 EXPECT(ParseUri("/ov:er/there", &uri));
158 EXPECT(uri.scheme == NULL);
159 EXPECT(uri.userinfo == NULL);
160 EXPECT(uri.host == NULL);
161 EXPECT(uri.port == NULL);
162 EXPECT_STREQ("/ov:er/there", uri.path);
163 EXPECT(uri.query == NULL);
164 }
165
166
167 TEST_CASE(ParseUri_NoScheme_Rootless1) {
168 ParsedUri uri;
169 EXPECT(ParseUri("here", &uri));
170 EXPECT(uri.scheme == NULL);
171 EXPECT(uri.userinfo == NULL);
172 EXPECT(uri.host == NULL);
173 EXPECT(uri.port == NULL);
174 EXPECT_STREQ("here", uri.path);
175 EXPECT(uri.query == NULL);
176 EXPECT(uri.fragment == NULL);
177 }
178
179
180 TEST_CASE(ParseUri_NoScheme_Rootless2) {
181 ParsedUri uri;
182 EXPECT(ParseUri("or/here", &uri));
183 EXPECT(uri.scheme == NULL);
184 EXPECT(uri.userinfo == NULL);
185 EXPECT(uri.host == NULL);
186 EXPECT(uri.port == NULL);
187 EXPECT_STREQ("or/here", uri.path);
188 EXPECT(uri.query == NULL);
189 EXPECT(uri.fragment == NULL);
190 }
191
192
193 TEST_CASE(ParseUri_NoScheme_Empty) {
194 ParsedUri uri;
195 EXPECT(ParseUri("", &uri));
196 EXPECT(uri.scheme == NULL);
197 EXPECT(uri.userinfo == NULL);
198 EXPECT(uri.host == NULL);
199 EXPECT(uri.port == NULL);
200 EXPECT_STREQ("", uri.path);
201 EXPECT(uri.query == NULL);
202 EXPECT(uri.fragment == NULL);
203 }
204
205
206 TEST_CASE(ParseUri_NoScheme_QueryOnly) {
207 ParsedUri uri;
208 EXPECT(ParseUri("?name=ferret", &uri));
209 EXPECT(uri.scheme == NULL);
210 EXPECT(uri.userinfo == NULL);
211 EXPECT(uri.host == NULL);
212 EXPECT(uri.port == NULL);
213 EXPECT_STREQ("", uri.path);
214 EXPECT_STREQ("name=ferret", uri.query);
215 EXPECT(uri.fragment == NULL);
216 }
217
218
219 TEST_CASE(ParseUri_NoScheme_FragmentOnly) {
220 ParsedUri uri;
221 EXPECT(ParseUri("#fragment", &uri));
222 EXPECT(uri.scheme == NULL);
223 EXPECT(uri.userinfo == NULL);
224 EXPECT(uri.host == NULL);
225 EXPECT(uri.port == NULL);
226 EXPECT_STREQ("", uri.path);
227 EXPECT(uri.query == NULL);
228 EXPECT_STREQ("fragment", uri.fragment);
229 }
230
231
232 TEST_CASE(ParseUri_DoubleSlash1) {
233 ParsedUri uri;
234 EXPECT(!ParseUri("foo://example.com:8042/over//there?name=ferret", &uri));
235 EXPECT(uri.scheme == NULL);
236 EXPECT(uri.userinfo == NULL);
237 EXPECT(uri.host == NULL);
238 EXPECT(uri.port == NULL);
239 EXPECT(uri.path == NULL);
240 EXPECT(uri.query == NULL);
241 EXPECT(uri.fragment == NULL);
242 }
243
244
245 TEST_CASE(ParseUri_DoubleSlash2) {
246 ParsedUri uri;
247 EXPECT(!ParseUri("or//here", &uri));
248 EXPECT(uri.scheme == NULL);
249 EXPECT(uri.userinfo == NULL);
250 EXPECT(uri.host == NULL);
251 EXPECT(uri.port == NULL);
252 EXPECT(uri.path == NULL);
253 EXPECT(uri.query == NULL);
254 EXPECT(uri.fragment == NULL);
255 }
256
257
258 TEST_CASE(ParseUri_LowerCaseScheme) {
259 ParsedUri uri;
260 EXPECT(ParseUri("ScHeMe:path", &uri));
261 EXPECT_STREQ("scheme", uri.scheme);
262 EXPECT(uri.userinfo == NULL);
263 EXPECT(uri.host == NULL);
264 EXPECT(uri.port == NULL);
265 EXPECT_STREQ("path", uri.path);
266 EXPECT(uri.query == NULL);
267 EXPECT(uri.fragment == NULL);
268 }
269
270
271 TEST_CASE(ParseUri_NormalizeEscapes_PathQueryFragment) {
272 ParsedUri uri;
273 EXPECT(ParseUri(
274 "scheme:/This%09Is A P%61th?This%09Is A Qu%65ry#A Fr%61gment", &uri));
275 EXPECT_STREQ("scheme", uri.scheme);
276 EXPECT(uri.userinfo == NULL);
277 EXPECT(uri.host == NULL);
278 EXPECT(uri.port == NULL);
279 EXPECT_STREQ("/This%09Is%20A%20Path", uri.path);
280 EXPECT_STREQ("This%09Is%20A%20Query", uri.query);
281 EXPECT_STREQ("A%20Fragment", uri.fragment);
282 }
283
284
285 TEST_CASE(ParseUri_NormalizeEscapes_UppercaseEscapesPreferred) {
286 ParsedUri uri;
287 EXPECT(ParseUri(
288 "scheme:/%1b%1B", &uri));
289 EXPECT_STREQ("scheme", uri.scheme);
290 EXPECT(uri.userinfo == NULL);
291 EXPECT(uri.host == NULL);
292 EXPECT(uri.port == NULL);
293 EXPECT_STREQ("/%1B%1B", uri.path);
294 EXPECT(uri.query == NULL);
295 EXPECT(uri.fragment == NULL);
296 }
297
298
299 TEST_CASE(ParseUri_NormalizeEscapes_Authority) {
300 ParsedUri uri;
301 EXPECT(ParseUri(
302 "scheme://UsEr N%61%4de@h%4FsT.c%6fm:80/", &uri));
303 EXPECT_STREQ("scheme", uri.scheme);
304 EXPECT_STREQ("UsEr%20NaMe", uri.userinfo); // Normalized, case preserved.
305 EXPECT_STREQ("host.com", uri.host); // Normalized, lower-cased.
306 EXPECT_STREQ("80", uri.port);
307 EXPECT_STREQ("/", uri.path);
308 EXPECT(uri.query == NULL);
309 EXPECT(uri.fragment == NULL);
310 }
311
312
313 TEST_CASE(ParseUri_BrokenEscapeSequence) {
314 ParsedUri uri;
315 EXPECT(ParseUri(
316 "scheme:/%1g", &uri));
317 EXPECT_STREQ("scheme", uri.scheme);
318 EXPECT(uri.userinfo == NULL);
319 EXPECT(uri.host == NULL);
320 EXPECT(uri.port == NULL);
321 EXPECT_STREQ("/%1g", uri.path); // Broken sequence is unchanged.
322 EXPECT(uri.query == NULL);
323 EXPECT(uri.fragment == NULL);
324 }
325
326
327 TEST_CASE(ResolveUri_WithScheme_NoAuthorityNoQuery) {
328 const char* target_uri;
329 EXPECT(ResolveUri("rscheme:/ref/path",
330 "bscheme://buser@bhost:11/base/path?baseQuery",
331 &target_uri));
332 EXPECT_STREQ("rscheme:/ref/path", target_uri);
333 }
334
335
336 TEST_CASE(ResolveUri_WithScheme_WithAuthorityWithQuery) {
337 const char* target_uri;
338 EXPECT(ResolveUri("rscheme://ruser@rhost:22/ref/path?refQuery",
339 "bscheme://buser@bhost:11/base/path?baseQuery",
340 &target_uri));
341 EXPECT_STREQ("rscheme://ruser@rhost:22/ref/path?refQuery", target_uri);
342 }
343
344
345 TEST_CASE(ResolveUri_NoScheme_WithAuthority) {
346 const char* target_uri;
347 EXPECT(ResolveUri("//ruser@rhost:22/ref/path",
348 "bscheme://buser@bhost:11/base/path?baseQuery",
349 &target_uri));
350 EXPECT_STREQ("bscheme://ruser@rhost:22/ref/path", target_uri);
351 }
352
353
354 TEST_CASE(ResolveUri_NoSchemeNoAuthority_AbsolutePath) {
355 const char* target_uri;
356 EXPECT(ResolveUri("/ref/path",
357 "bscheme://buser@bhost:11/base/path?baseQuery",
358 &target_uri));
359 EXPECT_STREQ("bscheme://buser@bhost:11/ref/path", target_uri);
360 }
361
362
363 TEST_CASE(ResolveUri_NoSchemeNoAuthority_RelativePath) {
364 const char* target_uri;
365 EXPECT(ResolveUri("ref/path",
366 "bscheme://buser@bhost:11/base/path?baseQuery",
367 &target_uri));
368 EXPECT_STREQ("bscheme://buser@bhost:11/base/ref/path", target_uri);
369 }
370
371
372 TEST_CASE(ResolveUri_NoSchemeNoAuthority_RelativePathEmptyBasePath) {
373 const char* target_uri;
374 EXPECT(ResolveUri("ref/path",
375 "bscheme://buser@bhost:11",
376 &target_uri));
377 EXPECT_STREQ("bscheme://buser@bhost:11/ref/path", target_uri);
378 }
379
380
381 TEST_CASE(ResolveUri_NoSchemeNoAuthority_RelativePathWeirdBasePath) {
382 const char* target_uri;
383 EXPECT(ResolveUri("ref/path",
384 "bscheme:base",
385 &target_uri));
386 EXPECT_STREQ("bscheme:ref/path", target_uri);
387 }
388
389
390 TEST_CASE(ResolveUri_NoSchemeNoAuthority_EmptyPath) {
391 const char* target_uri;
392 EXPECT(ResolveUri("",
393 "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
394 &target_uri));
395 // Note that we drop the base fragment from the resolved uri.
396 EXPECT_STREQ("bscheme://buser@bhost:11/base/path?baseQuery", target_uri);
397 }
398
399
400 TEST_CASE(ResolveUri_NoSchemeNoAuthority_EmptyPathWithQuery) {
401 const char* target_uri;
402 EXPECT(ResolveUri("?refQuery",
403 "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
404 &target_uri));
405 EXPECT_STREQ("bscheme://buser@bhost:11/base/path?refQuery", target_uri);
406 }
407
408
409 TEST_CASE(ResolveUri_NoSchemeNoAuthority_EmptyPathWithFragment) {
410 const char* target_uri;
411 EXPECT(ResolveUri("#rfragment",
412 "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
413 &target_uri));
414 EXPECT_STREQ("bscheme://buser@bhost:11/base/path?baseQuery#rfragment",
415 target_uri);
416 }
417
418
419 TEST_CASE(ResolveUri_RemoveDots_RemoveOneDotSegment) {
420 const char* target_uri;
421 EXPECT(ResolveUri("./refpath",
422 "scheme://auth/a/b/c/d",
423 &target_uri));
424 EXPECT_STREQ("scheme://auth/a/b/c/refpath", target_uri);
425 }
426
427
428 TEST_CASE(ResolveUri_RemoveDots_RemoveTwoDotSegments) {
429 const char* target_uri;
430 EXPECT(ResolveUri("././refpath",
431 "scheme://auth/a/b/c/d",
432 &target_uri));
433 EXPECT_STREQ("scheme://auth/a/b/c/refpath", target_uri);
434 }
435
436
437 TEST_CASE(ResolveUri_RemoveDots_RemoveOneDotDotSegment) {
438 const char* target_uri;
439 EXPECT(ResolveUri("../refpath",
440 "scheme://auth/a/b/c/d",
441 &target_uri));
442 EXPECT_STREQ("scheme://auth/a/b/refpath", target_uri);
443 }
444
445
446 TEST_CASE(ResolveUri_RemoveDots_RemoveTwoDotDotSegments) {
447 const char* target_uri;
448 EXPECT(ResolveUri("../../refpath",
449 "scheme://auth/a/b/c/d",
450 &target_uri));
451 EXPECT_STREQ("scheme://auth/a/refpath", target_uri);
452 }
453
454
455 TEST_CASE(ResolveUri_RemoveDots_RemoveTooManyDotDotSegments) {
456 const char* target_uri;
457 EXPECT(ResolveUri("../../../../../../../../../refpath",
458 "scheme://auth/a/b/c/d",
459 &target_uri));
460 EXPECT_STREQ("scheme://auth/refpath", target_uri);
461 }
462
463
464 TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsNothingLeft1) {
465 const char* target_uri;
466 EXPECT(ResolveUri("../../../../..",
467 "scheme://auth/a/b/c/d",
468 &target_uri));
469 EXPECT_STREQ("scheme://auth/", target_uri);
470 }
471
472
473
474 TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsNothingLeft2) {
475 const char* target_uri;
476 EXPECT(ResolveUri(".",
477 "scheme://auth/",
478 &target_uri));
479 EXPECT_STREQ("scheme://auth/", target_uri);
480 }
481
482
483
484 TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsInitialPrefix) {
485 const char* target_uri;
486 EXPECT(ResolveUri("../../../../refpath",
487 "scheme://auth",
488 &target_uri));
489 EXPECT_STREQ("scheme://auth/refpath", target_uri);
490 }
491
492
493
494 TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsMixed) {
495 const char* target_uri;
496 EXPECT(ResolveUri("../../1/./2/../3/4/../5/././6/../7",
497 "scheme://auth/a/b/c/d/e",
498 &target_uri));
499 EXPECT_STREQ("scheme://auth/a/b/1/3/5/7", target_uri);
500 }
501
502
503 TEST_CASE(ResolveUri_NormalizeEscapes_PathQueryFragment) {
504 const char* target_uri;
505 EXPECT(ResolveUri("#A Fr%61gment",
506 "scheme:/This%09Is A P%61th?This%09Is A Qu%65ry",
507 &target_uri));
508 EXPECT_STREQ(
509 "scheme:/This%09Is%20A%20Path?This%09Is%20A%20Query#A%20Fragment",
510 target_uri);
511 }
512
513
514 TEST_CASE(ResolveUri_NormalizeEscapes_UppercaseHexPreferred) {
515 const char* target_uri;
516 EXPECT(ResolveUri("",
517 "scheme:/%1b%1B",
518 &target_uri));
519 EXPECT_STREQ("scheme:/%1B%1B",
520 target_uri);
521 }
522
523
524 TEST_CASE(ResolveUri_NormalizeEscapes_Authority) {
525 const char* target_uri;
526 EXPECT(ResolveUri("",
527 "scheme://UsEr N%61%4de@h%4FsT.c%6fm:80/",
528 &target_uri));
529 // userinfo is normalized and case is preserved. host is normalized
530 // and lower-cased.
531 EXPECT_STREQ("scheme://UsEr%20NaMe@host.com:80/", target_uri);
532 }
533
534
535 TEST_CASE(ResolveUri_NormalizeEscapes_BrokenEscapeSequence) {
536 const char* target_uri;
537 EXPECT(ResolveUri("",
538 "scheme:/%1g",
539 &target_uri));
540 // We don't change broken escape sequences.
541 EXPECT_STREQ("scheme:/%1g",
542 target_uri);
543 }
544
545
546 // Not in RFC 3986
547 TEST_CASE(ResolveUri_RelativeBase_SimpleResult) {
548 const char* target_uri;
549 EXPECT(ResolveUri("../r1", "b1/b2", &target_uri));
550 EXPECT_STREQ("r1", target_uri);
551 }
552
553
554 // Not in RFC 3986
555 TEST_CASE(ResolveUri_RelativeBase_EmptyResult) {
556 const char* target_uri;
557 EXPECT(ResolveUri("..", "b1/b2", &target_uri));
558 EXPECT_STREQ("./", target_uri);
559 }
560
561
562 // Not in RFC 3986
563 TEST_CASE(ResolveUri_RelativeBase_LotsODots1) {
564 const char* target_uri;
565 EXPECT(ResolveUri("../..", "b1/b2", &target_uri));
566 EXPECT_STREQ("../", target_uri);
567 }
568
569
570 // Not in RFC 3986
571 TEST_CASE(ResolveUri_RelativeBase_LotsODots2) {
572 const char* target_uri;
573 EXPECT(ResolveUri("../../..", "b1/b2", &target_uri));
574 EXPECT_STREQ("../../", target_uri);
575 }
576
577
578 // Not in RFC 3986
579 TEST_CASE(ResolveUri_RelativeBase_LotsODots3) {
580 const char* target_uri;
581 EXPECT(ResolveUri("../../../r1", "b1/b2", &target_uri));
582 EXPECT_STREQ("../../r1", target_uri);
583 }
584
585
586 // Not in RFC 3986
587 TEST_CASE(ResolveUri_RelativeBase_StartsWithDots1) {
588 const char* target_uri;
589 EXPECT(ResolveUri("../r1", "../../b1/b2/b3", &target_uri));
590 EXPECT_STREQ("../../b1/r1", target_uri);
591 }
592
593
594 // Not in RFC 3986
595 TEST_CASE(ResolveUri_RelativeBase_StartsWithDots2) {
596 const char* target_uri;
597 EXPECT(ResolveUri("../../../r1", "../../b1/b2/b3", &target_uri));
598 EXPECT_STREQ("../../../r1", target_uri);
599 }
600
601
602 static const char* TestResolve(const char* base_uri, const char* uri) {
603 const char* target_uri;
604 ASSERT(ResolveUri(uri, base_uri, &target_uri));
605 return target_uri;
606 }
607
608
609 // This test is ported from sdk/tests/corelib/uri_test.dart (testUriPerRFCs).
610 TEST_CASE(ResolveUri_TestUriPerRFCs) {
611 const char* base = "http://a/b/c/d;p?q";
612
613 // From RFC 3986
614 EXPECT_STREQ("g:h", TestResolve(base, "g:h"));
615 EXPECT_STREQ("http://a/b/c/g", TestResolve(base, "g"));
616 EXPECT_STREQ("http://a/b/c/g", TestResolve(base, "./g"));
617 EXPECT_STREQ("http://a/b/c/g/", TestResolve(base, "g/"));
618 EXPECT_STREQ("http://a/g", TestResolve(base, "/g"));
619 EXPECT_STREQ("http://g", TestResolve(base, "//g"));
620 EXPECT_STREQ("http://a/b/c/d;p?y", TestResolve(base, "?y"));
621 EXPECT_STREQ("http://a/b/c/g?y", TestResolve(base, "g?y"));
622 EXPECT_STREQ("http://a/b/c/d;p?q#s", TestResolve(base, "#s"));
623 EXPECT_STREQ("http://a/b/c/g#s", TestResolve(base, "g#s"));
624 EXPECT_STREQ("http://a/b/c/g?y#s", TestResolve(base, "g?y#s"));
625 EXPECT_STREQ("http://a/b/c/;x", TestResolve(base, ";x"));
626 EXPECT_STREQ("http://a/b/c/g;x", TestResolve(base, "g;x"));
627 EXPECT_STREQ("http://a/b/c/g;x?y#s", TestResolve(base, "g;x?y#s"));
628 EXPECT_STREQ("http://a/b/c/d;p?q", TestResolve(base, ""));
629 EXPECT_STREQ("http://a/b/c/", TestResolve(base, "."));
630 EXPECT_STREQ("http://a/b/c/", TestResolve(base, "./"));
631 EXPECT_STREQ("http://a/b/", TestResolve(base, ".."));
632 EXPECT_STREQ("http://a/b/", TestResolve(base, "../"));
633 EXPECT_STREQ("http://a/b/g", TestResolve(base, "../g"));
634 EXPECT_STREQ("http://a/", TestResolve(base, "../.."));
635 EXPECT_STREQ("http://a/", TestResolve(base, "../../"));
636 EXPECT_STREQ("http://a/g", TestResolve(base, "../../g"));
637 EXPECT_STREQ("http://a/g", TestResolve(base, "../../../g"));
638 EXPECT_STREQ("http://a/g", TestResolve(base, "../../../../g"));
639 EXPECT_STREQ("http://a/g", TestResolve(base, "/./g"));
640 EXPECT_STREQ("http://a/g", TestResolve(base, "/../g"));
641 EXPECT_STREQ("http://a/b/c/g.", TestResolve(base, "g."));
642 EXPECT_STREQ("http://a/b/c/.g", TestResolve(base, ".g"));
643 EXPECT_STREQ("http://a/b/c/g..", TestResolve(base, "g.."));
644 EXPECT_STREQ("http://a/b/c/..g", TestResolve(base, "..g"));
645 EXPECT_STREQ("http://a/b/g", TestResolve(base, "./../g"));
646 EXPECT_STREQ("http://a/b/c/g/", TestResolve(base, "./g/."));
647 EXPECT_STREQ("http://a/b/c/g/h", TestResolve(base, "g/./h"));
648 EXPECT_STREQ("http://a/b/c/h", TestResolve(base, "g/../h"));
649 EXPECT_STREQ("http://a/b/c/g;x=1/y", TestResolve(base, "g;x=1/./y"));
650 EXPECT_STREQ("http://a/b/c/y", TestResolve(base, "g;x=1/../y"));
651 EXPECT_STREQ("http://a/b/c/g?y/./x", TestResolve(base, "g?y/./x"));
652 EXPECT_STREQ("http://a/b/c/g?y/../x", TestResolve(base, "g?y/../x"));
653 EXPECT_STREQ("http://a/b/c/g#s/./x", TestResolve(base, "g#s/./x"));
654 EXPECT_STREQ("http://a/b/c/g#s/../x", TestResolve(base, "g#s/../x"));
655 EXPECT_STREQ("http:g", TestResolve(base, "http:g"));
656
657 // Additional tests (not from RFC 3986).
658 EXPECT_STREQ("http://a/b/g;p/h;s", TestResolve(base, "../g;p/h;s"));
659
660 // Test non-URI base (no scheme, no authority, relative path).
661 base = "a/b/c?_#_";
662 EXPECT_STREQ("a/b/g?q#f", TestResolve(base, "g?q#f"));
663 EXPECT_STREQ("./", TestResolve(base, "../.."));
664 EXPECT_STREQ("../", TestResolve(base, "../../.."));
665 EXPECT_STREQ("a/b/", TestResolve(base, "."));
666 EXPECT_STREQ("c", TestResolve(base, "../../c"));
667
668 base = "../../a/b/c?_#_"; // Initial ".." in base url.
669 EXPECT_STREQ("../../a/d", TestResolve(base, "../d"));
670 EXPECT_STREQ("../../../d", TestResolve(base, "../../../d"));
671
672 base = "s:a/b";
673 EXPECT_STREQ("s:/c", TestResolve(base, "../c"));
674 }
675
676
677 // This test is ported from sdk/tests/corelib/uri_test.dart (testResolvePath).
678 TEST_CASE(ResolveUri_MoreDotSegmentTests) {
679 const char* base = "/";
680 EXPECT_STREQ("/a/g", TestResolve(base, "/a/b/c/./../../g"));
681 EXPECT_STREQ("/a/g", TestResolve(base, "/a/b/c/./../../g"));
682 EXPECT_STREQ("/mid/6", TestResolve(base, "mid/content=5/../6"));
683 EXPECT_STREQ("/a/b/e", TestResolve(base, "a/b/c/d/../../e"));
684 EXPECT_STREQ("/a/b/e", TestResolve(base, "../a/b/c/d/../../e"));
685 EXPECT_STREQ("/a/b/e", TestResolve(base, "./a/b/c/d/../../e"));
686 EXPECT_STREQ("/a/b/e", TestResolve(base, "../a/b/./c/d/../../e"));
687 EXPECT_STREQ("/a/b/e", TestResolve(base, "./a/b/./c/d/../../e"));
688 EXPECT_STREQ("/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/."));
689 EXPECT_STREQ("/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/./."));
690 EXPECT_STREQ("/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/././."));
691
692 #define LH "http://localhost"
693 base = LH;
694 EXPECT_STREQ(LH "/a/g", TestResolve(base, "/a/b/c/./../../g"));
695 EXPECT_STREQ(LH "/a/g", TestResolve(base, "/a/b/c/./../../g"));
696 EXPECT_STREQ(LH "/mid/6", TestResolve(base, "mid/content=5/../6"));
697 EXPECT_STREQ(LH "/a/b/e", TestResolve(base, "a/b/c/d/../../e"));
698 EXPECT_STREQ(LH "/a/b/e", TestResolve(base, "../a/b/c/d/../../e"));
699 EXPECT_STREQ(LH "/a/b/e", TestResolve(base, "./a/b/c/d/../../e"));
700 EXPECT_STREQ(LH "/a/b/e", TestResolve(base, "../a/b/./c/d/../../e"));
701 EXPECT_STREQ(LH "/a/b/e", TestResolve(base, "./a/b/./c/d/../../e"));
702 EXPECT_STREQ(LH "/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/."));
703 EXPECT_STREQ(LH "/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/./."));
704 EXPECT_STREQ(LH "/a/b/e/", TestResolve(base, "./a/b/./c/d/../../e/././."));
705 #undef LH
706 }
707
708 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/uri.cc ('k') | runtime/vm/vm_sources.gypi » ('j') | tests/corelib/uri_test.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698