Skip to content

Commit 4c59856

Browse files
add coverage checking to node and bun runner (#19)
1 parent 883d377 commit 4c59856

File tree

7 files changed

+85
-11
lines changed

7 files changed

+85
-11
lines changed

.github/workflows/npm-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
with:
2424
node-version: 21
2525
registry-url: https://registry.npmjs.org/
26-
- run: npm run prepareToPublish
26+
- run: npm run prepublishOnly
2727
env:
2828
RELEASE: ${{github.event.release.name}}
2929
- run: npm publish

.github/workflows/npm-test.yml renamed to .github/workflows/test.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ jobs:
1717
- uses: oven-sh/setup-bun@v1
1818
with:
1919
bun-version: 1.1.4
20-
- run: node --test **/test/**/[!b][!u][!n]*/**/*.js
21-
- run: bun test **/test/**/bun/**/**
22-
20+
- run: npm run testWithCoverageCheck
21+
env:
22+
COVERAGE_MIN_PERCENT: ${{vars.coverage_min_percent}}
23+
- run: bun run bunTestWithCoverageCheck
24+
env:
25+
COVERAGE_MIN_PERCENT: ${{vars.coverage_min_percent}}
File renamed without changes.

package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
"oop"
1212
],
1313
"scripts": {
14-
"prepareToPublish": "node dist/prepareToPublish.js",
15-
"test": "node --test **/test/**/[!b][!u][!n]*/**/*.js",
16-
"testBun": "bun test **/test/**/bun/**/**"
14+
"prepublishOnly": "node dist/prepublish.js",
15+
"test": "node --test --experimental-test-coverage --test-reporter=spec **/test/**/[!b][!u][!n]*/**/*.js **/test/**/[!b][!u][!n]*/*.js",
16+
"testWithCoverageCheck": "node src/test/static/coverageCheck.js",
17+
"bunTest": "bun test --coverage **/test/**/bun/**/**",
18+
"bunTestWithCoverageCheck": "bun src/test/static/bun/coverageCheck.js"
1719
},
1820
"author": {
1921
"name": "volatilization",

src/js/client/response/InputResponse.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ module.exports = class InputResponse {
1414
flush() {
1515
try {
1616
return new Promise((resolve, reject) => {
17-
this.#inputStream.once('error', (e) =>
18-
reject(new Error(e.message, {cause: 'INVALID_RESPONSE'}))
19-
);
17+
this.#inputStream.once('error', (e) => reject(new Error(e.message, {cause: 'INVALID_RESPONSE'})));
2018

2119
let chunks = [];
2220
this.#inputStream.on('data', (chunk) => chunks.push(chunk));
@@ -30,7 +28,7 @@ module.exports = class InputResponse {
3028
});
3129

3230
} catch (e) {
33-
throw new Error(e.message, {cause: 'INVALID_RESPONSE'})
31+
throw new Error(e.message, {cause: 'INVALID_RESPONSE'});
3432
}
3533
}
3634

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const testRunnerResult = Bun.spawnSync(["bun", "run", "bunTest"]);
2+
console.log(testRunnerResult.stderr.toString());
3+
4+
const codeCoverageResultTableHeaderLine = testRunnerResult.stderr.toString()
5+
.split('\n')
6+
.filter(line => line.includes('Funcs'))
7+
.filter(line => line.includes('Funcs'))
8+
.filter(line => line.includes('Lines'))
9+
.filter(line => line.includes('Uncovered Line'))
10+
.findLast(line => line.length > 0);
11+
12+
if (codeCoverageResultTableHeaderLine == null) {
13+
console.error('no code coverage result');
14+
process.exit(2);
15+
}
16+
17+
const coveragePercent = testRunnerResult.stderr.toString()
18+
.split(codeCoverageResultTableHeaderLine)[1]
19+
.split('\n')
20+
.filter(line => line.includes('.js'))
21+
.filter(line => line.includes('/bun/'))
22+
.filter(line => !line.includes('/test/'))
23+
.map(line => Number(line.split('|')[2].trim()))
24+
.reduce((prevPercent, currPercent, currIndex, array) => {
25+
if (currIndex === 0) {
26+
return currPercent;
27+
}
28+
if (currIndex === (array.length - 1)) {
29+
return (prevPercent + currPercent) / array.length;
30+
}
31+
return prevPercent + currPercent;
32+
});
33+
34+
if (coveragePercent < Number(process.env.COVERAGE_MIN_PERCENT)) {
35+
console.error(`${coveragePercent} is not enough coverage percent`);
36+
process.exit(1);
37+
}
38+
39+
console.log(`${coveragePercent} is enough coverage percent`);
40+
process.exit(0);

src/test/static/coverageCheck.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
const execSync = require('child_process').execSync;
2+
3+
const testResult = execSync('npm run test').toString();
4+
console.log(testResult);
5+
6+
const coveragePercent = testResult
7+
.split('start of coverage report')[1]
8+
.split('end of coverage report')[0]
9+
.split('\n')
10+
.filter(line => line.includes('.js'))
11+
.filter(line => !line.includes('/bun/'))
12+
.filter(line => !line.includes('/test/'))
13+
.map(line => Number(line.split('|')[1].trim()))
14+
.reduce((prevPercent, currPercent, currIndex, array) => {
15+
if (currIndex === 0) {
16+
return currPercent;
17+
}
18+
if (currIndex === (array.length - 1)) {
19+
return (prevPercent + currPercent) / array.length;
20+
}
21+
return prevPercent + currPercent;
22+
});
23+
24+
if (coveragePercent < Number(process.env.COVERAGE_MIN_PERCENT)) {
25+
console.error(`${coveragePercent} is not enough coverage percent`);
26+
process.exit(1);
27+
}
28+
29+
console.log(`${coveragePercent} is enough coverage percent`);
30+
process.exit(0);
31+

0 commit comments

Comments
 (0)