7
7
const spawn = require ( 'cross-spawn' ) ;
8
8
const fs = require ( 'fs' ) ;
9
9
const path = require ( 'path' ) ;
10
- const del = require ( 'del' ) ;
11
10
const test = require ( 'ava' ) ;
12
- const puppeteer = require ( 'puppeteer' ) ;
13
11
const kill = require ( 'tree-kill' ) ;
14
12
13
+ async function delay ( secs ) {
14
+ return new Promise ( ( resolve ) => {
15
+ setTimeout ( resolve , secs ) ;
16
+ } ) ;
17
+ }
18
+
15
19
const isWin32 = process . platform === 'win32' ;
16
- const dir = __dirname ;
17
20
18
- const folder = path . join ( dir , 'test-skeletons' ) ;
21
+ const folder = path . join ( __dirname , 'test-skeletons' ) ;
19
22
console . log ( '-- cleanup ' + folder ) ;
20
- del . sync ( folder ) ;
23
+ fs . rmSync ( folder , { recursive : true , force : true } ) ;
21
24
fs . mkdirSync ( folder ) ;
22
25
23
26
// Somehow taskkill on windows would not send SIGTERM signal to proc,
@@ -32,7 +35,7 @@ function killProc(proc) {
32
35
}
33
36
34
37
35
- function run ( command , dataCB , errorCB ) {
38
+ function run ( command , cwd , dataCB , errorCB ) {
36
39
const [ cmd , ...args ] = command . split ( ' ' ) ;
37
40
return new Promise ( ( resolve , reject ) => {
38
41
const env = Object . create ( process . env ) ;
@@ -41,8 +44,9 @@ function run(command, dataCB, errorCB) {
41
44
// need to reset NODE_ENV back to development because this whole
42
45
// test is running in NODE_ENV=test which will affect gulp build
43
46
env . NODE_ENV = 'development' ;
44
- const proc = spawn ( cmd , args , { env} ) ;
45
- proc . on ( 'exit' , ( code , signal ) => {
47
+ const proc = spawn ( cmd , args , { env, cwd} ) ;
48
+ proc . on ( 'exit' , async ( code , signal ) => {
49
+ await delay ( 1 ) ;
46
50
if ( code && signal !== 'SIGTERM' && ! win32Killed . has ( proc . pid ) ) {
47
51
reject ( new Error ( cmd + ' ' + args . join ( ' ' ) + ' process exit code: ' + code + ' signal: ' + signal ) ) ;
48
52
} else {
@@ -55,33 +59,26 @@ function run(command, dataCB, errorCB) {
55
59
if ( dataCB ) {
56
60
dataCB ( data , ( ) => {
57
61
console . log ( `-- kill "${ command } "` ) ;
58
- killProc ( proc ) ;
62
+ setTimeout ( ( ) => killProc ( proc ) , 500 ) ;
59
63
} ) ;
60
64
}
61
65
} ) ;
62
66
proc . stderr . on ( 'data' , data => {
63
67
process . stderr . write ( data ) ;
64
- // Ingore webpack warning
65
- if ( data . toString ( ) . includes ( 'DeprecationWarning' ) ) return ;
68
+ // Skip webpack5 deprecation warning.
69
+ if ( data . toString ( ) . toLowerCase ( ) . includes ( 'deprecation' ) ) return ;
70
+ // Skip BABEL warning (used by dumber bundler) when reading @aurelia/runtime-html
71
+ if ( data . toString ( ) . includes ( 'The code generator has deoptimised the styling' ) ) return ;
66
72
if ( errorCB ) {
67
73
errorCB ( data , ( ) => {
68
74
console . log ( `-- kill "${ command } "` ) ;
69
- killProc ( proc ) ;
75
+ setTimeout ( ( ) => killProc ( proc ) , 500 ) ;
70
76
} ) ;
71
77
}
72
78
} )
73
79
} ) ;
74
80
}
75
81
76
- async function takeScreenshot ( url , filePath ) {
77
- const browser = await puppeteer . launch ( ) ;
78
- const page = await browser . newPage ( ) ;
79
- await page . goto ( url ) ;
80
- await new Promise ( r => setTimeout ( r , 6000 ) ) ;
81
- await page . screenshot ( { path : filePath } ) ;
82
- await browser . close ( ) ;
83
- }
84
-
85
82
const targetCLI = ( process . env . TARGET_CLI || null ) ;
86
83
87
84
const targetFeatures = ( process . env . TARGET_FEATURES || '' ) . toLowerCase ( ) . split ( ',' ) . filter ( p => p ) ;
@@ -154,82 +151,80 @@ skeletons.forEach((features, i) => {
154
151
155
152
test . serial ( title , async t => {
156
153
console . log ( title ) ;
157
- process . chdir ( folder ) ;
158
154
159
- const makeCmd = `npx makes ${ dir } ${ appName } -s ${ features . join ( ',' ) } ` ;
155
+ const makeCmd = `npx makes ${ __dirname } ${ appName } -s ${ features . join ( ',' ) } ` ;
160
156
console . log ( '-- ' + makeCmd ) ;
161
- await run ( makeCmd ) ;
157
+ await run ( makeCmd , folder ) ;
162
158
t . pass ( 'made skeleton' ) ;
163
- process . chdir ( appFolder ) ;
164
159
165
160
patchPackageJson ( appFolder , targetCLI ) ;
166
161
167
162
console . log ( '-- npm i' ) ;
168
- await run ( 'npm i' ) ;
163
+ await run ( 'npm i' , appFolder ) ;
169
164
t . pass ( 'installed deps' ) ;
170
165
171
166
console . log ( '-- npm test' ) ;
172
- await run ( 'npm test' ) ;
167
+ await run ( 'npm test' , appFolder ) ;
173
168
t . pass ( 'finished unit tests' ) ;
174
169
175
170
console . log ( '-- npx au generate attribute NewThing' ) ;
176
- await run ( 'npx au generate attribute NewThing' , null ,
171
+ await run ( 'npx au generate attribute NewThing' , appFolder , null ,
177
172
( data , kill ) => {
178
173
t . fail ( 'au generate attribute failed: ' + data . toString ( ) ) ;
179
174
}
180
175
) ;
181
176
t . pass ( 'generated attribute' ) ;
182
177
183
178
console . log ( '-- npx au generate component NewThing .' ) ;
184
- await run ( 'npx au generate component NewThing .' , null ,
179
+ await run ( 'npx au generate component NewThing .' , appFolder , null ,
185
180
( data , kill ) => {
186
181
t . fail ( 'au generate component failed: ' + data . toString ( ) ) ;
187
182
}
188
183
) ;
189
184
t . pass ( 'generated component' ) ;
190
185
191
186
console . log ( '-- npx au generate element NewThing' ) ;
192
- await run ( 'npx au generate element NewThing' , null ,
187
+ await run ( 'npx au generate element NewThing' , appFolder , null ,
193
188
( data , kill ) => {
194
189
t . fail ( 'au generate element failed: ' + data . toString ( ) ) ;
195
190
}
196
191
) ;
197
192
t . pass ( 'generated element' ) ;
198
193
199
194
console . log ( '-- npx au generate value-converter NewThing' ) ;
200
- await run ( 'npx au generate value-converter NewThing' , null ,
195
+ await run ( 'npx au generate value-converter NewThing' , appFolder , null ,
201
196
( data , kill ) => {
202
197
t . fail ( 'au generate value-converter failed: ' + data . toString ( ) ) ;
203
198
}
204
199
) ;
205
200
t . pass ( 'generated value-converter' ) ;
206
201
207
202
console . log ( '-- npx au generate binding-behavior NewThing' ) ;
208
- await run ( 'npx au generate binding-behavior NewThing' , null ,
203
+ await run ( 'npx au generate binding-behavior NewThing' , appFolder , null ,
209
204
( data , kill ) => {
210
205
t . fail ( 'au generate binding-behavior failed: ' + data . toString ( ) ) ;
211
206
}
212
207
) ;
213
208
t . pass ( 'generated binding-behavior' ) ;
214
209
215
210
console . log ( '-- npx au generate task NewThing' ) ;
216
- await run ( 'npx au generate task NewThing' , null ,
211
+ await run ( 'npx au generate task NewThing' , appFolder , null ,
217
212
( data , kill ) => {
218
213
t . fail ( 'au generate task failed: ' + data . toString ( ) ) ;
219
214
}
220
215
) ;
221
216
t . pass ( 'generated task' ) ;
222
217
223
218
console . log ( '-- npx au generate generator NewThing' ) ;
224
- await run ( 'npx au generate generator NewThing' , null ,
219
+ await run ( 'npx au generate generator NewThing' , appFolder , null ,
225
220
( data , kill ) => {
226
221
t . fail ( 'au generate generator failed: ' + data . toString ( ) ) ;
227
222
}
228
223
) ;
229
224
t . pass ( 'generated generator' ) ;
230
225
231
226
console . log ( '-- npm run build' ) ;
232
- await run ( 'npm run build' , null ,
227
+ await run ( 'npm run build' , appFolder , null ,
233
228
( data , kill ) => {
234
229
t . fail ( 'build failed: ' + data . toString ( ) ) ;
235
230
}
@@ -242,36 +237,25 @@ skeletons.forEach((features, i) => {
242
237
if ( ! m ) return ;
243
238
const url = m [ 1 ] ;
244
239
t . pass ( m [ 0 ] ) ;
245
-
246
- try {
247
- if ( ! process . env . GITHUB_ACTIONS ) {
248
- console . log ( '-- take screenshot' ) ;
249
- await takeScreenshot ( url , path . join ( folder , appName + '.png' ) ) ;
250
- }
251
- kill ( ) ;
252
- } catch ( e ) {
253
- t . fail ( e . message ) ;
254
- kill ( ) ;
255
- }
240
+ kill ( ) ;
256
241
} ;
257
242
258
243
// Webpack5 now prints Loopback: http://localhost:5000 in stderr!
259
- await run ( 'npm start' , runE2e , runE2e ) ;
244
+ await run ( 'npm start' , appFolder , runE2e , runE2e ) ;
260
245
261
246
if ( features . includes ( 'playwright' ) ) {
262
247
console . log ( '-- npx playwright test --project chromium' ) ;
263
- await run ( 'npx playwright install --with-deps' ) ;
264
- await run ( 'npx playwright test --project chromium' ) ;
248
+ await run ( 'npx playwright install --with-deps' , appFolder ) ;
249
+ await run ( 'npx playwright test --project chromium' , appFolder ) ;
265
250
}
266
251
267
252
if ( process . platform === 'linux' && features . includes ( 'docker' ) ) {
268
253
console . log ( '-- npm run docker:build' ) ;
269
- await run ( `npm run docker:build` ) ;
254
+ await run ( `npm run docker:build` , appFolder ) ;
270
255
t . pass ( 'passed docker:build' ) ;
271
256
}
272
257
273
258
console . log ( '-- remove folder ' + appName ) ;
274
- process . chdir ( folder ) ;
275
- await del ( appFolder ) ;
259
+ await fs . promises . rm ( appFolder , { recursive : true } ) ;
276
260
} ) ;
277
261
} ) ;
0 commit comments