2023-05-18 15:36:38 +03:00
import * as common from '../common/index.mjs' ;
2023-04-27 09:41:58 +03:00
import * as fixtures from '../common/fixtures.mjs' ;
import * as snapshot from '../common/assertSnapshot.js' ;
2023-05-18 15:36:38 +03:00
import * as os from 'node:os' ;
2023-04-27 09:41:58 +03:00
import { describe , it } from 'node:test' ;
2023-08-03 23:52:30 +02:00
import { pathToFileURL } from 'node:url' ;
2023-04-27 09:41:58 +03:00
2023-05-18 15:36:38 +03:00
const skipForceColors =
process . config . variables . icu _gyp _path !== 'tools/icu/icu-generic.gyp' ||
process . config . variables . node _shared _openssl ||
( common . isWindows && ( Number ( os . release ( ) . split ( '.' ) [ 0 ] ) !== 10 || Number ( os . release ( ) . split ( '.' ) [ 2 ] ) < 14393 ) ) ; // See https://github.com/nodejs/node/pull/33132
2023-04-27 09:41:58 +03:00
function replaceNodeVersion ( str ) {
return str . replaceAll ( process . version , '*' ) ;
}
function replaceStackTrace ( str ) {
return snapshot . replaceStackTrace ( str , '$1at *$7\n' ) ;
}
describe ( 'errors output' , { concurrency : true } , ( ) => {
function normalize ( str ) {
2023-08-03 23:52:30 +02:00
return str . replaceAll ( snapshot . replaceWindowsPaths ( process . cwd ( ) ) , '' )
. replaceAll ( pathToFileURL ( process . cwd ( ) ) . pathname , '' )
. replaceAll ( '//' , '*' )
. replaceAll ( /\/(\w)/g , '*$1' )
. replaceAll ( '*test*' , '*' )
. replaceAll ( '*fixtures*errors*' , '*' )
. replaceAll ( 'file:**' , 'file:*/' ) ;
2023-04-27 09:41:58 +03:00
}
function normalizeNoNumbers ( str ) {
return normalize ( str ) . replaceAll ( /\d+:\d+/g , '*:*' ) . replaceAll ( /:\d+/g , ':*' ) . replaceAll ( '*fixtures*message*' , '*' ) ;
}
const common = snapshot
2023-05-05 20:10:31 +03:00
. transform ( snapshot . replaceWindowsLineEndings , snapshot . replaceWindowsPaths ) ;
const defaultTransform = snapshot . transform ( common , normalize , replaceNodeVersion ) ;
const errTransform = snapshot . transform ( common , normalizeNoNumbers , replaceNodeVersion ) ;
const promiseTransform = snapshot . transform ( common , replaceStackTrace , normalizeNoNumbers , replaceNodeVersion ) ;
2023-04-27 09:41:58 +03:00
const tests = [
{ name : 'errors/async_error_eval_cjs.js' } ,
{ name : 'errors/async_error_eval_esm.js' } ,
{ name : 'errors/async_error_microtask_main.js' } ,
{ name : 'errors/async_error_nexttick_main.js' } ,
{ name : 'errors/async_error_sync_main.js' } ,
{ name : 'errors/async_error_sync_esm.mjs' } ,
{ name : 'errors/error_aggregateTwoErrors.js' , transform : errTransform } ,
{ name : 'errors/error_exit.js' , transform : errTransform } ,
{ name : 'errors/error_with_nul.js' , transform : errTransform } ,
{ name : 'errors/events_unhandled_error_common_trace.js' , transform : errTransform } ,
{ name : 'errors/events_unhandled_error_nexttick.js' , transform : errTransform } ,
{ name : 'errors/events_unhandled_error_sameline.js' , transform : errTransform } ,
{ name : 'errors/events_unhandled_error_subclass.js' , transform : errTransform } ,
{ name : 'errors/throw_custom_error.js' , transform : errTransform } ,
{ name : 'errors/throw_in_line_with_tabs.js' , transform : errTransform } ,
{ name : 'errors/throw_non_error.js' , transform : errTransform } ,
{ name : 'errors/promise_always_throw_unhandled.js' , transform : promiseTransform } ,
2023-08-03 23:52:30 +02:00
{ skip : skipForceColors , name : 'errors/force_colors.js' , env : { FORCE _COLOR : 1 } } ,
] ;
for ( const { name , transform = defaultTransform , env , skip = false } of tests ) {
it ( name , { skip } , async ( ) => {
await snapshot . spawnAndAssert ( fixtures . path ( name ) , transform , { env } ) ;
2023-04-27 09:41:58 +03:00
} ) ;
}
} ) ;