@@ -423,3 +423,77 @@ describe('when working with Worker threads', () => {
423423 strictEqual ( signal , null ) ;
424424 } ) ;
425425} ) ;
426+
427+ describe ( 'maybe top-level await syntax errors that are not recognized as top-level await errors' , ( ) => {
428+ const expressions = [
429+ // string
430+ { expression : '""' } ,
431+ // number
432+ { expression : '0' } ,
433+ // boolean
434+ { expression : 'true' } ,
435+ // null
436+ { expression : 'null' } ,
437+ // undefined
438+ { expression : 'undefined' } ,
439+ // object
440+ { expression : '{}' } ,
441+ // array
442+ { expression : '[]' } ,
443+ // new
444+ { expression : 'new Date()' } ,
445+ // identifier
446+ { initialize : 'const a = 2;' , expression : 'a' } ,
447+ ] ;
448+ it ( 'should not crash the process' , async ( ) => {
449+ for ( const { expression, initialize } of expressions ) {
450+ const wrapperExpressions = [
451+ `function callAwait() {}; callAwait(await ${ expression } );` ,
452+ `if (await ${ expression } ) {}` ,
453+ `{ key: await ${ expression } }` ,
454+ `[await ${ expression } ]` ,
455+ `(await ${ expression } )` ,
456+ ] ;
457+ for ( const wrapperExpression of wrapperExpressions ) {
458+ const { code, signal, stdout, stderr } = await spawnPromisified ( process . execPath , [
459+ '--eval' ,
460+ `
461+ ${ initialize || '' }
462+ ${ wrapperExpression }
463+ ` ,
464+ ] ) ;
465+
466+ strictEqual ( stderr , '' ) ;
467+ strictEqual ( stdout , '' ) ;
468+ strictEqual ( code , 0 ) ;
469+ strictEqual ( signal , null ) ;
470+ }
471+ }
472+ } ) ;
473+
474+ it ( 'should crash when the expression is not valid' , async ( ) => {
475+ let { code, signal, stdout, stderr } = await spawnPromisified ( process . execPath , [
476+ '--eval' ,
477+ `
478+ function callAwait() {}
479+ callAwait(await "" "");
480+ ` ,
481+ ] ) ;
482+ match ( stderr , / S y n t a x E r r o r : m i s s i n g \) a f t e r a r g u m e n t l i s t / ) ;
483+ strictEqual ( stdout , '' ) ;
484+ strictEqual ( code , 1 ) ;
485+ strictEqual ( signal , null ) ;
486+
487+ ( { code, signal, stdout, stderr } = await spawnPromisified ( process . execPath , [
488+ '--eval' ,
489+ `
490+ function callAwait() {}
491+ if (a "") {}
492+ ` ,
493+ ] ) ) ;
494+ match ( stderr , / S y n t a x E r r o r : U n e x p e c t e d s t r i n g / ) ;
495+ strictEqual ( stdout , '' ) ;
496+ strictEqual ( code , 1 ) ;
497+ strictEqual ( signal , null ) ;
498+ } ) ;
499+ } ) ;
0 commit comments