123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- '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')
- })
- })
- })
|