Skip to content

Commit cbd2c73

Browse files
committed
chore: add new test runner
1 parent 2bf16a5 commit cbd2c73

File tree

1 file changed

+104
-0
lines changed

1 file changed

+104
-0
lines changed

tests/index.js

+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
"use strict";
2+
3+
let ChildProcess = require("child_process");
4+
let Fs = require("node:fs/promises");
5+
let Path = require("node:path");
6+
7+
async function main() {
8+
console.info("TAP version 13");
9+
10+
let dirents = await Fs.readdir(__dirname, { withFileTypes: true });
11+
12+
let failures = 0;
13+
let count = 0;
14+
for (let dirent of dirents) {
15+
if (dirent.name === "index.js") {
16+
continue;
17+
}
18+
19+
count += 1;
20+
let direntPath = Path.join(__dirname, dirent.name);
21+
let relPath = Path.relative(".", direntPath);
22+
23+
let success = await handleEach(count, relPath);
24+
if (!success) {
25+
failures += 1;
26+
}
27+
}
28+
29+
let passes = count - failures;
30+
console.info(``);
31+
console.info(`1..${count}`);
32+
console.info(`# tests ${count}`);
33+
console.info(`# pass ${passes}`);
34+
console.info(`# fail ${failures}`);
35+
console.info(`# skip 0`);
36+
37+
if (failures !== 0) {
38+
process.exit(1);
39+
}
40+
}
41+
42+
async function handleEach(count, relPath) {
43+
let success = await exec("node", [relPath])
44+
.then(function (result) {
45+
console.info(`ok ${count} - ${relPath}`);
46+
return true;
47+
})
48+
.catch(function (err) {
49+
console.info(`not ok ${count} - ${relPath}`);
50+
if (err.code) {
51+
console.info(` # Error: ${err.code}`);
52+
}
53+
if (err.stderr) {
54+
console.info(` # Stderr: ${err.stderr}`);
55+
}
56+
return false;
57+
});
58+
59+
return success;
60+
}
61+
62+
async function exec(exe, args) {
63+
return new Promise(function (resolve, reject) {
64+
let cmd = ChildProcess.spawn(exe, args);
65+
66+
let stdout = [];
67+
let stderr = [];
68+
69+
cmd.stdout.on("data", function (data) {
70+
stdout.push(data.toString("utf8"));
71+
});
72+
73+
cmd.stderr.on("data", function (data) {
74+
stderr.push(data.toString("utf8"));
75+
});
76+
77+
cmd.on("close", function (code) {
78+
let result = {
79+
code: code,
80+
stdout: stdout.join(""),
81+
stderr: stderr.join(""),
82+
};
83+
84+
if (!code) {
85+
resolve(result);
86+
return;
87+
}
88+
89+
let err = new Error(result.stderr);
90+
Object.assign(err, result);
91+
reject(err);
92+
});
93+
});
94+
}
95+
96+
main()
97+
.then(function () {
98+
process.exit(0);
99+
})
100+
.catch(function (err) {
101+
console.error("Fail:");
102+
console.error(err.stack || err);
103+
process.exit(1);
104+
});

0 commit comments

Comments
 (0)