Index: tests/corelib/uri_test.dart |
diff --git a/tests/corelib/uri_test.dart b/tests/corelib/uri_test.dart |
index 30b62428a87e92fa0a1b2ed1d2883e53f5fabcab..86a0ab3dc379e5d011da6f82db7ad6bbd51b34fd 100644 |
--- a/tests/corelib/uri_test.dart |
+++ b/tests/corelib/uri_test.dart |
@@ -10,6 +10,12 @@ import 'dart:convert'; |
testUri(String uriText, bool isAbsolute) { |
var uri = Uri.parse(uriText); |
+ // Test that parsing a substring works the same as parsing the string. |
+ String wrapper = "://@[]:/%?#"; |
+ var embeddedUri = Uri.parse( |
+ "$wrapper$uri$wrapper", wrapper.length, uriText.length + wrapper.length); |
+ |
+ Expect.equals(uri, embeddedUri); |
Expect.equals(isAbsolute, uri.isAbsolute); |
Expect.stringEquals(uriText, uri.toString()); |
@@ -127,19 +133,104 @@ testUriPerRFCs() { |
// Additional tests (not from RFC 3986). |
testResolve("http://a/b/g;p/h;s", "../g;p/h;s"); |
+ base = Uri.parse("s:a/b"); |
+ testResolve("s:a/c", "c"); |
+ testResolve("s:/c", "../c"); |
+ |
+ base = Uri.parse("S:a/b"); |
+ testResolve("s:a/c", "c"); |
+ testResolve("s:/c", "../c"); |
+ |
+ base = Uri.parse("s:foo"); |
+ testResolve("s:bar", "bar"); |
+ testResolve("s:bar", "../bar"); |
+ |
+ base = Uri.parse("S:foo"); |
+ testResolve("s:bar", "bar"); |
+ testResolve("s:bar", "../bar"); |
+ |
+ base = Uri.parse("s:/foo"); |
+ testResolve("s:/bar", "bar"); |
+ testResolve("s:/bar", "../bar"); |
+ |
+ base = Uri.parse("S:/foo"); |
+ testResolve("s:/bar", "bar"); |
+ testResolve("s:/bar", "../bar"); |
+ |
// 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("../", "../../.."); |
testResolve("a/b/", "."); |
- testResolve("c", "../../c"); |
+ testResolve("/c", "../../c"); |
base = Uri.parse("../../a/b/c?_#_"); // Initial ".." in base url. |
testResolve("../../a/d", "../d"); |
testResolve("../../../d", "../../../d"); |
- base = Uri.parse("s:a/b"); |
- testResolve("s:/c", "../c"); |
+ base = Uri.parse("s://h/p?q#f"); // A simple base. |
+ // Simple references: |
+ testResolve("s2://h2/P?Q#F", "s2://h2/P?Q#F"); |
+ testResolve("s://h2/P?Q#F", "//h2/P?Q#F"); |
+ testResolve("s://h/P?Q#F", "/P?Q#F"); |
+ testResolve("s://h/p?Q#F", "?Q#F"); |
+ testResolve("s://h/p?q#F", "#F"); |
+ testResolve("s://h/p?q", ""); |
+ // Non-simple references: |
+ testResolve("s2://I@h2/P?Q#F%20", "s2://I@h2/P?Q#F%20"); |
+ testResolve("s://I@h2/P?Q#F%20", "//I@h2/P?Q#F%20"); |
+ testResolve("s://h2/P?Q#F%20", "//h2/P?Q#F%20"); |
+ testResolve("s://h/P?Q#F%20", "/P?Q#F%20"); |
+ testResolve("s://h/p?Q#F%20", "?Q#F%20"); |
+ testResolve("s://h/p?q#F%20", "#F%20"); |
+ |
+ base = Uri.parse("s://h/p1/p2/p3"); // A simple base with a path. |
+ testResolve("s://h/p1/p2/", "."); |
+ testResolve("s://h/p1/p2/", "./"); |
+ testResolve("s://h/p1/", ".."); |
+ testResolve("s://h/p1/", "../"); |
+ testResolve("s://h/", "../.."); |
+ testResolve("s://h/", "../../"); |
+ testResolve("s://h/p1/%20", "../%20"); |
+ testResolve("s://h/", "../../../.."); |
+ testResolve("s://h/", "../../../../"); |
+ |
+ base = Uri.parse("s://h/p?q#f%20"); // A non-simpe base |
floitsch
2016/06/29 23:41:48
finish with ".".
Lasse Reichstein Nielsen
2016/06/30 10:27:31
Argh, missed that one. Will fix.
|
+ // Simple references: |
+ testResolve("s2://h2/P?Q#F", "s2://h2/P?Q#F"); |
+ testResolve("s://h2/P?Q#F", "//h2/P?Q#F"); |
+ testResolve("s://h/P?Q#F", "/P?Q#F"); |
+ testResolve("s://h/p?Q#F", "?Q#F"); |
+ testResolve("s://h/p?q#F", "#F"); |
+ testResolve("s://h/p?q", ""); |
+ // Non-simple references: |
+ testResolve("s2://I@h2/P?Q#F%20", "s2://I@h2/P?Q#F%20"); |
+ testResolve("s://I@h2/P?Q#F%20", "//I@h2/P?Q#F%20"); |
+ testResolve("s://h2/P?Q#F%20", "//h2/P?Q#F%20"); |
+ testResolve("s://h/P?Q#F%20", "/P?Q#F%20"); |
+ testResolve("s://h/p?Q#F%20", "?Q#F%20"); |
+ testResolve("s://h/p?q#F%20", "#F%20"); |
+ |
+ base = Uri.parse("S://h/p1/p2/p3"); // A non-simple base with a path. |
+ testResolve("s://h/p1/p2/", "."); |
+ testResolve("s://h/p1/p2/", "./"); |
+ testResolve("s://h/p1/", ".."); |
+ testResolve("s://h/p1/", "../"); |
+ testResolve("s://h/", "../.."); |
+ testResolve("s://h/", "../../"); |
+ testResolve("s://h/p1/%20", "../%20"); |
+ testResolve("s://h/", "../../../.."); |
+ testResolve("s://h/", "../../../../"); |
+ |
+ base = Uri.parse("../../../"); // A simple relative path. |
+ testResolve("../../../a", "a"); |
+ testResolve("../../../../a", "../a"); |
+ testResolve("../../../a%20", "a%20"); |
+ testResolve("../../../../a%20", "../a%20"); |
+ |
+ // Regression test. |
+ base = Uri.parse("scheme:pathNoSlash"); |
+ testResolve("scheme:otherPath", "otherPath"); |
} |
void testResolvePath(String expected, String path) { |
@@ -493,6 +584,11 @@ main() { |
query: null, |
fragment: null).toString()); |
Expect.stringEquals("file:///", Uri.parse("file:").toString()); |
+ Expect.stringEquals("file:///", Uri.parse("file:/").toString()); |
+ Expect.stringEquals("file:///", Uri.parse("file:").toString()); |
+ Expect.stringEquals("file:///foo", Uri.parse("file:foo").toString()); |
+ Expect.stringEquals("file:///foo", Uri.parse("file:/foo").toString()); |
+ Expect.stringEquals("file://foo/", Uri.parse("file://foo").toString()); |
testResolvePath("/a/g", "/a/b/c/./../../g"); |
testResolvePath("/a/g", "/a/b/c/./../../g"); |