|
|
|
var test = require("tap").test
|
|
|
|
, path = require("path")
|
|
|
|
, rimraf = require("rimraf")
|
|
|
|
, mkdirp = require("mkdirp")
|
|
|
|
, spawn = require("child_process").spawn
|
|
|
|
, npm = require.resolve("../../bin/npm-cli.js")
|
|
|
|
, node = process.execPath
|
|
|
|
, pkg = path.resolve(__dirname, "sorted-package-json")
|
|
|
|
, tmp = path.join(pkg, "tmp")
|
|
|
|
, cache = path.join(pkg, "cache")
|
|
|
|
, fs = require("fs")
|
|
|
|
, common = require("../common-tap.js")
|
|
|
|
, mr = require("npm-registry-mock")
|
|
|
|
, osenv = require("osenv")
|
|
|
|
|
|
|
|
|
|
|
|
test("sorting dependencies", function (t) {
|
|
|
|
var packageJson = path.resolve(pkg, "package.json")
|
|
|
|
|
|
|
|
cleanup()
|
|
|
|
mkdirp.sync(cache)
|
|
|
|
mkdirp.sync(tmp)
|
|
|
|
setup()
|
|
|
|
|
|
|
|
var before = JSON.parse(fs.readFileSync(packageJson).toString())
|
|
|
|
|
|
|
|
mr({port : common.port}, function (er, s) {
|
|
|
|
// underscore is already in the package.json,
|
|
|
|
// but --save will trigger a rewrite with sort
|
|
|
|
var child = spawn(node, [npm, "install", "--save", "underscore@1.3.3"], {
|
|
|
|
cwd: pkg,
|
|
|
|
env: {
|
|
|
|
"npm_config_registry": common.registry,
|
|
|
|
"npm_config_cache": cache,
|
|
|
|
"npm_config_tmp": tmp,
|
|
|
|
"npm_config_prefix": pkg,
|
|
|
|
"npm_config_global": "false",
|
|
|
|
HOME: process.env.HOME,
|
|
|
|
Path: process.env.PATH,
|
|
|
|
PATH: process.env.PATH
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
child.on("close", function (code) {
|
|
|
|
t.equal(code, 0, "npm install exited with code")
|
|
|
|
var result = fs.readFileSync(packageJson).toString()
|
|
|
|
, resultAsJson = JSON.parse(result)
|
|
|
|
|
|
|
|
s.close()
|
|
|
|
|
|
|
|
t.same(Object.keys(resultAsJson.dependencies),
|
|
|
|
Object.keys(before.dependencies).sort())
|
|
|
|
|
|
|
|
t.notSame(Object.keys(resultAsJson.dependencies),
|
|
|
|
Object.keys(before.dependencies))
|
|
|
|
|
|
|
|
t.ok(resultAsJson.dependencies.underscore)
|
|
|
|
t.ok(resultAsJson.dependencies.request)
|
|
|
|
t.end()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
test("cleanup", function (t) {
|
|
|
|
cleanup()
|
|
|
|
t.pass("cleaned up")
|
|
|
|
t.end()
|
|
|
|
})
|
|
|
|
|
|
|
|
function setup() {
|
|
|
|
mkdirp.sync(pkg)
|
|
|
|
|
|
|
|
fs.writeFileSync(path.resolve(pkg, "package.json"), JSON.stringify({
|
|
|
|
"name": "sorted-package-json",
|
|
|
|
"version": "0.0.0",
|
|
|
|
"description": "",
|
|
|
|
"main": "index.js",
|
|
|
|
"scripts": {
|
|
|
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
|
|
},
|
|
|
|
"author": "Rocko Artischocko",
|
|
|
|
"license": "ISC",
|
|
|
|
"dependencies": {
|
|
|
|
"underscore": "^1.3.3",
|
|
|
|
"request": "^0.9.0"
|
|
|
|
}
|
|
|
|
}, null, 2), "utf8")
|
|
|
|
}
|
|
|
|
|
|
|
|
function cleanup() {
|
|
|
|
process.chdir(osenv.tmpdir())
|
|
|
|
rimraf.sync(cache)
|
|
|
|
rimraf.sync(pkg)
|
|
|
|
}
|