| Index: mojo/public/dart/third_party/path/test/relative_test.dart
|
| diff --git a/mojo/public/dart/third_party/path/test/relative_test.dart b/mojo/public/dart/third_party/path/test/relative_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..57a90463da5553badc8a9401b095b8f26823d79f
|
| --- /dev/null
|
| +++ b/mojo/public/dart/third_party/path/test/relative_test.dart
|
| @@ -0,0 +1,87 @@
|
| +// Copyright (c) 2013, 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.
|
| +//
|
| +// Test "relative" on all styles of path.Context, on all platforms.
|
| +
|
| +import "package:unittest/unittest.dart";
|
| +import "package:path/path.dart" as path;
|
| +
|
| +import "utils.dart";
|
| +
|
| +void main() {
|
| + test("test relative", () {
|
| + relativeTest(new path.Context(style: path.Style.posix, current: '.'), '/');
|
| + relativeTest(new path.Context(style: path.Style.posix, current: '/'), '/');
|
| + relativeTest(
|
| + new path.Context(style: path.Style.windows, current: r'd:\'), r'c:\');
|
| + relativeTest(
|
| + new path.Context(style: path.Style.windows, current: '.'), r'c:\');
|
| + relativeTest(new path.Context(style: path.Style.url, current: 'file:///'),
|
| + 'http://myserver/');
|
| + relativeTest(new path.Context(style: path.Style.url, current: '.'),
|
| + 'http://myserver/');
|
| + relativeTest(
|
| + new path.Context(style: path.Style.url, current: 'file:///'), '/');
|
| + relativeTest(new path.Context(style: path.Style.url, current: '.'), '/');
|
| + });
|
| +}
|
| +
|
| +void relativeTest(path.Context context, String prefix) {
|
| + var isRelative = (context.current == '.');
|
| + // Cases where the arguments are absolute paths.
|
| + expectRelative(result, pathArg, fromArg) {
|
| + expect(context.relative(pathArg, from: fromArg), context.normalize(result));
|
| + }
|
| +
|
| + expectRelative('c/d', '${prefix}a/b/c/d', '${prefix}a/b');
|
| + expectRelative('c/d', '${prefix}a/b/c/d', '${prefix}a/b/');
|
| + expectRelative('.', '${prefix}a', '${prefix}a');
|
| + // Trailing slashes in the inputs have no effect.
|
| + expectRelative('../../z/x/y', '${prefix}a/b/z/x/y', '${prefix}a/b/c/d/');
|
| + expectRelative('../../z/x/y', '${prefix}a/b/z/x/y', '${prefix}a/b/c/d');
|
| + expectRelative('../../z/x/y', '${prefix}a/b/z/x/y/', '${prefix}a/b/c/d');
|
| + expectRelative('../../../z/x/y', '${prefix}z/x/y', '${prefix}a/b/c');
|
| + expectRelative('../../../z/x/y', '${prefix}z/x/y', '${prefix}a/b/c/');
|
| +
|
| + // Cases where the arguments are relative paths.
|
| + expectRelative('c/d', 'a/b/c/d', 'a/b');
|
| + expectRelative('.', 'a/b/c', 'a/b/c');
|
| + expectRelative('.', 'a/d/../b/c', 'a/b/c/');
|
| + expectRelative('.', '', '');
|
| + expectRelative('.', '.', '');
|
| + expectRelative('.', '', '.');
|
| + expectRelative('.', '.', '.');
|
| + expectRelative('.', '..', '..');
|
| + if (isRelative) expectRelative('..', '..', '.');
|
| + expectRelative('a', 'a', '');
|
| + expectRelative('a', 'a', '.');
|
| + expectRelative('..', '.', 'a');
|
| + expectRelative('.', 'a/b/f/../c', 'a/e/../b/c');
|
| + expectRelative('d', 'a/b/f/../c/d', 'a/e/../b/c');
|
| + expectRelative('..', 'a/b/f/../c', 'a/e/../b/c/e/');
|
| + expectRelative('../..', '', 'a/b/');
|
| + if (isRelative) expectRelative('../../..', '..', 'a/b/');
|
| + expectRelative('../b/c/d', 'b/c/d/', 'a/');
|
| + expectRelative('../a/b/c', 'x/y/a//b/./f/../c', 'x//y/z');
|
| +
|
| + // Case where from is an exact substring of path.
|
| + expectRelative('a/b', '${prefix}x/y//a/b', '${prefix}x/y/');
|
| + expectRelative('a/b', 'x/y//a/b', 'x/y/');
|
| + expectRelative('../ya/b', '${prefix}x/ya/b', '${prefix}x/y');
|
| + expectRelative('../ya/b', 'x/ya/b', 'x/y');
|
| + expectRelative('../b', 'x/y/../b', 'x/y/.');
|
| + expectRelative('a/b/c', 'x/y/a//b/./f/../c', 'x/y');
|
| + expectRelative('.', '${prefix}x/y//', '${prefix}x/y/');
|
| + expectRelative('.', '${prefix}x/y/', '${prefix}x/y');
|
| +
|
| + // Should always throw - no relative path can be constructed.
|
| + if (isRelative) {
|
| + expect(() => context.relative('.', from: '..'), throwsPathException);
|
| + expect(() => context.relative('a/b', from: '../../d'), throwsPathException);
|
| + expect(() => context.relative('a/b', from: '${prefix}a/b'),
|
| + throwsPathException);
|
| + // An absolute path relative from a relative path returns the absolute path.
|
| + expectRelative('${prefix}a/b', '${prefix}a/b', 'c/d');
|
| + }
|
| +}
|
|
|