@@ -5,7 +5,8 @@ var http = require("http"),
55 qs = require ( "querystring" ) ,
66 utils = require ( "./utils" ) ,
77 config = require ( '../lib/config' ) ,
8- exec = require ( 'child_process' ) . exec ;
8+ exec = require ( 'child_process' ) . exec ,
9+ chalk = require ( 'chalk' ) ;
910
1011var mimeTypes = {
1112 "html" : "text/html" ,
@@ -111,6 +112,26 @@ exports.Server = function Server(bsClient, workers) {
111112 return JSON . parse ( qs . parse ( body ) . data . escapeSpecialChars ( ) ) ;
112113 }
113114
115+ function formatTraceback ( details ) {
116+ // looks like QUnit data
117+ if ( details . testName ) {
118+ var output = "'" + details . testName + "' failed" ;
119+ if ( details . message ) {
120+ output += ", " + details . message ;
121+ }
122+ if ( details . actual && details . expected ) {
123+ output += "\n" + chalk . blue ( "Expected: " ) + details . expected +
124+ "\n" + chalk . blue ( " Actual: " ) + details . actual ;
125+ }
126+ if ( details . source ) {
127+ output += "\n" + chalk . blue ( " Source: " ) + "" ;
128+ output += details . source . split ( "\n" ) . join ( "\n\t " ) ;
129+ }
130+ return output ;
131+ }
132+ return details ;
133+ }
134+
114135 handlers = {
115136 "_progress" : function progressHandler ( uri , body , request , response ) {
116137 var uuid = request . headers [ 'x-worker-uuid' ] ;
@@ -119,13 +140,13 @@ exports.Server = function Server(bsClient, workers) {
119140 try {
120141 query = parseBody ( body ) ;
121142 } catch ( e ) {
122- console . log ( "[%s] Exception in parsing QUnit log" , worker . string )
123- console . log ( "[%s] Log: " + qs . parse ( body ) . data , worker . string )
143+ console . log ( "[%s] Exception in parsing log" , worker . string ) ;
144+ console . log ( "[%s] Log: " + qs . parse ( body ) . data , worker . string ) ;
124145 }
125146
126147 if ( query . tracebacks ) {
127148 query . tracebacks . forEach ( function ( traceback ) {
128- console . log ( "[%s] Error:" , worker . string , traceback ) ;
149+ console . log ( chalk . red ( "[%s] Error:" ) , worker . string , formatTraceback ( traceback ) ) ;
129150 } ) ;
130151 }
131152 response . end ( ) ;
@@ -148,8 +169,8 @@ exports.Server = function Server(bsClient, workers) {
148169 console . log ( traceback ) ;
149170 } ) ;
150171 }
151-
152- console . log ( "[%s] Completed in %d milliseconds. %d of %d passed, %d failed." , request . headers [ 'x-browser-string' ] , query . runtime , query . passed , query . total , query . failed ) ;
172+ var color = query . failed ? "red" : "green" ;
173+ console . log ( chalk [ color ] ( "[%s] Completed in %d milliseconds. %d of %d passed, %d failed." ) , request . headers [ 'x-browser-string' ] , query . runtime , query . passed , query . total , query . failed ) ;
153174 status += query . failed ;
154175 }
155176
@@ -170,7 +191,8 @@ exports.Server = function Server(bsClient, workers) {
170191 delete workers [ uuid ] ;
171192
172193 if ( utils . objectSize ( workers ) === 0 ) {
173- console . log ( "All tests done, failures: %d." , status ) ;
194+ var color = status > 0 ? "red" : "green" ;
195+ console . log ( chalk [ color ] ( "All tests done, failures: %d." ) , status ) ;
174196
175197 if ( status > 0 ) {
176198 status = 1 ;
0 commit comments