mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
3.8 KiB
134 lines
3.8 KiB
var fs = require('fs')
|
|
|
|
if (process.argv[2] === 'write-builtin') {
|
|
var pid = process.argv[3]
|
|
fs.writeFileSync('npmrc', 'foo=bar\npid=' + pid + '\n')
|
|
process.exit(0)
|
|
}
|
|
|
|
var common = require('../common-tap.js')
|
|
var path = require('path')
|
|
var rimraf = require('rimraf')
|
|
var mkdirp = require('mkdirp')
|
|
var folder = path.resolve(__dirname, 'builtin-config')
|
|
var test = require('tap').test
|
|
var npm = path.resolve(__dirname, '../..')
|
|
var spawn = require('child_process').spawn
|
|
var node = process.execPath
|
|
|
|
test('setup', function (t) {
|
|
t.plan(1)
|
|
rimraf.sync(folder)
|
|
mkdirp.sync(folder + '/first')
|
|
mkdirp.sync(folder + '/second')
|
|
mkdirp.sync(folder + '/cache')
|
|
mkdirp.sync(folder + '/tmp')
|
|
|
|
t.pass('finished setup')
|
|
t.end()
|
|
})
|
|
|
|
test('install npm into first folder', function (t) {
|
|
t.plan(1)
|
|
var args = ['install', npm, '-g',
|
|
'--prefix=' + folder + '/first',
|
|
'--ignore-scripts',
|
|
'--cache=' + folder + '/cache',
|
|
'--loglevel=silent',
|
|
'--tmp=' + folder + '/tmp']
|
|
common.npm(args, {stdio: 'inherit'}, function (er, code) {
|
|
if (er) throw er
|
|
t.equal(code, 0)
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('write npmrc file', function (t) {
|
|
t.plan(1)
|
|
common.npm(['explore', 'npm', '-g',
|
|
'--prefix=' + folder + '/first',
|
|
'--cache=' + folder + '/cache',
|
|
'--tmp=' + folder + '/tmp',
|
|
'--',
|
|
node, __filename, 'write-builtin', process.pid
|
|
],
|
|
{'stdio': 'inherit'},
|
|
function (er, code) {
|
|
if (er) throw er
|
|
t.equal(code, 0)
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('use first npm to install second npm', function (t) {
|
|
t.plan(3)
|
|
// get the root location
|
|
common.npm(
|
|
[
|
|
'root', '-g',
|
|
'--prefix=' + folder + '/first',
|
|
'--cache=' + folder + '/cache',
|
|
'--tmp=' + folder + '/tmp'
|
|
],
|
|
{},
|
|
function (er, code, so) {
|
|
if (er) throw er
|
|
t.equal(code, 0)
|
|
var root = so.trim()
|
|
t.ok(fs.statSync(root).isDirectory())
|
|
|
|
var bin = path.resolve(root, 'npm/bin/npm-cli.js')
|
|
spawn(
|
|
node,
|
|
[
|
|
bin,
|
|
'install', npm,
|
|
'-g',
|
|
'--prefix=' + folder + '/second',
|
|
'--cache=' + folder + '/cache',
|
|
'--tmp=' + folder + '/tmp'
|
|
]
|
|
)
|
|
.on('error', function (er) { throw er })
|
|
.on('close', function (code) {
|
|
t.equal(code, 0, 'code is zero')
|
|
t.end()
|
|
})
|
|
}
|
|
)
|
|
})
|
|
|
|
test('verify that the builtin config matches', function (t) {
|
|
t.plan(3)
|
|
common.npm([ 'root', '-g',
|
|
'--prefix=' + folder + '/first',
|
|
'--cache=' + folder + '/cache',
|
|
'--tmp=' + folder + '/tmp'
|
|
], {},
|
|
function (er, code, so) {
|
|
if (er) throw er
|
|
t.equal(code, 0)
|
|
var firstRoot = so.trim()
|
|
common.npm([ 'root', '-g',
|
|
'--prefix=' + folder + '/second',
|
|
'--cache=' + folder + '/cache',
|
|
'--tmp=' + folder + '/tmp'
|
|
], {},
|
|
function (er, code, so) {
|
|
if (er) throw er
|
|
t.equal(code, 0)
|
|
var secondRoot = so.trim()
|
|
var firstRc = path.resolve(firstRoot, 'npm', 'npmrc')
|
|
var secondRc = path.resolve(secondRoot, 'npm', 'npmrc')
|
|
var firstData = fs.readFileSync(firstRc, 'utf8')
|
|
var secondData = fs.readFileSync(secondRc, 'utf8')
|
|
t.equal(firstData, secondData)
|
|
t.end()
|
|
})
|
|
})
|
|
})
|
|
|
|
test('clean', function (t) {
|
|
rimraf.sync(folder)
|
|
t.end()
|
|
})
|
|
|