diff --git a/lib/parse-args.js b/lib/parse-args.js index 21a9cd7a8..3aeaac897 100644 --- a/lib/parse-args.js +++ b/lib/parse-args.js @@ -30,7 +30,8 @@ function buildYargs (withCommands = false) { alias: ['o', 'report-dir'], group: 'Reporting options', describe: 'directory where coverage reports will be output to', - default: './coverage' + default: './coverage', + type: 'string' }) .options('all', { default: false, @@ -126,7 +127,8 @@ function buildYargs (withCommands = false) { }) .option('temp-directory', { describe: 'directory V8 coverage data is written to and read from', - default: process.env.NODE_V8_COVERAGE + default: process.env.NODE_V8_COVERAGE, + type: 'string' }) .option('clean', { default: true, @@ -207,12 +209,12 @@ function hideInstrumenteeArgs () { let argv = process.argv.slice(2) const yargv = parser(argv) - if (!yargv._.length) return argv - - // drop all the arguments after the bin being - // instrumented by c8. - argv = argv.slice(0, argv.indexOf(yargv._[0])) - argv.push(yargv._[0]) + if (yargv._.length !== 0) { + // drop all the arguments after the bin being + // instrumented by c8. + argv = argv.slice(0, argv.indexOf(yargv._[0])) + argv.push(yargv._[0]) + } return argv } diff --git a/test/integration.js.snap b/test/integration.js.snap index a9279c7e8..e5d411979 100644 --- a/test/integration.js.snap +++ b/test/integration.js.snap @@ -166,7 +166,7 @@ All files | 3.52 | 12.5 | 6.52 | 3.52 prettify.js | 0 | 0 | 0 | 0 | 1-2 sorter.js | 0 | 0 | 0 | 0 | 1-196 c8/lib | 0 | 0 | 0 | 0 | - parse-args.js | 0 | 0 | 0 | 0 | 1-224 + parse-args.js | 0 | 0 | 0 | 0 | 1-226 report.js | 0 | 0 | 0 | 0 | 1-402 source-map-from-file.js | 0 | 0 | 0 | 0 | 1-100 c8/lib/commands | 0 | 0 | 0 | 0 | @@ -531,7 +531,7 @@ All files | 3.52 | 12.5 | 6.52 | 3.52 prettify.js | 0 | 0 | 0 | 0 | 1-2 sorter.js | 0 | 0 | 0 | 0 | 1-196 c8/lib | 0 | 0 | 0 | 0 | - parse-args.js | 0 | 0 | 0 | 0 | 1-224 + parse-args.js | 0 | 0 | 0 | 0 | 1-226 report.js | 0 | 0 | 0 | 0 | 1-402 source-map-from-file.js | 0 | 0 | 0 | 0 | 1-100 c8/lib/commands | 0 | 0 | 0 | 0 | diff --git a/test/parse-args.js b/test/parse-args.js index fa2d5267a..61c8d54ad 100644 --- a/test/parse-args.js +++ b/test/parse-args.js @@ -15,6 +15,11 @@ describe('parse-args', () => { const instrumenterArgs = hideInstrumenteeArgs() instrumenterArgs.should.eql(['--foo=99', 'my-app']) }) + it('test early exit from function if no arguments are passed', () => { + process.argv = [] + const instrumenterArgs = hideInstrumenteeArgs() + instrumenterArgs.length.should.eql(0) + }) }) describe('hideInstrumenterArgs', () => { @@ -25,6 +30,13 @@ describe('parse-args', () => { instrumenteeArgs.should.eql(['my-app', '--help']) argv.tempDirectory.endsWith(join('coverage', 'tmp')).should.be.equal(true) }) + it('interprets first args after -- as Node.js execArgv', () => { + const expected = [process.execPath, '--expose-gc', 'index.js'] + process.argv = ['node', 'c8', '--', '--expose-gc', 'index.js'] + const argv = buildYargs().parse(hideInstrumenteeArgs()) + const munged = hideInstrumenterArgs(argv) + munged.should.deep.equal(expected) + }) }) describe('with NODE_V8_COVERAGE already set', () => { @@ -34,8 +46,20 @@ describe('parse-args', () => { process.argv = ['node', 'c8', '--foo=99', 'my-app', '--help'] const argv = buildYargs().parse(hideInstrumenteeArgs()) argv.tempDirectory.endsWith('/coverage/tmp_').should.be.equal(true) + delete process.env.NODE_V8_COVERAGE + process.env.NODE_V8_COVERAGE = NODE_V8_COVERAGE + }) + /** Commenting out till the print config PR is ready * / + it('should set it if undefined', () => { + const NODE_V8_COVERAGE = process.env.NODE_V8_COVERAGE + process.env.NODE_V8_COVERAGE = undefined + process.argv = ['node', 'c8', '--foo=99', 'my-app', '--help'] + const argv = buildYargs().parse(hideInstrumenteeArgs()) + argv.tempDirectory.endsWith('/coverage/tmp').should.be.equal(true) + delete process.env.NODE_V8_COVERAGE process.env.NODE_V8_COVERAGE = NODE_V8_COVERAGE }) + /** */ }) describe('--config', () => {