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