11'use strict' ;
2- const format = require ( 'util' ) . format ;
3- const indentString = require ( 'indent-string' ) ;
2+ const supertap = require ( 'supertap' ) ;
43const stripAnsi = require ( 'strip-ansi' ) ;
5- const yaml = require ( 'js-yaml' ) ;
64
75function dumpError ( error , includeMessage ) {
86 const obj = Object . assign ( { } , error . object ) ;
@@ -32,7 +30,7 @@ function dumpError(error, includeMessage) {
3230 obj . at = error . stack . split ( '\n' ) [ 0 ] ;
3331 }
3432
35- return ` ---\n ${ indentString ( yaml . safeDump ( obj ) . trim ( ) , 4 ) } \n ...` ;
33+ return obj ;
3634}
3735
3836class TapReporter {
@@ -41,79 +39,42 @@ class TapReporter {
4139 }
4240
4341 start ( ) {
44- return 'TAP version 13' ;
42+ return supertap . start ( ) ;
4543 }
4644
4745 test ( test ) {
48- const output = [ ] ;
49-
50- let directive = '' ;
51- const passed = test . todo ? 'not ok' : 'ok' ;
52-
53- if ( test . todo ) {
54- directive = '# TODO' ;
55- } else if ( test . skip ) {
56- directive = '# SKIP' ;
57- }
58-
59- const title = stripAnsi ( test . title ) ;
60-
61- const appendLogs = ( ) => {
62- if ( test . logs ) {
63- test . logs . forEach ( log => {
64- const logLines = indentString ( log , 4 ) ;
65- const logLinesWithLeadingFigure = logLines . replace (
66- / ^ { 4 } / ,
67- ' * '
68- ) ;
69-
70- output . push ( logLinesWithLeadingFigure ) ;
71- } ) ;
72- }
73- } ;
74-
75- output . push ( `# ${ title } ` ) ;
76-
77- if ( test . error ) {
78- output . push ( format ( 'not ok %d - %s' , ++ this . i , title ) ) ;
79- appendLogs ( ) ;
80- output . push ( dumpError ( test . error , true ) ) ;
81- } else {
82- output . push ( format ( '%s %d - %s %s' , passed , ++ this . i , title , directive ) . trim ( ) ) ;
83- appendLogs ( ) ;
84- }
85-
86- return output . join ( '\n' ) ;
46+ return supertap . test ( test . title , {
47+ passed : ! test . error ,
48+ index : ++ this . i ,
49+ todo : test . todo ,
50+ skip : test . skip ,
51+ comment : test . logs ,
52+ error : test . error ? dumpError ( test . error , true ) : null
53+ } ) ;
8754 }
8855
8956 unhandledError ( err ) {
90- const output = [
91- `# ${ err . message } ` ,
92- format ( 'not ok %d - %s' , ++ this . i , err . message )
93- ] ;
57+ let error ;
58+
9459 // AvaErrors don't have stack traces
9560 if ( err . type !== 'exception' || err . name !== 'AvaError' ) {
96- output . push ( dumpError ( err , false ) ) ;
61+ error = dumpError ( err , false ) ;
9762 }
9863
99- return output . join ( '\n' ) ;
64+ return supertap . test ( err . message , {
65+ passed : false ,
66+ index : ++ this . i ,
67+ error
68+ } ) ;
10069 }
10170
10271 finish ( runStatus ) {
103- const output = [
104- '' ,
105- '1..' + ( runStatus . passCount + runStatus . failCount + runStatus . skipCount ) ,
106- '# tests ' + ( runStatus . passCount + runStatus . failCount + runStatus . skipCount ) ,
107- '# pass ' + runStatus . passCount
108- ] ;
109-
110- if ( runStatus . skipCount > 0 ) {
111- output . push ( `# skip ${ runStatus . skipCount } ` ) ;
112- }
113-
114- output . push ( '# fail ' + ( runStatus . failCount + runStatus . rejectionCount + runStatus . exceptionCount ) , '' ) ;
115-
116- return output . join ( '\n' ) ;
72+ return supertap . finish ( {
73+ passed : runStatus . passCount ,
74+ failed : runStatus . failCount ,
75+ skipped : runStatus . skipCount ,
76+ crashed : runStatus . rejectionCount + runStatus . exceptionCount
77+ } ) ;
11778 }
11879
11980 write ( str ) {
0 commit comments