From 61c1bf0a41157bdfbc06b060e6f6ef34db72065a Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Thu, 14 Nov 2013 13:50:23 -0500 Subject: [PATCH 01/14] fixes browserify task transforms support --- grunt/tasks/browserify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grunt/tasks/browserify.js b/grunt/tasks/browserify.js index d43c0841f8..c83ed7e65c 100644 --- a/grunt/tasks/browserify.js +++ b/grunt/tasks/browserify.js @@ -46,7 +46,7 @@ module.exports = function() { }; // TODO: make sure this works, test with this too - config.transforms.forEach(bundle.transform, this); + config.transforms.forEach(bundle.transform, bundle); // Actually bundle it up var _this = this; From 5aa901336c0ea20df9b8b6b9e802c811858e64b0 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Thu, 14 Nov 2013 15:10:05 -0500 Subject: [PATCH 02/14] ignore logs and testing stuff --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d3277019a0..39a72e9b2d 100644 --- a/.gitignore +++ b/.gitignore @@ -23,4 +23,5 @@ docs/js/examples docs/downloads examples/shared/*.js test/the-files-to-test.generated.js -sauce_connect.log* +*.log* +chrome-user-data From 4c881d8487c6cd0a946d26f7e04bb8e5a3326936 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:27:01 -0500 Subject: [PATCH 03/14] require coverify --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 7a30d06e1c..661fc7c044 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,8 @@ "grunt-contrib-connect": "~0.5.0", "es5-shim": "~2.1.0", "wd": "~0.2.2", - "sauce-tunnel": "~1.1.0" + "sauce-tunnel": "~1.1.0", + "coverify": "~0.1.1" }, "engines": { "node": ">=0.10.0" From 646421f71fd471d5d52c8180943481292e5f20a9 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:27:42 -0500 Subject: [PATCH 04/14] batch logs until the end unless ran with --debug --- test/lib/reportTestResults.browser.js | 28 ++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/test/lib/reportTestResults.browser.js b/test/lib/reportTestResults.browser.js index 92010ecd7a..a521b735d4 100644 --- a/test/lib/reportTestResults.browser.js +++ b/test/lib/reportTestResults.browser.js @@ -1,34 +1,44 @@ +var __DEBUG__ = location.search.substring(1).indexOf('debug') != -1; + if (typeof console == 'undefined') console = { log: function(){}, warn: function(){}, error: function(){} }; +var __consoleReport__ = []; + console._log = console.log; console.log = function(message){ console._log(message); - postDataToURL({type:'log', message:message}, '/reportTestResults'); + if (__DEBUG__) postDataToURL({type:'log', message:message}, '/reportTestResults'); + else __consoleReport__.push({type:'log', message:message}); } + console._error = console.error; console.error = function(message){ console._error(message); - postDataToURL({type:'error', message:message}, '/reportTestResults'); + if (__DEBUG__) postDataToURL({type:'error', message:message}, '/reportTestResults'); + else __consoleReport__.push({type:'error', message:message}); +} + +console._flush = function(){ + postDataToURL(__consoleReport__, '/console'); + __consoleReport__.length = 0; } ;(function(env){ env.addReporter(new jasmine.JSReporter()); - if (location.search.substring(1).indexOf('debug') != -1){ - env.addReporter(new TAPReporter(console.log.bind(console))); - } + env.addReporter(new TAPReporter(console.log.bind(console))); function report(){ if (typeof jasmine.getJSReport != 'function') { - console.log("typeof jasmine.getJSReport != 'function'"); return setTimeout(report, 100); } - postDataToURL(jasmine.getJSReport(), '/reportTestResults', function(error, results){ - if (error) return console.error(error); - }); + if (!__DEBUG__) { + console.log('DONE\t' + navigator.userAgent); + console._flush(); + } } var oldCallback = env.currentRunner().finishCallback; From ef5a02c16485707acdfd38f612c16513beeb4a6a Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:28:06 -0500 Subject: [PATCH 05/14] enable coverage logging from the worker --- .../__tests__/ReactWebWorker-test.js | 4 ++- src/test/worker.js | 28 +++++++++++++++---- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/environment/__tests__/ReactWebWorker-test.js b/src/environment/__tests__/ReactWebWorker-test.js index 8703dbb2a1..287163bb7d 100644 --- a/src/environment/__tests__/ReactWebWorker-test.js +++ b/src/environment/__tests__/ReactWebWorker-test.js @@ -31,6 +31,8 @@ describe('ReactWebWorker', function() { var data = JSON.parse(e.data); if (data.type == 'error') { error = data.message + "\n" + data.stack; + } else if (data.type == 'log') { + console.log(data.message); } else { expect(data.type).toBe('done'); done = true; @@ -42,7 +44,7 @@ describe('ReactWebWorker', function() { }); runs(function() { if (error) { - console.log(error); + console.error(error); throw new Error(error); } }); diff --git a/src/test/worker.js b/src/test/worker.js index 7ba7e1ffc7..10691fda0b 100644 --- a/src/test/worker.js +++ b/src/test/worker.js @@ -1,6 +1,26 @@ /* jshint worker: true */ "use strict"; +if (typeof console == 'undefined') { + this.console = { + error: function(e){ + postMessage(JSON.stringify({ + type: 'error', + message: e.message, + stack: e.stack + })); + }, + log: function(message){ + postMessage(JSON.stringify({ + type: 'log', + message: message + })); + } + } +} + +console.log('worker BEGIN'); + // The UMD wrapper tries to store on `global` if `window` isn't available var global = {}; importScripts("phantomjs-shims.js"); @@ -8,13 +28,11 @@ importScripts("phantomjs-shims.js"); try { importScripts("../../build/react.js"); } catch (e) { - postMessage(JSON.stringify({ - type: 'error', - message: e.message, - stack: e.stack - })); + console.error(e); } postMessage(JSON.stringify({ type: 'done' })); + +console.log('worker END'); From cb6b7f37e7e27969b4a92810b8d76b6c979b5102 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:28:40 -0500 Subject: [PATCH 06/14] fixes an issue where the list of files to test isn't complete --- grunt/tasks/populist.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/grunt/tasks/populist.js b/grunt/tasks/populist.js index 034e97b3a6..6efa1e5132 100644 --- a/grunt/tasks/populist.js +++ b/grunt/tasks/populist.js @@ -34,6 +34,6 @@ module.exports = function() { }).then(function(output) { grunt.file.write(config.outfile, output); theFilesToTestScript.end(); - done(); + theFilesToTestScript.once('close', done); }); }; From b5b60a6acf0cb28d287a9226bcc38578b7c2ce53 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:29:16 -0500 Subject: [PATCH 07/14] speed up server middleware slightly --- grunt/config/server.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/grunt/config/server.js b/grunt/config/server.js index 6227c8e714..824a04e1a4 100644 --- a/grunt/config/server.js +++ b/grunt/config/server.js @@ -6,6 +6,9 @@ module.exports = function(grunt) { if (!(req.method == 'POST' && req._parsedUrl.pathname.indexOf('/reportTestResults') === 0)) { return next(); } + res.write(''); + res.end('Got it, thanks!'); + var logType = 'writeln'; var message = req.body; @@ -23,8 +26,6 @@ module.exports = function(grunt) { message = JSON.stringify(message, null, 2); } grunt.log[logType]('[%s][%s]', req.headers['user-agent'], Date.now(), message); - res.write(''); - res.end('Got it, thanks!'); } return { From ad0d9e476174ab72d6e8a2dc08e79bf0d3450a38 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:29:48 -0500 Subject: [PATCH 08/14] consoleLoggerMiddleware handles coverage logs --- grunt/config/server.js | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/grunt/config/server.js b/grunt/config/server.js index 824a04e1a4..75602bbe48 100644 --- a/grunt/config/server.js +++ b/grunt/config/server.js @@ -1,6 +1,42 @@ 'use strict'; -module.exports = function(grunt) { +module.exports = function(grunt){ + var coverageWriteStream; + + grunt.task.registerTask('finalize-coverage-stream', function(){ + var done = this.async(); + coverageWriteStream.once('close', done); + coverageWriteStream.end(); + coverageWriteStream = null; + }); + + function consoleLoggerMiddleware(req, res, next) { + if (!(req.method == 'POST' + && req._parsedUrl.pathname.replace(/\//g,'') == 'console' + && Array.isArray(req.body)) + ) { + return next(); + } + res.write(''); + res.end('Got it, thanks!'); + + req.body.forEach(function(log){ + if (log.message.indexOf('not ok ') === 0) log.type = 'error'; + else if (log.message.indexOf('ok ') === 0) log.type = 'ok'; + else if (log.message.indexOf('COVER') === 0) log.type = 'coverage'; + else if (log.message.indexOf('DONE\t') === 0) log.type = 'coverage done'; + + if (log.type == 'error') grunt.log.error(log.message); + else if (log.type == 'ok') grunt.log.ok(log.message); + else if (log.type == 'log') grunt.log.writeln(log.message); + else if (log.type == 'coverage') { + if (!coverageWriteStream) coverageWriteStream = require('fs').createWriteStream(__dirname + '/../../coverage.log'); + coverageWriteStream.write(log.message + '\n'); + } + else if (log.type == 'coverage done') grunt.task.run('finalize-coverage-stream'); + else grunt.verbose.writeln(log); + }); + } function testResultLoggerMiddleware(req, res, next) { if (!(req.method == 'POST' && req._parsedUrl.pathname.indexOf('/reportTestResults') === 0)) { @@ -41,6 +77,7 @@ module.exports = function(grunt) { return [ connect.json(), + consoleLoggerMiddleware, testResultLoggerMiddleware, connect.logger({format:'[:user-agent][:timestamp] :method :url', stream:grunt.verbose}), From 8f96ec255bdb54797127487c3c2280434e2c43f5 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:30:42 -0500 Subject: [PATCH 09/14] new grunt browserify:withCodeCoverageLogging task --- grunt/config/browserify.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/grunt/config/browserify.js b/grunt/config/browserify.js index 953251d4c7..5bf86631f1 100644 --- a/grunt/config/browserify.js +++ b/grunt/config/browserify.js @@ -95,10 +95,23 @@ var addonsMin = grunt.util._.merge({}, addons, { after: [minify, bannerify] }); +var withCodeCoverageLogging = { + entries: [ + './build/modules/React.js' + ], + outfile: './build/react.js', + debug: true, + standalone: 'React', + transforms: [ + require('coverify') + ] +}; + module.exports = { basic: basic, min: min, transformer: transformer, addons: addons, - addonsMin: addonsMin + addonsMin: addonsMin, + withCodeCoverageLogging: withCodeCoverageLogging }; From eda56b7af2456c09879b343f255c21881400bbc0 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:31:29 -0500 Subject: [PATCH 10/14] new grunt test:coverage task --- Gruntfile.js | 4 +++ grunt/tasks/coverage-parse.js | 48 +++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 grunt/tasks/coverage-parse.js diff --git a/Gruntfile.js b/Gruntfile.js index b7bb12257b..34481f481a 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -70,6 +70,7 @@ module.exports = function(grunt) { grunt.registerTask('build:transformer', ['jsx:debug', 'browserify:transformer']); grunt.registerTask('build:min', ['jsx:release', 'version-check', 'browserify:min']); grunt.registerTask('build:addons-min', ['jsx:debug', 'browserify:addonsMin']); + grunt.registerTask('build:withCodeCoverageLogging', ['jsx:debug', 'version-check', 'browserify:withCodeCoverageLogging']); grunt.registerTask('build:test', [ 'jsx:test', 'version-check', @@ -78,11 +79,14 @@ module.exports = function(grunt) { grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask); + grunt.registerTask('coverage:parse', require('./grunt/tasks/coverage-parse')); + grunt.registerTask('test:webdriver:phantomjs', [ 'connect', 'webdriver-phantomjs', 'webdriver-jasmine:local' ]); + grunt.registerTask('test:coverage', ['build:test', 'build:withCodeCoverageLogging', 'test:webdriver:phantomjs', 'coverage:parse']); grunt.registerTask('test', ['build:test', 'build:basic', 'test:webdriver:phantomjs']); grunt.registerTask('npm:test', ['build', 'npm:pack']); diff --git a/grunt/tasks/coverage-parse.js b/grunt/tasks/coverage-parse.js new file mode 100644 index 0000000000..259ad0173c --- /dev/null +++ b/grunt/tasks/coverage-parse.js @@ -0,0 +1,48 @@ +var grunt = require('grunt'); + +module.exports = function(){ + var ROOT = require('path').normalize(__dirname + '/../..'); + var done = this.async(); + var uncoveredExpressionCount = 0; + var uncoveredLineCount = 0; + + require('fs').createReadStream(ROOT + '/coverage.log') + .pipe(require('coverify/parse')(function(error, results){ + if (error) grunt.fatal(error); + + Object.keys(results) + .sort(function(a, b){ + if (results[a].length > results[b].length) return -1; + if (results[a].length < results[b].length) return 1; + return 0; + }) + .forEach(function(path){ + if (results[path].length === 0) return; + var relativePath = path.replace(ROOT, ''); + uncoveredExpressionCount += results[path].length; + grunt.log.error(results[path].length + ' expressions not covered ' + relativePath); + + results[path].forEach(function(c){ + uncoveredLineCount += c.code.split('\n').length; + // console.log( + // 'https://github.com/' + process.env.TRAVIS_REPO_SLUG + '/blob/' + process.env.TRAVIS_BRANCH + relativePath + '#L' + (c.lineNum+1) + '-L' + (c.lineNum+1 + c.code.split('\n').length) + // ); + console.log( + 'txmt://open?url=' + encodeURIComponent('file://' + path) + '&line=' + (c.lineNum+1) + '&column=' + (c.column[0]+2) + ); + // console.log(c.code.split('\n').map(function(line){return '\t' + line}).join('\n')) + }); + console.log(''); + }); + + Object.keys(results).sort().forEach(function(path){ + if (results[path].length > 0) return; + var relativePath = path.replace(ROOT, ''); + grunt.log.ok('100% coverage ' + relativePath); + }); + + if (uncoveredExpressionCount > 0) grunt.log.error(uncoveredExpressionCount + ' expressions not covered'); + if (uncoveredLineCount > 0) grunt.log.error(uncoveredLineCount + ' lines not covered'); + done(); + })); +} \ No newline at end of file From 5feb745b027ecbec40a5ca1f17abcdeb643bebb2 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:44:46 -0500 Subject: [PATCH 11/14] fixes the case when coverage isn't turned on --- grunt/config/server.js | 1 + 1 file changed, 1 insertion(+) diff --git a/grunt/config/server.js b/grunt/config/server.js index 75602bbe48..c88cc81936 100644 --- a/grunt/config/server.js +++ b/grunt/config/server.js @@ -4,6 +4,7 @@ module.exports = function(grunt){ var coverageWriteStream; grunt.task.registerTask('finalize-coverage-stream', function(){ + if (!coverageWriteStream) return; var done = this.async(); coverageWriteStream.once('close', done); coverageWriteStream.end(); From 45063aed448c9ec95f05ee39e5aef65f0a89560a Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 17:11:50 -0500 Subject: [PATCH 12/14] picked all the lint --- grunt/config/server.js | 45 +++++++++++++--------- grunt/tasks/coverage-parse.js | 70 ++++++++++++++++++++--------------- 2 files changed, 68 insertions(+), 47 deletions(-) diff --git a/grunt/config/server.js b/grunt/config/server.js index c88cc81936..4e2a323cbd 100644 --- a/grunt/config/server.js +++ b/grunt/config/server.js @@ -4,7 +4,9 @@ module.exports = function(grunt){ var coverageWriteStream; grunt.task.registerTask('finalize-coverage-stream', function(){ - if (!coverageWriteStream) return; + if (!coverageWriteStream) { + return; + } var done = this.async(); coverageWriteStream.once('close', done); coverageWriteStream.end(); @@ -12,30 +14,39 @@ module.exports = function(grunt){ }); function consoleLoggerMiddleware(req, res, next) { - if (!(req.method == 'POST' - && req._parsedUrl.pathname.replace(/\//g,'') == 'console' - && Array.isArray(req.body)) - ) { + if (!(req.method == 'POST' && req._parsedUrl.pathname.replace(/\//g,'') == 'console' && Array.isArray(req.body))) { return next(); } res.write(''); res.end('Got it, thanks!'); req.body.forEach(function(log){ - if (log.message.indexOf('not ok ') === 0) log.type = 'error'; - else if (log.message.indexOf('ok ') === 0) log.type = 'ok'; - else if (log.message.indexOf('COVER') === 0) log.type = 'coverage'; - else if (log.message.indexOf('DONE\t') === 0) log.type = 'coverage done'; + if (log.message.indexOf('not ok ') === 0) { + log.type = 'error'; + } else if (log.message.indexOf('ok ') === 0) { + log.type = 'ok'; + } else if (log.message.indexOf('COVER') === 0) { + log.type = 'coverage'; + } else if (log.message.indexOf('DONE\t') === 0) { + log.type = 'coverage done'; + } - if (log.type == 'error') grunt.log.error(log.message); - else if (log.type == 'ok') grunt.log.ok(log.message); - else if (log.type == 'log') grunt.log.writeln(log.message); - else if (log.type == 'coverage') { - if (!coverageWriteStream) coverageWriteStream = require('fs').createWriteStream(__dirname + '/../../coverage.log'); + if (log.type == 'error') { + grunt.log.error(log.message); + } else if (log.type == 'ok') { + grunt.log.ok(log.message); + } else if (log.type == 'log') { + grunt.log.writeln(log.message); + } else if (log.type == 'coverage') { + if (!coverageWriteStream) { + coverageWriteStream = require('fs').createWriteStream(__dirname + '/../../coverage.log'); + } coverageWriteStream.write(log.message + '\n'); + } else if (log.type == 'coverage done') { + grunt.task.run('finalize-coverage-stream'); + } else { + grunt.verbose.writeln(log); } - else if (log.type == 'coverage done') grunt.task.run('finalize-coverage-stream'); - else grunt.verbose.writeln(log); }); } @@ -85,7 +96,7 @@ module.exports = function(grunt){ connect.static(options.base), connect.directory(options.base) ]; - }, + } } } }; diff --git a/grunt/tasks/coverage-parse.js b/grunt/tasks/coverage-parse.js index 259ad0173c..2ae730f42a 100644 --- a/grunt/tasks/coverage-parse.js +++ b/grunt/tasks/coverage-parse.js @@ -1,3 +1,4 @@ +"use strict"; var grunt = require('grunt'); module.exports = function(){ @@ -5,44 +6,53 @@ module.exports = function(){ var done = this.async(); var uncoveredExpressionCount = 0; var uncoveredLineCount = 0; - + require('fs').createReadStream(ROOT + '/coverage.log') .pipe(require('coverify/parse')(function(error, results){ - if (error) grunt.fatal(error); - - Object.keys(results) - .sort(function(a, b){ - if (results[a].length > results[b].length) return -1; - if (results[a].length < results[b].length) return 1; - return 0; - }) - .forEach(function(path){ - if (results[path].length === 0) return; - var relativePath = path.replace(ROOT, ''); - uncoveredExpressionCount += results[path].length; - grunt.log.error(results[path].length + ' expressions not covered ' + relativePath); + if (error) { + grunt.fatal(error); + } - results[path].forEach(function(c){ - uncoveredLineCount += c.code.split('\n').length; - // console.log( - // 'https://github.com/' + process.env.TRAVIS_REPO_SLUG + '/blob/' + process.env.TRAVIS_BRANCH + relativePath + '#L' + (c.lineNum+1) + '-L' + (c.lineNum+1 + c.code.split('\n').length) - // ); - console.log( - 'txmt://open?url=' + encodeURIComponent('file://' + path) + '&line=' + (c.lineNum+1) + '&column=' + (c.column[0]+2) - ); - // console.log(c.code.split('\n').map(function(line){return '\t' + line}).join('\n')) - }); - console.log(''); - }); + Object.keys(results) + .sort(function(a, b){ + if (results[a].length > results[b].length) { + return -1; + } + if (results[a].length < results[b].length) { + return 1; + } + return 0; + }) + .forEach(function(path){ + if (results[path].length === 0) { + return; + } + var relativePath = path.replace(ROOT, ''); + uncoveredExpressionCount += results[path].length; + grunt.log.error(results[path].length + ' expressions not covered ' + relativePath); + + results[path].forEach(function(c){ + uncoveredLineCount += c.code.split('\n').length; + console.log('txmt://open?url=' + encodeURIComponent('file://' + path) + '&line=' + (c.lineNum+1) + '&column=' + (c.column[0]+2)); + }); + console.log(''); + }) + ; Object.keys(results).sort().forEach(function(path){ - if (results[path].length > 0) return; + if (results[path].length > 0) { + return; + } var relativePath = path.replace(ROOT, ''); grunt.log.ok('100% coverage ' + relativePath); }); - if (uncoveredExpressionCount > 0) grunt.log.error(uncoveredExpressionCount + ' expressions not covered'); - if (uncoveredLineCount > 0) grunt.log.error(uncoveredLineCount + ' lines not covered'); + if (uncoveredExpressionCount > 0) { + grunt.log.error(uncoveredExpressionCount + ' expressions not covered'); + } + if (uncoveredLineCount > 0) { + grunt.log.error(uncoveredLineCount + ' lines not covered'); + } done(); })); -} \ No newline at end of file +}; From c6f7fe00fafb2776f7e1cd608c0cc6d8a7f0bdf4 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Mon, 18 Nov 2013 16:02:01 -0500 Subject: [PATCH 13/14] Lines too long; reformatted --- Gruntfile.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 34481f481a..3a905b4eaf 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -70,7 +70,11 @@ module.exports = function(grunt) { grunt.registerTask('build:transformer', ['jsx:debug', 'browserify:transformer']); grunt.registerTask('build:min', ['jsx:release', 'version-check', 'browserify:min']); grunt.registerTask('build:addons-min', ['jsx:debug', 'browserify:addonsMin']); - grunt.registerTask('build:withCodeCoverageLogging', ['jsx:debug', 'version-check', 'browserify:withCodeCoverageLogging']); + grunt.registerTask('build:withCodeCoverageLogging', [ + 'jsx:debug', + 'version-check', + 'browserify:withCodeCoverageLogging' + ]); grunt.registerTask('build:test', [ 'jsx:test', 'version-check', @@ -86,7 +90,12 @@ module.exports = function(grunt) { 'webdriver-phantomjs', 'webdriver-jasmine:local' ]); - grunt.registerTask('test:coverage', ['build:test', 'build:withCodeCoverageLogging', 'test:webdriver:phantomjs', 'coverage:parse']); + grunt.registerTask('test:coverage', [ + 'build:test', + 'build:withCodeCoverageLogging', + 'test:webdriver:phantomjs', + 'coverage:parse' + ]); grunt.registerTask('test', ['build:test', 'build:basic', 'test:webdriver:phantomjs']); grunt.registerTask('npm:test', ['build', 'npm:pack']); From 5ae152cdcf301738b837bfa09cabd1473b95b72f Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Mon, 18 Nov 2013 16:03:57 -0500 Subject: [PATCH 14/14] simplified the sort function --- grunt/tasks/coverage-parse.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/grunt/tasks/coverage-parse.js b/grunt/tasks/coverage-parse.js index 2ae730f42a..223bed34bc 100644 --- a/grunt/tasks/coverage-parse.js +++ b/grunt/tasks/coverage-parse.js @@ -15,14 +15,9 @@ module.exports = function(){ Object.keys(results) .sort(function(a, b){ - if (results[a].length > results[b].length) { - return -1; - } - if (results[a].length < results[b].length) { - return 1; - } - return 0; + return results[a].length - results[b].length; }) + .reverse() .forEach(function(path){ if (results[path].length === 0) { return;