| Index: tests/standalone/io/link_async_test.dart
|
| diff --git a/tests/standalone/io/link_async_test.dart b/tests/standalone/io/link_async_test.dart
|
| index 9968c66cfcc2c38bd9a473df91733d7014e7efb9..9a42177447310f57752b7a8c6542c0f627e81e8f 100644
|
| --- a/tests/standalone/io/link_async_test.dart
|
| +++ b/tests/standalone/io/link_async_test.dart
|
| @@ -20,14 +20,12 @@ class FutureExpect {
|
| result.then((value) => Expect.equals(expected, value));
|
| static Future listEquals(expected, Future result) =>
|
| result.then((value) => Expect.listEquals(expected, value));
|
| - static Future throws(Future result) =>
|
| - result.then((value) {
|
| + static Future throws(Future result) => result.then((value) {
|
| throw new ExpectException(
|
| "FutureExpect.throws received $value instead of an exception");
|
| - }, onError: (_) => null);
|
| + }, onError: (_) => null);
|
| }
|
|
|
| -
|
| Future testCreate() {
|
| return Directory.systemTemp.createTemp('dart_link_async').then((baseDir) {
|
| if (isRelative(baseDir.path)) {
|
| @@ -38,171 +36,141 @@ Future testCreate() {
|
| String base = baseDir.path;
|
| String link = join(base, 'link');
|
| String target = join(base, 'target');
|
| - return new Directory(target).create()
|
| - .then((_) => new Link(link).create(target))
|
| -
|
| - .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY,
|
| - FileSystemEntity.type(link)))
|
| - .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY,
|
| - FileSystemEntity.type(target)))
|
| - .then((_) => FutureExpect.equals(FileSystemEntityType.LINK,
|
| - FileSystemEntity.type(link, followLinks: false)))
|
| - .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY,
|
| - FileSystemEntity.type(target, followLinks: false)))
|
| - .then((_) => FutureExpect.isTrue(FileSystemEntity.isLink(link)))
|
| - .then((_) => FutureExpect.isFalse(FileSystemEntity.isLink(target)))
|
| - .then((_) => FutureExpect.isTrue(new Directory(link).exists()))
|
| - .then((_) => FutureExpect.isTrue(new Directory(target).exists()))
|
| - .then((_) => FutureExpect.isTrue(new Link(link).exists()))
|
| - .then((_) => FutureExpect.isFalse(new Link(target).exists()))
|
| - .then((_) => FutureExpect.equals(target, new Link(link).target()))
|
| - .then((_) => FutureExpect.throws(new Link(target).target()))
|
| - .then((_) {
|
| + return new Directory(target)
|
| + .create()
|
| + .then((_) => new Link(link).create(target))
|
| + .then((_) => FutureExpect.equals(
|
| + FileSystemEntityType.DIRECTORY, FileSystemEntity.type(link)))
|
| + .then((_) => FutureExpect.equals(
|
| + FileSystemEntityType.DIRECTORY, FileSystemEntity.type(target)))
|
| + .then((_) => FutureExpect.equals(FileSystemEntityType.LINK,
|
| + FileSystemEntity.type(link, followLinks: false)))
|
| + .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY,
|
| + FileSystemEntity.type(target, followLinks: false)))
|
| + .then((_) => FutureExpect.isTrue(FileSystemEntity.isLink(link)))
|
| + .then((_) => FutureExpect.isFalse(FileSystemEntity.isLink(target)))
|
| + .then((_) => FutureExpect.isTrue(new Directory(link).exists()))
|
| + .then((_) => FutureExpect.isTrue(new Directory(target).exists()))
|
| + .then((_) => FutureExpect.isTrue(new Link(link).exists()))
|
| + .then((_) => FutureExpect.isFalse(new Link(target).exists()))
|
| + .then((_) => FutureExpect.equals(target, new Link(link).target()))
|
| + .then((_) => FutureExpect.throws(new Link(target).target()))
|
| + .then((_) {
|
| String createdThroughLink = join(base, 'link', 'createdThroughLink');
|
| String createdDirectly = join(base, 'target', 'createdDirectly');
|
| String createdFile = join(base, 'link', 'createdFile');
|
| - return new Directory(createdThroughLink).create()
|
| - .then((_) => new Directory(createdDirectly).create())
|
| - .then((_) => new File(createdFile).create())
|
| - .then((_) => FutureExpect.isTrue(
|
| - new Directory(createdThroughLink).exists()))
|
| - .then((_) => FutureExpect.isTrue(
|
| - new Directory(createdDirectly).exists()))
|
| - .then((_) => FutureExpect.isTrue(
|
| - new Directory(join(base, 'link', 'createdDirectly')).exists()))
|
| - .then((_) => FutureExpect.isTrue(
|
| - new Directory(join(base, 'target', 'createdThroughLink')).exists()))
|
| - .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY,
|
| - FileSystemEntity.type(createdThroughLink, followLinks: false)))
|
| - .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY,
|
| - FileSystemEntity.type(createdDirectly, followLinks: false)))
|
| + return new Directory(createdThroughLink)
|
| + .create()
|
| + .then((_) => new Directory(createdDirectly).create())
|
| + .then((_) => new File(createdFile).create())
|
| + .then((_) =>
|
| + FutureExpect.isTrue(new Directory(createdThroughLink).exists()))
|
| + .then((_) =>
|
| + FutureExpect.isTrue(new Directory(createdDirectly).exists()))
|
| + .then((_) => FutureExpect.isTrue(
|
| + new Directory(join(base, 'link', 'createdDirectly')).exists()))
|
| + .then((_) => FutureExpect.isTrue(
|
| + new Directory(join(base, 'target', 'createdThroughLink'))
|
| + .exists()))
|
| + .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY,
|
| + FileSystemEntity.type(createdThroughLink, followLinks: false)))
|
| + .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY,
|
| + FileSystemEntity.type(createdDirectly, followLinks: false)))
|
|
|
| - // Test FileSystemEntity.identical on files, directories, and links,
|
| - // reached by different paths.
|
| - .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(
|
| - createdDirectly,
|
| - createdDirectly)))
|
| - .then((_) => FutureExpect.isFalse(FileSystemEntity.identical(
|
| - createdDirectly,
|
| - createdThroughLink)))
|
| - .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(
|
| - createdDirectly,
|
| - join(base, 'link', 'createdDirectly'))))
|
| - .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(
|
| - createdThroughLink,
|
| - join(base, 'target', 'createdThroughLink'))))
|
| - .then((_) => FutureExpect.isFalse(FileSystemEntity.identical(
|
| - target,
|
| - link)))
|
| - .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(
|
| - link,
|
| - link)))
|
| - .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(
|
| - target,
|
| - target)))
|
| - .then((_) => new Link(link).target())
|
| - .then((linkTarget) => FutureExpect.isTrue(FileSystemEntity.identical(
|
| - target,
|
| - linkTarget)))
|
| - .then((_) => new File(".").resolveSymbolicLinks())
|
| - .then((fullCurrentDir) => FutureExpect.isTrue(FileSystemEntity.identical(
|
| - ".",
|
| - fullCurrentDir)))
|
| - .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(
|
| - createdFile,
|
| - createdFile)))
|
| - .then((_) => FutureExpect.isFalse(FileSystemEntity.identical(
|
| - createdFile,
|
| - createdDirectly)))
|
| - .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(
|
| - createdFile,
|
| - join(base, 'link', 'createdFile'))))
|
| - .then((_) => FutureExpect.throws(FileSystemEntity.identical(
|
| - createdFile,
|
| - join(base, 'link', 'does_not_exist'))))
|
| -
|
| - .then((_) => testDirectoryListing(base, baseDir))
|
| - .then((_) => new Directory(target).delete(recursive: true))
|
| - .then((_) {
|
| + // Test FileSystemEntity.identical on files, directories, and links,
|
| + // reached by different paths.
|
| + .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(createdDirectly, createdDirectly)))
|
| + .then((_) => FutureExpect.isFalse(FileSystemEntity.identical(createdDirectly, createdThroughLink)))
|
| + .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(createdDirectly, join(base, 'link', 'createdDirectly'))))
|
| + .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(createdThroughLink, join(base, 'target', 'createdThroughLink'))))
|
| + .then((_) => FutureExpect.isFalse(FileSystemEntity.identical(target, link)))
|
| + .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(link, link)))
|
| + .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(target, target)))
|
| + .then((_) => new Link(link).target())
|
| + .then((linkTarget) => FutureExpect.isTrue(FileSystemEntity.identical(target, linkTarget)))
|
| + .then((_) => new File(".").resolveSymbolicLinks())
|
| + .then((fullCurrentDir) => FutureExpect.isTrue(FileSystemEntity.identical(".", fullCurrentDir)))
|
| + .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(createdFile, createdFile)))
|
| + .then((_) => FutureExpect.isFalse(FileSystemEntity.identical(createdFile, createdDirectly)))
|
| + .then((_) => FutureExpect.isTrue(FileSystemEntity.identical(createdFile, join(base, 'link', 'createdFile'))))
|
| + .then((_) => FutureExpect.throws(FileSystemEntity.identical(createdFile, join(base, 'link', 'does_not_exist'))))
|
| + .then((_) => testDirectoryListing(base, baseDir))
|
| + .then((_) => new Directory(target).delete(recursive: true))
|
| + .then((_) {
|
| List<Future> futures = [];
|
| for (bool recursive in [true, false]) {
|
| for (bool followLinks in [true, false]) {
|
| - var result = baseDir.listSync(recursive: recursive,
|
| - followLinks: followLinks);
|
| + var result = baseDir.listSync(
|
| + recursive: recursive, followLinks: followLinks);
|
| Expect.equals(1, result.length);
|
| Expect.isTrue(result[0] is Link);
|
| - futures.add(FutureExpect.isTrue(
|
| - baseDir.list(recursive: recursive,
|
| - followLinks: followLinks)
|
| - .single.then((element) => element is Link)));
|
| + futures.add(FutureExpect.isTrue(baseDir
|
| + .list(recursive: recursive, followLinks: followLinks)
|
| + .single
|
| + .then((element) => element is Link)));
|
| }
|
| }
|
| return Future.wait(futures);
|
| - })
|
| - .then((_) => baseDir.delete(recursive: true));
|
| + }).then((_) => baseDir.delete(recursive: true));
|
| });
|
| });
|
| }
|
|
|
| -
|
| Future testCreateLoopingLink(_) {
|
| - return Directory.systemTemp.createTemp('dart_link_async')
|
| - .then((dir) => dir.path)
|
| - .then((String base) =>
|
| - new Directory(join(base, 'a', 'b', 'c')).create(recursive: true)
|
| - .then((_) => new Link(join(base, 'a', 'b', 'c', 'd'))
|
| - .create(join(base, 'a', 'b')))
|
| - .then((_) => new Link(join(base, 'a', 'b', 'c', 'e'))
|
| - .create(join(base, 'a')))
|
| - .then((_) => new Directory(join(base, 'a'))
|
| - .list(recursive: true, followLinks: false).last)
|
| - // This directory listing must terminate, even though it contains loops.
|
| - .then((_) => new Directory(join(base, 'a'))
|
| - .list(recursive: true, followLinks: true).last)
|
| - // This directory listing must terminate, even though it contains loops.
|
| - .then((_) => new Directory(join(base, 'a', 'b', 'c'))
|
| - .list(recursive: true, followLinks: true).last)
|
| - .then((_) => new Directory(base).delete(recursive: true))
|
| - .then((_) => FutureExpect.isFalse(new Directory(base).exists()))
|
| - );
|
| + return Directory.systemTemp
|
| + .createTemp('dart_link_async')
|
| + .then((dir) => dir.path)
|
| + .then((String base) => new Directory(join(base, 'a', 'b', 'c'))
|
| + .create(recursive: true)
|
| + .then((_) => new Link(join(base, 'a', 'b', 'c', 'd'))
|
| + .create(join(base, 'a', 'b')))
|
| + .then((_) =>
|
| + new Link(join(base, 'a', 'b', 'c', 'e')).create(join(base, 'a')))
|
| + .then((_) => new Directory(join(base, 'a'))
|
| + .list(recursive: true, followLinks: false)
|
| + .last)
|
| + // This directory listing must terminate, even though it contains loops.
|
| + .then((_) => new Directory(join(base, 'a'))
|
| + .list(recursive: true, followLinks: true)
|
| + .last)
|
| + // This directory listing must terminate, even though it contains loops.
|
| + .then((_) => new Directory(join(base, 'a', 'b', 'c'))
|
| + .list(recursive: true, followLinks: true)
|
| + .last)
|
| + .then((_) => new Directory(base).delete(recursive: true))
|
| + .then((_) => FutureExpect.isFalse(new Directory(base).exists())));
|
| }
|
|
|
| -
|
| Future testRename(_) {
|
| - Future testRename(String base , String target) {
|
| + Future testRename(String base, String target) {
|
| Link link1;
|
| Link link2;
|
| - return new Link(join(base, 'c')).create(target)
|
| - .then((link) {
|
| + return new Link(join(base, 'c')).create(target).then((link) {
|
| link1 = link;
|
| Expect.isTrue(link1.existsSync());
|
| return link1.rename(join(base, 'd'));
|
| - })
|
| - .then((link) {
|
| + }).then((link) {
|
| link2 = link;
|
| Expect.isFalse(link1.existsSync());
|
| Expect.isTrue(link2.existsSync());
|
| return link2.delete();
|
| - })
|
| - .then((_) => Expect.isFalse(link2.existsSync()));
|
| + }).then((_) => Expect.isFalse(link2.existsSync()));
|
| }
|
|
|
| - Future testUpdate(String base , String target1, String target2) {
|
| + Future testUpdate(String base, String target1, String target2) {
|
| Link link1;
|
| - return new Link(join(base, 'c')).create(target1)
|
| - .then((link) {
|
| + return new Link(join(base, 'c')).create(target1).then((link) {
|
| link1 = link;
|
| Expect.isTrue(link1.existsSync());
|
| return link1.update(target2);
|
| - })
|
| - .then((Link link) {
|
| + }).then((Link link) {
|
| Expect.isTrue(link1.existsSync());
|
| Expect.isTrue(link.existsSync());
|
| - return FutureExpect.equals(target2, link.target())
|
| - .then((_) => FutureExpect.equals(target2, link1.target()))
|
| - .then((_) => link.delete());
|
| - })
|
| - .then((_) => Expect.isFalse(link1.existsSync()));
|
| + return FutureExpect
|
| + .equals(target2, link.target())
|
| + .then((_) => FutureExpect.equals(target2, link1.target()))
|
| + .then((_) => link.delete());
|
| + }).then((_) => Expect.isFalse(link1.existsSync()));
|
| }
|
|
|
| return Directory.systemTemp.createTemp('dart_link_async').then((baseDir) {
|
| @@ -211,16 +179,15 @@ Future testRename(_) {
|
| targetsFutures.add(new Directory(join(base, 'a')).create());
|
| if (Platform.isWindows) {
|
| // Currently only links to directories are supported on Windows.
|
| - targetsFutures.add(
|
| - new Directory(join(base, 'b')).create());
|
| + targetsFutures.add(new Directory(join(base, 'b')).create());
|
| } else {
|
| targetsFutures.add(new File(join(base, 'b')).create());
|
| }
|
| return Future.wait(targetsFutures).then((targets) {
|
| return testRename(base, targets[0].path)
|
| - .then((_) => testRename(base, targets[1].path))
|
| - .then((_) => testUpdate(base, targets[0].path, targets[1].path))
|
| - .then((_) => baseDir.delete(recursive: true));
|
| + .then((_) => testRename(base, targets[1].path))
|
| + .then((_) => testUpdate(base, targets[0].path, targets[1].path))
|
| + .then((_) => baseDir.delete(recursive: true));
|
| });
|
| });
|
| }
|
| @@ -254,23 +221,22 @@ Future testDirectoryListing(String base, Directory baseDir) {
|
| for (bool recursive in [true, false]) {
|
| for (bool followLinks in [true, false]) {
|
| Map expected = makeExpected(recursive, followLinks);
|
| - for (var x in baseDir.listSync(recursive: recursive,
|
| - followLinks: followLinks)) {
|
| + for (var x
|
| + in baseDir.listSync(recursive: recursive, followLinks: followLinks)) {
|
| checkEntity(x, expected);
|
| }
|
| for (var v in expected.values) {
|
| Expect.equals('Found', v);
|
| }
|
| expected = makeExpected(recursive, followLinks);
|
| - futures.add(
|
| - baseDir.list(recursive: recursive, followLinks: followLinks)
|
| - .forEach((entity) => checkEntity(entity, expected))
|
| - .then((_) {
|
| - for (var v in expected.values) {
|
| - Expect.equals('Found', v);
|
| - }
|
| - })
|
| - );
|
| + futures.add(baseDir
|
| + .list(recursive: recursive, followLinks: followLinks)
|
| + .forEach((entity) => checkEntity(entity, expected))
|
| + .then((_) {
|
| + for (var v in expected.values) {
|
| + Expect.equals('Found', v);
|
| + }
|
| + }));
|
| }
|
| }
|
| return Future.wait(futures);
|
| @@ -281,42 +247,44 @@ Future checkExists(String filePath) =>
|
|
|
| Future testRelativeLinks(_) {
|
| return Directory.systemTemp
|
| - .createTemp('dart_link_async')
|
| - .then((tempDirectory) {
|
| + .createTemp('dart_link_async')
|
| + .then((tempDirectory) {
|
| String temp = tempDirectory.path;
|
| String oldWorkingDirectory = Directory.current.path;
|
| // Make directories and files to test links.
|
| - return new Directory(join(temp, 'dir1', 'dir2')).create(recursive: true)
|
| - .then((_) => new File(join(temp, 'dir1', 'file1')).create())
|
| - .then((_) => new File(join(temp, 'dir1', 'dir2', 'file2')).create())
|
| - // Make links whose path and/or target is given by a relative path.
|
| - .then((_) => new Link(join(temp, 'dir1', 'link1_2')).create('dir2'))
|
| - .then((_) => Directory.current = temp)
|
| - .then((_) => new Link('link0_2').create(join('dir1', 'dir2')))
|
| - .then((_) => new Link(join('dir1', 'link1_0')).create('..'))
|
| - .then((_) => Directory.current = 'dir1')
|
| - .then((_) => new Link(join('..', 'link0_1')).create('dir1'))
|
| - .then((_) => new Link(join('dir2', 'link2_1')).create(join(temp, 'dir1')))
|
| - .then((_) => new Link(join(temp, 'dir1', 'dir2', 'link2_0'))
|
| - .create(join('..', '..')))
|
| - // Test that the links go to the right targets.
|
| - .then((_) => checkExists(join('..', 'link0_1', 'file1')))
|
| - .then((_) => checkExists(join('..', 'link0_2', 'file2')))
|
| - .then((_) => checkExists(join('link1_0', 'dir1', 'file1')))
|
| - .then((_) => checkExists(join('link1_2', 'file2')))
|
| - .then((_) => checkExists(join('dir2', 'link2_0', 'dir1', 'file1')))
|
| - .then((_) => checkExists(join('dir2', 'link2_1', 'file1')))
|
| - // Clean up
|
| - .whenComplete(() => Directory.current = oldWorkingDirectory)
|
| - .whenComplete(() => tempDirectory.delete(recursive: true));
|
| + return new Directory(join(temp, 'dir1', 'dir2'))
|
| + .create(recursive: true)
|
| + .then((_) => new File(join(temp, 'dir1', 'file1')).create())
|
| + .then((_) => new File(join(temp, 'dir1', 'dir2', 'file2')).create())
|
| + // Make links whose path and/or target is given by a relative path.
|
| + .then((_) => new Link(join(temp, 'dir1', 'link1_2')).create('dir2'))
|
| + .then((_) => Directory.current = temp)
|
| + .then((_) => new Link('link0_2').create(join('dir1', 'dir2')))
|
| + .then((_) => new Link(join('dir1', 'link1_0')).create('..'))
|
| + .then((_) => Directory.current = 'dir1')
|
| + .then((_) => new Link(join('..', 'link0_1')).create('dir1'))
|
| + .then(
|
| + (_) => new Link(join('dir2', 'link2_1')).create(join(temp, 'dir1')))
|
| + .then((_) => new Link(join(temp, 'dir1', 'dir2', 'link2_0'))
|
| + .create(join('..', '..')))
|
| + // Test that the links go to the right targets.
|
| + .then((_) => checkExists(join('..', 'link0_1', 'file1')))
|
| + .then((_) => checkExists(join('..', 'link0_2', 'file2')))
|
| + .then((_) => checkExists(join('link1_0', 'dir1', 'file1')))
|
| + .then((_) => checkExists(join('link1_2', 'file2')))
|
| + .then((_) => checkExists(join('dir2', 'link2_0', 'dir1', 'file1')))
|
| + .then((_) => checkExists(join('dir2', 'link2_1', 'file1')))
|
| + // Clean up
|
| + .whenComplete(() => Directory.current = oldWorkingDirectory)
|
| + .whenComplete(() => tempDirectory.delete(recursive: true));
|
| });
|
| }
|
|
|
| main() {
|
| asyncStart();
|
| testCreate()
|
| - .then(testCreateLoopingLink)
|
| - .then(testRename)
|
| - .then(testRelativeLinks)
|
| - .then((_) => asyncEnd());
|
| + .then(testCreateLoopingLink)
|
| + .then(testRename)
|
| + .then(testRelativeLinks)
|
| + .then((_) => asyncEnd());
|
| }
|
|
|