var fs = require('graceful-fs') var path = require('path') var mkdirp = require('mkdirp') var rimraf = require('rimraf') var test = require('tap').test var common = require('../common-tap') // ignore-scripts/package.json has scripts that always exit with non-zero error // codes. var pkg = path.resolve(__dirname, 'ignore-scripts') var gypfile = 'bad_binding_file\n' var json = { author: 'Milton the Aussie', name: 'ignore-scripts', version: '0.0.0', scripts: { prepublish: 'exit 123', publish: 'exit 123', postpublish: 'exit 123', preinstall: 'exit 123', install: 'exit 123', postinstall: 'exit 123', preuninstall: 'exit 123', uninstall: 'exit 123', postuninstall: 'exit 123', pretest: 'exit 123', test: 'exit 123', posttest: 'exit 123', prestop: 'exit 123', stop: 'exit 123', poststop: 'exit 123', prestart: 'exit 123', start: 'exit 123', poststart: 'exit 123', prerestart: 'exit 123', restart: 'exit 123', postrestart: 'exit 123', preversion: 'exit 123', version: 'exit 123', postversion: 'exit 123', preshrinkwrap: 'exit 123', shrinkwrap: 'exit 123', postshrinkwrap: 'exit 123' } } test('setup', function (t) { setup() t.end() }) test('ignore-scripts: install using the option', function (t) { createChild(['install', '--ignore-scripts'], function (err, code) { t.ifError(err, 'install with scripts ignored finished successfully') t.equal(code, 0, 'npm install exited with code') t.end() }) }) test('ignore-scripts: install NOT using the option', function (t) { createChild(['install'], function (err, code) { t.ifError(err, 'install with scripts successful') t.notEqual(code, 0, 'npm install exited with code') t.end() }) }) var scripts = [ 'prepublish', 'publish', 'postpublish', 'preinstall', 'install', 'postinstall', 'preuninstall', 'uninstall', 'postuninstall', 'pretest', 'test', 'posttest', 'prestop', 'stop', 'poststop', 'prestart', 'start', 'poststart', 'prerestart', 'restart', 'postrestart', 'preversion', 'version', 'postversion', 'preshrinkwrap', 'shrinkwrap', 'postshrinkwrap' ] scripts.forEach(function (script) { test('ignore-scripts: run-script ' + script + ' using the option', function (t) { createChild(['--ignore-scripts', 'run-script', script], function (err, code, stdout, stderr) { t.ifError(err, 'run-script ' + script + ' with ignore-scripts successful') t.equal(code, 0, 'npm run-script exited with code') t.end() }) }) }) scripts.forEach(function (script) { test('ignore-scripts: run-script ' + script + ' NOT using the option', function (t) { createChild(['run-script', script], function (err, code) { t.ifError(err, 'run-script ' + script + ' finished successfully') t.notEqual(code, 0, 'npm run-script exited with code') t.end() }) }) }) test('cleanup', function (t) { cleanup() t.end() }) function cleanup () { rimraf.sync(pkg) } function setup () { cleanup() mkdirp.sync(pkg) fs.writeFileSync(path.join(pkg, 'binding.gyp'), gypfile) fs.writeFileSync( path.join(pkg, 'package.json'), JSON.stringify(json, null, 2) ) } function createChild (args, cb) { return common.npm( args.concat(['--loglevel', 'silent']), { cwd: pkg }, cb ) }