Index: tests/corelib/uri_test.dart |
diff --git a/tests/corelib/uri_test.dart b/tests/corelib/uri_test.dart |
index 7971256c10883d47091f05ed4251804376d89382..834cadc8409e5b19ae940e7f4ea1240992bc0acc 100644 |
--- a/tests/corelib/uri_test.dart |
+++ b/tests/corelib/uri_test.dart |
@@ -61,64 +61,74 @@ testEncodeDecodeQueryComponent(String orig, |
} |
} |
-testUriPerRFCs(Uri base) { |
+testUriPerRFCs() { |
+ final urisSample = "http://a/b/c/d;p?q"; |
+ Uri base = Uri.parse(urisSample); |
+ testResolve(expect, relative) { |
+ Expect.stringEquals(expect, base.resolve(relative).toString()); |
+ } |
+ |
// From RFC 3986. |
- Expect.stringEquals("g:h", base.resolve("g:h").toString()); |
- Expect.stringEquals("http://a/b/c/g", base.resolve("g").toString()); |
- Expect.stringEquals("http://a/b/c/g", base.resolve("./g").toString()); |
- Expect.stringEquals("http://a/b/c/g/", base.resolve("g/").toString()); |
- Expect.stringEquals("http://a/g", base.resolve("/g").toString()); |
- Expect.stringEquals("http://g", base.resolve("//g").toString()); |
- Expect.stringEquals("http://a/b/c/d;p?y", base.resolve("?y").toString()); |
- Expect.stringEquals("http://a/b/c/g?y", base.resolve("g?y").toString()); |
- Expect.stringEquals("http://a/b/c/d;p?q#s", base.resolve("#s").toString()); |
- Expect.stringEquals("http://a/b/c/g#s", base.resolve("g#s").toString()); |
- Expect.stringEquals("http://a/b/c/g?y#s", base.resolve("g?y#s").toString()); |
- Expect.stringEquals("http://a/b/c/;x", base.resolve(";x").toString()); |
- Expect.stringEquals("http://a/b/c/g;x", base.resolve("g;x").toString()); |
- Expect.stringEquals("http://a/b/c/g;x?y#s", |
- base.resolve("g;x?y#s").toString()); |
- Expect.stringEquals("http://a/b/c/d;p?q", base.resolve("").toString()); |
- Expect.stringEquals("http://a/b/c/", base.resolve(".").toString()); |
- Expect.stringEquals("http://a/b/c/", base.resolve("./").toString()); |
- Expect.stringEquals("http://a/b/", base.resolve("..").toString()); |
- Expect.stringEquals("http://a/b/", base.resolve("../").toString()); |
- Expect.stringEquals("http://a/b/g", base.resolve("../g").toString()); |
- Expect.stringEquals("http://a/", base.resolve("../..").toString()); |
- Expect.stringEquals("http://a/", base.resolve("../../").toString()); |
- Expect.stringEquals("http://a/g", base.resolve("../../g").toString()); |
- Expect.stringEquals("http://a/g", base.resolve("../../../g").toString()); |
- Expect.stringEquals("http://a/g", base.resolve("../../../../g").toString()); |
- Expect.stringEquals("http://a/g", base.resolve("/./g").toString()); |
- Expect.stringEquals("http://a/g", base.resolve("/../g").toString()); |
- Expect.stringEquals("http://a/b/c/g.", base.resolve("g.").toString()); |
- Expect.stringEquals("http://a/b/c/.g", base.resolve(".g").toString()); |
- Expect.stringEquals("http://a/b/c/g..", base.resolve("g..").toString()); |
- Expect.stringEquals("http://a/b/c/..g", base.resolve("..g").toString()); |
- Expect.stringEquals("http://a/b/g", base.resolve("./../g").toString()); |
- Expect.stringEquals("http://a/b/c/g/", base.resolve("./g/.").toString()); |
- Expect.stringEquals("http://a/b/c/g/h", base.resolve("g/./h").toString()); |
- Expect.stringEquals("http://a/b/c/h", base.resolve("g/../h").toString()); |
- Expect.stringEquals("http://a/b/c/g;x=1/y", |
- base.resolve("g;x=1/./y").toString()); |
- Expect.stringEquals("http://a/b/c/y", base.resolve("g;x=1/../y").toString()); |
- Expect.stringEquals("http://a/b/c/g?y/./x", |
- base.resolve("g?y/./x").toString()); |
- Expect.stringEquals("http://a/b/c/g?y/../x", |
- base.resolve("g?y/../x").toString()); |
- Expect.stringEquals("http://a/b/c/g#s/./x", |
- base.resolve("g#s/./x").toString()); |
- Expect.stringEquals("http://a/b/c/g#s/../x", |
- base.resolve("g#s/../x").toString()); |
- Expect.stringEquals("http:g", base.resolve("http:g").toString()); |
+ testResolve("g:h", "g:h"); |
+ testResolve("http://a/b/c/g", "g"); |
+ testResolve("http://a/b/c/g", "./g"); |
+ testResolve("http://a/b/c/g/", "g/"); |
+ testResolve("http://a/g", "/g"); |
+ testResolve("http://g", "//g"); |
+ testResolve("http://a/b/c/d;p?y", "?y"); |
+ testResolve("http://a/b/c/g?y", "g?y"); |
+ testResolve("http://a/b/c/d;p?q#s", "#s"); |
+ testResolve("http://a/b/c/g#s", "g#s"); |
+ testResolve("http://a/b/c/g?y#s", "g?y#s"); |
+ testResolve("http://a/b/c/;x", ";x"); |
+ testResolve("http://a/b/c/g;x", "g;x"); |
+ testResolve("http://a/b/c/g;x?y#s", "g;x?y#s"); |
+ testResolve("http://a/b/c/d;p?q", ""); |
+ testResolve("http://a/b/c/", "."); |
+ testResolve("http://a/b/c/", "./"); |
+ testResolve("http://a/b/", ".."); |
+ testResolve("http://a/b/", "../"); |
+ testResolve("http://a/b/g", "../g"); |
+ testResolve("http://a/", "../.."); |
+ testResolve("http://a/", "../../"); |
+ testResolve("http://a/g", "../../g"); |
+ testResolve("http://a/g", "../../../g"); |
+ testResolve("http://a/g", "../../../../g"); |
+ testResolve("http://a/g", "/./g"); |
+ testResolve("http://a/g", "/../g"); |
+ testResolve("http://a/b/c/g.", "g."); |
+ testResolve("http://a/b/c/.g", ".g"); |
+ testResolve("http://a/b/c/g..", "g.."); |
+ testResolve("http://a/b/c/..g", "..g"); |
+ testResolve("http://a/b/g", "./../g"); |
+ testResolve("http://a/b/c/g/", "./g/."); |
+ testResolve("http://a/b/c/g/h", "g/./h"); |
+ testResolve("http://a/b/c/h", "g/../h"); |
+ testResolve("http://a/b/c/g;x=1/y", "g;x=1/./y"); |
+ testResolve("http://a/b/c/y", "g;x=1/../y"); |
+ testResolve("http://a/b/c/g?y/./x", "g?y/./x"); |
+ testResolve("http://a/b/c/g?y/../x", "g?y/../x"); |
+ testResolve("http://a/b/c/g#s/./x", "g#s/./x"); |
+ testResolve("http://a/b/c/g#s/../x", "g#s/../x"); |
+ testResolve("http:g", "http:g"); |
// Additional tests (not from RFC 3986). |
- Expect.stringEquals("http://a/b/g;p/h;s", |
- base.resolve("../g;p/h;s").toString()); |
+ testResolve("http://a/b/g;p/h;s", "../g;p/h;s"); |
+ |
+ // Test non-URI base (no scheme, no authority, relative path). |
+ base = Uri.parse("a/b/c?_#_"); |
+ testResolve("a/b/g?q#f", "g?q#f"); |
+ testResolve("../", "../../.."); |
+ testResolve("a/b/", "."); |
+ testResolve("c", "../../c"); |
+ |
+ base = Uri.parse("s:a/b"); |
+ testResolve("s:/c", "../c"); |
} |
void testResolvePath(String expected, String path) { |
- Expect.equals(expected, new Uri().resolveUri(new Uri(path: path)).path); |
+ Expect.equals(expected, |
+ new Uri(path: '/').resolveUri(new Uri(path: path)).path); |
Expect.equals( |
"http://localhost$expected", |
Uri.parse("http://localhost").resolveUri(new Uri(path: path)).toString()); |
@@ -471,11 +481,7 @@ main() { |
testResolvePath("/a/b/e/", "./a/b/./c/d/../../e/./."); |
testResolvePath("/a/b/e/", "./a/b/./c/d/../../e/././."); |
- final urisSample = "http://a/b/c/d;p?q"; |
- Uri baseFromString = Uri.parse(urisSample); |
- testUriPerRFCs(baseFromString); |
- Uri base = Uri.parse(urisSample); |
- testUriPerRFCs(base); |
+ testUriPerRFCs(); |
Expect.stringEquals( |
"http://example.com", |