| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- var fs = require("fs")
- var touch = require("../touch.js")
- var t = require('tap')
- function _ (fn) { return function (er) {
- if (er) throw er
- fn()
- }}
- var files = [
- 'sync',
- 'sync-ref',
- 'async',
- 'async-ref'
- ]
- files.forEach(function (f) {
- try { fs.unlinkSync(f) } catch (e) {}
- })
- var now = Math.floor(Date.now() / 1000) * 1000
- var then = now - 1000000000 // now - 1Msec
- t.test('set both to now', function (t) {
- touch.sync("sync")
- touch("async", _(function () {
- var astat = fs.statSync("async")
- var sstat = fs.statSync("sync")
- var asa = astat.atime.getTime()
- var ssa = sstat.atime.getTime()
- var asm = astat.mtime.getTime()
- var ssm = sstat.mtime.getTime()
- t.equal(asm, asa)
- t.equal(ssm, ssa)
- t.equal(ssa, now)
- t.equal(asa, now)
- // ctime should always be now-ish
- t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
- t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
- t.end()
- }))
- })
- t.test('set both to now, using futimes', function (t) {
- function runTest (closeAfter) {
- t.test('closeAfter=' + closeAfter, function (t) {
- var sfd = fs.openSync('sync', 'w')
- if (closeAfter) {
- touch.ftouchSync(sfd, { closeAfter: true })
- } else {
- touch.ftouchSync(sfd)
- fs.closeSync(sfd)
- }
- var afd = fs.openSync('async', 'w')
- t.equal(afd, sfd)
- var then = _(function () {
- if (!closeAfter) {
- fs.closeSync(afd)
- }
- var astat = fs.statSync("async")
- var sstat = fs.statSync("sync")
- var asa = astat.atime.getTime()
- var ssa = sstat.atime.getTime()
- var asm = astat.mtime.getTime()
- var ssm = sstat.mtime.getTime()
- t.equal(asm, asa)
- t.equal(ssm, ssa)
- t.equal(ssa, now)
- t.equal(asa, now)
- // ctime should always be now-ish
- t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
- t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
- t.end()
- })
- if (closeAfter) {
- touch.ftouch(afd, {closeAfter: true}, then)
- } else {
- touch.ftouch(afd, then)
- }
- })
- }
- runTest(true)
- runTest(false)
- t.end()
- })
- t.test('set both to now - 1Msec', function (t) {
- // also use force, just for funsies
- touch.sync("sync", { time: then, force: true })
- touch("async", { time: then, force: true }, _(function () {
- var astat = fs.statSync("async")
- var sstat = fs.statSync("sync")
- var asa = astat.atime.getTime()
- var ssa = sstat.atime.getTime()
- var asm = astat.mtime.getTime()
- var ssm = sstat.mtime.getTime()
- t.notEqual(asm, now)
- t.equal(asa, asm)
- t.notEqual(ssm, now)
- t.equal(ssa, ssm)
- t.equal(ssa, then)
- t.equal(asa, then)
- t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
- t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
- t.end()
- }))
- })
- t.test('set mtime to now', function (t) {
- touch.sync("sync", { time: now, mtime: true })
- touch("async", { time: now, mtime: true }, _(function () {
- var astat = fs.statSync("async")
- var sstat = fs.statSync("sync")
- var asa = astat.atime.getTime()
- var ssa = sstat.atime.getTime()
- var asm = astat.mtime.getTime()
- var ssm = sstat.mtime.getTime()
- t.notEqual(asa, asm)
- t.notEqual(ssa, ssm)
- t.equal(ssa, then)
- t.equal(asa, then)
- t.equal(ssm, now)
- t.equal(asm, now)
- t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
- t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
- t.end()
- }))
- })
- t.test('set atime to now', function (t) {
- touch.sync("sync", { time: now, atime: true })
- touch("async", { time: now, atime: true }, _(function () {
- var astat = fs.statSync("async")
- var sstat = fs.statSync("sync")
- var asa = astat.atime.getTime()
- var ssa = sstat.atime.getTime()
- var asm = astat.mtime.getTime()
- var ssm = sstat.mtime.getTime()
- t.equal(asm, now)
- t.equal(ssm, now)
- t.equal(asa, now)
- t.equal(ssa, now)
- t.ok(Math.abs(Date.now() - sstat.ctime.getTime()) < 1000)
- t.ok(Math.abs(Date.now() - astat.ctime.getTime()) < 1000)
- t.end()
- }))
- })
- t.test('nocreate should throw on ENOENT', function (t) {
- t.throws(function () {
- touch.sync('sync-noent', { nocreate: true })
- })
- touch('async-noent', { nocreate: true }, function (er) {
- t.isa(er, Error)
- t.end()
- })
- })
- t.test('use one file as ref for another', function (t) {
- touch.sync('sync-ref', { ref: 'sync' })
- touch('async-ref', { ref: 'async' }, _(function () {
- var astat = fs.statSync("async")
- var sstat = fs.statSync("sync")
- var arstat = fs.statSync('async-ref')
- var srstat = fs.statSync('sync-ref')
- var asa = astat.atime.getTime()
- var ssa = sstat.atime.getTime()
- var arsa = arstat.atime.getTime()
- var srsa = srstat.atime.getTime()
- var asm = astat.mtime.getTime()
- var ssm = sstat.mtime.getTime()
- var arsm = arstat.mtime.getTime()
- var srsm = srstat.mtime.getTime()
- var arsc = arstat.ctime.getTime()
- var srsc = srstat.ctime.getTime()
- t.equal(asm, arsm)
- t.equal(ssm, srsm)
- t.equal(asa, arsa)
- t.equal(ssa, srsa)
- t.ok(Math.abs(Date.now() - srsc) < 1000)
- t.ok(Math.abs(Date.now() - arsc) < 1000)
- t.end()
- }))
- })
- t.test('cleanup', function (t) {
- files.forEach(function (f) {
- t.doesNotThrow('rm ' + f, function () {
- fs.unlinkSync(f)
- })
- })
- t.end()
- })
|