|
'use strict'; |
|
|
|
const fs = require('fs') |
|
const assert = require('assert') |
|
const { extname } = require('path') |
|
|
|
const tmp = require('.') |
|
|
|
async function checkFileResult(result) { |
|
assert.deepEqual(Object.keys(result).sort(), ['cleanup', 'fd', 'path']) |
|
|
|
const { path, fd, cleanup } = result |
|
assert.ok(typeof path === 'string') |
|
assert.ok(typeof fd === 'number') |
|
assert.ok(typeof cleanup === 'function') |
|
|
|
|
|
assert.ok(fs.statSync(path).isFile()) |
|
|
|
|
|
const message = 'hello there!' |
|
fs.writeSync(fd, message) |
|
fs.fdatasyncSync(fd) |
|
assert.equal(fs.readFileSync(path), message) |
|
|
|
|
|
await cleanup() |
|
assert.throws(() => fs.statSync(path)) |
|
} |
|
|
|
describe('file()', function() |
|
{ |
|
context('when called without options', function() |
|
{ |
|
it('creates the file, returns the expected result, and the cleanup function works', async function() |
|
{ |
|
const result = await tmp.file() |
|
await checkFileResult(result) |
|
}) |
|
}) |
|
|
|
context('when called with options', function() |
|
{ |
|
it('creates the file, returns the expected result, and the cleanup function works', async function() |
|
{ |
|
const prefix = 'myTmpDir_' |
|
const result = await tmp.file({ prefix }) |
|
await checkFileResult(result) |
|
assert.ok(result.path.includes(prefix)) |
|
}) |
|
}) |
|
|
|
it('propagates errors', async function() { |
|
try { |
|
await tmp.file({ dir: 'nonexistent-path' }); |
|
throw Error('Expected to throw'); |
|
} catch (e) { |
|
assert.ok(e.message.startsWith('ENOENT: no such file or directory')); |
|
} |
|
}); |
|
}) |
|
|
|
async function checkDirResult(result) { |
|
assert.deepEqual(Object.keys(result).sort(), ['cleanup', 'path']) |
|
|
|
const { path, cleanup } = result |
|
assert.ok(typeof path === 'string') |
|
assert.ok(typeof cleanup === 'function') |
|
|
|
assert.ok(fs.statSync(path).isDirectory()) |
|
|
|
await cleanup() |
|
assert.throws(() => fs.statSync(path)) |
|
} |
|
|
|
describe('dir()', function() |
|
{ |
|
context('when called without options', function() |
|
{ |
|
it('creates the directory, returns the expected result, and the cleanup function works', async function() |
|
{ |
|
const result = await tmp.dir() |
|
await checkDirResult(result) |
|
}) |
|
}) |
|
|
|
context('when called with options', function() |
|
{ |
|
it('creates the directory, returns the expected result, and the cleanup function works', async function() |
|
{ |
|
const prefix = 'myTmpDir_' |
|
const result = await tmp.dir({ prefix }) |
|
await checkDirResult(result) |
|
assert.ok(result.path.includes(prefix)) |
|
}) |
|
}) |
|
|
|
it('propagates errors', async function() { |
|
try { |
|
await tmp.dir({ dir: 'nonexistent-path' }); |
|
throw Error('Expected to throw'); |
|
} catch (e) { |
|
assert.ok(e.message.startsWith('ENOENT: no such file or directory')); |
|
} |
|
}); |
|
}) |
|
|
|
describe('withFile()', function() |
|
{ |
|
it("file doesn't exist after going out of scope", function() |
|
{ |
|
var filepath |
|
|
|
return tmp.withFile(function(o) |
|
{ |
|
filepath = o.path |
|
|
|
fs.accessSync(filepath) |
|
assert.strictEqual(extname(filepath), '.txt') |
|
}, {discardDescriptor: true, postfix: '.txt'}) |
|
.then(function() |
|
{ |
|
assert.throws(function() |
|
{ |
|
fs.accessSync(filepath) |
|
}, filepath + ' still exists') |
|
}) |
|
}) |
|
}) |
|
|
|
|
|
describe('withDir()', function() |
|
{ |
|
it("dir doesn't exist after going out of scope", function() |
|
{ |
|
var filepath |
|
|
|
return tmp.withDir(function(o) |
|
{ |
|
filepath = o.path |
|
|
|
fs.accessSync(filepath) |
|
assert.strictEqual(extname(filepath), '.dir') |
|
}, {postfix: '.dir'}) |
|
.then(function() |
|
{ |
|
assert.throws(function() |
|
{ |
|
fs.accessSync(filepath) |
|
}, filepath + ' still exists') |
|
}) |
|
}) |
|
}) |
|
|