123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- 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(result) {
- assert.ok(existsSync(result.name), 'should exist');
- var stat = fs.statSync(result.name);
- assert.ok(stat.isDirectory(), 'should be a directory');
- Test.testStat(stat, mode);
- };
- }
- vows.describe('Synchronous directory creation').addBatch({
- 'when using without parameters': {
- topic: function () {
- return tmp.dirSync();
- },
- 'should return with a name': Test.assertNameSync,
- 'should be a directory': _testDir(040700),
- 'should have the default prefix': Test.testPrefixSync('tmp-')
- },
- 'when using with prefix': {
- topic: function () {
- return tmp.dirSync({ prefix: 'something' });
- },
- 'should return with a name': Test.assertNameSync,
- 'should be a directory': _testDir(040700),
- 'should have the provided prefix': Test.testPrefixSync('something')
- },
- 'when using with postfix': {
- topic: function () {
- return tmp.dirSync({ postfix: '.txt' });
- },
- 'should return with a name': Test.assertNameSync,
- 'should be a directory': _testDir(040700),
- 'should have the provided postfix': Test.testPostfixSync('.txt')
- },
- 'when using template': {
- topic: function () {
- return tmp.dirSync({ template: path.join(tmp.tmpdir, 'clike-XXXXXX-postfix') });
- },
- 'should return with a name': Test.assertNameSync,
- 'should be a directory': _testDir(040700),
- 'should have the provided prefix': Test.testPrefixSync('clike-'),
- 'should have the provided postfix': Test.testPostfixSync('-postfix')
- },
- 'when using name': {
- topic: function () {
- return tmp.dirSync({ name: 'using-name' });
- },
- 'should return with a name': Test.assertNameSync,
- 'should have the provided name': Test.testNameSync(path.join(tmp.tmpdir, 'using-name')),
- 'should be a directory': function (result) {
- _testDir(040700)(result);
- result.removeCallback();
- assert.ok(!existsSync(result.name), 'Directory should be removed');
- }
- },
- 'when using multiple options': {
- topic: function () {
- return tmp.dirSync({ prefix: 'foo', postfix: 'bar', mode: 0750 });
- },
- 'should return with a name': Test.assertNameSync,
- 'should be a directory': _testDir(040750),
- 'should have the provided prefix': Test.testPrefixSync('foo'),
- 'should have the provided postfix': Test.testPostfixSync('bar')
- },
- 'when using multiple options and mode': {
- topic: function () {
- return tmp.dirSync({ prefix: 'complicated', postfix: 'options', mode: 0755 });
- },
- 'should return with a name': Test.assertNameSync,
- 'should be a directory': _testDir(040755),
- 'should have the provided prefix': Test.testPrefixSync('complicated'),
- 'should have the provided postfix': Test.testPostfixSync('options')
- },
- 'no tries': {
- topic: function () {
- try {
- return tmp.dirSync({ tries: -1 });
- }
- catch (e) {
- return e;
- }
- },
- 'should return with an error': function (topic) {
- assert.instanceOf(topic, Error);
- }
- },
- 'keep testing': {
- topic: function () {
- Test.testKeepSync('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)({ name: name });
- fs.rmdirSync(name);
- }
- },
- 'unlink testing': {
- topic: function () {
- Test.testKeepSync('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.testGracefulSync('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)({ name: name });
- fs.rmdirSync(name);
- }
- },
- 'graceful testing': {
- topic: function () {
- Test.testGracefulSync('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.testUnsafeCleanupSync('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 === true with issue62 structure': {
- topic: function () {
- Test.testIssue62Sync(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 === false': {
- topic: function () {
- Test.testUnsafeCleanupSync('0', this.callback);
- },
- 'should not return with an error': assert.isNull,
- 'should return with a name': Test.assertName,
- 'should be a directory': function (err, name) {
- _testDir(040700)({name:name});
- // make sure that everything gets cleaned up
- fs.unlinkSync(path.join(name, 'should-be-removed.file'));
- fs.unlinkSync(path.join(name, 'symlinkme-target'));
- fs.rmdirSync(name);
- }
- },
- 'remove callback': {
- topic: function () {
- return tmp.dirSync();
- },
- 'should return with a name': Test.assertNameSync,
- 'removeCallback should remove directory': function (result) {
- result.removeCallback();
- assert.ok(!existsSync(result.name), 'Directory should be removed');
- }
- }
- }).exportTo(module);
|