| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| library uriNormalizePathTest; | |
| import "package:expect/expect.dart"; | |
| test(String path, String normalizedPath) { | |
| for (var scheme in ["http", "file", "unknown"]) { | |
| for (var auth in [ | |
| [null, "hostname", null], | |
| ["userinfo", "hostname", 1234], | |
| [null, null, null], | |
| ]) { | |
| for (var query in [null, "query"]) { | |
| for (var fragment in [null, "fragment"]) { | |
| var base = new Uri( | |
| scheme: scheme, | |
| userInfo: auth[0] as String?, | |
| host: auth[1] as String?, | |
| port: auth[2] as int?, | |
| path: path, | |
| query: query, | |
| fragment: fragment, | |
| ); | |
| var expected = base.replace( | |
| path: (base.hasAuthority && normalizedPath.isEmpty) | |
| ? "/" | |
| : normalizedPath, | |
| ); | |
| var actual = base.normalizePath(); | |
| Expect.equals(expected, actual, "$base"); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| testNoChange(String path) { | |
| test(path, path); | |
| } | |
| main() { | |
| testNoChange("foo/bar/baz"); | |
| testNoChange("/foo/bar/baz"); | |
| testNoChange("foo/bar/baz/"); | |
| test("foo/bar/..", "foo/"); | |
| test("foo/bar/.", "foo/bar/"); | |
| test("foo/./bar/../baz", "foo/baz"); | |
| test("../../foo", "foo"); | |
| test("./../foo", "foo"); | |
| test("./../", ""); | |
| test("./../.", ""); | |
| test("foo/bar/baz/../../../../qux", "/qux"); | |
| test("/foo/bar/baz/../../../../qux", "/qux"); | |
| test(".", ""); | |
| test("..", ""); | |
| test("/.", "/"); | |
| test("/..", "/"); | |
| } |