From ad0d9e476174ab72d6e8a2dc08e79bf0d3450a38 Mon Sep 17 00:00:00 2001 From: Thomas Aylott Date: Fri, 15 Nov 2013 16:29:48 -0500 Subject: [PATCH] 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}),