OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 import "dart:async"; | 5 import "dart:async"; |
6 import "dart:io"; | 6 import "dart:io"; |
7 | 7 |
8 import "package:async_helper/async_helper.dart"; | 8 import "package:async_helper/async_helper.dart"; |
9 import "package:expect/expect.dart"; | 9 import "package:expect/expect.dart"; |
10 | 10 |
11 | |
12 class FutureExpect { | 11 class FutureExpect { |
13 static Future isTrue(Future<bool> result) => | 12 static Future isTrue(Future<bool> result) => |
14 result.then((value) => Expect.isTrue(value)); | 13 result.then((value) => Expect.isTrue(value)); |
15 static Future isFalse(Future<bool> result) => | 14 static Future isFalse(Future<bool> result) => |
16 result.then((value) => Expect.isFalse(value)); | 15 result.then((value) => Expect.isFalse(value)); |
17 static Future equals(expected, Future result) => | 16 static Future equals(expected, Future result) => |
18 result.then((value) => Expect.equals(expected, value)); | 17 result.then((value) => Expect.equals(expected, value)); |
19 static Future listEquals(expected, Future result) => | 18 static Future listEquals(expected, Future result) => |
20 result.then((value) => Expect.listEquals(expected, value)); | 19 result.then((value) => Expect.listEquals(expected, value)); |
21 static Future throws(Future result) => | 20 static Future throws(Future result) => result.then((value) { |
22 result.then((value) { | |
23 throw new ExpectException( | 21 throw new ExpectException( |
24 "FutureExpect.throws received $value instead of an exception"); | 22 "FutureExpect.throws received $value instead of an exception"); |
25 }, onError: (_) => null); | 23 }, onError: (_) => null); |
26 } | 24 } |
27 | 25 |
28 | |
29 Future testJunctionTypeDelete() { | 26 Future testJunctionTypeDelete() { |
30 return Directory.systemTemp | 27 return Directory.systemTemp |
31 .createTemp('dart_windows_file_system_async_links') | 28 .createTemp('dart_windows_file_system_async_links') |
32 .then((temp) { | 29 .then((temp) { |
33 var x = '${temp.path}${Platform.pathSeparator}x'; | 30 var x = '${temp.path}${Platform.pathSeparator}x'; |
34 var y = '${temp.path}${Platform.pathSeparator}y'; | 31 var y = '${temp.path}${Platform.pathSeparator}y'; |
35 return new Directory(x).create() | 32 return new Directory(x) |
36 .then((_) => new Link(y).create(x)) | 33 .create() |
37 .then((_) => FutureExpect.isTrue(new Directory(y).exists())) | 34 .then((_) => new Link(y).create(x)) |
38 .then((_) => FutureExpect.isTrue(new Directory(x).exists())) | 35 .then((_) => FutureExpect.isTrue(new Directory(y).exists())) |
39 .then((_) => FutureExpect.isTrue(FileSystemEntity.isLink(y))) | 36 .then((_) => FutureExpect.isTrue(new Directory(x).exists())) |
40 .then((_) => FutureExpect.isFalse(FileSystemEntity.isLink(x))) | 37 .then((_) => FutureExpect.isTrue(FileSystemEntity.isLink(y))) |
41 .then((_) => FutureExpect.isTrue(FileSystemEntity.isDirectory(y))) | 38 .then((_) => FutureExpect.isFalse(FileSystemEntity.isLink(x))) |
42 .then((_) => FutureExpect.isTrue(FileSystemEntity.isDirectory(x))) | 39 .then((_) => FutureExpect.isTrue(FileSystemEntity.isDirectory(y))) |
43 .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY, | 40 .then((_) => FutureExpect.isTrue(FileSystemEntity.isDirectory(x))) |
44 FileSystemEntity.type(y))) | 41 .then((_) => FutureExpect.equals( |
45 .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY, | 42 FileSystemEntityType.DIRECTORY, FileSystemEntity.type(y))) |
46 FileSystemEntity.type(x))) | 43 .then((_) => FutureExpect.equals( |
47 .then((_) => FutureExpect.equals(FileSystemEntityType.LINK, | 44 FileSystemEntityType.DIRECTORY, FileSystemEntity.type(x))) |
48 FileSystemEntity.type(y, followLinks: false))) | 45 .then((_) => FutureExpect.equals(FileSystemEntityType.LINK, |
49 .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY, | 46 FileSystemEntity.type(y, followLinks: false))) |
50 FileSystemEntity.type(x, followLinks: false))) | 47 .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY, |
51 .then((_) => FutureExpect.equals(x, new Link(y).target())) | 48 FileSystemEntity.type(x, followLinks: false))) |
| 49 .then((_) => FutureExpect.equals(x, new Link(y).target())) |
52 | 50 |
53 // Test Junction pointing to a missing directory. | 51 // Test Junction pointing to a missing directory. |
54 .then((_) => new Directory(x).delete()) | 52 .then((_) => new Directory(x).delete()) |
55 .then((_) => FutureExpect.isTrue(new Link(y).exists())) | 53 .then((_) => FutureExpect.isTrue(new Link(y).exists())) |
56 .then((_) => FutureExpect.isFalse(new Directory(x).exists())) | 54 .then((_) => FutureExpect.isFalse(new Directory(x).exists())) |
57 .then((_) => FutureExpect.isTrue(FileSystemEntity.isLink(y))) | 55 .then((_) => FutureExpect.isTrue(FileSystemEntity.isLink(y))) |
58 .then((_) => FutureExpect.isFalse(FileSystemEntity.isLink(x))) | 56 .then((_) => FutureExpect.isFalse(FileSystemEntity.isLink(x))) |
59 .then((_) => FutureExpect.isFalse(FileSystemEntity.isDirectory(y))) | 57 .then((_) => FutureExpect.isFalse(FileSystemEntity.isDirectory(y))) |
60 .then((_) => FutureExpect.isFalse(FileSystemEntity.isDirectory(x))) | 58 .then((_) => FutureExpect.isFalse(FileSystemEntity.isDirectory(x))) |
61 .then((_) => FutureExpect.equals(FileSystemEntityType.LINK, | 59 .then((_) => FutureExpect.equals( |
62 FileSystemEntity.type(y))) | 60 FileSystemEntityType.LINK, FileSystemEntity.type(y))) |
63 .then((_) => FutureExpect.equals(FileSystemEntityType.NOT_FOUND, | 61 .then((_) => FutureExpect.equals( |
64 FileSystemEntity.type(x))) | 62 FileSystemEntityType.NOT_FOUND, FileSystemEntity.type(x))) |
65 .then((_) => FutureExpect.equals(FileSystemEntityType.LINK, | 63 .then((_) => FutureExpect.equals(FileSystemEntityType.LINK, |
66 FileSystemEntity.type(y, followLinks: false))) | 64 FileSystemEntity.type(y, followLinks: false))) |
67 .then((_) => FutureExpect.equals(FileSystemEntityType.NOT_FOUND, | 65 .then((_) => FutureExpect.equals(FileSystemEntityType.NOT_FOUND, |
68 FileSystemEntity.type(x, followLinks: false))) | 66 FileSystemEntity.type(x, followLinks: false))) |
69 .then((_) => FutureExpect.equals(x, new Link(y).target())) | 67 .then((_) => FutureExpect.equals(x, new Link(y).target())) |
70 | 68 |
71 // Delete Junction pointing to a missing directory. | 69 // Delete Junction pointing to a missing directory. |
72 .then((_) => new Link(y).delete()) | 70 .then((_) => new Link(y).delete()) |
73 .then((_) => FutureExpect.isFalse(FileSystemEntity.isLink(y))) | 71 .then((_) => FutureExpect.isFalse(FileSystemEntity.isLink(y))) |
74 .then((_) => FutureExpect.equals(FileSystemEntityType.NOT_FOUND, | 72 .then((_) => FutureExpect.equals( |
75 FileSystemEntity.type(y))) | 73 FileSystemEntityType.NOT_FOUND, FileSystemEntity.type(y))) |
76 .then((_) => FutureExpect.throws(new Link(y).target())) | 74 .then((_) => FutureExpect.throws(new Link(y).target())) |
| 75 .then((_) => new Directory(x).create()) |
| 76 .then((_) => new Link(y).create(x)) |
| 77 .then((_) => FutureExpect.equals(FileSystemEntityType.LINK, |
| 78 FileSystemEntity.type(y, followLinks: false))) |
| 79 .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY, |
| 80 FileSystemEntity.type(x, followLinks: false))) |
| 81 .then((_) => FutureExpect.equals(x, new Link(y).target())) |
77 | 82 |
78 .then((_) => new Directory(x).create()) | 83 // Delete Junction pointing to an existing directory. |
79 .then((_) => new Link(y).create(x)) | 84 .then((_) => new Directory(y).delete()) |
80 .then((_) => FutureExpect.equals(FileSystemEntityType.LINK, | 85 .then((_) => FutureExpect.equals( |
81 FileSystemEntity.type(y, followLinks: false))) | 86 FileSystemEntityType.NOT_FOUND, FileSystemEntity.type(y))) |
82 .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY, | 87 .then((_) => FutureExpect.equals(FileSystemEntityType.NOT_FOUND, |
83 FileSystemEntity.type(x, followLinks: false))) | 88 FileSystemEntity.type(y, followLinks: false))) |
84 .then((_) => FutureExpect.equals(x, new Link(y).target())) | 89 .then((_) => FutureExpect.equals( |
85 | 90 FileSystemEntityType.DIRECTORY, FileSystemEntity.type(x))) |
86 // Delete Junction pointing to an existing directory. | 91 .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY, |
87 .then((_) => new Directory(y).delete()) | 92 FileSystemEntity.type(x, followLinks: false))) |
88 .then((_) => FutureExpect.equals(FileSystemEntityType.NOT_FOUND, | 93 .then((_) => FutureExpect.throws(new Link(y).target())) |
89 FileSystemEntity.type(y))) | 94 .then((_) => temp.delete(recursive: true)); |
90 .then((_) => FutureExpect.equals(FileSystemEntityType.NOT_FOUND, | |
91 FileSystemEntity.type(y, followLinks: false))) | |
92 .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY, | |
93 FileSystemEntity.type(x))) | |
94 .then((_) => FutureExpect.equals(FileSystemEntityType.DIRECTORY, | |
95 FileSystemEntity.type(x, followLinks: false))) | |
96 .then((_) => FutureExpect.throws(new Link(y).target())) | |
97 .then((_) => temp.delete(recursive: true)); | |
98 }); | 95 }); |
99 } | 96 } |
100 | 97 |
101 | |
102 main() { | 98 main() { |
103 // Links on other platforms are tested by file_system_[async_]links_test. | 99 // Links on other platforms are tested by file_system_[async_]links_test. |
104 if (Platform.operatingSystem == 'windows') { | 100 if (Platform.operatingSystem == 'windows') { |
105 asyncStart(); | 101 asyncStart(); |
106 testJunctionTypeDelete().then((_) => asyncEnd()); | 102 testJunctionTypeDelete().then((_) => asyncEnd()); |
107 } | 103 } |
108 } | 104 } |
OLD | NEW |