| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 // Directory listing test. | 5 // Directory listing test. |
| 6 | 6 |
| 7 #import("dart:io"); | 7 #import("dart:io"); |
| 8 #import("dart:isolate"); | 8 #import("dart:isolate"); |
| 9 | 9 |
| 10 class DirectoryTest { | 10 class DirectoryTest { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 listedFile = true; | 33 listedFile = true; |
| 34 Expect.isTrue(f.contains(directory.path)); | 34 Expect.isTrue(f.contains(directory.path)); |
| 35 Expect.isTrue(f.contains('subdir')); | 35 Expect.isTrue(f.contains('subdir')); |
| 36 Expect.isTrue(f.contains('file.txt')); | 36 Expect.isTrue(f.contains('file.txt')); |
| 37 }; | 37 }; |
| 38 | 38 |
| 39 lister.onDone = (completed) { | 39 lister.onDone = (completed) { |
| 40 Expect.isTrue(completed, "directory listing did not complete"); | 40 Expect.isTrue(completed, "directory listing did not complete"); |
| 41 Expect.isTrue(listedDir, "directory not found"); | 41 Expect.isTrue(listedDir, "directory not found"); |
| 42 Expect.isTrue(listedFile, "file not found"); | 42 Expect.isTrue(listedFile, "file not found"); |
| 43 directory.deleteRecursively().then((ignore) { | 43 directory.delete(recursive: true).then((ignore) { |
| 44 f.exists().then((exists) => Expect.isFalse(exists)); | 44 f.exists().then((exists) => Expect.isFalse(exists)); |
| 45 directory.exists().then((exists) => Expect.isFalse(exists)); | 45 directory.exists().then((exists) => Expect.isFalse(exists)); |
| 46 subDirectory.exists().then((exists) => Expect.isFalse(exists)); | 46 subDirectory.exists().then((exists) => Expect.isFalse(exists)); |
| 47 }); | 47 }); |
| 48 }; | 48 }; |
| 49 | 49 |
| 50 // Listing is asynchronous, so nothing should be listed at this | 50 // Listing is asynchronous, so nothing should be listed at this |
| 51 // point. | 51 // point. |
| 52 Expect.isFalse(listedDir); | 52 Expect.isFalse(listedDir); |
| 53 Expect.isFalse(listedFile); | 53 Expect.isFalse(listedFile); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 77 }); | 77 }); |
| 78 } | 78 } |
| 79 | 79 |
| 80 static void testListTooLongName() { | 80 static void testListTooLongName() { |
| 81 new Directory("").createTemp().then((d) { | 81 new Directory("").createTemp().then((d) { |
| 82 var errors = 0; | 82 var errors = 0; |
| 83 setupListHandlers(DirectoryLister lister) { | 83 setupListHandlers(DirectoryLister lister) { |
| 84 lister.onError = (e) { | 84 lister.onError = (e) { |
| 85 Expect.isTrue(e is DirectoryIOException); | 85 Expect.isTrue(e is DirectoryIOException); |
| 86 if (++errors == 2) { | 86 if (++errors == 2) { |
| 87 d.deleteRecursively(); | 87 d.delete(recursive: true); |
| 88 } | 88 } |
| 89 }; | 89 }; |
| 90 lister.onFile = (file) { | 90 lister.onFile = (file) { |
| 91 Expect.fail("Listing of non-existing directory should fail"); | 91 Expect.fail("Listing of non-existing directory should fail"); |
| 92 }; | 92 }; |
| 93 lister.onDir = (dir) { | 93 lister.onDir = (dir) { |
| 94 Expect.fail("Listing of non-existing directory should fail"); | 94 Expect.fail("Listing of non-existing directory should fail"); |
| 95 }; | 95 }; |
| 96 lister.onDone = (success) { | 96 lister.onDone = (success) { |
| 97 Expect.isFalse(success); | 97 Expect.isFalse(success); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 122 return true; | 122 return true; |
| 123 }); | 123 }); |
| 124 future.then((ignore) { | 124 future.then((ignore) { |
| 125 Expect.fail("Deletion of non-existing directory should fail"); | 125 Expect.fail("Deletion of non-existing directory should fail"); |
| 126 }); | 126 }); |
| 127 } | 127 } |
| 128 | 128 |
| 129 new Directory("").createTemp().then((d) { | 129 new Directory("").createTemp().then((d) { |
| 130 d.delete().then((ignore) { | 130 d.delete().then((ignore) { |
| 131 setupFutureHandlers(d.delete()); | 131 setupFutureHandlers(d.delete()); |
| 132 setupFutureHandlers(d.deleteRecursively()); | 132 setupFutureHandlers(d.delete(recursive: true)); |
| 133 }); | 133 }); |
| 134 }); | 134 }); |
| 135 } | 135 } |
| 136 | 136 |
| 137 static void testDeleteTooLongName() { | 137 static void testDeleteTooLongName() { |
| 138 var port = new ReceivePort(); | 138 var port = new ReceivePort(); |
| 139 new Directory("").createTemp().then((d) { | 139 new Directory("").createTemp().then((d) { |
| 140 var subDirName = 'subdir'; | 140 var subDirName = 'subdir'; |
| 141 var subDir = new Directory("${d.path}/$subDirName"); | 141 var subDir = new Directory("${d.path}/$subDirName"); |
| 142 subDir.create().then((ignore) { | 142 subDir.create().then((ignore) { |
| 143 // Construct a long string of the form | 143 // Construct a long string of the form |
| 144 // 'tempdir/subdir/../subdir/../subdir'. | 144 // 'tempdir/subdir/../subdir/../subdir'. |
| 145 var buffer = new StringBuffer(); | 145 var buffer = new StringBuffer(); |
| 146 buffer.add(subDir.path); | 146 buffer.add(subDir.path); |
| 147 for (var i = 0; i < 1000; i++) { | 147 for (var i = 0; i < 1000; i++) { |
| 148 buffer.add("/../${subDirName}"); | 148 buffer.add("/../${subDirName}"); |
| 149 } | 149 } |
| 150 var long = new Directory("${buffer.toString()}"); | 150 var long = new Directory("${buffer.toString()}"); |
| 151 var errors = 0; | 151 var errors = 0; |
| 152 onError(e) { | 152 onError(e) { |
| 153 Expect.isTrue(e is DirectoryIOException); | 153 Expect.isTrue(e is DirectoryIOException); |
| 154 if (++errors == 2) { | 154 if (++errors == 2) { |
| 155 d.deleteRecursively().then((ignore) => port.close()); | 155 d.delete(recursive: true).then((ignore) => port.close()); |
| 156 } | 156 } |
| 157 return true; | 157 return true; |
| 158 } | 158 } |
| 159 long.delete().handleException(onError); | 159 long.delete().handleException(onError); |
| 160 long.deleteRecursively().handleException(onError); | 160 long.delete(recursive: true).handleException(onError); |
| 161 }); | 161 }); |
| 162 }); | 162 }); |
| 163 } | 163 } |
| 164 | 164 |
| 165 static void testDeleteNonExistentSync() { | 165 static void testDeleteNonExistentSync() { |
| 166 Directory d = new Directory("").createTempSync(); | 166 Directory d = new Directory("").createTempSync(); |
| 167 d.deleteSync(); | 167 d.deleteSync(); |
| 168 Expect.throws(d.deleteSync); | 168 Expect.throws(d.deleteSync); |
| 169 Expect.throws(() => d.deleteRecursivelySync()); | 169 Expect.throws(() => d.deleteSync(recursive: true)); |
| 170 } | 170 } |
| 171 | 171 |
| 172 static void testDeleteTooLongNameSync() { | 172 static void testDeleteTooLongNameSync() { |
| 173 Directory d = new Directory("").createTempSync(); | 173 Directory d = new Directory("").createTempSync(); |
| 174 var subDirName = 'subdir'; | 174 var subDirName = 'subdir'; |
| 175 var subDir = new Directory("${d.path}/$subDirName"); | 175 var subDir = new Directory("${d.path}/$subDirName"); |
| 176 subDir.createSync(); | 176 subDir.createSync(); |
| 177 // Construct a long string of the form | 177 // Construct a long string of the form |
| 178 // 'tempdir/subdir/../subdir/../subdir'. | 178 // 'tempdir/subdir/../subdir/../subdir'. |
| 179 var buffer = new StringBuffer(); | 179 var buffer = new StringBuffer(); |
| 180 buffer.add(subDir.path); | 180 buffer.add(subDir.path); |
| 181 for (var i = 0; i < 1000; i++) { | 181 for (var i = 0; i < 1000; i++) { |
| 182 buffer.add("/../${subDirName}"); | 182 buffer.add("/../${subDirName}"); |
| 183 } | 183 } |
| 184 var long = new Directory("${buffer.toString()}"); | 184 var long = new Directory("${buffer.toString()}"); |
| 185 Expect.throws(long.deleteSync); | 185 Expect.throws(long.deleteSync); |
| 186 Expect.throws(() => long.deleteRecursivelySync()); | 186 Expect.throws(() => long.deleteSync(recursive: true)); |
| 187 d.deleteRecursivelySync(); | 187 d.deleteSync(recursive: true); |
| 188 } | 188 } |
| 189 | 189 |
| 190 static void testDeleteSymlink() { | 190 static void testDeleteSymlink() { |
| 191 // temp/ | 191 // temp/ |
| 192 // a/ | 192 // a/ |
| 193 // file.txt | 193 // file.txt |
| 194 // b/ | 194 // b/ |
| 195 // a_link -> a | 195 // a_link -> a |
| 196 var d = new Directory("").createTempSync(); | 196 var d = new Directory("").createTempSync(); |
| 197 var a = new Directory("${d.path}/a"); | 197 var a = new Directory("${d.path}/a"); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 209 var cmd = "ln"; | 209 var cmd = "ln"; |
| 210 var args = ['-s', "${d.path}/b/a_link", "${d.path}/a"]; | 210 var args = ['-s', "${d.path}/b/a_link", "${d.path}/a"]; |
| 211 | 211 |
| 212 if (Platform.operatingSystem == "windows") { | 212 if (Platform.operatingSystem == "windows") { |
| 213 cmd = "cmd"; | 213 cmd = "cmd"; |
| 214 args = ["/c", "mklink", "/j", "${d.path}\\b\\a_link", "${d.path}\\a"]; | 214 args = ["/c", "mklink", "/j", "${d.path}\\b\\a_link", "${d.path}\\a"]; |
| 215 } | 215 } |
| 216 | 216 |
| 217 Process.run(cmd, args).then((_) { | 217 Process.run(cmd, args).then((_) { |
| 218 // Delete the directory containing the junction. | 218 // Delete the directory containing the junction. |
| 219 b.deleteRecursivelySync(); | 219 b.deleteSync(recursive: true); |
| 220 | 220 |
| 221 // We should not have recursed through a_link into a. | 221 // We should not have recursed through a_link into a. |
| 222 Expect.isTrue(f.existsSync()); | 222 Expect.isTrue(f.existsSync()); |
| 223 | 223 |
| 224 // Clean up after ourselves. | 224 // Clean up after ourselves. |
| 225 d.deleteRecursivelySync(); | 225 d.deleteSync(recursive: true); |
| 226 }); | 226 }); |
| 227 } | 227 } |
| 228 | 228 |
| 229 static void testExistsCreateDelete() { | 229 static void testExistsCreateDelete() { |
| 230 new Directory("").createTemp().then((d) { | 230 new Directory("").createTemp().then((d) { |
| 231 d.exists().then((bool exists) { | 231 d.exists().then((bool exists) { |
| 232 Expect.isTrue(exists); | 232 Expect.isTrue(exists); |
| 233 Directory created = new Directory("${d.path}/subdir"); | 233 Directory created = new Directory("${d.path}/subdir"); |
| 234 created.create().then((ignore) { | 234 created.create().then((ignore) { |
| 235 created.exists().then((bool exists) { | 235 created.exists().then((bool exists) { |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 testCreateExistingSync() { | 463 testCreateExistingSync() { |
| 464 // Test that creating an existing directory succeeds. | 464 // Test that creating an existing directory succeeds. |
| 465 var d = new Directory(''); | 465 var d = new Directory(''); |
| 466 var temp = d.createTempSync(); | 466 var temp = d.createTempSync(); |
| 467 var subDir = new Directory('${temp.path}/flaf'); | 467 var subDir = new Directory('${temp.path}/flaf'); |
| 468 Expect.isFalse(subDir.existsSync()); | 468 Expect.isFalse(subDir.existsSync()); |
| 469 subDir.createSync(); | 469 subDir.createSync(); |
| 470 Expect.isTrue(subDir.existsSync()); | 470 Expect.isTrue(subDir.existsSync()); |
| 471 subDir.createSync(); | 471 subDir.createSync(); |
| 472 Expect.isTrue(subDir.existsSync()); | 472 Expect.isTrue(subDir.existsSync()); |
| 473 temp.deleteRecursivelySync(); | 473 temp.deleteSync(recursive: true); |
| 474 } | 474 } |
| 475 | 475 |
| 476 | 476 |
| 477 testCreateExisting() { | 477 testCreateExisting() { |
| 478 // Test that creating an existing directory succeeds. | 478 // Test that creating an existing directory succeeds. |
| 479 var port = new ReceivePort(); | 479 var port = new ReceivePort(); |
| 480 var d = new Directory(''); | 480 var d = new Directory(''); |
| 481 d.createTemp().then((temp) { | 481 d.createTemp().then((temp) { |
| 482 var subDir = new Directory('${temp.path}/flaf'); | 482 var subDir = new Directory('${temp.path}/flaf'); |
| 483 subDir.exists().then((dirExists) { | 483 subDir.exists().then((dirExists) { |
| 484 Expect.isFalse(dirExists); | 484 Expect.isFalse(dirExists); |
| 485 subDir.create().then((_) { | 485 subDir.create().then((_) { |
| 486 subDir.exists().then((dirExists) { | 486 subDir.exists().then((dirExists) { |
| 487 Expect.isTrue(dirExists); | 487 Expect.isTrue(dirExists); |
| 488 subDir.create().then((_) { | 488 subDir.create().then((_) { |
| 489 subDir.exists().then((dirExists) { | 489 subDir.exists().then((dirExists) { |
| 490 Expect.isTrue(dirExists); | 490 Expect.isTrue(dirExists); |
| 491 temp.deleteRecursively().then((_) { | 491 temp.delete(recursive: true).then((_) { |
| 492 port.close(); | 492 port.close(); |
| 493 }); | 493 }); |
| 494 }); | 494 }); |
| 495 }); | 495 }); |
| 496 }); | 496 }); |
| 497 }); | 497 }); |
| 498 }); | 498 }); |
| 499 }); | 499 }); |
| 500 } | 500 } |
| 501 | 501 |
| 502 | 502 |
| 503 testCreateDirExistingFileSync() { | 503 testCreateDirExistingFileSync() { |
| 504 // Test that creating an existing directory succeeds. | 504 // Test that creating an existing directory succeeds. |
| 505 var d = new Directory(''); | 505 var d = new Directory(''); |
| 506 var temp = d.createTempSync(); | 506 var temp = d.createTempSync(); |
| 507 var path = '${temp.path}/flaf'; | 507 var path = '${temp.path}/flaf'; |
| 508 var file = new File(path); | 508 var file = new File(path); |
| 509 file.createSync(); | 509 file.createSync(); |
| 510 Expect.isTrue(file.existsSync()); | 510 Expect.isTrue(file.existsSync()); |
| 511 Expect.throws(new Directory(path).createSync, | 511 Expect.throws(new Directory(path).createSync, |
| 512 (e) => e is DirectoryIOException); | 512 (e) => e is DirectoryIOException); |
| 513 temp.deleteRecursivelySync(); | 513 temp.deleteSync(recursive: true); |
| 514 } | 514 } |
| 515 | 515 |
| 516 | 516 |
| 517 testCreateDirExistingFile() { | 517 testCreateDirExistingFile() { |
| 518 // Test that creating an existing directory succeeds. | 518 // Test that creating an existing directory succeeds. |
| 519 var port = new ReceivePort(); | 519 var port = new ReceivePort(); |
| 520 var d = new Directory(''); | 520 var d = new Directory(''); |
| 521 d.createTemp().then((temp) { | 521 d.createTemp().then((temp) { |
| 522 var path = '${temp.path}/flaf'; | 522 var path = '${temp.path}/flaf'; |
| 523 var file = new File(path); | 523 var file = new File(path); |
| 524 var subDir = new Directory(path); | 524 var subDir = new Directory(path); |
| 525 file.create().then((_) { | 525 file.create().then((_) { |
| 526 subDir.create() | 526 subDir.create() |
| 527 ..then((_) { Expect.fail("dir create should fail on existing file"); }) | 527 ..then((_) { Expect.fail("dir create should fail on existing file"); }) |
| 528 ..handleException((e) { | 528 ..handleException((e) { |
| 529 Expect.isTrue(e is DirectoryIOException); | 529 Expect.isTrue(e is DirectoryIOException); |
| 530 temp.deleteRecursively().then((_) { | 530 temp.delete(recursive: true).then((_) { |
| 531 port.close(); | 531 port.close(); |
| 532 }); | 532 }); |
| 533 return true; | 533 return true; |
| 534 }); | 534 }); |
| 535 }); | 535 }); |
| 536 }); | 536 }); |
| 537 } | 537 } |
| 538 | 538 |
| 539 | 539 |
| 540 testCreateRecursiveSync() { |
| 541 var temp = new Directory('').createTempSync(); |
| 542 var d = new Directory('${temp.path}/a/b/c'); |
| 543 d.createSync(recursive: true); |
| 544 Expect.isTrue(new Directory('${temp.path}/a').existsSync()); |
| 545 Expect.isTrue(new Directory('${temp.path}/a/b').existsSync()); |
| 546 Expect.isTrue(new Directory('${temp.path}/a/b/c').existsSync()); |
| 547 temp.deleteSync(recursive: true); |
| 548 } |
| 549 |
| 550 |
| 551 testCreateRecursive() { |
| 552 var port = new ReceivePort(); |
| 553 new Directory('').createTemp().then((temp) { |
| 554 var d = new Directory('${temp.path}/a/b/c'); |
| 555 d.create(recursive: true).then((_) { |
| 556 Expect.isTrue(new Directory('${temp.path}/a').existsSync()); |
| 557 Expect.isTrue(new Directory('${temp.path}/a/b').existsSync()); |
| 558 Expect.isTrue(new Directory('${temp.path}/a/b/c').existsSync()); |
| 559 temp.deleteSync(recursive: true); |
| 560 port.close(); |
| 561 }); |
| 562 }); |
| 563 } |
| 564 |
| 565 |
| 540 testRename() { | 566 testRename() { |
| 541 var d = new Directory(''); | 567 var d = new Directory(''); |
| 542 var temp1 = d.createTempSync(); | 568 var temp1 = d.createTempSync(); |
| 543 var temp2 = d.createTempSync(); | 569 var temp2 = d.createTempSync(); |
| 544 var temp3 = temp1.renameSync(temp2.path); | 570 var temp3 = temp1.renameSync(temp2.path); |
| 545 Expect.isFalse(temp1.existsSync()); | 571 Expect.isFalse(temp1.existsSync()); |
| 546 Expect.isTrue(temp2.existsSync()); | 572 Expect.isTrue(temp2.existsSync()); |
| 547 Expect.equals(temp3.path, temp2.path); | 573 Expect.equals(temp3.path, temp2.path); |
| 548 | 574 |
| 549 temp2.rename(temp1.path).then((temp4) { | 575 temp2.rename(temp1.path).then((temp4) { |
| 550 Expect.isFalse(temp3.existsSync()); | 576 Expect.isFalse(temp3.existsSync()); |
| 551 Expect.isFalse(temp2.existsSync()); | 577 Expect.isFalse(temp2.existsSync()); |
| 552 Expect.isTrue(temp1.existsSync()); | 578 Expect.isTrue(temp1.existsSync()); |
| 553 Expect.isTrue(temp4.existsSync()); | 579 Expect.isTrue(temp4.existsSync()); |
| 554 Expect.equals(temp1.path, temp4.path); | 580 Expect.equals(temp1.path, temp4.path); |
| 555 temp1.deleteRecursivelySync(); | 581 temp1.deleteSync(recursive: true); |
| 556 }); | 582 }); |
| 557 } | 583 } |
| 558 | 584 |
| 559 main() { | 585 main() { |
| 560 DirectoryTest.testMain(); | 586 DirectoryTest.testMain(); |
| 561 NestedTempDirectoryTest.testMain(); | 587 NestedTempDirectoryTest.testMain(); |
| 562 testCreateTempErrorSync(); | 588 testCreateTempErrorSync(); |
| 563 testCreateTempError(); | 589 testCreateTempError(); |
| 564 testCreateExistingSync(); | 590 testCreateExistingSync(); |
| 565 testCreateExisting(); | 591 testCreateExisting(); |
| 566 testCreateDirExistingFileSync(); | 592 testCreateDirExistingFileSync(); |
| 567 testCreateDirExistingFile(); | 593 testCreateDirExistingFile(); |
| 594 testCreateRecursive(); |
| 595 testCreateRecursiveSync(); |
| 568 testRename(); | 596 testRename(); |
| 569 } | 597 } |
| OLD | NEW |