@@ -21,6 +21,7 @@ function red(text: string) {
2121type Result = {
2222 phpVersion : string ;
2323 code : number | null ;
24+ timeout ?: boolean ;
2425} ;
2526
2627const results : Result [ ] = [ ] ;
@@ -47,7 +48,7 @@ for (const phpVersion of SupportedPHPVersions.filter(
4748 }
4849 ) ;
4950
50- await new Promise < void > ( ( resolve ) => {
51+ const promiseToClose = new Promise < void > ( ( resolve ) => {
5152 child . on ( 'close' , ( code ) => {
5253 results . push ( {
5354 phpVersion,
@@ -56,25 +57,49 @@ for (const phpVersion of SupportedPHPVersions.filter(
5657 resolve ( ) ;
5758 } ) ;
5859 } ) ;
60+ const promiseToTimeout = new Promise < void > ( ( resolve , reject ) => {
61+ setTimeout ( ( ) => {
62+ console . error ( `PHP ${ phpVersion } : timed out.` ) ;
63+ reject ( new Error ( 'Test timed out' ) ) ;
64+ } , 30000 ) ;
65+ } ) ;
66+ try {
67+ await Promise . race ( [ promiseToClose , promiseToTimeout ] ) ;
68+ } catch ( e ) {
69+ results . push ( {
70+ phpVersion,
71+ code : null ,
72+ timeout : true ,
73+ } ) ;
74+ child . kill ( 'SIGKILL' ) ;
75+ }
5976}
6077
6178console . log ( 'Results:' ) ;
6279for ( const result of results ) {
63- console . log (
64- `PHP ${ result . phpVersion } : ${
65- result . code === 0 ? green ( 'PASS' ) : red ( 'FAIL' )
66- } with exit code ${ result . code } `
67- ) ;
80+ if ( result . timeout ) {
81+ console . log ( red ( `PHP ${ result . phpVersion } : ${ red ( 'timed out' ) } .` ) ) ;
82+ } else {
83+ console . log (
84+ `PHP ${ result . phpVersion } : ${
85+ result . code === 0 ? green ( 'PASS' ) : red ( 'FAIL' )
86+ } with exit code ${ result . code } `
87+ ) ;
88+ }
6889}
6990
7091const numPassed = results . filter ( ( r ) => r . code === 0 ) . length ;
71- const numFailed = results . filter ( ( r ) => r . code !== 0 ) . length ;
92+ const numFailed = results . filter ( ( r ) => r . code !== 0 && ! r . timeout ) . length ;
93+ const numTimedOut = results . filter ( ( r ) => r . timeout ) . length ;
7294if ( numPassed > 0 ) {
7395 console . log ( green ( `${ numPassed } / ${ results . length } tests passed` ) ) ;
7496}
7597if ( numFailed > 0 ) {
7698 console . log ( red ( `${ numFailed } / ${ results . length } tests failed` ) ) ;
7799}
100+ if ( numTimedOut > 0 ) {
101+ console . log ( red ( `${ numTimedOut } / ${ results . length } tests timed out` ) ) ;
102+ }
78103
79104if ( numFailed > 0 ) {
80105 process . exit ( 1 ) ;
0 commit comments