public void GetCanonicalPathTest() { Assert.Same("", UriUtils.GetCanonicalPath("")); Assert.Same("/", UriUtils.GetCanonicalPath("/")); // '.' Assert.Equal("", UriUtils.GetCanonicalPath(".")); Assert.Equal("", UriUtils.GetCanonicalPath("./")); Assert.Equal("", UriUtils.GetCanonicalPath("./.")); Assert.Equal("", UriUtils.GetCanonicalPath("././")); Assert.Equal("", UriUtils.GetCanonicalPath("././.")); Assert.Equal("a", UriUtils.GetCanonicalPath("a/.")); Assert.Equal("a/", UriUtils.GetCanonicalPath("a/./")); Assert.Equal("a", UriUtils.GetCanonicalPath("a/./.")); Assert.Equal("a/", UriUtils.GetCanonicalPath("a/././")); Assert.Equal("/", UriUtils.GetCanonicalPath("/.")); Assert.Equal("/", UriUtils.GetCanonicalPath("/./")); Assert.Equal("/", UriUtils.GetCanonicalPath("/./.")); Assert.Equal("/", UriUtils.GetCanonicalPath("/././")); Assert.Equal("/a", UriUtils.GetCanonicalPath("/a/.")); Assert.Equal("/a/", UriUtils.GetCanonicalPath("/a/./")); Assert.Equal("/a", UriUtils.GetCanonicalPath("/a/./.")); Assert.Equal("/a/", UriUtils.GetCanonicalPath("/a/././")); // '..' Assert.Equal("..", UriUtils.GetCanonicalPath("..")); Assert.Equal("../", UriUtils.GetCanonicalPath("../")); Assert.Equal("../..", UriUtils.GetCanonicalPath("../..")); Assert.Equal("../../", UriUtils.GetCanonicalPath("../../")); Assert.Equal("../../..", UriUtils.GetCanonicalPath("../../..")); Assert.Equal("", UriUtils.GetCanonicalPath("a/..")); Assert.Equal("", UriUtils.GetCanonicalPath("a/../")); Assert.Equal("..", UriUtils.GetCanonicalPath("a/../..")); Assert.Equal("../", UriUtils.GetCanonicalPath("a/../../")); Assert.Equal("/..", UriUtils.GetCanonicalPath("/../.")); Assert.Equal("/../", UriUtils.GetCanonicalPath("/.././")); Assert.Equal("/../..", UriUtils.GetCanonicalPath("/../../.")); Assert.Equal("/../../", UriUtils.GetCanonicalPath("/../.././")); Assert.Equal("/../..", UriUtils.GetCanonicalPath("/.././..")); Assert.Equal("/../../", UriUtils.GetCanonicalPath("/.././../")); Assert.Equal("", UriUtils.GetCanonicalPath("a/../.")); Assert.Equal("", UriUtils.GetCanonicalPath("a/.././")); Assert.Equal("..", UriUtils.GetCanonicalPath("a/../../.")); Assert.Equal("../", UriUtils.GetCanonicalPath("a/../.././")); Assert.Equal("..", UriUtils.GetCanonicalPath("a/.././..")); Assert.Equal("../", UriUtils.GetCanonicalPath("a/.././../")); Assert.Equal("", UriUtils.GetCanonicalPath("../a")); Assert.Equal("", UriUtils.GetCanonicalPath("../a/")); Assert.Equal("..", UriUtils.GetCanonicalPath("../../a")); Assert.Equal("../", UriUtils.GetCanonicalPath("../../a/")); Assert.Equal("b", UriUtils.GetCanonicalPath("../a/b")); Assert.Equal("b/", UriUtils.GetCanonicalPath("../a/b/")); Assert.Equal("/", UriUtils.GetCanonicalPath("/../a")); Assert.Equal("/", UriUtils.GetCanonicalPath("/../a/")); Assert.Equal("/..", UriUtils.GetCanonicalPath("/../../a")); Assert.Equal("/../", UriUtils.GetCanonicalPath("/../../a/")); Assert.Equal("/b", UriUtils.GetCanonicalPath("/../a/b")); Assert.Equal("/b/", UriUtils.GetCanonicalPath("/../a/b/")); Assert.Equal("", UriUtils.GetCanonicalPath("a/../../b")); Assert.Equal("", UriUtils.GetCanonicalPath("a/../../b/")); Assert.Equal("/", UriUtils.GetCanonicalPath("/a/../../b")); Assert.Equal("/", UriUtils.GetCanonicalPath("/a/../../b/")); // '/' Assert.Equal("/", UriUtils.GetCanonicalPath("//")); Assert.Equal("/", UriUtils.GetCanonicalPath("///")); Assert.Equal("/", UriUtils.GetCanonicalPath("//")); Assert.Equal("/", UriUtils.GetCanonicalPath("///")); Assert.Equal("/", UriUtils.GetCanonicalPath("//.")); Assert.Equal("", UriUtils.GetCanonicalPath(".//")); Assert.Equal("/", UriUtils.GetCanonicalPath("//.//")); Assert.Equal("/a", UriUtils.GetCanonicalPath("//a")); Assert.Equal("a/", UriUtils.GetCanonicalPath("a//")); Assert.Equal("/a/", UriUtils.GetCanonicalPath("//a//")); // special file names Assert.Same(".git", UriUtils.GetCanonicalPath(".git")); Assert.Same("git.", UriUtils.GetCanonicalPath("git.")); Assert.Same("..git", UriUtils.GetCanonicalPath("..git")); Assert.Same("git..", UriUtils.GetCanonicalPath("git..")); Assert.Same("...", UriUtils.GetCanonicalPath("...")); // other Assert.Same("a/b/c", UriUtils.GetCanonicalPath("a/b/c")); Assert.Equal("a/c", UriUtils.GetCanonicalPath("a///b/.././/c")); Assert.Equal("/a/c", UriUtils.GetCanonicalPath("///a/b/.././/c")); Assert.Equal("/xx/zz/abc.def", UriUtils.GetCanonicalPath("/xx/yy/../zz/.//abc.def")); }
public void BuildUrlTest() { Assert.Equal("/path/to/resource/?key=0&value=zero", UriUtils.BuildUrl(new[] { "/path", "to", "resource/" }, new { key = 0, value = "zero" })); Assert.Equal("/path/to/resource/?value=1&value=2&value=3", UriUtils.BuildUrl(new[] { "/path/", "/to/", "/resource/" }, new Dictionary <string, object> { ["value"] = new[] { 1, 2, 3 } })); Assert.Equal("http://example.com:1234/path?key=0&value=zero#section", UriUtils.BuildUrl(new[] { "http://example.com:1234/", "path" }, new { key = 0, value = "zero" }, "section")); Assert.Equal("http://example.com:1234/path?value=1&value=2&value=3#section", UriUtils.BuildUrl(new[] { "http://example.com:1234/", "path" }, new Dictionary <string, object> { ["value"] = new[] { 1, 2, 3 } }, "section")); Assert.Equal("http://example.com:1234/path?key=0&value=zero#s%23ct%3Fon", UriUtils.BuildUrl(new[] { "http://example.com:1234/", "path" }, new { key = 0, value = "zero" }, "s#ct?on")); }