basic.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. var fs = require("fs")
  2. var touch = require("../touch.js")
  3. var t = require('tap')
  4. function _ (fn) { return function (er) {
  5. if (er) throw er
  6. fn()
  7. }}
  8. var files = [
  9. 'sync',
  10. 'sync-ref',
  11. 'async',
  12. 'async-ref'
  13. ]
  14. files.forEach(function (f) {
  15. try { fs.unlinkSync(f) } catch (e) {}
  16. })
  17. var now = Math.floor(Date.now() / 1000) * 1000
  18. var then = now - 1000000000 // now - 1Msec
  19. t.test('set both to now', function (t) {
  20. touch.sync("sync")
  21. touch("async", _(function () {
  22. var astat = fs.statSync("async")
  23. var sstat = fs.statSync("sync")
  24. var asa = astat.atime.getTime()
  25. var ssa = sstat.atime.getTime()
  26. var asm = astat.mtime.getTime()
  27. var ssm = sstat.mtime.getTime()
  28. t.equal(asm, asa)
  29. t.equal(ssm, ssa)
  30. t.equal(ssa, now)
  31. t.equal(asa, now)
  32. // ctime should always be now-ish
  33. t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
  34. t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
  35. t.end()
  36. }))
  37. })
  38. t.test('set both to now, using futimes', function (t) {
  39. function runTest (closeAfter) {
  40. t.test('closeAfter=' + closeAfter, function (t) {
  41. var sfd = fs.openSync('sync', 'w')
  42. if (closeAfter) {
  43. touch.ftouchSync(sfd, { closeAfter: true })
  44. } else {
  45. touch.ftouchSync(sfd)
  46. fs.closeSync(sfd)
  47. }
  48. var afd = fs.openSync('async', 'w')
  49. t.equal(afd, sfd)
  50. var then = _(function () {
  51. if (!closeAfter) {
  52. fs.closeSync(afd)
  53. }
  54. var astat = fs.statSync("async")
  55. var sstat = fs.statSync("sync")
  56. var asa = astat.atime.getTime()
  57. var ssa = sstat.atime.getTime()
  58. var asm = astat.mtime.getTime()
  59. var ssm = sstat.mtime.getTime()
  60. t.equal(asm, asa)
  61. t.equal(ssm, ssa)
  62. t.equal(ssa, now)
  63. t.equal(asa, now)
  64. // ctime should always be now-ish
  65. t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
  66. t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
  67. t.end()
  68. })
  69. if (closeAfter) {
  70. touch.ftouch(afd, {closeAfter: true}, then)
  71. } else {
  72. touch.ftouch(afd, then)
  73. }
  74. })
  75. }
  76. runTest(true)
  77. runTest(false)
  78. t.end()
  79. })
  80. t.test('set both to now - 1Msec', function (t) {
  81. // also use force, just for funsies
  82. touch.sync("sync", { time: then, force: true })
  83. touch("async", { time: then, force: true }, _(function () {
  84. var astat = fs.statSync("async")
  85. var sstat = fs.statSync("sync")
  86. var asa = astat.atime.getTime()
  87. var ssa = sstat.atime.getTime()
  88. var asm = astat.mtime.getTime()
  89. var ssm = sstat.mtime.getTime()
  90. t.notEqual(asm, now)
  91. t.equal(asa, asm)
  92. t.notEqual(ssm, now)
  93. t.equal(ssa, ssm)
  94. t.equal(ssa, then)
  95. t.equal(asa, then)
  96. t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
  97. t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
  98. t.end()
  99. }))
  100. })
  101. t.test('set mtime to now', function (t) {
  102. touch.sync("sync", { time: now, mtime: true })
  103. touch("async", { time: now, mtime: true }, _(function () {
  104. var astat = fs.statSync("async")
  105. var sstat = fs.statSync("sync")
  106. var asa = astat.atime.getTime()
  107. var ssa = sstat.atime.getTime()
  108. var asm = astat.mtime.getTime()
  109. var ssm = sstat.mtime.getTime()
  110. t.notEqual(asa, asm)
  111. t.notEqual(ssa, ssm)
  112. t.equal(ssa, then)
  113. t.equal(asa, then)
  114. t.equal(ssm, now)
  115. t.equal(asm, now)
  116. t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
  117. t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
  118. t.end()
  119. }))
  120. })
  121. t.test('set atime to now', function (t) {
  122. touch.sync("sync", { time: now, atime: true })
  123. touch("async", { time: now, atime: true }, _(function () {
  124. var astat = fs.statSync("async")
  125. var sstat = fs.statSync("sync")
  126. var asa = astat.atime.getTime()
  127. var ssa = sstat.atime.getTime()
  128. var asm = astat.mtime.getTime()
  129. var ssm = sstat.mtime.getTime()
  130. t.equal(asm, now)
  131. t.equal(ssm, now)
  132. t.equal(asa, now)
  133. t.equal(ssa, now)
  134. t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
  135. t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
  136. t.end()
  137. }))
  138. })
  139. t.test('nocreate should throw on ENOENT', function (t) {
  140. t.throws(function () {
  141. touch.sync('sync-noent', { nocreate: true })
  142. })
  143. touch('async-noent', { nocreate: true }, function (er) {
  144. t.isa(er, Error)
  145. t.end()
  146. })
  147. })
  148. t.test('use one file as ref for another', function (t) {
  149. touch.sync('sync-ref', { ref: 'sync' })
  150. touch('async-ref', { ref: 'async' }, _(function () {
  151. var astat = fs.statSync("async")
  152. var sstat = fs.statSync("sync")
  153. var arstat = fs.statSync('async-ref')
  154. var srstat = fs.statSync('sync-ref')
  155. var asa = astat.atime.getTime()
  156. var ssa = sstat.atime.getTime()
  157. var arsa = arstat.atime.getTime()
  158. var srsa = srstat.atime.getTime()
  159. var asm = astat.mtime.getTime()
  160. var ssm = sstat.mtime.getTime()
  161. var arsm = arstat.mtime.getTime()
  162. var srsm = srstat.mtime.getTime()
  163. var arsc = arstat.ctime.getTime()
  164. var srsc = srstat.ctime.getTime()
  165. t.equal(asm, arsm)
  166. t.equal(ssm, srsm)
  167. t.equal(asa, arsa)
  168. t.equal(ssa, srsa)
  169. t.ok(Math.abs(Date.now() - srsc) < 1000)
  170. t.ok(Math.abs(Date.now() - arsc) < 1000)
  171. t.end()
  172. }))
  173. })
  174. t.test('cleanup', function (t) {
  175. files.forEach(function (f) {
  176. t.doesNotThrow('rm ' + f, function () {
  177. fs.unlinkSync(f)
  178. })
  179. })
  180. t.end()
  181. })