From 432e574ad2de1974bfdc7a7670b3cbc0a01a194d Mon Sep 17 00:00:00 2001 From: Seth McLaughlin Date: Thu, 4 Dec 2014 15:46:57 -0800 Subject: [PATCH 1/4] Improve code coverage support. Now will write out coverage reports in html, lcov, cobertura, clover, and json to ./coverage --- .gitignore | 1 + examples/mocha/code_coverage/code.js | 34 +++++++++++++++++ examples/mocha/code_coverage/code.spec.js | 24 ++++++++++++ lib/coverage.js | 28 +++++++++++++- lib/testcase.js | 7 +++- package.json | 45 ++++++++++++----------- 6 files changed, 114 insertions(+), 25 deletions(-) create mode 100644 examples/mocha/code_coverage/code.js create mode 100644 examples/mocha/code_coverage/code.spec.js diff --git a/.gitignore b/.gitignore index 54f6efa..3a70c59 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ temp/ .idea bin/venus-ERROR.AT.init.png documentation +coverage/ diff --git a/examples/mocha/code_coverage/code.js b/examples/mocha/code_coverage/code.js new file mode 100644 index 0000000..0cf06e0 --- /dev/null +++ b/examples/mocha/code_coverage/code.js @@ -0,0 +1,34 @@ +/** Some docblock comment stuff: + * + * Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce + * kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus winter + * purslane kale. Celery potato scallion desert raisin horseradish spinach + * carrot soko. Lotus root water spinach fennel kombu maize bamboo shoot green + * bean swiss chard seakale pumpkin onion chickpea gram corn pea. Brussels + * sprout coriander water chestnut gourd swiss chard wakame kohlrabi beetroot + * carrot watercress. Corn amaranth salsify bunya nuts nori azuki bean + * chickweed potato bell pepper artichoke. + * + */ +var testThing = { + /** + * Adds two numbers. + */ + add: function(num1, num2) { + return num1 + num2; + }, + + /** + * Subtracts num2 from num1. + */ + subtract: function(num1, num2) { + return num1 - num2; + }, + + /** + * Multiplies two numbers. + */ + multiply: function(num1, num2) { + return num1 * num2; + } +}; diff --git a/examples/mocha/code_coverage/code.spec.js b/examples/mocha/code_coverage/code.spec.js new file mode 100644 index 0000000..efd687b --- /dev/null +++ b/examples/mocha/code_coverage/code.spec.js @@ -0,0 +1,24 @@ +/** + * @venus-library mocha + * @venus-code code.js + */ + +describe('testThing', function() { + describe('.add()', function() { + it('should add numbers', function() { + expect(testThing.add(1, 1)).to.be(2); + }); + }); + + describe('.multiply()', function() { + it('should multiply numbers', function() { + expect(testThing.multiply(2, 2)).to.be(4); + }); + }); + + describe('.subtract()', function() { + it('should do subtraction', function() { + expect(testThing.subtract(5, 3)).to.be(2); + }); + }); +}); diff --git a/lib/coverage.js b/lib/coverage.js index fdbcbe8..5d8ca47 100644 --- a/lib/coverage.js +++ b/lib/coverage.js @@ -18,8 +18,9 @@ // Parse code coverage data 'use strict'; -var fs = require('fs'), - path = require('path'); +var fs = require('fs'), + logger = require('./util/logger'), + rmrf = require('rmrf'); function CodeCoverage() {} @@ -109,6 +110,29 @@ CodeCoverage.prototype.parseBranches = function (data) { * Write code coverage summary file */ CodeCoverage.prototype.writeSummary = function (data, isCodeCoverageEnabled, outputPath) { + + // Write code coverage data + var istanbul = require('istanbul'); + var reporter = new istanbul.Reporter(); + var collector = new istanbul.Collector(); + + rmrf('./coverage'); + + data.forEach(function (d) { + collector.add(d); + }); + + reporter.add('html'); + reporter.add('lcov'); + reporter.add('text-summary'); + reporter.add('cobertura'); + reporter.add('clover'); + reporter.add('json'); + + reporter.write(collector, true, function () { + logger.info('Wrote code coverage data to ./coverage'); + }); + var fileOutput = ['source file, total lines, code coverage, lines covered, lines not covered']; diff --git a/lib/testcase.js b/lib/testcase.js index 91cb995..c9e898a 100644 --- a/lib/testcase.js +++ b/lib/testcase.js @@ -505,7 +505,12 @@ TestCase.prototype.copyFilesToHttpPath = function (files) { if (this.instrumentCodeCoverage && path.instrumentable) { // instrument the file with istanbul promise.then(function () { - instrumenter = new Instrumenter(); + instrumenter = new Instrumenter({ + preserveComments: true, + noCompact: true, + embedSource: true, + noAutoWrap: true + }); fs.readFile(path.http, function (err, data) { if (err) { diff --git a/package.json b/package.json index 8d0b258..d456429 100644 --- a/package.json +++ b/package.json @@ -18,36 +18,37 @@ }, "license": "Apache 2.0", "dependencies": { - "express": "3.6.0", - "socket.io": "0.8.7", - "socket.io-client": "0.9.6", + "async": "0.1.22", + "chokidar": "0.6.2", + "cli-prompt": "0.1.0", "colors": "0.6.2", - "underscore": "1.3.3", - "i18n": "0.3.5", "commander": "1.1.1", - "dustjs-linkedin": "0.6.0", "consolidate": "0.3.0", - "winston": "0.6.1", - "json5": "0.1.0", - "portscanner": "0.1.3", - "underscore.string": "2.2.0rc", - "fs-tools": "0.2.2", - "async": "0.1.22", + "deferred": "0.6.5", "dnode": "1.0.0", - "cli-prompt": "0.1.0", - "wrench": "1.4.3", - "useragent-parser": "0.1.1", - "istanbul": "0.1.27", - "mkdirp": "0.3.5", - "saucelabs": "0.0.9", - "sauce-connect-launcher": "0.1.3", + "dustjs-linkedin": "0.6.0", "expect.js": "~0.2.0", - "chokidar": "0.6.2", + "express": "3.6.0", "flavored-path": "0.0.8", + "fs-tools": "0.2.2", + "i18n": "0.3.5", + "istanbul": "0.3.4", + "json5": "0.1.0", + "mkdirp": "0.3.5", + "phantomjs": "1.9.7-8", + "portscanner": "0.1.3", + "rmrf": "^1.0.2", + "sauce-connect-launcher": "0.1.3", + "saucelabs": "0.0.9", "selenium-webdriver": "2.35.1", - "deferred": "0.6.5", + "socket.io": "0.8.7", + "socket.io-client": "0.9.6", + "underscore": "1.3.3", + "underscore.string": "2.2.0rc", + "useragent-parser": "0.1.1", "when": "2.5.1", - "phantomjs": "1.9.7-8" + "winston": "0.6.1", + "wrench": "1.4.3" }, "devDependencies": { "grunt": "^0.4.5", From d298354e2166173283b594da1b9903c05f9425ff Mon Sep 17 00:00:00 2001 From: Seth McLaughlin Date: Thu, 4 Dec 2014 15:54:16 -0800 Subject: [PATCH 2/4] Change rmrf version in package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d456429..0acb7f4 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "mkdirp": "0.3.5", "phantomjs": "1.9.7-8", "portscanner": "0.1.3", - "rmrf": "^1.0.2", + "rmrf": "1.0.2", "sauce-connect-launcher": "0.1.3", "saucelabs": "0.0.9", "selenium-webdriver": "2.35.1", From 7eeaef5347a36465768f863ab8fcfeb9b7d1b93b Mon Sep 17 00:00:00 2001 From: Seth McLaughlin Date: Thu, 4 Dec 2014 15:56:13 -0800 Subject: [PATCH 3/4] Apparently travis doesn't like the ^ notation in package.json files? --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 0acb7f4..59db91a 100644 --- a/package.json +++ b/package.json @@ -51,9 +51,9 @@ "wrench": "1.4.3" }, "devDependencies": { - "grunt": "^0.4.5", - "grunt-release": "^0.7.0", - "load-grunt-tasks": "^0.6.0", + "grunt": "0.4.5", + "grunt-release": "0.7.0", + "load-grunt-tasks": "0.6.0", "mocha": "1.2.0", "sinon": "1.3.4" }, From 7806945aee94e00503e58ee45a87a7614efb41d5 Mon Sep 17 00:00:00 2001 From: Seth McLaughlin Date: Thu, 4 Dec 2014 16:23:10 -0800 Subject: [PATCH 4/4] Bumping minimum node version --- .travis.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 6bdeb11..74f19cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,4 +2,4 @@ language: node_js before_install: - npm install node_js: - - 0.8 + - 0.10 diff --git a/package.json b/package.json index 59db91a..bd2ae52 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "url": "https://github.com/linkedin/venus.js/issues" }, "engines": { - "node": ">=0.8.0" + "node": ">=0.10.0" }, "bin": { "venus": "./bin/venus"