Skip to content

Commit ff6a7dd

Browse files
committed
chore: add test runner
1 parent fa643bb commit ff6a7dd

File tree

2 files changed

+105
-1
lines changed

2 files changed

+105
-1
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"prettier": "npx -p [email protected] -- prettier -w '**/*.{js,md}'",
1616
"tsc": "npx -p [email protected] -- tsc -p ./jsconfig.json",
1717
"---------": "------------------------------------------------",
18-
"test": "./node_modules/mocha/bin/mocha.js"
18+
"test": "node ./tests/"
1919
},
2020
"repository": {
2121
"type": "git",

tests/index.js

Lines changed: 104 additions & 0 deletions
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)