warpo 2.4.0 → 2.5.0-alpha-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/debug_server/dapServer.d.ts +1 -0
- package/dist/debug_server/dapServer.js +27 -0
- package/dist/debug_server/dapServer.js.map +1 -0
- package/dist/debug_server/debugSession.d.ts +19 -0
- package/dist/debug_server/debugSession.js +71 -0
- package/dist/debug_server/debugSession.js.map +1 -0
- package/dist/debug_server/tests/debugSession.test.d.ts +1 -0
- package/dist/debug_server/tests/debugSession.test.js +61 -0
- package/dist/debug_server/tests/debugSession.test.js.map +1 -0
- package/dist/debug_server/tests/launcher.d.ts +10 -0
- package/dist/debug_server/tests/launcher.js +21 -0
- package/dist/debug_server/tests/launcher.js.map +1 -0
- package/dist/scripts/lib.d.ts +7 -0
- package/dist/{lib.js → scripts/lib.js} +20 -6
- package/dist/scripts/lib.js.map +1 -0
- package/dist/test_runner/cli.d.ts +2 -0
- package/dist/test_runner/cli.js +85 -0
- package/dist/test_runner/cli.js.map +1 -0
- package/dist/test_runner/core/analyze.d.ts +13 -0
- package/dist/test_runner/core/analyze.js +58 -0
- package/dist/test_runner/core/analyze.js.map +1 -0
- package/dist/test_runner/core/compile.d.ts +4 -0
- package/dist/test_runner/core/compile.js +23 -0
- package/dist/test_runner/core/compile.js.map +1 -0
- package/dist/test_runner/core/compiler.d.ts +11 -0
- package/dist/test_runner/core/compiler.js +47 -0
- package/dist/test_runner/core/compiler.js.map +1 -0
- package/dist/test_runner/core/covRecorder.d.ts +5 -0
- package/dist/test_runner/core/covRecorder.js +26 -0
- package/dist/test_runner/core/covRecorder.js.map +1 -0
- package/dist/test_runner/core/execute.d.ts +4 -0
- package/dist/test_runner/core/execute.js +76 -0
- package/dist/test_runner/core/execute.js.map +1 -0
- package/dist/test_runner/core/executionRecorder.d.ts +52 -0
- package/dist/test_runner/core/executionRecorder.js +164 -0
- package/dist/test_runner/core/executionRecorder.js.map +1 -0
- package/dist/test_runner/core/mockStatusRecorder.d.ts +10 -0
- package/dist/test_runner/core/mockStatusRecorder.js +62 -0
- package/dist/test_runner/core/mockStatusRecorder.js.map +1 -0
- package/dist/test_runner/executionResult.d.ts +11 -0
- package/dist/test_runner/executionResult.js +112 -0
- package/dist/test_runner/executionResult.js.map +1 -0
- package/dist/test_runner/generator/html-generator/genCode.d.ts +2 -0
- package/dist/test_runner/generator/html-generator/genCode.js +124 -0
- package/dist/test_runner/generator/html-generator/genCode.js.map +1 -0
- package/dist/test_runner/generator/html-generator/genFolder.d.ts +2 -0
- package/dist/test_runner/generator/html-generator/genFolder.js +155 -0
- package/dist/test_runner/generator/html-generator/genFolder.js.map +1 -0
- package/dist/test_runner/generator/html-generator/index.d.ts +2 -0
- package/dist/test_runner/generator/html-generator/index.js +33 -0
- package/dist/test_runner/generator/html-generator/index.js.map +1 -0
- package/dist/test_runner/generator/index.d.ts +9 -0
- package/dist/test_runner/generator/index.js +30 -0
- package/dist/test_runner/generator/index.js.map +1 -0
- package/dist/test_runner/generator/json-generator/index.d.ts +2 -0
- package/dist/test_runner/generator/json-generator/index.js +45 -0
- package/dist/test_runner/generator/json-generator/index.js.map +1 -0
- package/dist/test_runner/generator/table-generator/index.d.ts +2 -0
- package/dist/test_runner/generator/table-generator/index.js +85 -0
- package/dist/test_runner/generator/table-generator/index.js.map +1 -0
- package/dist/test_runner/index.d.ts +3 -0
- package/dist/test_runner/index.js +70 -0
- package/dist/test_runner/index.js.map +1 -0
- package/dist/test_runner/interface.d.ts +36 -0
- package/dist/test_runner/interface.js +12 -0
- package/dist/test_runner/interface.js.map +1 -0
- package/dist/test_runner/parser/index.d.ts +35 -0
- package/dist/test_runner/parser/index.js +146 -0
- package/dist/test_runner/parser/index.js.map +1 -0
- package/dist/test_runner/parser/singleFileAnalysis.d.ts +8 -0
- package/dist/test_runner/parser/singleFileAnalysis.js +51 -0
- package/dist/test_runner/parser/singleFileAnalysis.js.map +1 -0
- package/dist/test_runner/parser/singleFunctionAnalysis.d.ts +16 -0
- package/dist/test_runner/parser/singleFunctionAnalysis.js +97 -0
- package/dist/test_runner/parser/singleFunctionAnalysis.js.map +1 -0
- package/dist/test_runner/testOption.d.ts +16 -0
- package/dist/test_runner/testOption.js +2 -0
- package/dist/test_runner/testOption.js.map +1 -0
- package/dist/test_runner/utils/errorTraceHandler.d.ts +12 -0
- package/dist/test_runner/utils/errorTraceHandler.js +87 -0
- package/dist/test_runner/utils/errorTraceHandler.js.map +1 -0
- package/dist/test_runner/utils/escape.d.ts +1 -0
- package/dist/test_runner/utils/escape.js +14 -0
- package/dist/test_runner/utils/escape.js.map +1 -0
- package/dist/test_runner/utils/index.d.ts +14 -0
- package/dist/test_runner/utils/index.js +88 -0
- package/dist/test_runner/utils/index.js.map +1 -0
- package/dist/test_runner/utils/interface.d.ts +100 -0
- package/dist/test_runner/utils/interface.js +86 -0
- package/dist/test_runner/utils/interface.js.map +1 -0
- package/dist/test_runner/utils/name.d.ts +2 -0
- package/dist/test_runner/utils/name.js +3 -0
- package/dist/test_runner/utils/name.js.map +1 -0
- package/dist/test_runner/utils/pathResolver.d.ts +6 -0
- package/dist/test_runner/utils/pathResolver.js +98 -0
- package/dist/test_runner/utils/pathResolver.js.map +1 -0
- package/dist/test_runner/utils/projectRoot.d.ts +1 -0
- package/dist/test_runner/utils/projectRoot.js +4 -0
- package/dist/test_runner/utils/projectRoot.js.map +1 -0
- package/dist/test_runner/utils/wasm.d.ts +12 -0
- package/dist/test_runner/utils/wasm.js +45 -0
- package/dist/test_runner/utils/wasm.js.map +1 -0
- package/dist/warpo.js +10 -3
- package/dist/warpo.js.map +1 -0
- package/dist/warpo_internal.d.ts +7 -0
- package/dist/warpo_internal.js +74 -0
- package/dist/warpo_internal.js.map +1 -0
- package/package.json +37 -9
- package/types/std/index.d.ts +8 -261
- package/types/warpo/index.d.ts +94 -0
- package/dist/lib.d.ts +0 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genCode.js","sourceRoot":"","sources":["../../../../tools/test_runner/generator/html-generator/genCode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { reportConfig } from "../index.js";
|
|
2
|
+
import { Rate } from "../../utils/interface.js";
|
|
3
|
+
import { OrganizationName, Repository } from "../../utils/name.js";
|
|
4
|
+
function getLevel(rate) {
|
|
5
|
+
const r = rate.getRate();
|
|
6
|
+
if (r > reportConfig.warningLimit) {
|
|
7
|
+
return "high";
|
|
8
|
+
}
|
|
9
|
+
else if (r > reportConfig.errorLimit) {
|
|
10
|
+
return "medium";
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return "low";
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function generateFileInfo(fileInfo) {
|
|
17
|
+
const { filename, statementCoverageRate: statement, branchCoverageRate: branch, functionCoverageRate: func, lineCoverageRate: line, } = fileInfo;
|
|
18
|
+
return `
|
|
19
|
+
<tr>
|
|
20
|
+
<td class="file ${getLevel(statement)}" data-value="${filename}">
|
|
21
|
+
<a href="${filename}.html">${filename}</a>
|
|
22
|
+
</td>
|
|
23
|
+
<td data-value="${statement.getRate()}" class="pic ${getLevel(statement)}">
|
|
24
|
+
<div class="chart"><div class="cover-fill cover-full" style="width: ${statement.getRate()}%"></div>
|
|
25
|
+
</td>
|
|
26
|
+
<td data-value="${statement.getRate()}" class="pct ${getLevel(statement)}">${statement.getRate()}%</td>
|
|
27
|
+
<td data-value="${statement.total}" class="abs ${getLevel(statement)}">${statement.toString()}</td>
|
|
28
|
+
<td data-value="${branch.getRate()}" class="pct ${getLevel(branch)}">${branch.getRate()}%</td>
|
|
29
|
+
<td data-value="${branch.total}" class="abs ${getLevel(branch)}">${branch.toString()}</td>
|
|
30
|
+
<td data-value="${func.getRate()}" class="pct ${getLevel(func)}">${func.getRate()}%</td>
|
|
31
|
+
<td data-value="${func.total}" class="abs ${getLevel(func)}">${func.toString()}</td>
|
|
32
|
+
<td data-value="${line.getRate()}" class="pct ${getLevel(line)}">${line.getRate()}%</td>
|
|
33
|
+
<td data-value="${line.total}" class="abs ${getLevel(line)}">${line.toString()}</td>
|
|
34
|
+
</tr>
|
|
35
|
+
`;
|
|
36
|
+
}
|
|
37
|
+
function generateFileInfos(filesInfo) {
|
|
38
|
+
return filesInfo.map((v) => generateFileInfo(v)).join("\n");
|
|
39
|
+
}
|
|
40
|
+
export function generateFolderHtml(relativePathOfRoot, filesInfo) {
|
|
41
|
+
const statementCoverageRate = new Rate();
|
|
42
|
+
const branchCoverageRate = new Rate();
|
|
43
|
+
const functionCoverageRate = new Rate();
|
|
44
|
+
const lineCoverageRate = new Rate();
|
|
45
|
+
for (const fileinfo of filesInfo) {
|
|
46
|
+
statementCoverageRate.used += fileinfo.statementCoverageRate.used;
|
|
47
|
+
statementCoverageRate.total += fileinfo.statementCoverageRate.total;
|
|
48
|
+
branchCoverageRate.used += fileinfo.branchCoverageRate.used;
|
|
49
|
+
branchCoverageRate.total += fileinfo.branchCoverageRate.total;
|
|
50
|
+
functionCoverageRate.used += fileinfo.functionCoverageRate.used;
|
|
51
|
+
functionCoverageRate.total += fileinfo.functionCoverageRate.total;
|
|
52
|
+
lineCoverageRate.used += fileinfo.lineCoverageRate.used;
|
|
53
|
+
lineCoverageRate.total += fileinfo.lineCoverageRate.total;
|
|
54
|
+
}
|
|
55
|
+
return `
|
|
56
|
+
|
|
57
|
+
<!doctype html>
|
|
58
|
+
<html lang="en">
|
|
59
|
+
|
|
60
|
+
<head>
|
|
61
|
+
<title>Code coverage report for tests</title>
|
|
62
|
+
<meta charset="utf-8" />
|
|
63
|
+
<link rel="stylesheet" href="${relativePathOfRoot}/resource/prettify.css" />
|
|
64
|
+
<link rel="stylesheet" href="${relativePathOfRoot}/resource/base.css" />
|
|
65
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
66
|
+
<style type='text/css'>
|
|
67
|
+
.coverage-summary .sorter {
|
|
68
|
+
background-image: url(${relativePathOfRoot}/resource/sort-arrow-sprite.png);
|
|
69
|
+
}
|
|
70
|
+
</style>
|
|
71
|
+
</head>
|
|
72
|
+
|
|
73
|
+
<body>
|
|
74
|
+
<div class='wrapper'>
|
|
75
|
+
<div class='pad1'>
|
|
76
|
+
<h1><a href="${relativePathOfRoot}/index.html">All files</a> tests</h1>
|
|
77
|
+
<div class='clearfix'>
|
|
78
|
+
<div class='fl pad1y space-right2'>
|
|
79
|
+
<span class="strong">${statementCoverageRate.getRate()}% </span>
|
|
80
|
+
<span class="quiet">Statements</span>
|
|
81
|
+
<span class='fraction'>${statementCoverageRate.toString()}</span>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div class='fl pad1y space-right2'>
|
|
85
|
+
<span class="strong">${branchCoverageRate.getRate()}% </span>
|
|
86
|
+
<span class="quiet">Branches</span>
|
|
87
|
+
<span class='fraction'>${branchCoverageRate.toString()}</span>
|
|
88
|
+
</div>
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
<div class='fl pad1y space-right2'>
|
|
92
|
+
<span class="strong">${functionCoverageRate.getRate()}% </span>
|
|
93
|
+
<span class="quiet">Functions</span>
|
|
94
|
+
<span class='fraction'>${functionCoverageRate.toString()}</span>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
<div class='fl pad1y space-right2'>
|
|
98
|
+
<span class="strong">${lineCoverageRate.getRate()}% </span>
|
|
99
|
+
<span class="quiet">Lines</span>
|
|
100
|
+
<span class='fraction'>${lineCoverageRate.toString()}</span>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
<p class="quiet">
|
|
105
|
+
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
106
|
+
</p>
|
|
107
|
+
</div>
|
|
108
|
+
|
|
109
|
+
<div class='status-line high'></div>
|
|
110
|
+
<div class="pad1">
|
|
111
|
+
<table class="coverage-summary">
|
|
112
|
+
<thead>
|
|
113
|
+
<tr>
|
|
114
|
+
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
|
|
115
|
+
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
|
|
116
|
+
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
|
|
117
|
+
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
118
|
+
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
|
|
119
|
+
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
120
|
+
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
|
|
121
|
+
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
122
|
+
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
|
|
123
|
+
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
|
|
124
|
+
</tr>
|
|
125
|
+
</thead>
|
|
126
|
+
|
|
127
|
+
<tbody>
|
|
128
|
+
${generateFileInfos(filesInfo)}
|
|
129
|
+
</tbody>
|
|
130
|
+
</table>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
<div class='push'></div>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<div class="footer quiet pad2 space-top1 center small">
|
|
137
|
+
Code coverage generated by
|
|
138
|
+
<a href="${Repository}" target="_blank">${OrganizationName}</a>
|
|
139
|
+
at ${new Date().toUTCString()}
|
|
140
|
+
</div>
|
|
141
|
+
|
|
142
|
+
</div>
|
|
143
|
+
<script src="${relativePathOfRoot}/resource/prettify.js"></script>
|
|
144
|
+
<script>
|
|
145
|
+
window.onload = function () {
|
|
146
|
+
prettyPrint();
|
|
147
|
+
};
|
|
148
|
+
</script>
|
|
149
|
+
<script src="${relativePathOfRoot}/resource/sorter.js"></script>
|
|
150
|
+
<script src="${relativePathOfRoot}/resource/block-navigation.js"></script>
|
|
151
|
+
</body>
|
|
152
|
+
|
|
153
|
+
`;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=genFolder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genFolder.js","sourceRoot":"","sources":["../../../../tools/test_runner/generator/html-generator/genFolder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ensureDirSync } from "fs-extra";
|
|
2
|
+
import { copyFile, writeFileSync } from "node:fs";
|
|
3
|
+
import { basename, dirname, join, relative } from "node:path";
|
|
4
|
+
import { generateFolderHtml } from "./genFolder.js";
|
|
5
|
+
import { generateCodeHtml } from "./genCode.js";
|
|
6
|
+
import { projectRoot } from "../../utils/projectRoot.js";
|
|
7
|
+
const resourceFiles = [
|
|
8
|
+
"base.css",
|
|
9
|
+
"block-navigation.js",
|
|
10
|
+
"prettify.css",
|
|
11
|
+
"prettify.js",
|
|
12
|
+
"sort-arrow-sprite.png",
|
|
13
|
+
"sorter.js",
|
|
14
|
+
];
|
|
15
|
+
export function genHtml(target, filesInfos) {
|
|
16
|
+
const resourceFolder = join(target, "resource");
|
|
17
|
+
ensureDirSync(resourceFolder);
|
|
18
|
+
for (const file of resourceFiles) {
|
|
19
|
+
copyFile(join(projectRoot, "resource", file), join(resourceFolder, basename(file)), () => {
|
|
20
|
+
return;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const html = generateFolderHtml(".", filesInfos);
|
|
24
|
+
writeFileSync(join(target, "index.html"), html);
|
|
25
|
+
for (const filesInfo of filesInfos) {
|
|
26
|
+
const htmlPath = join(target, filesInfo.filename + ".html");
|
|
27
|
+
const relativePath = relative(dirname(htmlPath), target);
|
|
28
|
+
const html = generateCodeHtml(relativePath, filesInfo);
|
|
29
|
+
ensureDirSync(dirname(htmlPath));
|
|
30
|
+
writeFileSync(htmlPath, html);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../tools/test_runner/generator/html-generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,aAAa,GAAG;IACpB,UAAU;IACV,qBAAqB;IACrB,cAAc;IACd,aAAa;IACb,uBAAuB;IACvB,WAAW;CACZ,CAAC;AAEF,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,UAAgC;IACtE,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAChD,aAAa,CAAC,cAAc,CAAC,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE;YACvF,OAAO;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACjD,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,CAAC;IAChD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,QAAQ,GAAG,OAAO,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,gBAAgB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACvD,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OutputMode } from "../interface.js";
|
|
2
|
+
import { FileCoverageResult } from "../utils/interface.js";
|
|
3
|
+
declare class GeneratorConfig {
|
|
4
|
+
warningLimit: number;
|
|
5
|
+
errorLimit: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const reportConfig: GeneratorConfig;
|
|
8
|
+
export declare function generateReport(modes: OutputMode | OutputMode[], outputFolder: string, fileCoverageResult: FileCoverageResult[]): void;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { genHtml } from "./html-generator/index.js";
|
|
2
|
+
import { genJson } from "./json-generator/index.js";
|
|
3
|
+
import { genTable } from "./table-generator/index.js";
|
|
4
|
+
class GeneratorConfig {
|
|
5
|
+
warningLimit = 80;
|
|
6
|
+
errorLimit = 50;
|
|
7
|
+
}
|
|
8
|
+
export const reportConfig = new GeneratorConfig();
|
|
9
|
+
export function generateReport(modes, outputFolder, fileCoverageResult) {
|
|
10
|
+
for (const mode of [modes].flat()) {
|
|
11
|
+
switch (mode) {
|
|
12
|
+
case "html": {
|
|
13
|
+
genHtml(outputFolder, fileCoverageResult);
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
case "json": {
|
|
17
|
+
genJson(outputFolder, fileCoverageResult);
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
case "table": {
|
|
21
|
+
genTable(fileCoverageResult);
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
default: {
|
|
25
|
+
throw new Error("output mode illegal");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../tools/test_runner/generator/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,MAAM,eAAe;IACnB,YAAY,GAAG,EAAE,CAAC;IAClB,UAAU,GAAG,EAAE,CAAC;CACjB;AACD,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,eAAe,EAAE,CAAC;AAElD,MAAM,UAAU,cAAc,CAC5B,KAAgC,EAChC,YAAoB,EACpB,kBAAwC;IAExC,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,OAAO,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;gBAC1C,MAAM;YACR,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,OAAO,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;gBAC1C,MAAM;YACR,CAAC;YACD,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,QAAQ,CAAC,kBAAkB,CAAC,CAAC;gBAC7B,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { writeFileSync } from "node:fs";
|
|
3
|
+
import { Rate } from "../../utils/interface.js";
|
|
4
|
+
class JsonRate {
|
|
5
|
+
total;
|
|
6
|
+
used;
|
|
7
|
+
rate;
|
|
8
|
+
constructor(rate) {
|
|
9
|
+
this.total = rate.total;
|
|
10
|
+
this.used = rate.used;
|
|
11
|
+
this.rate = rate.getRate();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function genJson(target, filesInfos) {
|
|
15
|
+
const jsonOutput = {};
|
|
16
|
+
const statementCoverageTotalRate = new Rate();
|
|
17
|
+
const branchCoverageTotalRate = new Rate();
|
|
18
|
+
const functionCoverageTotalRate = new Rate();
|
|
19
|
+
const lineCoverageTotalRate = new Rate();
|
|
20
|
+
for (const cur of filesInfos) {
|
|
21
|
+
const { filename, statementCoverageRate, branchCoverageRate, functionCoverageRate, lineCoverageRate } = cur;
|
|
22
|
+
jsonOutput[filename] = {
|
|
23
|
+
statementCoverageRate: new JsonRate(statementCoverageRate),
|
|
24
|
+
branchCoverageRate: new JsonRate(branchCoverageRate),
|
|
25
|
+
functionCoverageRate: new JsonRate(functionCoverageRate),
|
|
26
|
+
lineCoverageRate: new JsonRate(lineCoverageRate),
|
|
27
|
+
};
|
|
28
|
+
statementCoverageTotalRate.total += statementCoverageRate.total;
|
|
29
|
+
statementCoverageTotalRate.used += statementCoverageRate.used;
|
|
30
|
+
branchCoverageTotalRate.total += branchCoverageRate.total;
|
|
31
|
+
branchCoverageTotalRate.used += branchCoverageRate.used;
|
|
32
|
+
functionCoverageTotalRate.total += functionCoverageRate.total;
|
|
33
|
+
functionCoverageTotalRate.used += functionCoverageRate.used;
|
|
34
|
+
lineCoverageTotalRate.total += lineCoverageRate.total;
|
|
35
|
+
lineCoverageTotalRate.used += lineCoverageRate.used;
|
|
36
|
+
}
|
|
37
|
+
jsonOutput["All files"] = {
|
|
38
|
+
statementCoverageRate: new JsonRate(statementCoverageTotalRate),
|
|
39
|
+
branchCoverageRate: new JsonRate(branchCoverageTotalRate),
|
|
40
|
+
functionCoverageRate: new JsonRate(functionCoverageTotalRate),
|
|
41
|
+
lineCoverageRate: new JsonRate(lineCoverageTotalRate),
|
|
42
|
+
};
|
|
43
|
+
writeFileSync(join(target, "coverage.json"), JSON.stringify(jsonOutput, null, 4), {});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../tools/test_runner/generator/json-generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAsB,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAUpE,MAAM,QAAQ;IACZ,KAAK,CAAS;IACd,IAAI,CAAS;IACb,IAAI,CAAS;IACb,YAAY,IAAU;QACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,UAAU,OAAO,CAAC,MAAc,EAAE,UAAgC;IACtE,MAAM,UAAU,GAAe,EAAE,CAAC;IAElC,MAAM,0BAA0B,GAAG,IAAI,IAAI,EAAE,CAAC;IAC9C,MAAM,uBAAuB,GAAG,IAAI,IAAI,EAAE,CAAC;IAC3C,MAAM,yBAAyB,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7C,MAAM,qBAAqB,GAAG,IAAI,IAAI,EAAE,CAAC;IACzC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,GAAG,GAAG,CAAC;QAC5G,UAAU,CAAC,QAAQ,CAAC,GAAG;YACrB,qBAAqB,EAAE,IAAI,QAAQ,CAAC,qBAAqB,CAAC;YAC1D,kBAAkB,EAAE,IAAI,QAAQ,CAAC,kBAAkB,CAAC;YACpD,oBAAoB,EAAE,IAAI,QAAQ,CAAC,oBAAoB,CAAC;YACxD,gBAAgB,EAAE,IAAI,QAAQ,CAAC,gBAAgB,CAAC;SACjD,CAAC;QACF,0BAA0B,CAAC,KAAK,IAAI,qBAAqB,CAAC,KAAK,CAAC;QAChE,0BAA0B,CAAC,IAAI,IAAI,qBAAqB,CAAC,IAAI,CAAC;QAC9D,uBAAuB,CAAC,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC;QAC1D,uBAAuB,CAAC,IAAI,IAAI,kBAAkB,CAAC,IAAI,CAAC;QACxD,yBAAyB,CAAC,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC;QAC9D,yBAAyB,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC;QAC5D,qBAAqB,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC;QACtD,qBAAqB,CAAC,IAAI,IAAI,gBAAgB,CAAC,IAAI,CAAC;IACtD,CAAC;IACD,UAAU,CAAC,WAAW,CAAC,GAAG;QACxB,qBAAqB,EAAE,IAAI,QAAQ,CAAC,0BAA0B,CAAC;QAC/D,kBAAkB,EAAE,IAAI,QAAQ,CAAC,uBAAuB,CAAC;QACzD,oBAAoB,EAAE,IAAI,QAAQ,CAAC,yBAAyB,CAAC;QAC7D,gBAAgB,EAAE,IAAI,QAAQ,CAAC,qBAAqB,CAAC;KACtD,CAAC;IAEF,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { basename, dirname } from "node:path";
|
|
3
|
+
import { reportConfig } from "../index.js";
|
|
4
|
+
import { Rate } from "../../utils/interface.js";
|
|
5
|
+
class Table {
|
|
6
|
+
lineWidth = [];
|
|
7
|
+
titles;
|
|
8
|
+
lines = [];
|
|
9
|
+
constructor(titles) {
|
|
10
|
+
this.titles = titles;
|
|
11
|
+
this.lineWidth = titles.map((title) => title.length);
|
|
12
|
+
}
|
|
13
|
+
addItem(items) {
|
|
14
|
+
this.lines.push(items);
|
|
15
|
+
for (let i = 0; i < this.lineWidth.length; i++) {
|
|
16
|
+
this.lineWidth[i] = Math.max(this.lineWidth[i] ?? 0, items[i]?.length ?? 0);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
static padding(str, total) {
|
|
20
|
+
return str + " ".repeat(total - str.length);
|
|
21
|
+
}
|
|
22
|
+
printTitle() {
|
|
23
|
+
return this.titles.map((title, index) => Table.padding(title, this.lineWidth[index] ?? title.length)).join(" | ");
|
|
24
|
+
}
|
|
25
|
+
printSplit() {
|
|
26
|
+
return this.lineWidth.map((width) => "-".repeat(width)).join("-|-");
|
|
27
|
+
}
|
|
28
|
+
printLines() {
|
|
29
|
+
return this.lines.map((line) => line.map((item, index) => Table.padding(item, this.lineWidth[index] ?? item.length)).join(" | "));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function render(rate) {
|
|
33
|
+
return rate.getRate().toString();
|
|
34
|
+
}
|
|
35
|
+
export function genTable(filesInfos) {
|
|
36
|
+
const table = new Table(["File", "% Stmts", "% Branch", "% Funcs", "% Lines"]);
|
|
37
|
+
const map = new Map();
|
|
38
|
+
for (const fileInfo of filesInfos) {
|
|
39
|
+
const { filename } = fileInfo;
|
|
40
|
+
const value = map.get(dirname(filename));
|
|
41
|
+
if (value === undefined) {
|
|
42
|
+
map.set(dirname(filename), [fileInfo]);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
value.push(fileInfo);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (const [folder, infos] of map) {
|
|
49
|
+
table.addItem([
|
|
50
|
+
folder,
|
|
51
|
+
render(Rate.summarize(infos.map((info) => info.statementCoverageRate))),
|
|
52
|
+
render(Rate.summarize(infos.map((info) => info.branchCoverageRate))),
|
|
53
|
+
render(Rate.summarize(infos.map((info) => info.functionCoverageRate))),
|
|
54
|
+
render(Rate.summarize(infos.map((info) => info.lineCoverageRate))),
|
|
55
|
+
]);
|
|
56
|
+
for (const info of infos) {
|
|
57
|
+
const { filename, statementCoverageRate, branchCoverageRate, functionCoverageRate, lineCoverageRate } = info;
|
|
58
|
+
table.addItem([
|
|
59
|
+
" " + basename(filename),
|
|
60
|
+
render(statementCoverageRate),
|
|
61
|
+
render(branchCoverageRate),
|
|
62
|
+
render(functionCoverageRate),
|
|
63
|
+
render(lineCoverageRate),
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
console.log(table.printSplit());
|
|
68
|
+
console.log(table.printTitle());
|
|
69
|
+
console.log(table.printSplit());
|
|
70
|
+
const lines = table
|
|
71
|
+
.printLines()
|
|
72
|
+
.join("\n")
|
|
73
|
+
.replaceAll(/\d+(.\d+)?/g, (str) => {
|
|
74
|
+
const v = Number.parseFloat(str);
|
|
75
|
+
if (v > reportConfig.warningLimit)
|
|
76
|
+
return chalk.bold.greenBright(str);
|
|
77
|
+
if (v > reportConfig.errorLimit)
|
|
78
|
+
return chalk.bold.yellowBright(str);
|
|
79
|
+
return chalk.bold.redBright(str);
|
|
80
|
+
});
|
|
81
|
+
console.log(lines);
|
|
82
|
+
console.log(table.printSplit());
|
|
83
|
+
console.log();
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../tools/test_runner/generator/table-generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAsB,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,KAAK;IACD,SAAS,GAAa,EAAE,CAAC;IACzB,MAAM,CAAW;IACjB,KAAK,GAAe,EAAE,CAAC;IAE/B,YAAY,MAAgB;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,CAAC,KAAe;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa;QACvC,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpH,CAAC;IACD,UAAU;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;IACD,UAAU;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CACjG,CAAC;IACJ,CAAC;CACF;AAED,SAAS,MAAM,CAAC,IAAU;IACxB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,UAAgC;IACvD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,IAAI,GAAG,EAAgC,CAAC;IACpD,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;QAClC,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC9B,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC;YACZ,MAAM;YACN,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;YACpE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACtE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;SACnE,CAAC,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;YAC7G,KAAK,CAAC,OAAO,CAAC;gBACZ,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBACzB,MAAM,CAAC,qBAAqB,CAAC;gBAC7B,MAAM,CAAC,kBAAkB,CAAC;gBAC1B,MAAM,CAAC,oBAAoB,CAAC;gBAC5B,MAAM,CAAC,gBAAgB,CAAC;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK;SAChB,UAAU,EAAE;SACZ,IAAI,CAAC,IAAI,CAAC;SACV,UAAU,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE;QACjC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,YAAY,CAAC,YAAY;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,YAAY,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import pkg from "fs-extra";
|
|
3
|
+
import { Parser } from "./parser/index.js";
|
|
4
|
+
import { compile } from "./core/compile.js";
|
|
5
|
+
import { analyze } from "./core/analyze.js";
|
|
6
|
+
import { execWasmBinaries } from "./core/execute.js";
|
|
7
|
+
import { generateReport, reportConfig } from "./generator/index.js";
|
|
8
|
+
import { join } from "node:path";
|
|
9
|
+
import { CompilationError } from "./core/compiler.js";
|
|
10
|
+
const { readFileSync, emptydirSync } = pkg;
|
|
11
|
+
export function validateArgument(includes, excludes) {
|
|
12
|
+
if (!Array.isArray(includes)) {
|
|
13
|
+
throw new TypeError("include section illegal");
|
|
14
|
+
}
|
|
15
|
+
if (!Array.isArray(excludes)) {
|
|
16
|
+
throw new TypeError("exclude section illegal");
|
|
17
|
+
}
|
|
18
|
+
for (const includePath of includes) {
|
|
19
|
+
if (typeof includePath !== "string") {
|
|
20
|
+
throw new TypeError("include section illegal");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
for (const excludePath of excludes) {
|
|
24
|
+
if (typeof excludePath !== "string") {
|
|
25
|
+
throw new TypeError("exclude section illegal");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function startUniTestImpl(options) {
|
|
30
|
+
const failurePath = join(options.outputFolder, "failures.json");
|
|
31
|
+
let failedTestCases = [];
|
|
32
|
+
if (options.onlyFailures) {
|
|
33
|
+
failedTestCases = JSON.parse(readFileSync(failurePath, "utf8"));
|
|
34
|
+
if (failedTestCases.length === 0) {
|
|
35
|
+
options.collectCoverage = true;
|
|
36
|
+
console.log(chalk.yellowBright('Warning: no failed test cases found while enabled "onlyFailures", execute all test cases by default'));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
emptydirSync(options.outputFolder);
|
|
40
|
+
const { sourceCodePaths, testCodePaths, entryFiles, filterByName } = analyze(options, failedTestCases);
|
|
41
|
+
console.log(chalk.blueBright("code analysis: ") + chalk.bold.greenBright("OK"));
|
|
42
|
+
const wasmModule = await compile(testCodePaths, entryFiles, options);
|
|
43
|
+
console.log(chalk.blueBright("compile test files: ") + chalk.bold.greenBright("OK"));
|
|
44
|
+
const executedResult = await execWasmBinaries(wasmModule, filterByName, options.imports);
|
|
45
|
+
console.log(chalk.blueBright("execute test files: ") + chalk.bold.greenBright("OK"));
|
|
46
|
+
await executedResult.writeFailures(failurePath);
|
|
47
|
+
executedResult.print(console.log);
|
|
48
|
+
if (options.collectCoverage) {
|
|
49
|
+
const parser = new Parser();
|
|
50
|
+
const fileCoverageInfo = await parser.parse(wasmModule, sourceCodePaths);
|
|
51
|
+
reportConfig.warningLimit = options.warnLimit || reportConfig.warningLimit;
|
|
52
|
+
reportConfig.errorLimit = options.errorLimit || reportConfig.errorLimit;
|
|
53
|
+
generateReport(options.mode, options.outputFolder, fileCoverageInfo);
|
|
54
|
+
}
|
|
55
|
+
return executedResult.fail === 0 ? 0 : 1;
|
|
56
|
+
}
|
|
57
|
+
export async function start(options) {
|
|
58
|
+
try {
|
|
59
|
+
return await startUniTestImpl(options);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error instanceof CompilationError) {
|
|
63
|
+
console.log(error.message);
|
|
64
|
+
return 2;
|
|
65
|
+
}
|
|
66
|
+
// unknown exception.
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../tools/test_runner/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ASUtil } from "@assemblyscript/loader";
|
|
2
|
+
export declare abstract class UnitTestFramework {
|
|
3
|
+
/**
|
|
4
|
+
* function to redirect log message to unittest framework
|
|
5
|
+
* @param msg: message to log
|
|
6
|
+
*/
|
|
7
|
+
abstract log(msg: string): void;
|
|
8
|
+
}
|
|
9
|
+
export declare class ImportsArgument {
|
|
10
|
+
framework: UnitTestFramework;
|
|
11
|
+
module: WebAssembly.Module | null;
|
|
12
|
+
instance: WebAssembly.Instance | null;
|
|
13
|
+
exports: (ASUtil & Record<string, unknown>) | null;
|
|
14
|
+
constructor(framework: UnitTestFramework);
|
|
15
|
+
}
|
|
16
|
+
export type OutputMode = "html" | "json" | "table";
|
|
17
|
+
export type Imports = ((arg: ImportsArgument) => Record<string, unknown>) | null;
|
|
18
|
+
export declare class Config {
|
|
19
|
+
/** Files to include in testing and coverage statistics */
|
|
20
|
+
include: string[];
|
|
21
|
+
/** Files to exclude from testing and coverage statistics, has higher priority than include */
|
|
22
|
+
exclude?: string[];
|
|
23
|
+
/** entry files for the whole projects, used to collect all source code information. default value is `${include}/index.ts` */
|
|
24
|
+
entryFiles?: string[];
|
|
25
|
+
/** whether to collect coverage information, default is true */
|
|
26
|
+
collectCoverage?: boolean;
|
|
27
|
+
/** create an wasm instance for each test files. default is false (will be true in next major version) */
|
|
28
|
+
isolated?: boolean;
|
|
29
|
+
/** assemblyscript compile flag, default is --exportStart __unit_test_start --sourceMap --debug -O0 */
|
|
30
|
+
flags?: string;
|
|
31
|
+
imports?: Imports;
|
|
32
|
+
/** report folder path, default "./coverage" */
|
|
33
|
+
output?: string;
|
|
34
|
+
/** output report mode, default is "table" */
|
|
35
|
+
mode?: OutputMode | OutputMode[];
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interface.js","sourceRoot":"","sources":["../../tools/test_runner/interface.ts"],"names":[],"mappings":"AAEA,MAAM,OAAgB,iBAAiB;CAMtC;AAED,MAAM,OAAO,eAAe;IAIP;IAHnB,MAAM,GAA8B,IAAI,CAAC;IACzC,QAAQ,GAAgC,IAAI,CAAC;IAC7C,OAAO,GAA8C,IAAI,CAAC;IAC1D,YAAmB,SAA4B;QAA5B,cAAS,GAAT,SAAS,CAAmB;IAAG,CAAC;CACpD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FileCoverageResult, CovInfo, FunctionCoverageResult } from "../utils/interface.js";
|
|
2
|
+
import { WebAssemblyModule } from "../utils/wasm.js";
|
|
3
|
+
export declare class Parser {
|
|
4
|
+
fileCoverageResults: FileCoverageResult[];
|
|
5
|
+
functionCoverageResults: FunctionCoverageResult[];
|
|
6
|
+
/** key: functionName, value: CodeSnippetIndex trace */
|
|
7
|
+
functionCovTraceMap: Map<string, number[]>;
|
|
8
|
+
/** key: functionName, value: { branchInfo, lineInfo } */
|
|
9
|
+
functionCovInfoMap: Map<string, CovInfo>;
|
|
10
|
+
parse(wasmModule: WebAssemblyModule, sourceCodePaths: string[]): Promise<FileCoverageResult[]>;
|
|
11
|
+
private getTempCovTraceMap;
|
|
12
|
+
private getDebugInfos;
|
|
13
|
+
/**
|
|
14
|
+
* @brief
|
|
15
|
+
* parse debugInfo and traceInfo to functionCovTraceMap and functionCovInfoMap
|
|
16
|
+
* @param debugInfoFile debugInfo file path generated by instrumentation
|
|
17
|
+
*/
|
|
18
|
+
traceParse(instrumentResult: WebAssemblyModule): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* @brief
|
|
21
|
+
* generate FunctionCoverageInfo for each Function based on CovTrace and CovInfo.
|
|
22
|
+
* FunctionCoverageInfo of Function<T> will be merged into Function:
|
|
23
|
+
* FunctionCoverageInfo of toJson<f64> and toJson<i32> will be merged into toJson.
|
|
24
|
+
*/
|
|
25
|
+
generateFunctionCoverage(): void;
|
|
26
|
+
/**
|
|
27
|
+
* @brief
|
|
28
|
+
* For each sourceFile:
|
|
29
|
+
* First, filter out all functionCoverageResult from this.functionCoverageResults based on checkFunctionName(sourceFilePath, functionName).
|
|
30
|
+
* And then, find out which sourceFunction has been tested and which sourceFunction has not been tested.
|
|
31
|
+
* based on the function name match or lineRange match.
|
|
32
|
+
* Finally, merge the functionCoverageResult to fileCoverageResult.
|
|
33
|
+
*/
|
|
34
|
+
generateFileCoverage(sourceCodePaths: string[]): Promise<void>;
|
|
35
|
+
}
|