69 lines
1.6 KiB
JavaScript
69 lines
1.6 KiB
JavaScript
var path = require('path')
|
|
var fs = require('fs')
|
|
var spawn = require('child_process').spawn
|
|
var t = require('tap')
|
|
var node = process.execPath
|
|
var wrap = require.resolve('./fixtures/wrap.js')
|
|
var rimraf = require('rimraf')
|
|
var mkdirp = require('mkdirp')
|
|
var fs = require('fs')
|
|
|
|
if (process.platform === 'win32') {
|
|
t.plan(0, 'No proper shebang support on windows, so skip this')
|
|
process.exit(0)
|
|
}
|
|
|
|
var expect =
|
|
'before in shim\n' +
|
|
'shebang main foo,bar\n' +
|
|
'after in shim\n' +
|
|
'before in shim\n' +
|
|
'shebang main foo,bar\n' +
|
|
'after in shim\n'
|
|
|
|
var fixdir = path.resolve(__dirname, 'fixtures', 'shebangs')
|
|
|
|
t.test('setup', function (t) {
|
|
rimraf.sync(fixdir)
|
|
mkdirp.sync(fixdir)
|
|
t.end()
|
|
})
|
|
|
|
t.test('absolute', function (t) {
|
|
var file = path.resolve(fixdir, 'absolute.js')
|
|
runTest(file, process.execPath, t)
|
|
})
|
|
|
|
t.test('env', function (t) {
|
|
var file = path.resolve(fixdir, 'env.js')
|
|
runTest(file, '/usr/bin/env node', t)
|
|
})
|
|
|
|
function runTest (file, shebang, t) {
|
|
var content = '#!' + shebang + '\n' +
|
|
'console.log("shebang main " + process.argv.slice(2))\n'
|
|
fs.writeFileSync(file, content, 'utf8')
|
|
fs.chmodSync(file, '0755')
|
|
var child = spawn(node, [wrap, file, 'foo', 'bar'])
|
|
var out = ''
|
|
var err = ''
|
|
child.stdout.on('data', function (c) {
|
|
out += c
|
|
})
|
|
child.stderr.on('data', function (c) {
|
|
err += c
|
|
})
|
|
child.on('close', function (code, signal) {
|
|
t.equal(code, 0)
|
|
t.equal(signal, null)
|
|
t.equal(out, expect)
|
|
// console.error(err)
|
|
t.end()
|
|
})
|
|
}
|
|
|
|
t.test('cleanup', function (t) {
|
|
rimraf.sync(fixdir)
|
|
t.end()
|
|
})
|