Index: tests/standalone/io/create_recursive_test.dart |
diff --git a/tests/standalone/io/create_recursive_test.dart b/tests/standalone/io/create_recursive_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..10d5fcdd5e65ba76f98472e924ab678fb4c99587 |
--- /dev/null |
+++ b/tests/standalone/io/create_recursive_test.dart |
@@ -0,0 +1,153 @@ |
+// 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. |
+ |
+import 'dart:io'; |
+ |
+import "package:async_helper/async_helper.dart"; |
+import "package:expect/expect.dart"; |
+import "package:path/path.dart"; |
+ |
+main() { |
+ testCreateRecursiveSync(); |
+ testCreateRecursive(); |
+} |
+ |
+testCreateRecursiveSync() { |
Anders Johnsen
2013/10/30 12:23:56
Can you split up these two functions to smaller te
Bill Hesse
2013/10/30 15:07:37
Done.
|
+ var temp = Directory.systemTemp.createTempSync('directory_test'); |
+ var a = new Directory(join(temp.path, 'a')); |
+ var b = new Directory(join(a.path, 'b')); |
+ var c = new Directory(join(b.path, 'c')); |
+ void expectDirectories() { |
+ Expect.isTrue(a.existsSync()); |
+ Expect.isTrue(b.existsSync()); |
+ Expect.isTrue(c.existsSync()); |
+ } |
+ |
+ try { |
+ Expect.throws(() => c.createSync()); |
+ c.createSync(recursive: true); |
+ expectDirectories(); |
+ a.deleteSync(recursive: true); |
+ |
+ var d = new Directory('${c.path}/'); |
+ d.createSync(recursive: true); |
+ expectDirectories(); |
+ Expect.isTrue(d.existsSync()); |
+ a.deleteSync(recursive: true); |
+ |
+ var f = new File(join(c.path, 'file')); |
+ Expect.throws(() => f.createSync()); |
+ f.createSync(recursive: true); |
+ expectDirectories(); |
+ Expect.isTrue(f.existsSync()); |
+ a.deleteSync(recursive: true); |
+ |
+ var l = new Link(join(c.path, 'link')); |
+ Expect.throws(() => l.createSync(temp.path)); |
+ l.createSync(temp.path, recursive:true); |
+ expectDirectories(); |
+ Expect.isTrue(l.existsSync()); |
+ Expect.isTrue(new Directory(l.targetSync()).existsSync()); |
+ a.deleteSync(recursive: true); |
+ |
+ // Test cases where the directories or the object already exist. |
+ a.createSync(recursive: true); |
+ Expect.isTrue(a.existsSync()); |
+ a.createSync(recursive: true); |
+ Expect.isTrue(a.existsSync()); |
+ |
+ f = new File(join(temp.path, 'file')); |
+ f.createSync(recursive: true); |
+ Expect.isTrue(f.existsSync()); |
+ f.createSync(recursive: true); |
+ Expect.isTrue(f.existsSync()); |
+ |
+ l = new Link(join(temp.path, 'link')); |
+ l.createSync(temp.path, recursive: true); |
+ Expect.isTrue(l.existsSync()); |
+ Expect.throws(() => l.createSync(temp.path, recursive: true)); |
+ Expect.isTrue(l.existsSync()); |
+ } finally { |
+ temp.deleteSync(recursive: true); |
+ } |
+} |
+ |
+testCreateRecursive() { |
+ asyncStart(); |
+ Directory temp; |
+ Directory a; |
+ Directory b; |
+ Directory c; |
+ Directory d; |
+ File f; |
+ Link l; |
+ Function lift(Function f) => |
+ (futureValue) => futureValue.then((value) => f(value)); |
+ |
+ Future expectDirectories() { |
+ return lift(Expect.isTrue)(a.exists()) |
+ .then((_) => lift(Expect.isTrue)(b.exists())) |
+ .then((_) => lift(Expect.isTrue)(c.exists())); |
+ } |
+ |
+ Future expectFileSystemException(Function f, String message) { |
+ return f().then( |
+ (_) => Expect.fail('Expected a FileSystemException: $message'), |
+ onError: (e) => Expect.isTrue(e is FileSystemException)); |
+ } |
+ |
+ Directory.systemTemp.createTemp('dart_directory').then((dir) { |
+ temp = dir; |
+ a = new Directory(join(temp.path, 'a')); |
+ b = new Directory(join(a.path, 'b')); |
+ c = new Directory(join(b.path, 'c')); |
+ }).then((_) => expectFileSystemException(() => c.create(), 'c.create')) |
+ .then((_) => c.create(recursive: true)) |
+ .then((_) => expectDirectories()) |
+ .then((_) => a.delete(recursive: true)) |
+ |
+ .then((_) => d = new Directory('${c.path}/')) |
+ .then((_) => d.create(recursive: true)) |
+ .then((_) => expectDirectories()) |
+ .then((_) => lift(Expect.isTrue)(d.exists())) |
+ .then((_) => a.delete(recursive: true)) |
+ |
+ .then((_) => f = new File(join(c.path, 'file'))) |
+ .then((_) => expectFileSystemException(() => f.create(), 'f.create')) |
+ .then((_) => f.create(recursive: true)) |
+ .then((_) => expectDirectories()) |
+ .then((_) => lift(Expect.isTrue)(f.exists())) |
+ .then((_) => a.delete(recursive: true)) |
+ |
+ .then((_) => l = new Link(join(c.path, 'link'))) |
+ .then((_) => expectFileSystemException(() => l.create(temp.path), |
+ 'l.create')) |
+ .then((_) => l.create(temp.path, recursive: true)) |
+ .then((_) => expectDirectories()) |
+ .then((_) => lift(Expect.isTrue)(l.exists())) |
+ .then((_) => lift(Expect.isTrue)(new Directory(l.targetSync()).exists())) |
+ .then((_) => a.delete(recursive: true)) |
+ |
+ // Test cases where the directories or the object already exist. |
+ .then((_) => a.create(recursive: true)) |
+ .then((_) => lift(Expect.isTrue)(a.exists())) |
+ .then((_) => a.create(recursive: true)) |
+ .then((_) => lift(Expect.isTrue)(a.exists())) |
+ |
+ .then((_) => f = new File(join(temp.path, 'file'))) |
+ .then((_) => f.create(recursive: true)) |
+ .then((_) => lift(Expect.isTrue)(f.exists())) |
+ .then((_) => f.create(recursive: true)) |
+ .then((_) => lift(Expect.isTrue)(f.exists())) |
+ |
+ .then((_) => l = new Link(join(temp.path, 'link'))) |
+ .then((_) => l.create(temp.path, recursive: true)) |
+ .then((_) => lift(Expect.isTrue)(l.exists())) |
+ .then((_) => expectFileSystemException( |
+ () => l.create(temp.path, recursive: true), 'l.create existing')) |
+ .then((_) => lift(Expect.isTrue)(l.exists())) |
+ |
+ .then((_) => asyncEnd()) |
+ .whenComplete(() => temp.delete(recursive: true)); |
+} |