| // 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("/..", "/"); | 
 | } |