--- /dev/null
+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) {
+ 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) {
+ var args = ["install", npm, "-g",
+ "--prefix=" + folder + "/first",
+ "--ignore-scripts",
+ "--cache=" + folder + "/cache",
+ "--no-spin",
+ "--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) {
+ common.npm(["explore", "npm", "-g",
+ "--prefix=" + folder + "/first",
+ "--cache=" + folder + "/cache",
+ "--tmp=" + folder + "/tmp",
+ "--no-spin",
+ "--",
+ 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) {
+ // get the root location
+ common.npm([ "root", "-g",
+ "--prefix=" + folder + "/first",
+ "--cache=" + folder + "/cache",
+ "--tmp=" + folder + "/tmp",
+ "--no-spin"
+ ], {}, 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"
+ , "--no-spin"
+ ])
+ .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) {
+ 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()
+})