var fs = require("fs") if (process.argv[2] === "write-builtin") { var pid = process.argv[3] fs.writeFileSync("npmrc", "foo=bar\npid=" + pid + "\n") return } var rcdata = "foo=bar\npid=" + process.pid + "\n" 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() })