diff options
Diffstat (limited to 'deps/npm/test/tap/prune-dev-dep-cycle.js')
-rw-r--r-- | deps/npm/test/tap/prune-dev-dep-cycle.js | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/deps/npm/test/tap/prune-dev-dep-cycle.js b/deps/npm/test/tap/prune-dev-dep-cycle.js new file mode 100644 index 0000000000..5ccabdc1c9 --- /dev/null +++ b/deps/npm/test/tap/prune-dev-dep-cycle.js @@ -0,0 +1,86 @@ +'use strict' +var fs = require('fs') +var path = require('path') +var test = require('tap').test +var Tacks = require('tacks') +var File = Tacks.File +var Dir = Tacks.Dir +var common = require('../common-tap.js') +var testdir = path.join(__dirname, path.basename(__filename, '.js')) + +var fixture = new Tacks( + Dir({ + node_modules: Dir({ + 'a': Dir({ + 'package.json': File({ + _requested: { + rawSpec: 'file:///mods/a' + }, + dependencies: { + 'b': 'file:///mods/b' + }, + name: 'a', + version: '1.0.0' + }) + }), + 'b': Dir({ + 'package.json': File({ + _requested: { + rawSpec: 'file:///mods/b' + }, + dependencies: { + 'a': 'file:///mods/a' + }, + name: 'b', + version: '1.0.0' + }) + }) + }), + 'package.json': File({ + name: 'test', + version: '1.0.0', + devDependencies: { + 'a': 'file:///mods/a' + } + }) + }) +) + +function setup () { + cleanup() + fixture.create(testdir) +} + +function cleanup () { + fixture.remove(testdir) +} + +test('setup', function (t) { + setup() + t.end() +}) + +function readdir (dir) { + try { + return fs.readdirSync(dir) + } catch (ex) { + if (ex.code === 'ENOENT') return [] + throw ex + } +} + +test('prune cycle in dev deps', function (t) { + common.npm(['prune', '--production', '--json'], {cwd: testdir}, function (err, code, stdout, stderr) { + if (err) throw err + t.is(code, 0, 'prune finished successfully') + t.like(JSON.parse(stdout), {removed: [{name: 'a'}, {name: 'b'}]}, 'removed the right modules') + var dirs = readdir(testdir + '/node_modules').sort() + t.same(dirs, []) + t.end() + }) +}) + +test('cleanup', function (t) { + cleanup() + t.end() +}) |