13 EXPECT_STREQ(
"foo", uri.
scheme);
15 EXPECT_STREQ(
"example.com", uri.
host);
16 EXPECT_STREQ(
"8042", uri.
port);
17 EXPECT_STREQ(
"/over/there", uri.
path);
24 EXPECT(
ParseUri(
"foo://example.com:8042/over/there?name=ferret", &uri));
25 EXPECT_STREQ(
"foo", uri.
scheme);
27 EXPECT_STREQ(
"example.com", uri.
host);
28 EXPECT_STREQ(
"8042", uri.
port);
29 EXPECT_STREQ(
"/over/there", uri.
path);
30 EXPECT_STREQ(
"name=ferret", uri.
query);
36 EXPECT(
ParseUri(
"foo://example.com:8042/over/there#fragment", &uri));
37 EXPECT_STREQ(
"foo", uri.
scheme);
39 EXPECT_STREQ(
"example.com", uri.
host);
40 EXPECT_STREQ(
"8042", uri.
port);
41 EXPECT_STREQ(
"/over/there", uri.
path);
43 EXPECT_STREQ(
"fragment", uri.
fragment);
46TEST_CASE(ParseUri_WithScheme_WithQueryWithFragment) {
49 ParseUri(
"foo://example.com:8042/over/there?name=ferret#fragment", &uri));
50 EXPECT_STREQ(
"foo", uri.
scheme);
52 EXPECT_STREQ(
"example.com", uri.
host);
53 EXPECT_STREQ(
"8042", uri.
port);
54 EXPECT_STREQ(
"/over/there", uri.
path);
55 EXPECT_STREQ(
"name=ferret", uri.
query);
56 EXPECT_STREQ(
"fragment", uri.
fragment);
62 EXPECT_STREQ(
"foo", uri.
scheme);
64 EXPECT_STREQ(
"example.com", uri.
host);
65 EXPECT_STREQ(
"8042", uri.
port);
66 EXPECT_STREQ(
"/over/there", uri.
path);
74 EXPECT_STREQ(
"foo", uri.
scheme);
76 EXPECT_STREQ(
"example.com", uri.
host);
77 EXPECT_STREQ(
"8042", uri.
port);
78 EXPECT_STREQ(
"/", uri.
path);
86 EXPECT_STREQ(
"foo", uri.
scheme);
88 EXPECT_STREQ(
"example.com", uri.
host);
89 EXPECT_STREQ(
"8042", uri.
port);
90 EXPECT_STREQ(
"", uri.
path);
98 EXPECT_STREQ(
"foo", uri.
scheme);
102 EXPECT_STREQ(
"here", uri.
path);
110 EXPECT_STREQ(
"foo", uri.
scheme);
114 EXPECT_STREQ(
"or/here", uri.
path);
124 EXPECT_STREQ(
"example.com", uri.
host);
125 EXPECT_STREQ(
"8042", uri.
port);
126 EXPECT_STREQ(
"/over/there", uri.
path);
138 EXPECT_STREQ(
"/over/there", uri.
path);
151 EXPECT_STREQ(
"/ov:er/there", uri.
path);
162 EXPECT_STREQ(
"here", uri.
path);
174 EXPECT_STREQ(
"or/here", uri.
path);
186 EXPECT_STREQ(
"", uri.
path);
198 EXPECT_STREQ(
"", uri.
path);
199 EXPECT_STREQ(
"name=ferret", uri.
query);
210 EXPECT_STREQ(
"", uri.
path);
212 EXPECT_STREQ(
"fragment", uri.
fragment);
218 EXPECT_STREQ(
"scheme", uri.
scheme);
222 EXPECT_STREQ(
"path", uri.
path);
229 EXPECT(
ParseUri(
"scheme:/This%09Is A P%61th?This%09Is A Qu%65ry#A Fr%61gment",
231 EXPECT_STREQ(
"scheme", uri.
scheme);
235 EXPECT_STREQ(
"/This%09Is%20A%20Path", uri.
path);
236 EXPECT_STREQ(
"This%09Is%20A%20Query", uri.
query);
237 EXPECT_STREQ(
"A%20Fragment", uri.
fragment);
240TEST_CASE(ParseUri_NormalizeEscapes_UppercaseEscapesPreferred) {
243 EXPECT_STREQ(
"scheme", uri.
scheme);
247 EXPECT_STREQ(
"/%1B%1B", uri.
path);
254 EXPECT(
ParseUri(
"scheme://UsEr N%61%4de@h%4FsT.c%6fm:80/", &uri));
255 EXPECT_STREQ(
"scheme", uri.
scheme);
256 EXPECT_STREQ(
"UsEr%20NaMe", uri.
userinfo);
257 EXPECT_STREQ(
"host.com", uri.
host);
258 EXPECT_STREQ(
"80", uri.
port);
259 EXPECT_STREQ(
"/", uri.
path);
264TEST_CASE(ParseUri_NormalizeEscapes_UppercaseEscapeInHost) {
267 EXPECT_STREQ(
"scheme", uri.
scheme);
269 EXPECT_STREQ(
"test%1B", uri.
host);
271 EXPECT_STREQ(
"/", uri.
path);
279 EXPECT_STREQ(
"scheme", uri.
scheme);
283 EXPECT_STREQ(
"/%1g", uri.
path);
289 const char* target_uri;
291 "bscheme://buser@bhost:11/base/path?baseQuery",
293 EXPECT_STREQ(
"rscheme:/ref/path", target_uri);
296TEST_CASE(ResolveUri_WithScheme_WithAuthorityWithQuery) {
297 const char* target_uri;
299 "bscheme://buser@bhost:11/base/path?baseQuery",
301 EXPECT_STREQ(
"rscheme://ruser@rhost:22/ref/path?refQuery", target_uri);
305 const char* target_uri;
307 "bscheme://buser@bhost:11/base/path?baseQuery",
309 EXPECT_STREQ(
"bscheme://ruser@rhost:22/ref/path", target_uri);
313 const char* target_uri;
314 EXPECT(
ResolveUri(
"/ref/path",
"bscheme://buser@bhost:11/base/path?baseQuery",
316 EXPECT_STREQ(
"bscheme://buser@bhost:11/ref/path", target_uri);
320 const char* target_uri;
321 EXPECT(
ResolveUri(
"ref/path",
"bscheme://buser@bhost:11/base/path?baseQuery",
323 EXPECT_STREQ(
"bscheme://buser@bhost:11/base/ref/path", target_uri);
326TEST_CASE(ResolveUri_NoSchemeNoAuthority_RelativePathEmptyBasePath) {
327 const char* target_uri;
329 EXPECT_STREQ(
"bscheme://buser@bhost:11/ref/path", target_uri);
332TEST_CASE(ResolveUri_NoSchemeNoAuthority_RelativePathWeirdBasePath) {
333 const char* target_uri;
335 EXPECT_STREQ(
"bscheme:ref/path", target_uri);
339 const char* target_uri;
341 "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
344 EXPECT_STREQ(
"bscheme://buser@bhost:11/base/path?baseQuery", target_uri);
347TEST_CASE(ResolveUri_NoSchemeNoAuthority_EmptyPathWithQuery) {
348 const char* target_uri;
350 "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
352 EXPECT_STREQ(
"bscheme://buser@bhost:11/base/path?refQuery", target_uri);
355TEST_CASE(ResolveUri_NoSchemeNoAuthority_EmptyPathWithFragment) {
356 const char* target_uri;
358 "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
360 EXPECT_STREQ(
"bscheme://buser@bhost:11/base/path?baseQuery#rfragment",
365 const char* target_uri;
367 EXPECT_STREQ(
"scheme://auth/a/b/c/refpath", target_uri);
371 const char* target_uri;
373 EXPECT_STREQ(
"scheme://auth/a/b/c/refpath", target_uri);
376TEST_CASE(ResolveUri_RemoveDots_RemoveOneDotDotSegment) {
377 const char* target_uri;
379 EXPECT_STREQ(
"scheme://auth/a/b/refpath", target_uri);
382TEST_CASE(ResolveUri_RemoveDots_RemoveTwoDotDotSegments) {
383 const char* target_uri;
385 EXPECT_STREQ(
"scheme://auth/a/refpath", target_uri);
388TEST_CASE(ResolveUri_RemoveDots_RemoveTooManyDotDotSegments) {
389 const char* target_uri;
391 "scheme://auth/a/b/c/d", &target_uri));
392 EXPECT_STREQ(
"scheme://auth/refpath", target_uri);
395TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsNothingLeft1) {
396 const char* target_uri;
398 EXPECT_STREQ(
"scheme://auth/", target_uri);
401TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsNothingLeft2) {
402 const char* target_uri;
404 EXPECT_STREQ(
"scheme://auth/", target_uri);
407TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsInitialPrefix) {
408 const char* target_uri;
410 EXPECT_STREQ(
"scheme://auth/refpath", target_uri);
413TEST_CASE(ResolveUri_RemoveDots_RemoveDotSegmentsMixed) {
414 const char* target_uri;
416 "scheme://auth/a/b/c/d/e", &target_uri));
417 EXPECT_STREQ(
"scheme://auth/a/b/1/3/5/7", target_uri);
420TEST_CASE(ResolveUri_NormalizeEscapes_PathQueryFragment) {
421 const char* target_uri;
423 "scheme:/This%09Is A P%61th?This%09Is A Qu%65ry",
426 "scheme:/This%09Is%20A%20Path?This%09Is%20A%20Query#A%20Fragment",
430TEST_CASE(ResolveUri_NormalizeEscapes_UppercaseHexPreferred) {
431 const char* target_uri;
433 EXPECT_STREQ(
"scheme:/%1B%1B", target_uri);
437 const char* target_uri;
439 ResolveUri(
"",
"scheme://UsEr N%61%4de@h%4FsT.c%6fm:80/", &target_uri));
442 EXPECT_STREQ(
"scheme://UsEr%20NaMe@host.com:80/", target_uri);
445TEST_CASE(ResolveUri_NormalizeEscapes_BrokenEscapeSequence) {
446 const char* target_uri;
449 EXPECT_STREQ(
"scheme:/%1g", target_uri);
453 const char* data_uri =
455 "dart;charset=utf-8,%20%20%20%20%20%20%20%20import%20%22dart:isolate%22;%"
456 "0A%0A%20%20%20%20%20%20%20%20import%20%22package:stream_channel/"
457 "stream_channel.dart%22;%0A%0A%20%20%20%20%20%20%20%20import%20%"
458 "22package:test/src/runner/plugin/"
459 "remote_platform_helpers.dart%22;%0A%20%20%20%20%20%20%20%20import%20%"
460 "22package:test/src/runner/vm/"
461 "catch_isolate_errors.dart%22;%0A%0A%20%20%20%20%20%20%20%20import%20%"
462 "22file:///home/sra/xxxx/dev_compiler/test/"
463 "all_tests.dart%22%20as%20test;%0A%0A%20%20%20%20%20%20%20%20void%20main("
464 "_,%20SendPort%20message)%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%"
465 "20channel%20=%20serializeSuite(()%20%7B%0A%20%20%20%20%20%20%20%20%20%"
466 "20%20%20catchIsolateErrors();%0A%20%20%20%20%20%20%20%20%20%20%20%"
467 "20return%20test.main;%0A%20%20%20%20%20%20%20%20%20%20%7D);%0A%20%20%20%"
468 "20%20%20%20%20%20%20new%20IsolateChannel.connectSend(message).pipe("
469 "channel);%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20";
471 const char* target_uri;
473 "bscheme://buser@bhost:11/base/path?baseQuery#bfragment",
475 EXPECT_STREQ(data_uri, target_uri);
482 const char* target_uri;
484 EXPECT(target_uri ==
nullptr);
487 EXPECT(target_uri ==
nullptr);
490 EXPECT(target_uri ==
nullptr);
493 EXPECT(target_uri ==
nullptr);
496 EXPECT(target_uri ==
nullptr);
499 EXPECT(target_uri ==
nullptr);
502 EXPECT(target_uri ==
nullptr);
505static const char*
TestResolve(
const char* base_uri,
const char* uri) {
506 const char* target_uri;
513 const char*
base =
"http://a/b/c/d;p?q";
568 const char*
base =
"/";
579 EXPECT_STREQ(
"/a/b/e/",
TestResolve(
base,
"./a/b/./c/d/../../e/././."));
581#define LH "http://localhost"
597TEST_CASE(ResolveUri_WindowsPaths_Forwardslash_NoScheme) {
599 "c:/Users/USERNA~1/AppData/Local/Temp/a/b.dll",
600 TestResolve(
"C:/Users/USERNA~1/AppData/Local/Temp/a/out.dill",
"b.dll"));
607TEST_CASE(ResolveUri_WindowsPaths_Forwardslash_FileScheme) {
610 "C:/Users/USERNA~1/AppData/Local/Temp/a/b.dll",
611 TestResolve(
"file:///C:/Users/USERNA~1/AppData/Local/Temp/a/out.dill",
619 "file:///C:\\Users\\USERNA~1\\AppData\\Local\\Temp\\a\\out.dill",
bool ResolveUri(const char *ref_uri, const char *base_uri, const char **target_uri)
bool ParseUri(const char *uri, ParsedUri *parsed_uri)
static const char * TestResolve(const char *base_uri, const char *uri)