copydirsync_unix.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. var testCase = require('nodeunit').testCase;
  2. var fs = require('fs');
  3. var wrench = require('../lib/wrench');
  4. var path = require('path');
  5. function checkResultHidden(test, files) {
  6. var check = [
  7. '.hidden',
  8. '.hidden.txt',
  9. 'bar.txt',
  10. 'foo',
  11. path.join('.hidden', 'dolor.md'),
  12. path.join('foo', 'bar'),
  13. path.join('foo', 'dolor.md'),
  14. path.join('foo', 'lorem.txt'),
  15. path.join('foo', 'bar', 'ipsum.js')
  16. ];
  17. test.deepEqual(files, check);
  18. }
  19. function checkResultShown(test, files) {
  20. var check = [
  21. 'bar.txt',
  22. 'foo',
  23. path.join('foo', 'bar'),
  24. path.join('foo', 'dolor.md'),
  25. path.join('foo', 'lorem.txt'),
  26. path.join('foo', 'bar', 'ipsum.js')
  27. ];
  28. test.deepEqual(files, check);
  29. }
  30. function checkResultInflate(test, files) {
  31. var check = [
  32. '.hidden',
  33. 'bar.txt',
  34. 'test',
  35. path.join('.hidden', 'dolor.md')
  36. ];
  37. test.deepEqual(files, check);
  38. test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/.hidden')).isSymbolicLink(), false);
  39. test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/bar.txt')).isSymbolicLink(), false);
  40. }
  41. function checkResultInflateAbsolute(test, files) {
  42. var check = [
  43. '.hidden',
  44. 'absolute-bar.txt',
  45. 'bar.txt',
  46. 'test',
  47. path.join('.hidden', 'dolor.md')
  48. ];
  49. test.deepEqual(files, check);
  50. test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/.hidden')).isSymbolicLink(), false);
  51. test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/bar.txt')).isSymbolicLink(), false);
  52. }
  53. function checkResultDontInflate(test, files) {
  54. var check = [
  55. '.hidden',
  56. 'bar.txt',
  57. 'test',
  58. path.join('.hidden', 'dolor.md')
  59. ];
  60. test.deepEqual(files, check);
  61. test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/.hidden')).isSymbolicLink(), true);
  62. test.deepEqual(fs.lstatSync(path.join(__dirname, 'testdir/bar.txt')).isSymbolicLink(), true);
  63. }
  64. function checkResultPreserveFiles(test, files) {
  65. checkResultHidden(test, files);
  66. var contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', '.hidden.txt')), "utf8");
  67. test.deepEqual(contents, 'hidden file'); // Preserved Content
  68. contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', 'bar.txt')), "utf8");
  69. test.deepEqual(contents, 'shown file'); // Preserved Content
  70. contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', 'foo/lorem.txt')), "utf8");
  71. test.deepEqual(contents, 'Lorem ipsum, please preserve my content.'); // Preserved Content
  72. contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', 'foo/dolor.md')), "utf8");
  73. test.deepEqual(contents, '#dolor sit amet'); // Copied Content
  74. }
  75. function checkResultOverwriteFiles(test, files) {
  76. checkResultHidden(test, files);
  77. var contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', '.hidden.txt')), "utf8");
  78. test.deepEqual(contents, 'just some text for .hidden.txt');
  79. contents = fs.readFileSync(path.join(__dirname, path.join('testdir2', 'bar.txt')), "utf8");
  80. test.deepEqual(contents, 'just some text for bar.txt');
  81. }
  82. module.exports = testCase({
  83. test_copyDirSyncRecursiveWithoutOptions: function(test) {
  84. var dir = path.join(__dirname, 'shown');
  85. var testdir = path.join(__dirname, 'testdir');
  86. wrench.copyDirSyncRecursive(dir, testdir);
  87. wrench.rmdirSyncRecursive(testdir);
  88. test.done();
  89. },
  90. test_copyDirSyncRecursiveHidden: function(test) {
  91. var dir = path.join(__dirname, 'shown');
  92. var testdir = path.join(__dirname, 'testdir');
  93. test.ok(fs.existsSync(dir), 'Folders should exist');
  94. wrench.copyDirSyncRecursive(dir, testdir, { excludeHiddenUnix: false });
  95. var files = wrench.readdirSyncRecursive(testdir);
  96. checkResultHidden(test, files);
  97. wrench.rmdirSyncRecursive(testdir);
  98. test.done();
  99. },
  100. test_copyDirSyncRecursiveShown: function(test) {
  101. var dir = path.join(__dirname, 'shown');
  102. var testdir = path.join(__dirname, 'testdir');
  103. test.ok(fs.existsSync(dir), 'Folders should exist');
  104. wrench.copyDirSyncRecursive(dir, testdir, { excludeHiddenUnix: true });
  105. var files = wrench.readdirSyncRecursive(testdir);
  106. checkResultShown(test, files);
  107. wrench.rmdirSyncRecursive(testdir);
  108. test.done();
  109. },
  110. test_copyDirSyncRecursiveInflate: function(test) {
  111. var dir = path.join(__dirname, 'withsymlinks');
  112. var testdir = path.join(__dirname, 'testdir');
  113. test.ok(fs.existsSync(dir), 'Folders should exist');
  114. wrench.copyDirSyncRecursive(dir, testdir, { excludeHiddenUnix: false, inflateSymlinks: true });
  115. var files = wrench.readdirSyncRecursive(testdir);
  116. checkResultInflate(test, files);
  117. wrench.rmdirSyncRecursive(testdir);
  118. test.done();
  119. },
  120. test_copyDirSyncRecursiveInflateAbsoluteSymlinks: function(test) {
  121. var dir = path.join(__dirname, 'withsymlinks');
  122. var testdir = path.join(__dirname, 'testdir');
  123. fs.symlinkSync(
  124. path.resolve(__dirname, 'shown/bar.txt'),
  125. path.join(dir, 'absolute-bar.txt')
  126. );
  127. wrench.mkdirSyncRecursive(testdir, 0777);
  128. wrench.copyDirSyncRecursive(dir, testdir, { forceDelete: true, excludeHiddenUnix: false, inflateSymlinks: true });
  129. var files = wrench.readdirSyncRecursive(testdir);
  130. checkResultInflateAbsolute(test, files);
  131. wrench.rmdirSyncRecursive(testdir);
  132. fs.unlinkSync(path.join(dir, 'absolute-bar.txt'));
  133. test.done();
  134. },
  135. test_copyDirSyncRecursiveDontInflate: function(test) {
  136. var dir = path.join(__dirname, 'withsymlinks');
  137. var testdir = path.join(__dirname, 'testdir');
  138. test.ok(fs.existsSync(dir), 'Folders should exist');
  139. wrench.copyDirSyncRecursive(dir, testdir, { excludeHiddenUnix: false, inflateSymlinks: false });
  140. var files = wrench.readdirSyncRecursive(testdir);
  141. checkResultDontInflate(test, files);
  142. wrench.rmdirSyncRecursive(testdir);
  143. test.done();
  144. },
  145. test_copyDirSyncRecursivePreserveFiles: function(test) {
  146. var dir = path.join(__dirname, 'shown'),
  147. testdir1 = path.join(__dirname, 'testdir1'),
  148. testdir2 = path.join(__dirname, 'testdir2');
  149. test.ok(fs.existsSync(dir), 'Folders should exist');
  150. // wrench.mkdirSyncRecursive(testdir1, 0777);
  151. wrench.copyDirSyncRecursive(dir, testdir1, { excludeHiddenUnix: false });
  152. wrench.copyDirSyncRecursive(dir, testdir2, { excludeHiddenUnix: false });
  153. fs.writeFileSync(path.join(testdir1, '.hidden.txt'), 'just some text for .hidden.txt');
  154. fs.writeFileSync(path.join(testdir1, 'bar.txt'), 'just some text for bar.txt');
  155. fs.writeFileSync(path.join(testdir1, 'foo/lorem.txt'), 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. ');
  156. fs.writeFileSync(path.join(testdir1, 'foo/dolor.md'), '#dolor sit amet');
  157. wrench.rmdirSyncRecursive(path.join(testdir2, 'foo'));
  158. fs.mkdirSync(path.join(testdir2, 'foo'));
  159. fs.writeFileSync(path.join(testdir2, 'foo/lorem.txt'), 'Lorem ipsum, please preserve my content.');
  160. var err = wrench.copyDirSyncRecursive(testdir1, testdir2, { excludeHiddenUnix: false, preserveFiles: true });
  161. test.equal(err, undefined, 'Error should not be returned');
  162. var files = wrench.readdirSyncRecursive(testdir2);
  163. checkResultPreserveFiles(test, files);
  164. wrench.rmdirSyncRecursive(testdir1);
  165. wrench.rmdirSyncRecursive(testdir2);
  166. test.done();
  167. },
  168. test_copyDirSyncRecursiveOverwriteFiles: function(test) {
  169. var dir = path.join(__dirname, 'shown'),
  170. testdir1 = path.join(__dirname, 'testdir1'),
  171. testdir2 = path.join(__dirname, 'testdir2');
  172. test.ok(fs.existsSync(dir), 'Folders should exist');
  173. // wrench.mkdirSyncRecursive(testdir1, 0777);
  174. wrench.copyDirSyncRecursive(dir, testdir1, { excludeHiddenUnix: false });
  175. wrench.copyDirSyncRecursive(dir, testdir2, { excludeHiddenUnix: false });
  176. fs.writeFileSync(path.join(testdir1, ".hidden.txt"), 'just some text for .hidden.txt');
  177. fs.writeFileSync(path.join(testdir1, "bar.txt"), 'just some text for bar.txt');
  178. wrench.copyDirSyncRecursive(testdir1, testdir2, { forceDelete: true, excludeHiddenUnix: false, preserveFiles: false });
  179. var files = wrench.readdirSyncRecursive(testdir2);
  180. checkResultOverwriteFiles(test, files);
  181. wrench.rmdirSyncRecursive(testdir1);
  182. wrench.rmdirSyncRecursive(testdir2);
  183. test.done();
  184. }
  185. });
  186. // vim: et ts=4 sw=4