var fs = require('fs') var resolve = require('path').resolve var osenv = require('osenv') var mkdirp = require('mkdirp') var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap.js') var pkg = resolve(__dirname, 'graceful-restart') var outGraceless = [ 'prerestart', 'prestop', 'stop', 'poststop', 'prestart', 'start', 'poststart', 'postrestart', '' ].join('\n') var outGraceful = [ 'prerestart', 'restart', 'postrestart', '' ].join('\n') var pjGraceless = JSON.stringify({ name: 'graceless', version: '1.2.3', scripts: { 'prestop': 'echo prestop', 'stop': 'echo stop', 'poststop': 'echo poststop', 'prerestart': 'echo prerestart', 'postrestart': 'echo postrestart', 'prestart': 'echo prestart', 'start': 'echo start', 'poststart': 'echo poststart' } }, null, 2) + '\n' var pjGraceful = JSON.stringify({ name: 'graceful', version: '1.2.3', scripts: { 'prestop': 'echo prestop', 'stop': 'echo stop', 'poststop': 'echo poststop', 'prerestart': 'echo prerestart', 'restart': 'echo restart', 'postrestart': 'echo postrestart', 'prestart': 'echo prestart', 'start': 'echo start', 'poststart': 'echo poststart' } }, null, 2) + '\n' test('setup', function (t) { bootstrap() t.end() }) test('graceless restart', function (t) { fs.writeFileSync(resolve(pkg, 'package.json'), pjGraceless) createChild(['run-script', 'restart'], function (err, code, out) { t.ifError(err, 'restart finished successfully') t.equal(code, 0, 'npm run-script exited with code') t.equal(out, outGraceless, 'expected all scripts to run') t.end() }) }) test('graceful restart', function (t) { fs.writeFileSync(resolve(pkg, 'package.json'), pjGraceful) createChild(['run-script', 'restart'], function (err, code, out) { t.ifError(err, 'restart finished successfully') t.equal(code, 0, 'npm run-script exited with code') t.equal(out, outGraceful, 'expected only *restart scripts to run') t.end() }) }) test('clean', function (t) { cleanup() t.end() }) function bootstrap () { mkdirp.sync(pkg) } function cleanup () { process.chdir(osenv.tmpdir()) rimraf.sync(pkg) } function createChild (args, cb) { var env = { HOME: process.env.HOME, Path: process.env.PATH, PATH: process.env.PATH, 'npm_config_loglevel': 'silent' } if (process.platform === 'win32') env.npm_config_cache = '%APPDATA%\\npm-cache' return common.npm(args, { cwd: pkg, stdio: ['ignore', 'pipe', 'ignore'], env: env }, cb) }