222 lines
5.3 KiB
JavaScript
222 lines
5.3 KiB
JavaScript
|
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()
|
||
|
})
|