@@ -60,13 +60,14 @@ function checkOutput(str, check) {
60
60
return { passed : true } ;
61
61
}
62
62
63
- function expectSyncExit ( child , {
63
+ function expectSyncExit ( caller , spawnArgs , {
64
64
status,
65
65
signal,
66
66
stderr : stderrCheck ,
67
67
stdout : stdoutCheck ,
68
68
trim = false ,
69
69
} ) {
70
+ const child = spawnSync ( ...spawnArgs ) ;
70
71
const failures = [ ] ;
71
72
let stderrStr , stdoutStr ;
72
73
if ( status !== undefined && child . status !== status ) {
@@ -83,7 +84,18 @@ function expectSyncExit(child, {
83
84
console . error ( `${ tag } --- stdout ---` ) ;
84
85
console . error ( stdoutStr === undefined ? child . stdout . toString ( ) : stdoutStr ) ;
85
86
console . error ( `${ tag } status = ${ child . status } , signal = ${ child . signal } ` ) ;
86
- throw new Error ( `${ failures . join ( '\n' ) } ` ) ;
87
+
88
+ const error = new Error ( `${ failures . join ( '\n' ) } ` ) ;
89
+ if ( spawnArgs [ 2 ] ) {
90
+ error . options = spawnArgs [ 2 ] ;
91
+ }
92
+ let command = spawnArgs [ 0 ] ;
93
+ if ( Array . isArray ( spawnArgs [ 1 ] ) ) {
94
+ command += ' ' + spawnArgs [ 1 ] . join ( ' ' ) ;
95
+ }
96
+ error . command = command ;
97
+ Error . captureStackTrace ( error , caller ) ;
98
+ throw error ;
87
99
}
88
100
89
101
// If status and signal are not matching expectations, fail early.
@@ -114,21 +126,19 @@ function expectSyncExit(child, {
114
126
function spawnSyncAndExit ( ...args ) {
115
127
const spawnArgs = args . slice ( 0 , args . length - 1 ) ;
116
128
const expectations = args [ args . length - 1 ] ;
117
- const child = spawnSync ( ...spawnArgs ) ;
118
- return expectSyncExit ( child , expectations ) ;
129
+ return expectSyncExit ( spawnSyncAndExit , spawnArgs , expectations ) ;
119
130
}
120
131
121
132
function spawnSyncAndExitWithoutError ( ...args ) {
122
- return expectSyncExit ( spawnSync ( ...args ) , {
133
+ return expectSyncExit ( spawnSyncAndExitWithoutError , [ ...args ] , {
123
134
status : 0 ,
124
135
signal : null ,
125
136
} ) ;
126
137
}
127
138
128
139
function spawnSyncAndAssert ( ...args ) {
129
140
const expectations = args . pop ( ) ;
130
- const child = spawnSync ( ...args ) ;
131
- return expectSyncExit ( child , {
141
+ return expectSyncExit ( spawnSyncAndAssert , [ ...args ] , {
132
142
status : 0 ,
133
143
signal : null ,
134
144
...expectations ,
0 commit comments