diff --git a/.gitignore b/.gitignore index 88686a3..d50310f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /browser /examples/*.js /node_modules +/coverage +/.nyc_output diff --git a/.travis.yml b/.travis.yml index fc2e4af..16d2ba4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,9 @@ node_js: before_script: - npm install -g gulp +after_success: + - npm run coverage + cache: directories: - node_modules diff --git a/README.md b/README.md index abf1533..1c29045 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ [![ci](https://img.shields.io/travis/pegjs/pegjs.svg)](https://travis-ci.org/pegjs/pegjs) +[![coverage](https://img.shields.io/coveralls/github/pegjs/pegjs.svg)](https://coveralls.io/github/pegjs/pegjs) [![release](https://img.shields.io/npm/v/pegjs.svg)](https://www.npmjs.com/package/pegjs) [![dev](https://img.shields.io/npm/v/pegjs/dev.svg)](https://github.com/pegjs/pegjs) [![bower](https://img.shields.io/bower/v/pegjs.svg)](https://github.com/pegjs/bower) diff --git a/lib/compiler/passes/generate-js.js b/lib/compiler/passes/generate-js.js index adede63..07fc570 100644 --- a/lib/compiler/passes/generate-js.js +++ b/lib/compiler/passes/generate-js.js @@ -427,6 +427,7 @@ function generateJS( ast, options ) { " ip++;", " break;", "", + " // istanbul ignore next", " default:", " throw new Error(\"Invalid opcode: \" + bc[ip] + \".\");", " }", @@ -533,6 +534,7 @@ function generateJS( ast, options ) { elseSp = stack.sp; ip += elseLength; + // istanbul ignore if if ( thenSp !== elseSp ) { throw new Error( @@ -567,6 +569,7 @@ function generateJS( ast, options ) { bodySp = stack.sp; ip += bodyLength; + // istanbul ignore if if ( bodySp !== baseSp ) { throw new Error( "Body of a loop can't move the stack pointer." ); @@ -780,6 +783,7 @@ function generateJS( ast, options ) { ip++; break; + // istanbul ignore next default: throw new Error( "Invalid opcode: " + bc[ ip ] + "." ); @@ -843,6 +847,7 @@ function generateJS( ast, options ) { " this.location = location;", " this.name = \"SyntaxError\";", "", + " // istanbul ignore next", " if (typeof Error.captureStackTrace === \"function\") {", " Error.captureStackTrace(this, peg$SyntaxError);", " }", @@ -1003,6 +1008,7 @@ function generateJS( ast, options ) { " log(event);", " break;", "", + " // istanbul ignore next", " default:", " throw new Error(\"Invalid event type: \" + event.type + \".\");", " }", diff --git a/lib/parser.js b/lib/parser.js index e5678c1..5d7dd7f 100644 --- a/lib/parser.js +++ b/lib/parser.js @@ -17,6 +17,7 @@ function peg$SyntaxError(message, expected, found, location) { this.location = location; this.name = "SyntaxError"; + // istanbul ignore next if (typeof Error.captureStackTrace === "function") { Error.captureStackTrace(this, peg$SyntaxError); } diff --git a/package.json b/package.json index 67942b0..feaad9e 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,8 @@ "clean": "gulp clean", "test:impact": "node test/impact", "test:server": "node test/server/run", - "test": "gulp" + "test": "nyc gulp", + "coverage": "nyc report --reporter=text-lcov | coveralls" }, "devDependencies": { "babel-preset-es2015": "6.24.1", @@ -39,6 +40,7 @@ "babelify": "8.0.0", "browserify": "14.5.0", "chai": "4.1.2", + "coveralls": "3.0.0", "del": "3.0.0", "eslint-config-futagozaryuu": "3.7.x", "express": "4.16.2", @@ -50,6 +52,7 @@ "gulp-rename": "1.2.2", "gulp-uglify": "3.0.0", "morgan": "1.9.0", + "nyc": "11.3.0", "run-sequence": "2.2.0", "sinon": "4.1.3", "vinyl-buffer": "1.0.0", @@ -57,5 +60,16 @@ }, "engines": { "node": ">=4" + }, + "nyc": { + "exclude": [ + "test", + "gulpfile.js", + "**/.eslintrc.js" + ], + "reporter": [ + "text", + "text-summary" + ] } }