2 var join = require('path').join
4 var mkdirp = require('mkdirp')
5 var rimraf = require('rimraf')
6 var test = require('tap').test
8 var common = require('../common-tap.js')
9 var pkg = join(__dirname, 'dedupe-scoped')
10 var modules = join(pkg, 'node_modules')
12 var EXEC_OPTS = { cwd: pkg }
14 var prolog = 'dedupe@0.0.0 ' + pkg
15 var body = function () {/*
17 │ └── @scope/shared@2.1.6
19 └── @scope/shared@2.1.6
20 */}.toString().split('\n').slice(1, -1)
35 'firstUnique': '0.6.0',
36 '@scope/shared': '2.1.6'
44 'secondUnique': '1.2.0',
45 '@scope/shared': '2.1.6'
50 'name': '@scope/shared',
55 'name': 'firstUnique',
60 'name': 'secondUnique',
65 test('setup', function (t) {
71 function ltrimm (l) { return l.trim() }
73 test('dedupe finds the common scoped modules and moves it up one level', function (t) {
76 'find-dupes' // I actually found a use for this command!
79 function (err, code, stdout, stderr) {
80 t.ifError(err, 'successful dry run against fake install')
81 t.notOk(code, 'npm ran without issue')
82 t.notOk(stderr, 'npm printed no errors')
84 stdout.trim().split('\n').map(ltrimm),
85 [prolog].concat(body).map(ltrimm),
94 test('cleanup', function (t) {
104 join(pkg, 'package.json'),
105 JSON.stringify(deduper, null, 2)
108 mkdirp.sync(join(modules, 'first'))
110 join(modules, 'first', 'package.json'),
111 JSON.stringify(first, null, 2)
114 mkdirp.sync(join(modules, 'first', 'node_modules', 'firstUnique'))
116 join(modules, 'first', 'node_modules', 'firstUnique', 'package.json'),
117 JSON.stringify(firstUnique, null, 2)
120 mkdirp.sync(join(modules, 'first', 'node_modules', '@scope', 'shared'))
122 join(modules, 'first', 'node_modules', '@scope', 'shared', 'package.json'),
123 JSON.stringify(shared, null, 2)
126 mkdirp.sync(join(modules, 'second'))
128 join(modules, 'second', 'package.json'),
129 JSON.stringify(second, null, 2)
132 mkdirp.sync(join(modules, 'second', 'node_modules', 'secondUnique'))
134 join(modules, 'second', 'node_modules', 'secondUnique', 'package.json'),
135 JSON.stringify(secondUnique, null, 2)
138 mkdirp.sync(join(modules, 'second', 'node_modules', '@scope', 'shared'))
140 join(modules, 'second', 'node_modules', '@scope', 'shared', 'package.json'),
141 JSON.stringify(shared, null, 2)
145 function cleanup () {