TestAsyncFileSystem.hx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package test;
  2. import utest.Async;
  3. import asys.FileSystem as NewFS;
  4. import asys.io.File as NewFile;
  5. import sys.FileSystem as OldFS;
  6. import sys.io.File as OldFile;
  7. class TestAsyncFileSystem extends Test {
  8. function testAsync(async:Async) {
  9. sub(async, done -> NewFS.async.exists("resources-ro/hello.txt", (error, exists) -> {
  10. t(exists);
  11. done();
  12. }));
  13. sub(async, done -> NewFS.async.exists("resources-ro/non-existent-file", (error, exists) -> {
  14. f(exists);
  15. done();
  16. }));
  17. sub(async, done -> NewFS.async.readdir("resources-ro", (error, names) -> {
  18. aeq(names, ["binary.bin", "hello.txt"]);
  19. done();
  20. }));
  21. eq(asyncDone, 0);
  22. TestBase.uvRun();
  23. }
  24. function testStat(async:Async) {
  25. sub(async, done -> {
  26. NewFS.async.stat("resources-ro", (error, stat) -> {
  27. eq(error, null);
  28. t(stat.isDirectory());
  29. done();
  30. });
  31. });
  32. sub(async, done -> {
  33. NewFS.async.stat("resources-ro/hello.txt", (error, stat) -> {
  34. eq(error, null);
  35. eq(stat.size, TestConstants.helloBytes.length);
  36. t(stat.isFile());
  37. done();
  38. });
  39. });
  40. sub(async, done -> {
  41. NewFS.async.stat("resources-ro/binary.bin", (error, stat) -> {
  42. eq(error, null);
  43. eq(stat.size, TestConstants.binaryBytes.length);
  44. t(stat.isFile());
  45. done();
  46. });
  47. });
  48. sub(async, done -> {
  49. var file = NewFS.open("resources-ro/binary.bin");
  50. file.async.stat((err, stat) -> {
  51. eq(err, null);
  52. eq(stat.size, TestConstants.binaryBytes.length);
  53. t(stat.isFile());
  54. file.close();
  55. done();
  56. });
  57. });
  58. sub(async, done -> {
  59. NewFS.async.stat("resources-ro/non-existent-file", (error, nd) -> {
  60. neq(error, null);
  61. eq(nd, null);
  62. done();
  63. });
  64. });
  65. eq(asyncDone, 0);
  66. TestBase.uvRun();
  67. }
  68. @:timeout(3000)
  69. function testWatcher(async:Async) {
  70. if (Sys.systemName() == "Windows" || Sys.systemName() == "Linux") { // TODO
  71. t(true);
  72. async.done();
  73. return;
  74. }
  75. var dir = "resources-rw/watch";
  76. sys.FileSystem.createDirectory(dir);
  77. var events = [];
  78. var watcher = NewFS.watch(dir, true);
  79. watcher.closeSignal.on(_ -> {
  80. async.done();
  81. OldFS.deleteDirectory(dir);
  82. });
  83. watcher.errorSignal.on(e -> assert('unexpected error: ${e.message}'));
  84. watcher.changeSignal.on(events.push);
  85. NewFS.mkdir('$dir/foo');
  86. TestBase.uvRun(RunOnce);
  87. t(events.length == 1 && events[0].match(Rename("foo")));
  88. events.resize(0);
  89. var file = NewFS.open('$dir/foo/hello.txt', "w");
  90. file.truncate(10);
  91. file.close();
  92. NewFS.unlink('$dir/foo/hello.txt');
  93. NewFS.rmdir('$dir/foo');
  94. TestBase.uvRun(RunOnce);
  95. t(events.length == 2 && events[0].match(Rename("foo/hello.txt")));
  96. t(events.length == 2 && events[1].match(Rename("foo")));
  97. events.resize(0);
  98. watcher.close();
  99. TestBase.uvRun(RunOnce);
  100. }
  101. }