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 = {
154154 }
155155} ;
156156
157- function showDiff ( err ) {
157+ var showDiff = ( exports . showDiff = function ( err ) {
158158 return (
159159 err &&
160160 err . showDiff !== false &&
161161 sameType ( err . actual , err . expected ) &&
162162 err . expected !== undefined
163163 ) ;
164- }
164+ } ) ;
165165
166166function stringifyDiffObjs ( err ) {
167167 if ( ! utils . isString ( err . actual ) || ! utils . isString ( err . expected ) ) {
@@ -182,9 +182,19 @@ function stringifyDiffObjs(err) {
182182 * @return {string } Diff
183183 */
184184var 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+ }
188198} ) ;
189199
190200/**
Original file line number Diff line number Diff line change @@ -163,9 +163,9 @@ XUnit.prototype.test = function(test) {
163163 if ( test . state === STATE_FAILED ) {
164164 var err = test . err ;
165165 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+ : '' ;
169169 this . write (
170170 tag (
171171 'testcase' ,
Original file line number Diff line number Diff line change @@ -350,6 +350,42 @@ describe('XUnit reporter', function() {
350350 '</failure></testcase>' ;
351351 expect ( expectedWrite , 'to be' , expectedTag ) ;
352352 } ) ;
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+ } ) ;
353389 } ) ;
354390
355391 describe ( 'on test pending' , function ( ) {
You can’t perform that action at this time.
0 commit comments