aboutsummaryrefslogtreecommitdiff
path: root/node_modules/tmp/test
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-11-03 01:33:53 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-11-03 01:33:53 +0100
commitd1291f67551c58168af43698a359cb5ddfd266b0 (patch)
tree55a13ed29fe1915e3f42f1b1b7038dafa2e975a7 /node_modules/tmp/test
parentd0a0695fb5d34996850723f7d4b1b59c3df909c2 (diff)
node_modules
Diffstat (limited to 'node_modules/tmp/test')
-rw-r--r--node_modules/tmp/test/base.js74
-rw-r--r--node_modules/tmp/test/dir-test.js196
-rw-r--r--node_modules/tmp/test/file-test.js177
-rw-r--r--node_modules/tmp/test/graceful.js15
-rw-r--r--node_modules/tmp/test/keep.js11
-rw-r--r--node_modules/tmp/test/name-test.js82
-rw-r--r--node_modules/tmp/test/spawn.js32
-rw-r--r--node_modules/tmp/test/symlinkme/file.js0
-rw-r--r--node_modules/tmp/test/unsafe.js30
9 files changed, 617 insertions, 0 deletions
diff --git a/node_modules/tmp/test/base.js b/node_modules/tmp/test/base.js
new file mode 100644
index 000000000..498d8fb3b
--- /dev/null
+++ b/node_modules/tmp/test/base.js
@@ -0,0 +1,74 @@
+var
+ assert = require('assert'),
+ path = require('path'),
+ exec = require('child_process').exec;
+
+function _spawnTestWithError(testFile, params, cb) {
+ _spawnTest(true, testFile, params, cb);
+}
+
+function _spawnTestWithoutError(testFile, params, cb) {
+ _spawnTest(false, testFile, params, cb);
+}
+
+function _spawnTest(passError, testFile, params, cb) {
+ var
+ filename,
+ node_path = process.argv[0],
+ command = [ node_path, path.join(__dirname, testFile) ].concat(params).join(' ');
+
+ exec(command, function _execDone(err, stdout, stderr) {
+ if (passError) {
+ if (err) {
+ return cb(err);
+ } else if (stderr.length > 0) {
+ return cb(stderr.toString());
+ }
+ }
+
+ return cb(null, stdout.toString());
+ });
+}
+
+function _testStat(stat, mode) {
+ assert.equal(stat.uid, process.getuid(), 'should have the same UID');
+ assert.equal(stat.gid, process.getgid(), 'should have the same GUID');
+ assert.equal(stat.mode, mode);
+}
+
+function _testPrefix(prefix) {
+ return function _testPrefixGenerated(err, name, fd) {
+ assert.equal(path.basename(name).slice(0, prefix.length), prefix, 'should have the provided prefix');
+ };
+}
+
+function _testPostfix(postfix) {
+ return function _testPostfixGenerated(err, name, fd) {
+ assert.equal(name.slice(name.length - postfix.length, name.length), postfix, 'should have the provided postfix');
+ };
+}
+
+function _testKeep(type, keep, cb) {
+ _spawnTestWithError('keep.js', [ type, keep ], cb);
+}
+
+function _testGraceful(type, graceful, cb) {
+ _spawnTestWithoutError('graceful.js', [ type, graceful ], cb);
+}
+
+function _assertName(err, name) {
+ assert.isString(name);
+ assert.isNotZero(name.length);
+}
+
+function _testUnsafeCleanup(unsafe, cb) {
+ _spawnTestWithoutError('unsafe.js', [ 'dir', unsafe ], cb);
+}
+
+module.exports.testStat = _testStat;
+module.exports.testPrefix = _testPrefix;
+module.exports.testPostfix = _testPostfix;
+module.exports.testKeep = _testKeep;
+module.exports.testGraceful = _testGraceful;
+module.exports.assertName = _assertName;
+module.exports.testUnsafeCleanup = _testUnsafeCleanup;
diff --git a/node_modules/tmp/test/dir-test.js b/node_modules/tmp/test/dir-test.js
new file mode 100644
index 000000000..2e4e52999
--- /dev/null
+++ b/node_modules/tmp/test/dir-test.js
@@ -0,0 +1,196 @@
+var
+ vows = require('vows'),
+ assert = require('assert'),
+
+ path = require('path'),
+ fs = require('fs'),
+ existsSync = fs.existsSync || path.existsSync,
+
+ tmp = require('../lib/tmp.js'),
+ Test = require('./base.js');
+
+
+function _testDir(mode) {
+ return function _testDirGenerated(err, name) {
+ assert.ok(existsSync(name), 'should exist');
+
+ var stat = fs.statSync(name);
+ assert.ok(stat.isDirectory(), 'should be a directory');
+
+ Test.testStat(stat, mode);
+ };
+}
+
+vows.describe('Directory creation').addBatch({
+ 'when using without parameters': {
+ topic: function () {
+ tmp.dir(this.callback);
+ },
+
+ 'should be a directory': _testDir(040700),
+ 'should have the default prefix': Test.testPrefix('tmp-')
+ },
+
+ 'when using with prefix': {
+ topic: function () {
+ tmp.dir({ prefix: 'something' }, this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a directory': _testDir(040700),
+ 'should have the provided prefix': Test.testPrefix('something')
+ },
+
+ 'when using with postfix': {
+ topic: function () {
+ tmp.dir({ postfix: '.txt' }, this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a directory': _testDir(040700),
+ 'should have the provided postfix': Test.testPostfix('.txt')
+ },
+
+ 'when using template': {
+ topic: function () {
+ tmp.dir({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback);
+ },
+
+ 'should not return with error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a file': _testDir(040700),
+ 'should have the provided prefix': Test.testPrefix('clike-'),
+ 'should have the provided postfix': Test.testPostfix('-postfix')
+ },
+
+ 'when using multiple options': {
+ topic: function () {
+ tmp.dir({ prefix: 'foo', postfix: 'bar', mode: 0750 }, this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a directory': _testDir(040750),
+ 'should have the provided prefix': Test.testPrefix('foo'),
+ 'should have the provided postfix': Test.testPostfix('bar')
+ },
+
+ 'when using multiple options and mode': {
+ topic: function () {
+ tmp.dir({ prefix: 'complicated', postfix: 'options', mode: 0755 }, this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a directory': _testDir(040755),
+ 'should have the provided prefix': Test.testPrefix('complicated'),
+ 'should have the provided postfix': Test.testPostfix('options')
+ },
+
+ 'no tries': {
+ topic: function () {
+ tmp.dir({ tries: -1 }, this.callback);
+ },
+
+ 'should return with an error': assert.isObject
+ },
+
+ 'keep testing': {
+ topic: function () {
+ Test.testKeep('dir', '1', this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a dir': function (err, name) {
+ _testDir(040700)(err, name);
+ fs.rmdirSync(name);
+ }
+ },
+
+ 'unlink testing': {
+ topic: function () {
+ Test.testKeep('dir', '0', this.callback);
+ },
+
+ 'should not return with error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should not exist': function (err, name) {
+ assert.ok(!existsSync(name), "Directory should be removed");
+ }
+ },
+
+ 'non graceful testing': {
+ topic: function () {
+ Test.testGraceful('dir', '0', this.callback);
+ },
+
+ 'should not return with error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a dir': function (err, name) {
+ _testDir(040700)(err, name);
+ fs.rmdirSync(name);
+ }
+ },
+
+ 'graceful testing': {
+ topic: function () {
+ Test.testGraceful('dir', '1', this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should not exist': function (err, name) {
+ assert.ok(!existsSync(name), "Directory should be removed");
+ }
+ },
+
+ 'unsafeCleanup === true': {
+ topic: function () {
+ Test.testUnsafeCleanup('1', this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should not exist': function (err, name) {
+ assert.ok(!existsSync(name), "Directory should be removed");
+ },
+ 'should remove symlinked dir': function(err, name) {
+ assert.ok(
+ !existsSync(name + '/symlinkme-target'),
+ 'should remove target'
+ );
+ },
+ 'should not remove contents of symlink dir': function(err, name) {
+ assert.ok(
+ existsSync(__dirname + '/symlinkme/file.js'),
+ 'should not remove symlinked directory\'s content'
+ );
+ }
+ },
+
+ 'unsafeCleanup === false': {
+ topic: function () {
+ Test.testUnsafeCleanup('0', this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a directory': _testDir(040700)
+ },
+
+ 'remove callback': {
+ topic: function () {
+ tmp.dir(this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'removeCallback should remove directory': function (_err, name, removeCallback) {
+ removeCallback();
+ assert.ok(!existsSync(name), "Directory should be removed");
+ }
+ }
+}).exportTo(module);
diff --git a/node_modules/tmp/test/file-test.js b/node_modules/tmp/test/file-test.js
new file mode 100644
index 000000000..d9605b38a
--- /dev/null
+++ b/node_modules/tmp/test/file-test.js
@@ -0,0 +1,177 @@
+var
+ vows = require('vows'),
+ assert = require('assert'),
+
+ path = require('path'),
+ fs = require('fs'),
+ existsSync = fs.existsSync || path.existsSync,
+
+ tmp = require('../lib/tmp.js'),
+ Test = require('./base.js');
+
+
+function _testFile(mode, fdTest) {
+ return function _testFileGenerated(err, name, fd) {
+ assert.ok(existsSync(name), 'should exist');
+
+ var stat = fs.statSync(name);
+ assert.equal(stat.size, 0, 'should have zero size');
+ assert.ok(stat.isFile(), 'should be a file');
+
+ Test.testStat(stat, mode);
+
+ // check with fstat as well (fd checking)
+ if (fdTest) {
+ var fstat = fs.fstatSync(fd);
+ assert.deepEqual(fstat, stat, 'fstat results should be the same');
+
+ var data = new Buffer('something');
+ assert.equal(fs.writeSync(fd, data, 0, data.length, 0), data.length, 'should be writable');
+ assert.ok(!fs.closeSync(fd), 'should not return with error');
+ }
+ };
+}
+
+vows.describe('File creation').addBatch({
+ 'when using without parameters': {
+ topic: function () {
+ tmp.file(this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a file': _testFile(0100600, true),
+ 'should have the default prefix': Test.testPrefix('tmp-'),
+ 'should have the default postfix': Test.testPostfix('.tmp')
+ },
+
+ 'when using with prefix': {
+ topic: function () {
+ tmp.file({ prefix: 'something' }, this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a file': _testFile(0100600, true),
+ 'should have the provided prefix': Test.testPrefix('something')
+ },
+
+ 'when using with postfix': {
+ topic: function () {
+ tmp.file({ postfix: '.txt' }, this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a file': _testFile(0100600, true),
+ 'should have the provided postfix': Test.testPostfix('.txt')
+ },
+
+ 'when using template': {
+ topic: function () {
+ tmp.file({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a file': _testFile(0100600, true),
+ 'should have the provided prefix': Test.testPrefix('clike-'),
+ 'should have the provided postfix': Test.testPostfix('-postfix')
+ },
+
+ 'when using multiple options': {
+ topic: function () {
+ tmp.file({ prefix: 'foo', postfix: 'bar', mode: 0640 }, this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a file': _testFile(0100640, true),
+ 'should have the provided prefix': Test.testPrefix('foo'),
+ 'should have the provided postfix': Test.testPostfix('bar')
+ },
+
+ 'when using multiple options and mode': {
+ topic: function () {
+ tmp.file({ prefix: 'complicated', postfix: 'options', mode: 0644 }, this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a file': _testFile(0100644, true),
+ 'should have the provided prefix': Test.testPrefix('complicated'),
+ 'should have the provided postfix': Test.testPostfix('options')
+ },
+
+ 'no tries': {
+ topic: function () {
+ tmp.file({ tries: -1 }, this.callback);
+ },
+
+ 'should not be created': assert.isObject
+ },
+
+ 'keep testing': {
+ topic: function () {
+ Test.testKeep('file', '1', this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a file': function (err, name) {
+ _testFile(0100600, false)(err, name, null);
+ fs.unlinkSync(name);
+ }
+ },
+
+ 'unlink testing': {
+ topic: function () {
+ Test.testKeep('file', '0', this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should not exist': function (err, name) {
+ assert.ok(!existsSync(name), "File should be removed");
+ }
+ },
+
+ 'non graceful testing': {
+ topic: function () {
+ Test.testGraceful('file', '0', this.callback);
+ },
+
+ 'should not return with error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should be a file': function (err, name) {
+ _testFile(0100600, false)(err, name, null);
+ fs.unlinkSync(name);
+ }
+ },
+
+ 'graceful testing': {
+ topic: function () {
+ Test.testGraceful('file', '1', this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'should not exist': function (err, name) {
+ assert.ok(!existsSync(name), "File should be removed");
+ }
+ },
+
+ 'remove callback': {
+ topic: function () {
+ tmp.file(this.callback);
+ },
+
+ 'should not return with an error': assert.isNull,
+ 'should return with a name': Test.assertName,
+ 'removeCallback should remove file': function (_err, name, _fd, removeCallback) {
+ removeCallback();
+ assert.ok(!existsSync(name), "File should be removed");
+ }
+ }
+
+}).exportTo(module);
diff --git a/node_modules/tmp/test/graceful.js b/node_modules/tmp/test/graceful.js
new file mode 100644
index 000000000..c898656f3
--- /dev/null
+++ b/node_modules/tmp/test/graceful.js
@@ -0,0 +1,15 @@
+var
+ tmp = require('../lib/tmp'),
+ spawn = require('./spawn');
+
+var graceful = spawn.arg;
+
+if (graceful) {
+ tmp.setGracefulCleanup();
+}
+
+spawn.tmpFunction(function (err, name) {
+ spawn.out(name, function () {
+ throw new Error("Thrown on purpose");
+ });
+});
diff --git a/node_modules/tmp/test/keep.js b/node_modules/tmp/test/keep.js
new file mode 100644
index 000000000..9538605dd
--- /dev/null
+++ b/node_modules/tmp/test/keep.js
@@ -0,0 +1,11 @@
+var spawn = require('./spawn');
+
+var keep = spawn.arg;
+
+spawn.tmpFunction({ keep: keep }, function (err, name) {
+ if (err) {
+ spawn.err(err, spawn.exit);
+ } else {
+ spawn.out(name, spawn.exit);
+ }
+});
diff --git a/node_modules/tmp/test/name-test.js b/node_modules/tmp/test/name-test.js
new file mode 100644
index 000000000..a242c21b2
--- /dev/null
+++ b/node_modules/tmp/test/name-test.js
@@ -0,0 +1,82 @@
+var
+ vows = require('vows'),
+ assert = require('assert'),
+
+ path = require('path'),
+
+ tmp = require('../lib/tmp.js'),
+ Test = require('./base.js');
+
+vows.describe('Name creation').addBatch({
+ 'when using without parameters': {
+ topic: function () {
+ tmp.tmpName(this.callback);
+ },
+
+ 'should not return with error': assert.isNull,
+ 'should have the default prefix': Test.testPrefix('tmp-')
+ },
+
+ 'when using with prefix': {
+ topic: function () {
+ tmp.tmpName({ prefix: 'something' }, this.callback);
+ },
+
+ 'should not return with error': assert.isNull,
+ 'should have the provided prefix': Test.testPrefix('something')
+ },
+
+ 'when using with postfix': {
+ topic: function () {
+ tmp.tmpName({ postfix: '.txt' }, this.callback);
+ },
+
+ 'should not return with error': assert.isNull,
+ 'should have the provided postfix': Test.testPostfix('.txt')
+
+ },
+
+ 'when using template': {
+ topic: function () {
+ tmp.tmpName({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') }, this.callback);
+ },
+
+ 'should not return with error': assert.isNull,
+ 'should have the provided prefix': Test.testPrefix('clike-'),
+ 'should have the provided postfix': Test.testPostfix('-postfix'),
+ 'should have template filled': function (err, name) {
+ assert.isTrue(/[a-zA-Z0-9]{6}/.test(name));
+ }
+ },
+
+ 'when using multiple options': {
+ topic: function () {
+ tmp.tmpName({ prefix: 'foo', postfix: 'bar', tries: 5 }, this.callback);
+ },
+
+ 'should not return with error': assert.isNull,
+ 'should have the provided prefix': Test.testPrefix('foo'),
+ 'should have the provided postfix': Test.testPostfix('bar')
+ },
+
+ 'no tries': {
+ topic: function () {
+ tmp.tmpName({ tries: -1 }, this.callback);
+ },
+
+ 'should fail': function (err, name) {
+ assert.isObject(err);
+ }
+ },
+
+ 'tries not numeric': {
+ topic: function () {
+ tmp.tmpName({ tries: 'hello'}, this.callback);
+ },
+
+ 'should fail': function (err, name) {
+ assert.isObject(err);
+ }
+ }
+
+}).exportTo(module);
diff --git a/node_modules/tmp/test/spawn.js b/node_modules/tmp/test/spawn.js
new file mode 100644
index 000000000..6468eb39e
--- /dev/null
+++ b/node_modules/tmp/test/spawn.js
@@ -0,0 +1,32 @@
+var
+ fs = require('fs'),
+ tmp = require('../lib/tmp');
+
+function _writeSync(stream, str, cb) {
+ var flushed = stream.write(str);
+ if (flushed) {
+ return cb(null);
+ }
+
+ stream.once('drain', function _flushed() {
+ cb(null);
+ });
+}
+
+module.exports.out = function (str, cb) {
+ _writeSync(process.stdout, str, cb);
+};
+
+module.exports.err = function (str, cb) {
+ _writeSync(process.stderr, str, cb);
+};
+
+module.exports.exit = function () {
+ process.exit(0);
+};
+
+var type = process.argv[2];
+module.exports.tmpFunction = (type == 'file') ? tmp.file : tmp.dir;
+
+var arg = (process.argv[3] && parseInt(process.argv[3], 10) === 1) ? true : false;
+module.exports.arg = arg;
diff --git a/node_modules/tmp/test/symlinkme/file.js b/node_modules/tmp/test/symlinkme/file.js
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/node_modules/tmp/test/symlinkme/file.js
diff --git a/node_modules/tmp/test/unsafe.js b/node_modules/tmp/test/unsafe.js
new file mode 100644
index 000000000..73e4fb34e
--- /dev/null
+++ b/node_modules/tmp/test/unsafe.js
@@ -0,0 +1,30 @@
+var
+ fs = require('fs'),
+ join = require('path').join,
+ spawn = require('./spawn');
+
+var unsafe = spawn.arg;
+spawn.tmpFunction({ unsafeCleanup: unsafe }, function (err, name) {
+ if (err) {
+ spawn.err(err, spawn.exit);
+ return;
+ }
+
+ try {
+ // file that should be removed
+ var fd = fs.openSync(join(name, 'should-be-removed.file'), 'w');
+ fs.closeSync(fd);
+
+ // in tree source
+ var symlinkSource = join(__dirname, 'symlinkme');
+ // testing target
+ var symlinkTarget = join(name, 'symlinkme-target');
+
+ // symlink that should be removed but the contents should be preserved.
+ fs.symlinkSync(symlinkSource, symlinkTarget, 'dir');
+
+ spawn.out(name, spawn.exit);
+ } catch (e) {
+ spawn.err(e.toString(), spawn.exit);
+ }
+});