• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1var path = require('path')
2
3var test = require('tap').test
4var statSync = require('graceful-fs').statSync
5var mkdtemp = require('tmp').dir
6var mkdirp = require('mkdirp')
7
8var vacuum = require('../vacuum.js')
9
10// CONSTANTS
11var TEMP_OPTIONS = {
12  unsafeCleanup: true,
13  mode: '0700'
14}
15var SHORT_PATH = path.join('i', 'am', 'a', 'path')
16var LONG_PATH = path.join(SHORT_PATH, 'of', 'a', 'certain', 'length')
17
18var messages = []
19function log () { messages.push(Array.prototype.slice.call(arguments).join(' ')) }
20
21var testPath, testBase
22test('xXx setup xXx', function (t) {
23  mkdtemp(TEMP_OPTIONS, function (er, tmpdir) {
24    t.ifError(er, 'temp directory exists')
25
26    testBase = path.resolve(tmpdir, SHORT_PATH)
27    testPath = path.resolve(tmpdir, LONG_PATH)
28
29    mkdirp(testPath, function (er) {
30      t.ifError(er, 'made test path')
31
32      t.end()
33    })
34  })
35})
36
37test('remove up to a point', function (t) {
38  vacuum(testPath, {purge: false, base: testBase, log: log}, function (er) {
39    t.ifError(er, 'cleaned up to base')
40
41    t.equal(messages.length, 5, 'got 4 removal & 1 finish message')
42    t.equal(messages[4], 'finished vacuuming up to ' + testBase)
43
44    var stat
45    var verifyPath = testPath
46    function verify () { stat = statSync(verifyPath) }
47
48    for (var i = 0; i < 4; i++) {
49      t.throws(verify, verifyPath + ' cannot be statted')
50      t.notOk(stat && stat.isDirectory(), verifyPath + ' is totally gone')
51      verifyPath = path.dirname(verifyPath)
52    }
53
54    t.doesNotThrow(function () {
55      stat = statSync(testBase)
56    }, testBase + ' can be statted')
57    t.ok(stat && stat.isDirectory(), testBase + ' is still a directory')
58
59    t.end()
60  })
61})
62