File tree Expand file tree Collapse file tree 3 files changed +54
-8
lines changed Expand file tree Collapse file tree 3 files changed +54
-8
lines changed Original file line number Diff line number Diff line change @@ -154,14 +154,14 @@ exports.cursor = {
154
154
}
155
155
} ;
156
156
157
- function showDiff ( err ) {
157
+ var showDiff = ( exports . showDiff = function ( err ) {
158
158
return (
159
159
err &&
160
160
err . showDiff !== false &&
161
161
sameType ( err . actual , err . expected ) &&
162
162
err . expected !== undefined
163
163
) ;
164
- }
164
+ } ) ;
165
165
166
166
function stringifyDiffObjs ( err ) {
167
167
if ( ! utils . isString ( err . actual ) || ! utils . isString ( err . expected ) ) {
@@ -182,9 +182,19 @@ function stringifyDiffObjs(err) {
182
182
* @return {string } Diff
183
183
*/
184
184
var generateDiff = ( exports . generateDiff = function ( actual , expected ) {
185
- return exports . inlineDiffs
186
- ? inlineDiff ( actual , expected )
187
- : unifiedDiff ( actual , expected ) ;
185
+ try {
186
+ return exports . inlineDiffs
187
+ ? inlineDiff ( actual , expected )
188
+ : unifiedDiff ( actual , expected ) ;
189
+ } catch ( err ) {
190
+ var msg =
191
+ '\n ' +
192
+ color ( 'diff added' , '+ expected' ) +
193
+ ' ' +
194
+ color ( 'diff removed' , '- actual: failed to generate Mocha diff' ) +
195
+ '\n' ;
196
+ return msg ;
197
+ }
188
198
} ) ;
189
199
190
200
/**
Original file line number Diff line number Diff line change @@ -163,9 +163,9 @@ XUnit.prototype.test = function(test) {
163
163
if ( test . state === STATE_FAILED ) {
164
164
var err = test . err ;
165
165
var diff =
166
- Base . hideDiff || ! err . actual || ! err . expected
167
- ? ''
168
- : '\n' + Base . generateDiff ( err . actual , err . expected ) ;
166
+ ! Base . hideDiff && Base . showDiff ( err )
167
+ ? '\n' + Base . generateDiff ( err . actual , err . expected )
168
+ : '' ;
169
169
this . write (
170
170
tag (
171
171
'testcase' ,
Original file line number Diff line number Diff line change @@ -350,6 +350,42 @@ describe('XUnit reporter', function() {
350
350
'</failure></testcase>' ;
351
351
expect ( expectedWrite , 'to be' , expectedTag ) ;
352
352
} ) ;
353
+
354
+ it ( 'should handle non-string diff values' , function ( ) {
355
+ var runner = new EventEmitter ( ) ;
356
+ createStatsCollector ( runner ) ;
357
+ var xunit = new XUnit ( runner ) ;
358
+
359
+ var expectedTest = {
360
+ state : STATE_FAILED ,
361
+ title : expectedTitle ,
362
+ parent : {
363
+ fullTitle : function ( ) {
364
+ return expectedClassName ;
365
+ }
366
+ } ,
367
+ duration : 1000 ,
368
+ err : {
369
+ actual : 1 ,
370
+ expected : 2 ,
371
+ message : expectedMessage ,
372
+ stack : expectedStack
373
+ }
374
+ } ;
375
+
376
+ sandbox . stub ( xunit , 'write' ) . callsFake ( function ( str ) {
377
+ expectedWrite += str ;
378
+ } ) ;
379
+
380
+ runner . emit ( EVENT_TEST_FAIL , expectedTest , expectedTest . err ) ;
381
+ runner . emit ( EVENT_RUN_END ) ;
382
+ sandbox . restore ( ) ;
383
+
384
+ var expectedDiff =
385
+ '\n + expected - actual\n\n -1\n +2\n ' ;
386
+
387
+ expect ( expectedWrite , 'to contain' , expectedDiff ) ;
388
+ } ) ;
353
389
} ) ;
354
390
355
391
describe ( 'on test pending' , function ( ) {
You can’t perform that action at this time.
0 commit comments