1 var fs = require('graceful-fs')
2 var path = require('path')
3 var existsSync = fs.existsSync || path.existsSync
5 var mkdirp = require('mkdirp')
6 var osenv = require('osenv')
7 var rimraf = require('rimraf')
8 var test = require('tap').test
10 var common = require('../common-tap')
12 var root = path.join(__dirname, 'install-scoped-already-installed')
13 var pkg = path.join(root, 'package-with-scoped-paths')
14 var modules = path.join(pkg, 'node_modules')
16 var EXEC_OPTS = { cwd: pkg }
19 name: 'package-with-scoped-paths',
22 'package-local-dependency': 'file:../package-local-dependency',
23 '@scoped/package-scoped-dependency': 'file:../package-scoped-dependency'
27 var localDependency = {
28 name: 'package-local-dependency',
30 description: 'Test for local installs'
33 var scopedDependency = {
34 name: '@scoped/package',
36 description: 'Test for local installs'
39 test('setup', function (t) {
43 path.join(pkg, 'package.json'),
44 JSON.stringify(scopedPaths, null, 2)
47 mkdirp.sync(path.join(root, 'package-local-dependency'))
49 path.join(root, 'package-local-dependency', 'package.json'),
50 JSON.stringify(localDependency, null, 2)
53 mkdirp.sync(path.join(root, 'package-scoped-dependency'))
55 path.join(root, 'package-scoped-dependency', 'package.json'),
56 JSON.stringify(scopedDependency, null, 2)
63 test('installing already installed local scoped package', function (t) {
66 '--loglevel', 'silent',
70 function (err, code, stdout) {
71 var installed = parseNpmInstallOutput(stdout)
72 t.ifError(err, 'install ran to completion without error')
73 t.notOk(code, 'npm install exited with code 0')
76 existsSync(path.join(modules, '@scoped', 'package', 'package.json')),
80 contains(installed, 'node_modules/@scoped/package'),
81 'installed @scoped/package'
84 contains(installed, 'node_modules/package-local-dependency'),
85 'installed package-local-dependency'
90 '--loglevel', 'silent',
94 function (err, code, stdout) {
95 t.ifError(err, 'install ran to completion without error')
96 t.notOk(code, 'npm install raised no error code')
98 installed = parseNpmInstallOutput(stdout)
101 existsSync(path.join(modules, '@scoped', 'package', 'package.json')),
106 contains(installed, 'node_modules/@scoped/package'),
107 'did not reinstall @scoped/package'
110 contains(installed, 'node_modules/package-local-dependency'),
111 'did not reinstall package-local-dependency'
120 test('cleanup', function (t) {
121 process.chdir(osenv.tmpdir())
126 function contains (list, element) {
127 for (var i = 0; i < list.length; ++i) {
128 if (list[i] === element) {
135 function parseNpmInstallOutput (stdout) {
136 return stdout.trim().split(/\n\n|\s+/)