diff --git a/package.json b/package.json index 5a657f7eb00c..d5bfb6dc7387 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "scripts": { "bootstrap": "python ./script/bootstrap.py", "build": "python ./script/build.py -c D", + "instrument-code-coverage": "node ./spec/coverage/instrument.js", "lint": "npm run lint-js && npm run lint-cpp && npm run lint-docs", "lint-js": "standard && cd spec && standard", "lint-cpp": "python ./script/cpplint.py", diff --git a/spec/coverage/instrument.js b/spec/coverage/instrument.js new file mode 100644 index 000000000000..1aee55a765bd --- /dev/null +++ b/spec/coverage/instrument.js @@ -0,0 +1,31 @@ +// Generate an instrumented .asar file for all the files in lib/ and save it +// to out/coverage/electron-instrumented.asar + +var asar = require('asar') +var fs = require('fs') +var glob = require('glob') +var Instrumenter = require('istanbul').Instrumenter +var mkdirp = require('mkdirp') +var path = require('path') + +var instrumenter = new Instrumenter() +var outputPath = path.join(__dirname, '..', '..', 'out', 'coverage') +var libPath = path.join(__dirname, '..', '..', 'lib') + +glob.sync('**/*.js', {cwd: libPath}).forEach(function (relativePath) { + var rawPath = path.join(libPath, relativePath) + var raw = fs.readFileSync(rawPath, 'utf8') + + var generatedPath = path.join(outputPath, 'lib', relativePath) + var generated = instrumenter.instrumentSync(raw, rawPath) + mkdirp.sync(path.dirname(generatedPath)) + fs.writeFileSync(generatedPath, generated) +}) + +var asarPath = path.join(outputPath, 'electron-instrumented.asar') +asar.createPackageWithOptions(path.join(outputPath, 'lib'), asarPath, {}, function (error) { + if (error) { + console.error(error.stack || error) + process.exit(1) + } +})