@@ -500,14 +500,15 @@ class StatusLoader {
500500
501501 load ( ) {
502502 const dir = path . join ( __dirname , '..' , 'wpt' ) ;
503- let statusFile = path . join ( dir , 'status' , `${ this . path } .json` ) ;
503+ const jsonFile = path . join ( dir , 'status' , `${ this . path } .json` ) ;
504504 let result ;
505505
506- if ( fs . existsSync ( statusFile ) ) {
507- result = JSON . parse ( fs . readFileSync ( statusFile , 'utf8' ) ) ;
506+ if ( fs . existsSync ( jsonFile ) ) {
507+ this . statusFile = `${ this . path } .json` ;
508+ result = JSON . parse ( fs . readFileSync ( jsonFile , 'utf8' ) ) ;
508509 } else {
509- statusFile = path . join ( dir , 'status' , `${ this . path } .cjs` ) ;
510- result = require ( statusFile ) ;
510+ this . statusFile = `${ this . path } .cjs` ;
511+ result = require ( path . join ( dir , 'status' , this . statusFile ) ) ;
511512 }
512513
513514 this . rules . addRules ( result ) ;
@@ -573,13 +574,16 @@ class WPTRunner {
573574
574575 this . status = new StatusLoader ( path ) ;
575576 this . status . load ( ) ;
577+ this . statusFile = this . status . statusFile ;
576578 this . specs = new Set ( this . status . specs ) ;
577579
578580 this . results = { } ;
579581 this . inProgress = new Set ( ) ;
580582 this . workers = new Map ( ) ;
581583 this . unexpectedFailures = [ ] ;
582584
585+ this . subtestCounts = { passed : 0 , failed : 0 , expectedFailures : 0 , skipped : 0 , unexpectedPasses : 0 } ;
586+
583587 if ( process . env . WPT_REPORT != null ) {
584588 this . report = new WPTReport ( path ) ;
585589 }
@@ -775,7 +779,6 @@ class WPTRunner {
775779 const failures = [ ] ;
776780 let expectedFailures = 0 ;
777781 let skipped = 0 ;
778- let skippedTests = 0 ;
779782 for ( const [ key , item ] of Object . entries ( this . results ) ) {
780783 if ( item . fail ?. unexpected ) {
781784 failures . push ( key ) ;
@@ -786,9 +789,6 @@ class WPTRunner {
786789 if ( item . skip ) {
787790 skipped ++ ;
788791 }
789- if ( item . skipTests ) {
790- skippedTests += item . skipTests . length ;
791- }
792792 }
793793
794794 const unexpectedPasses = [ ] ;
@@ -823,23 +823,28 @@ class WPTRunner {
823823 // so that results survive if the process is killed.
824824 this . report ?. write ( ) ;
825825
826+ const p = ( n , word , suffix = 's' ) => `${ n } ${ word } ${ n === 1 ? '' : suffix } ` ;
826827 const ran = queue . length ;
827828 const total = ran + skipped ;
828829 const passed = ran - expectedFailures - failures . length ;
830+ const { subtestCounts } = this ;
829831 console . log ( '' ) ;
830- console . log ( `Ran ${ ran } /${ total } tests, ${ skipped } skipped,` ,
831- `${ passed } passed, ${ expectedFailures } expected failures,` ,
832- `${ failures . length } unexpected failures,` ,
833- `${ unexpectedPasses . length } unexpected passes` +
834- ( skippedTests ? `, ${ skippedTests } subtests skipped` : '' ) ) ;
832+ console . log ( `Files: ${ ran } /${ total } ran, ${ passed } passed,` ,
833+ `${ skipped } skipped, ${ p ( expectedFailures , 'expected failure' ) } ,` ,
834+ `${ p ( failures . length , 'unexpected failure' ) } ,` ,
835+ `${ p ( unexpectedPasses . length , 'unexpected pass' , 'es' ) } ` ) ;
836+ console . log ( `Subtests: ${ subtestCounts . passed } passed,` ,
837+ `${ subtestCounts . skipped } skipped, ${ p ( subtestCounts . expectedFailures , 'expected failure' ) } ,` ,
838+ `${ p ( subtestCounts . failed , 'unexpected failure' ) } ,` ,
839+ `${ p ( subtestCounts . unexpectedPasses , 'unexpected pass' , 'es' ) } ` ) ;
835840 if ( failures . length > 0 ) {
836- const file = path . join ( 'test' , 'wpt' , 'status' , ` ${ this . path } .json` ) ;
841+ const file = path . join ( 'test' , 'wpt' , 'status' , this . statusFile ) ;
837842 throw new Error (
838843 `Found ${ failures . length } unexpected failures. ` +
839844 `Consider updating ${ file } for these files:\n${ failures . join ( '\n' ) } ` ) ;
840845 }
841846 if ( unexpectedPasses . length > 0 ) {
842- const file = path . join ( 'test' , 'wpt' , 'status' , ` ${ this . path } .json` ) ;
847+ const file = path . join ( 'test' , 'wpt' , 'status' , this . statusFile ) ;
843848 throw new Error (
844849 `Found ${ unexpectedPasses . length } unexpected passes. ` +
845850 `Consider updating ${ file } for these files:\n${ unexpectedPasses . join ( '\n' ) } ` ) ;
@@ -875,7 +880,7 @@ class WPTRunner {
875880 if ( status !== kPass ) {
876881 this . fail ( spec , test , status , reportResult ) ;
877882 } else {
878- this . succeed ( test , status , reportResult ) ;
883+ this . succeed ( spec , test , status , reportResult ) ;
879884 }
880885 }
881886
@@ -943,14 +948,22 @@ class WPTRunner {
943948 }
944949 }
945950
946- succeed ( test , status , reportResult ) {
947- console . log ( `[${ status . toUpperCase ( ) } ] ${ test . name } ` ) ;
951+ succeed ( spec , test , status , reportResult ) {
952+ const unexpectedPass = spec . failedTests . includes ( test . name ) ;
953+ if ( unexpectedPass ) {
954+ console . log ( `[UNEXPECTED_PASS][${ status . toUpperCase ( ) } ] ${ test . name } ` ) ;
955+ this . subtestCounts . unexpectedPasses ++ ;
956+ } else {
957+ console . log ( `[${ status . toUpperCase ( ) } ] ${ test . name } ` ) ;
958+ this . subtestCounts . passed ++ ;
959+ }
948960 reportResult ?. addSubtest ( test . name , 'PASS' ) ;
949961 }
950962
951963 skipTest ( spec , test , reportResult ) {
952964 console . log ( `[SKIP] ${ test . name } ` ) ;
953965 reportResult ?. addSubtest ( test . name , 'NOTRUN' ) ;
966+ this . subtestCounts . skipped ++ ;
954967 this . addTestResult ( spec , {
955968 name : test . name ,
956969 status : kSkip ,
@@ -973,6 +986,11 @@ class WPTRunner {
973986 console . log ( `Command: ${ command } \n` ) ;
974987
975988 reportResult ?. addSubtest ( test . name , 'FAIL' , test . message ) ;
989+ if ( expected ) {
990+ this . subtestCounts . expectedFailures ++ ;
991+ } else {
992+ this . subtestCounts . failed ++ ;
993+ }
976994
977995 this . addTestResult ( spec , {
978996 name : test . name ,
0 commit comments