@@ -486,14 +486,16 @@ class StatusLoader {
486486
487487 load ( ) {
488488 const dir = path . join ( __dirname , '..' , 'wpt' ) ;
489- let statusFile = path . join ( dir , 'status' , `${ this . path } .json` ) ;
490489 let result ;
491490
492- if ( fs . existsSync ( statusFile ) ) {
493- result = JSON . parse ( fs . readFileSync ( statusFile , 'utf8' ) ) ;
494- } else {
495- statusFile = path . join ( dir , 'status' , `${ this . path } .cjs` ) ;
496- result = require ( statusFile ) ;
491+ try {
492+ this . statusFile = `${ this . path } .json` ;
493+ const jsonFile = path . join ( dir , 'status' , this . statusFile ) ;
494+ result = JSON . parse ( fs . readFileSync ( jsonFile , 'utf8' ) ) ;
495+ } catch ( err ) {
496+ if ( err ?. code !== 'ENOENT' ) throw err ;
497+ this . statusFile = `${ this . path } .cjs` ;
498+ result = require ( path . join ( dir , 'status' , this . statusFile ) ) ;
497499 }
498500
499501 this . rules . addRules ( result ) ;
@@ -559,13 +561,16 @@ class WPTRunner {
559561
560562 this . status = new StatusLoader ( path ) ;
561563 this . status . load ( ) ;
564+ this . statusFile = this . status . statusFile ;
562565 this . specs = new Set ( this . status . specs ) ;
563566
564567 this . results = { } ;
565568 this . inProgress = new Set ( ) ;
566569 this . workers = new Map ( ) ;
567570 this . unexpectedFailures = [ ] ;
568571
572+ this . subtestCounts = { passed : 0 , failed : 0 , expectedFailures : 0 , skipped : 0 , unexpectedPasses : 0 } ;
573+
569574 if ( process . env . WPT_REPORT != null ) {
570575 this . report = new WPTReport ( path ) ;
571576 }
@@ -760,7 +765,6 @@ class WPTRunner {
760765 const failures = [ ] ;
761766 let expectedFailures = 0 ;
762767 let skipped = 0 ;
763- let skippedTests = 0 ;
764768 for ( const [ key , item ] of Object . entries ( this . results ) ) {
765769 if ( item . fail ?. unexpected ) {
766770 failures . push ( key ) ;
@@ -771,9 +775,6 @@ class WPTRunner {
771775 if ( item . skip ) {
772776 skipped ++ ;
773777 }
774- if ( item . skipTests ) {
775- skippedTests += item . skipTests . length ;
776- }
777778 }
778779
779780 const unexpectedPasses = [ ] ;
@@ -808,23 +809,28 @@ class WPTRunner {
808809 // so that results survive if the process is killed.
809810 this . report ?. write ( ) ;
810811
812+ const p = ( n , word , suffix = 's' ) => `${ n } ${ word } ${ n === 1 ? '' : suffix } ` ;
811813 const ran = queue . length ;
812814 const total = ran + skipped ;
813815 const passed = ran - expectedFailures - failures . length ;
816+ const { subtestCounts } = this ;
814817 console . log ( '' ) ;
815- console . log ( `Ran ${ ran } /${ total } tests, ${ skipped } skipped,` ,
816- `${ passed } passed, ${ expectedFailures } expected failures,` ,
817- `${ failures . length } unexpected failures,` ,
818- `${ unexpectedPasses . length } unexpected passes` +
819- ( skippedTests ? `, ${ skippedTests } subtests skipped` : '' ) ) ;
818+ console . log ( `Files: ${ ran } /${ total } ran, ${ passed } passed,` ,
819+ `${ skipped } skipped, ${ p ( expectedFailures , 'expected failure' ) } ,` ,
820+ `${ p ( failures . length , 'unexpected failure' ) } ,` ,
821+ `${ p ( unexpectedPasses . length , 'unexpected pass' , 'es' ) } ` ) ;
822+ console . log ( `Subtests: ${ subtestCounts . passed } passed,` ,
823+ `${ subtestCounts . skipped } skipped, ${ p ( subtestCounts . expectedFailures , 'expected failure' ) } ,` ,
824+ `${ p ( subtestCounts . failed , 'unexpected failure' ) } ,` ,
825+ `${ p ( subtestCounts . unexpectedPasses , 'unexpected pass' , 'es' ) } ` ) ;
820826 if ( failures . length > 0 ) {
821- const file = path . join ( 'test' , 'wpt' , 'status' , ` ${ this . path } .json` ) ;
827+ const file = path . join ( 'test' , 'wpt' , 'status' , this . statusFile ) ;
822828 throw new Error (
823829 `Found ${ failures . length } unexpected failures. ` +
824830 `Consider updating ${ file } for these files:\n${ failures . join ( '\n' ) } ` ) ;
825831 }
826832 if ( unexpectedPasses . length > 0 ) {
827- const file = path . join ( 'test' , 'wpt' , 'status' , ` ${ this . path } .json` ) ;
833+ const file = path . join ( 'test' , 'wpt' , 'status' , this . statusFile ) ;
828834 throw new Error (
829835 `Found ${ unexpectedPasses . length } unexpected passes. ` +
830836 `Consider updating ${ file } for these files:\n${ unexpectedPasses . join ( '\n' ) } ` ) ;
@@ -860,7 +866,7 @@ class WPTRunner {
860866 if ( status !== kPass ) {
861867 this . fail ( spec , test , status , reportResult ) ;
862868 } else {
863- this . succeed ( test , status , reportResult ) ;
869+ this . succeed ( spec , test , status , reportResult ) ;
864870 }
865871 }
866872
@@ -928,14 +934,22 @@ class WPTRunner {
928934 }
929935 }
930936
931- succeed ( test , status , reportResult ) {
932- console . log ( `[${ status . toUpperCase ( ) } ] ${ test . name } ` ) ;
937+ succeed ( spec , test , status , reportResult ) {
938+ const unexpectedPass = spec . failedTests . includes ( test . name ) ;
939+ if ( unexpectedPass ) {
940+ console . log ( `[UNEXPECTED_PASS][${ status . toUpperCase ( ) } ] ${ test . name } ` ) ;
941+ this . subtestCounts . unexpectedPasses ++ ;
942+ } else {
943+ console . log ( `[${ status . toUpperCase ( ) } ] ${ test . name } ` ) ;
944+ this . subtestCounts . passed ++ ;
945+ }
933946 reportResult ?. addSubtest ( test . name , 'PASS' ) ;
934947 }
935948
936949 skipTest ( spec , test , reportResult ) {
937950 console . log ( `[SKIP] ${ test . name } ` ) ;
938951 reportResult ?. addSubtest ( test . name , 'NOTRUN' ) ;
952+ this . subtestCounts . skipped ++ ;
939953 this . addTestResult ( spec , {
940954 name : test . name ,
941955 status : kSkip ,
@@ -958,6 +972,11 @@ class WPTRunner {
958972 console . log ( `Command: ${ command } \n` ) ;
959973
960974 reportResult ?. addSubtest ( test . name , 'FAIL' , test . message ) ;
975+ if ( expected ) {
976+ this . subtestCounts . expectedFailures ++ ;
977+ } else {
978+ this . subtestCounts . failed ++ ;
979+ }
961980
962981 this . addTestResult ( spec , {
963982 name : test . name ,
0 commit comments