@@ -11,8 +11,8 @@ const {
1111 SafeMap,
1212 StringPrototypeRepeat,
1313} = primordials ;
14+
1415const assert = require ( 'assert' ) ;
15- const Transform = require ( 'internal/streams/transform' ) ;
1616const { inspectWithNoCustomRetry } = require ( 'internal/errors' ) ;
1717const { green, blue, red, white, gray, shouldColorize } = require ( 'internal/util/colors' ) ;
1818const { kSubtestsFailed } = require ( 'internal/test_runner/test' ) ;
@@ -27,6 +27,7 @@ const colors = {
2727 'test:pass' : green ,
2828 'test:diagnostic' : blue ,
2929} ;
30+
3031const symbols = {
3132 '__proto__' : null ,
3233 'test:fail' : '\u2716 ' ,
@@ -36,27 +37,25 @@ const symbols = {
3637 'arrow:right' : '\u25B6 ' ,
3738 'hyphen:minus' : '\uFE63 ' ,
3839} ;
39- class SpecReporter extends Transform {
40- #stack = [ ] ;
41- #reported = [ ] ;
42- #indentMemo = new SafeMap ( ) ;
43- #failedTests = [ ] ;
44- #cwd = process . cwd ( ) ;
45-
46- constructor ( ) {
47- super ( { __proto__ : null , writableObjectMode : true } ) ;
48- }
4940
50- #indent( nesting ) {
51- let value = this . #indentMemo. get ( nesting ) ;
41+ module . exports = async function * specReporter ( source ) {
42+ let stack = [ ] ;
43+ let reported = [ ] ;
44+ let indentMemo = new SafeMap ( ) ;
45+ let failedTests = [ ] ;
46+ let cwd = process . cwd ( ) ;
47+
48+ function indent ( nesting ) {
49+ let value = indentMemo . get ( nesting ) ;
5250 if ( value === undefined ) {
5351 value = StringPrototypeRepeat ( ' ' , nesting ) ;
54- this . # indentMemo. set ( nesting , value ) ;
52+ indentMemo . set ( nesting , value ) ;
5553 }
5654
5755 return value ;
5856 }
59- #formatError( error , indent ) {
57+
58+ function formatError ( error , indent ) {
6059 if ( ! error ) return '' ;
6160 const err = error . code === 'ERR_TEST_FAILURE' ? error . cause : error ;
6261 const message = ArrayPrototypeJoin (
@@ -66,7 +65,8 @@ class SpecReporter extends Transform {
6665 ) , `\n${ indent } ` ) ;
6766 return `\n${ indent } ${ message } \n` ;
6867 }
69- #formatTestReport( type , data , prefix = '' , indent = '' , hasChildren = false ) {
68+
69+ function formatTestReport ( type , data , prefix = '' , indent = '' , hasChildren = false ) {
7070 let color = colors [ type ] ?? white ;
7171 let symbol = symbols [ type ] ?? ' ' ;
7272 const { skip, todo } = data ;
@@ -89,7 +89,8 @@ class SpecReporter extends Transform {
8989 }
9090 return `${ prefix } ${ indent } ${ color } ${ symbol } ${ title } ${ white } ${ error } ` ;
9191 }
92- #handleTestReportEvent( type , data ) {
92+
93+ function handleTestReportEvent ( type , data ) {
9394 const subtest = ArrayPrototypeShift ( this . #stack) ; // This is the matching `test:start` event
9495 if ( subtest ) {
9596 assert ( subtest . type === 'test:start' ) ;
@@ -113,7 +114,8 @@ class SpecReporter extends Transform {
113114 const indent = this . #indent( data . nesting ) ;
114115 return `${ this . #formatTestReport( type , data , prefix , indent , hasChildren ) } \n` ;
115116 }
116- #handleEvent( { type, data } ) {
117+
118+ function handleEvent ( { type, data } ) {
117119 switch ( type ) {
118120 case 'test:fail' :
119121 if ( data . details ?. error ?. failureType !== kSubtestsFailed ) {
@@ -134,25 +136,21 @@ class SpecReporter extends Transform {
134136 return getCoverageReport ( this . #indent( data . nesting ) , data . summary , symbols [ 'test:coverage' ] , blue , true ) ;
135137 }
136138 }
137- _transform ( { type, data } , encoding , callback ) {
138- callback ( null , this . #handleEvent( { __proto__ : null , type, data } ) ) ;
139+
140+ for await ( const event of source ) {
141+ yield handleEvent ( event ) ;
139142 }
140- _flush ( callback ) {
141- if ( this . #failedTests. length === 0 ) {
142- callback ( null , '' ) ;
143- return ;
144- }
143+
144+ if ( failedTests . length !== 0 ) {
145145 const results = [ `\n${ colors [ 'test:fail' ] } ${ symbols [ 'test:fail' ] } failing tests:${ white } \n` ] ;
146- for ( let i = 0 ; i < this . # failedTests. length ; i ++ ) {
147- const test = this . # failedTests[ i ] ;
148- const relPath = relative ( this . # cwd, test . file ) ;
149- const formattedErr = this . # formatTestReport( 'test:fail' , test ) ;
146+ for ( let i = 0 ; i < failedTests . length ; i ++ ) {
147+ const test = failedTests [ i ] ;
148+ const relPath = relative ( cwd , test . file ) ;
149+ const formattedErr = formatTestReport ( 'test:fail' , test ) ;
150150 const location = `test at ${ relPath } :${ test . line } :${ test . column } ` ;
151151
152152 ArrayPrototypePush ( results , location , formattedErr ) ;
153153 }
154- callback ( null , ArrayPrototypeJoin ( results , '\n' ) ) ;
154+ yield ArrayPrototypeJoin ( results , '\n' ) ;
155155 }
156- }
157-
158- module . exports = SpecReporter ;
156+ } ;
0 commit comments