-
Notifications
You must be signed in to change notification settings - Fork 1
/
test-examples.mjs
40 lines (35 loc) · 1.08 KB
/
test-examples.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import { readdir } from 'fs/promises';
import { execFile } from 'child_process';
const processes = {};
const testExample = (example) => new Promise((resolve, reject) => {
console.log(`installing ${example}`);
processes[example] = execFile('npm', ['i'], { cwd: `./example/${example}` }, (error, stdout, stderr) => {
if (error) {
reject(error);
}
console.log(stdout);
console.error(stderr);
}).on('close', () => {
delete processes[example];
resolve();
});
}).then(() => new Promise((resolve, reject) => {
console.log(`testing ${example}`);
processes[example] = execFile('npm', ['test'], { cwd: `./example/${example}` }, (error, stdout, stderr) => {
if (error) {
reject(error);
}
console.log(stdout);
console.error(stderr);
}).on('close', () => {
delete processes[example];
resolve();
});
}));
const examples = await readdir('./example');
await Promise.all(examples.map(testExample)).catch((error) => {
console.error(error);
Object.values(processes).forEach(process => process.kill());
process.exit(1);
});
process.exit()