154 lines
3.7 KiB
JavaScript
154 lines
3.7 KiB
JavaScript
'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')
|
|
|
|
// Check that the path is a fille.
|
|
assert.ok(fs.statSync(path).isFile())
|
|
|
|
// Check that the fd is correct and points to the file.
|
|
const message = 'hello there!'
|
|
fs.writeSync(fd, message)
|
|
fs.fdatasyncSync(fd)
|
|
assert.equal(fs.readFileSync(path), message)
|
|
|
|
// Check that the cleanup works.
|
|
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')
|
|
})
|
|
})
|
|
})
|