mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.4 KiB
97 lines
3.4 KiB
'use strict'
|
|
var test = require('tap').test
|
|
var requireInject = require('require-inject')
|
|
var writeFileAtomic = requireInject('../index', {
|
|
'graceful-fs': {
|
|
writeFile: function (tmpfile, data, options, cb) {
|
|
if (/nowrite/.test(tmpfile)) return cb(new Error('ENOWRITE'))
|
|
cb()
|
|
},
|
|
chown: function (tmpfile, uid, gid, cb) {
|
|
if (/nochown/.test(tmpfile)) return cb(new Error('ENOCHOWN'))
|
|
cb()
|
|
},
|
|
rename: function (tmpfile, filename, cb) {
|
|
if (/norename/.test(tmpfile)) return cb(new Error('ENORENAME'))
|
|
cb()
|
|
},
|
|
unlink: function (tmpfile, cb) {
|
|
if (/nounlink/.test(tmpfile)) return cb(new Error('ENOUNLINK'))
|
|
cb()
|
|
},
|
|
writeFileSync: function (tmpfile, data, options) {
|
|
if (/nowrite/.test(tmpfile)) throw new Error('ENOWRITE')
|
|
},
|
|
chownSync: function (tmpfile, uid, gid) {
|
|
if (/nochown/.test(tmpfile)) throw new Error('ENOCHOWN')
|
|
},
|
|
renameSync: function (tmpfile, filename) {
|
|
if (/norename/.test(tmpfile)) throw new Error('ENORENAME')
|
|
},
|
|
unlinkSync: function (tmpfile) {
|
|
if (/nounlink/.test(tmpfile)) throw new Error('ENOUNLINK')
|
|
}
|
|
}
|
|
})
|
|
var writeFileAtomicSync = writeFileAtomic.sync
|
|
|
|
test('async tests', function (t) {
|
|
t.plan(7)
|
|
writeFileAtomic('good', 'test', {mode: '0777'}, function (err) {
|
|
t.notOk(err, 'No errors occur when passing in options')
|
|
})
|
|
writeFileAtomic('good', 'test', function (err) {
|
|
t.notOk(err, 'No errors occur when NOT passing in options')
|
|
})
|
|
writeFileAtomic('nowrite', 'test', function (err) {
|
|
t.is(err.message, 'ENOWRITE', 'writeFile failures propagate')
|
|
})
|
|
writeFileAtomic('nochown', 'test', {chown: {uid: 100, gid: 100}}, function (err) {
|
|
t.is(err.message, 'ENOCHOWN', 'Chown failures propagate')
|
|
})
|
|
writeFileAtomic('nochown', 'test', function (err) {
|
|
t.notOk(err, 'No attempt to chown when no uid/gid passed in')
|
|
})
|
|
writeFileAtomic('norename', 'test', function (err) {
|
|
t.is(err.message, 'ENORENAME', 'Rename errors propagate')
|
|
})
|
|
writeFileAtomic('norename nounlink', 'test', function (err) {
|
|
t.is(err.message, 'ENORENAME', 'Failure to unlink the temp file does not clobber the original error')
|
|
})
|
|
})
|
|
|
|
test('sync tests', function (t) {
|
|
t.plan(7)
|
|
var throws = function (shouldthrow, msg, todo) {
|
|
var err
|
|
try { todo() } catch (e) { err = e }
|
|
t.is(shouldthrow, err.message, msg)
|
|
}
|
|
var noexception = function (msg, todo) {
|
|
var err
|
|
try { todo() } catch (e) { err = e }
|
|
t.notOk(err, msg)
|
|
}
|
|
|
|
noexception('No errors occur when passing in options', function () {
|
|
writeFileAtomicSync('good', 'test', {mode: '0777'})
|
|
})
|
|
noexception('No errors occur when NOT passing in options', function () {
|
|
writeFileAtomicSync('good', 'test')
|
|
})
|
|
throws('ENOWRITE', 'writeFile failures propagate', function () {
|
|
writeFileAtomicSync('nowrite', 'test')
|
|
})
|
|
throws('ENOCHOWN', 'Chown failures propagate', function () {
|
|
writeFileAtomicSync('nochown', 'test', {chown: {uid: 100, gid: 100}})
|
|
})
|
|
noexception('No attempt to chown when no uid/gid passed in', function () {
|
|
writeFileAtomicSync('nochown', 'test')
|
|
})
|
|
throws('ENORENAME', 'Rename errors propagate', function () {
|
|
writeFileAtomicSync('norename', 'test')
|
|
})
|
|
throws('ENORENAME', 'Failure to unlink the temp file does not clobber the original error', function () {
|
|
writeFileAtomicSync('norename nounlink', 'test')
|
|
})
|
|
})
|
|
|