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.
 
 
 
 
 
 

136 lines
3.9 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 = common.nodeBin
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',
'--tmp=' + folder + '/tmp',
'--loglevel=warn',
'--progress']
common.npm(args, {}, 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, 'got npm root')
var root = so.trim()
t.ok(fs.statSync(root).isDirectory(), 'npm root is dir')
var bin = path.resolve(root, 'npm/bin/npm-cli.js')
spawn(
node,
[
bin,
'install', npm,
'-g',
'--ignore-scripts',
'--prefix=' + folder + '/second',
'--cache=' + folder + '/cache',
'--tmp=' + folder + '/tmp'
],
{}
)
.on('error', function (er) { throw er })
.on('close', function (code) {
t.equal(code, 0, 'second npm install')
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').split(/\r?\n/)
var secondData = fs.readFileSync(secondRc, 'utf8').split(/\r?\n/)
t.isDeeply(firstData, secondData)
t.end()
})
})
})
test('clean', function (t) {
rimraf.sync(folder)
t.end()
})