@noldova/context.testing 0.0.0-stage → 0.0.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/LICENSE +21 -0
- package/api/index.d.ts +2015 -0
- package/api/index.js +42 -0
- package/api/index.js.map +1 -0
- package/decorators/category.js +23 -0
- package/decorators/category.js.map +1 -0
- package/decorators/skip.js +17 -0
- package/decorators/skip.js.map +1 -0
- package/decorators/test-class.js +12 -0
- package/decorators/test-class.js.map +1 -0
- package/decorators/test-data.js +23 -0
- package/decorators/test-data.js.map +1 -0
- package/decorators/test-method.js +12 -0
- package/decorators/test-method.js.map +1 -0
- package/enums/test-outcome.js +14 -0
- package/enums/test-outcome.js.map +1 -0
- package/enums/test-worker-message-kind.js +17 -0
- package/enums/test-worker-message-kind.js.map +1 -0
- package/enums/test-worker-value-kind.js +16 -0
- package/enums/test-worker-value-kind.js.map +1 -0
- package/exceptions/assert-failed.exception.js +19 -0
- package/exceptions/assert-failed.exception.js.map +1 -0
- package/exceptions/test-timeout.exception.js +20 -0
- package/exceptions/test-timeout.exception.js.map +1 -0
- package/exceptions/testing.exception.js +14 -0
- package/exceptions/testing.exception.js.map +1 -0
- package/interfaces/i-clock.js +9 -0
- package/interfaces/i-clock.js.map +1 -0
- package/interfaces/i-coverage-range.js +9 -0
- package/interfaces/i-coverage-range.js.map +1 -0
- package/interfaces/i-coverage-report.js +9 -0
- package/interfaces/i-coverage-report.js.map +1 -0
- package/interfaces/i-function-coverage.js +9 -0
- package/interfaces/i-function-coverage.js.map +1 -0
- package/interfaces/i-script-coverage.js +9 -0
- package/interfaces/i-script-coverage.js.map +1 -0
- package/interfaces/i-source-map-data.js +9 -0
- package/interfaces/i-source-map-data.js.map +1 -0
- package/interfaces/i-test-progress-listener.js +9 -0
- package/interfaces/i-test-progress-listener.js.map +1 -0
- package/models/coverage/block-coverage.js +21 -0
- package/models/coverage/block-coverage.js.map +1 -0
- package/models/coverage/coverage-project.js +23 -0
- package/models/coverage/coverage-project.js.map +1 -0
- package/models/coverage/coverage-range.js +18 -0
- package/models/coverage/coverage-range.js.map +1 -0
- package/models/coverage/coverage-result.js +28 -0
- package/models/coverage/coverage-result.js.map +1 -0
- package/models/coverage/file-coverage.js +45 -0
- package/models/coverage/file-coverage.js.map +1 -0
- package/models/coverage/function-coverage.js +14 -0
- package/models/coverage/function-coverage.js.map +1 -0
- package/models/coverage/line-range.js +25 -0
- package/models/coverage/line-range.js.map +1 -0
- package/models/coverage/mapped-source-line.js +22 -0
- package/models/coverage/mapped-source-line.js.map +1 -0
- package/models/coverage/source-map-segment.js +18 -0
- package/models/coverage/source-map-segment.js.map +1 -0
- package/models/decorators/test-data-entry.js +17 -0
- package/models/decorators/test-data-entry.js.map +1 -0
- package/models/decorators/test-marks.js +16 -0
- package/models/decorators/test-marks.js.map +1 -0
- package/models/discovery/discovered-test-class.js +36 -0
- package/models/discovery/discovered-test-class.js.map +1 -0
- package/models/discovery/discovered-test-method.js +42 -0
- package/models/discovery/discovered-test-method.js.map +1 -0
- package/models/discovery/test-project.js +20 -0
- package/models/discovery/test-project.js.map +1 -0
- package/models/execution/test-worker-message.js +76 -0
- package/models/execution/test-worker-message.js.map +1 -0
- package/models/execution/test-worker-record.js +75 -0
- package/models/execution/test-worker-record.js.map +1 -0
- package/models/execution/test-worker-result.js +45 -0
- package/models/execution/test-worker-result.js.map +1 -0
- package/models/execution/test-worker-run.js +31 -0
- package/models/execution/test-worker-run.js.map +1 -0
- package/models/execution/test-worker-start.js +33 -0
- package/models/execution/test-worker-start.js.map +1 -0
- package/models/execution/test-worker-text.js +17 -0
- package/models/execution/test-worker-text.js.map +1 -0
- package/models/execution/test-worker-value.js +104 -0
- package/models/execution/test-worker-value.js.map +1 -0
- package/models/reporting/coverage-report-row.js +22 -0
- package/models/reporting/coverage-report-row.js.map +1 -0
- package/models/results/test-class-result.js +29 -0
- package/models/results/test-class-result.js.map +1 -0
- package/models/results/test-method-result.js +59 -0
- package/models/results/test-method-result.js.map +1 -0
- package/models/results/test-run-result.js +34 -0
- package/models/results/test-run-result.js.map +1 -0
- package/models/results/test-run-totals.js +36 -0
- package/models/results/test-run-totals.js.map +1 -0
- package/models/results/test-selection.js +33 -0
- package/models/results/test-selection.js.map +1 -0
- package/package.json +25 -4
- package/resources.js +309 -0
- package/resources.js.map +1 -0
- package/services/assert.js +92 -0
- package/services/assert.js.map +1 -0
- package/services/coverage/coverage-analyzer.js +52 -0
- package/services/coverage/coverage-analyzer.js.map +1 -0
- package/services/coverage/coverage-report.reader.js +126 -0
- package/services/coverage/coverage-report.reader.js.map +1 -0
- package/services/coverage/file-coverage-analyzer.js +206 -0
- package/services/coverage/file-coverage-analyzer.js.map +1 -0
- package/services/coverage/source-map.js +135 -0
- package/services/coverage/source-map.js.map +1 -0
- package/services/discovery/test-discovery.js +198 -0
- package/services/discovery/test-discovery.js.map +1 -0
- package/services/execution/parallel-test-runner.js +24 -0
- package/services/execution/parallel-test-runner.js.map +1 -0
- package/services/execution/test-executor.js +116 -0
- package/services/execution/test-executor.js.map +1 -0
- package/services/execution/test-run-entry-point.js +89 -0
- package/services/execution/test-run-entry-point.js.map +1 -0
- package/services/execution/test-run-supervisor.js +251 -0
- package/services/execution/test-run-supervisor.js.map +1 -0
- package/services/execution/test-run-worker-entry-point.js +18 -0
- package/services/execution/test-run-worker-entry-point.js.map +1 -0
- package/services/execution/test-run-worker.js +116 -0
- package/services/execution/test-run-worker.js.map +1 -0
- package/services/execution/test-runner.js +58 -0
- package/services/execution/test-runner.js.map +1 -0
- package/services/reporting/coverage-report-writer.js +81 -0
- package/services/reporting/coverage-report-writer.js.map +1 -0
- package/services/reporting/test-console-reporter.js +72 -0
- package/services/reporting/test-console-reporter.js.map +1 -0
- package/services/reporting/test-report-writer.js +111 -0
- package/services/reporting/test-report-writer.js.map +1 -0
- package/services/timing/system-clock.js +26 -0
- package/services/timing/system-clock.js.map +1 -0
- package/README.md +0 -3
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import { Resources } from "../../resources.js";
|
|
9
|
+
import { SystemClock } from "../timing/system-clock.js";
|
|
10
|
+
import { TestReportWriter } from "./test-report-writer.js";
|
|
11
|
+
export class TestConsoleReporter {
|
|
12
|
+
write;
|
|
13
|
+
isInteractive;
|
|
14
|
+
skipPassingDetails;
|
|
15
|
+
clock;
|
|
16
|
+
reportWriter;
|
|
17
|
+
progressTimer;
|
|
18
|
+
progressFrame;
|
|
19
|
+
constructor(write, isInteractive, skipPassingDetails, clock = new SystemClock(false)) {
|
|
20
|
+
this.write = write;
|
|
21
|
+
this.isInteractive = isInteractive;
|
|
22
|
+
this.skipPassingDetails = skipPassingDetails;
|
|
23
|
+
this.clock = clock;
|
|
24
|
+
this.reportWriter = new TestReportWriter();
|
|
25
|
+
this.progressFrame = 0;
|
|
26
|
+
}
|
|
27
|
+
start() {
|
|
28
|
+
if (!this.isInteractive)
|
|
29
|
+
return;
|
|
30
|
+
this.drawProgress();
|
|
31
|
+
this.scheduleProgress();
|
|
32
|
+
}
|
|
33
|
+
onClassCompleted(classResult) {
|
|
34
|
+
this.writeClassLines(this.reportWriter.formatClassLines(classResult, this.skipPassingDetails));
|
|
35
|
+
}
|
|
36
|
+
writeClassLines(lines) {
|
|
37
|
+
if (lines.length === 0)
|
|
38
|
+
return;
|
|
39
|
+
const isShowingProgress = !Object.isUndefined(this.progressTimer);
|
|
40
|
+
if (isShowingProgress)
|
|
41
|
+
this.write(Resources.terminalClearLine);
|
|
42
|
+
this.writeLines(lines);
|
|
43
|
+
if (isShowingProgress)
|
|
44
|
+
this.drawProgress();
|
|
45
|
+
}
|
|
46
|
+
stop() {
|
|
47
|
+
if (Object.isUndefined(this.progressTimer))
|
|
48
|
+
return;
|
|
49
|
+
this.clock.clearTimeout(this.progressTimer);
|
|
50
|
+
this.progressTimer = undefined;
|
|
51
|
+
this.write(Resources.terminalClearLine);
|
|
52
|
+
}
|
|
53
|
+
writeSummary(totals, selection) {
|
|
54
|
+
this.stop();
|
|
55
|
+
this.writeLines(this.reportWriter.formatSummaryLines(totals, selection));
|
|
56
|
+
}
|
|
57
|
+
scheduleProgress() {
|
|
58
|
+
this.progressTimer = this.clock.setTimeout(() => this.advanceProgress(), Resources.progressIntervalMilliseconds);
|
|
59
|
+
}
|
|
60
|
+
advanceProgress() {
|
|
61
|
+
this.progressFrame = (this.progressFrame + 1) % Resources.progressFrames.length;
|
|
62
|
+
this.drawProgress();
|
|
63
|
+
this.scheduleProgress();
|
|
64
|
+
}
|
|
65
|
+
drawProgress() {
|
|
66
|
+
this.write(`${Resources.terminalClearLine}${Resources.progressFrames[this.progressFrame]}`);
|
|
67
|
+
}
|
|
68
|
+
writeLines(lines) {
|
|
69
|
+
this.write(`${lines.join(Resources.lineFeed)}${Resources.lineFeed}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=test-console-reporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-console-reporter.js","sourceRoot":"","sources":["../../../../../src/noldova.context.testing/src/services/reporting/test-console-reporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
import "@noldova/context.core";
|
|
9
|
+
import { TestOutcome } from "../../enums/test-outcome.js";
|
|
10
|
+
import { AssertFailedException } from "../../exceptions/assert-failed.exception.js";
|
|
11
|
+
import { Resources } from "../../resources.js";
|
|
12
|
+
export class TestReportWriter {
|
|
13
|
+
static LABEL_WIDTH = 12;
|
|
14
|
+
formatLines(result, skipPassingDetails) {
|
|
15
|
+
const lines = [];
|
|
16
|
+
for (const classResult of result.classResults)
|
|
17
|
+
lines.push(...this.formatClassLines(classResult, skipPassingDetails));
|
|
18
|
+
lines.push(...this.formatSummaryLines(result, result.selection));
|
|
19
|
+
return lines;
|
|
20
|
+
}
|
|
21
|
+
formatClassLines(classResult, skipPassingDetails) {
|
|
22
|
+
return this.formatClassBlock(this.formatClassHeading(classResult), classResult.methodResults.flatMap(t => this.formatMethodLines(t, skipPassingDetails)), skipPassingDetails);
|
|
23
|
+
}
|
|
24
|
+
formatClassHeading(classResult) {
|
|
25
|
+
return `${classResult.packageName}/${classResult.filePath} — ${classResult.className}`;
|
|
26
|
+
}
|
|
27
|
+
formatMethodLines(methodResult, skipPassingDetails) {
|
|
28
|
+
if (skipPassingDetails && methodResult.outcome === TestOutcome.Passed)
|
|
29
|
+
return [];
|
|
30
|
+
const duration = `${Math.round(methodResult.durationMilliseconds)} ${Resources.millisecondUnit}`;
|
|
31
|
+
const methodName = this.formatMethodName(methodResult);
|
|
32
|
+
if (methodResult.outcome === TestOutcome.Passed)
|
|
33
|
+
return [` ${Resources.terminalGreen}${Resources.passedMark}${Resources.terminalReset} ${methodName} (${duration})`];
|
|
34
|
+
if (methodResult.outcome === TestOutcome.Skipped)
|
|
35
|
+
return [` ${Resources.terminalYellow}${Resources.skippedMark}${Resources.terminalReset} ${Resources.skippedTest(methodName, methodResult.skipReason)}`];
|
|
36
|
+
const lines = [` ${Resources.terminalRed}${Resources.failedMark}${Resources.terminalReset} ${methodName} (${duration})`];
|
|
37
|
+
lines.push(...this.formatFailureLines(methodResult.failure));
|
|
38
|
+
return lines;
|
|
39
|
+
}
|
|
40
|
+
formatClassBlock(heading, methodLines, skipPassingDetails) {
|
|
41
|
+
if (skipPassingDetails && methodLines.length === 0)
|
|
42
|
+
return [];
|
|
43
|
+
return [heading, ...methodLines, String.empty];
|
|
44
|
+
}
|
|
45
|
+
formatSummaryLines(totals, selection) {
|
|
46
|
+
const lines = [Resources.testReportSeparator];
|
|
47
|
+
if (selection?.isFiltered === true)
|
|
48
|
+
lines.push(this.formatRow(Resources.filtersLabel, selection.filters.map(t => JSON.stringify(t)).join(", ")), this.formatRow(Resources.discoveredLabel, selection.discovered), this.formatRow(Resources.selectedLabel, selection.selected), this.formatRow(Resources.unselectedLabel, selection.unselected));
|
|
49
|
+
lines.push(this.formatRow(Resources.totalLabel, totals.total), this.formatRow(Resources.timeLabel, this.formatDuration(totals.durationMilliseconds)), `${Resources.terminalGreen}${this.formatRow(Resources.passedLabel, totals.passed)}${Resources.terminalReset}`);
|
|
50
|
+
if (totals.failed > 0)
|
|
51
|
+
lines.push(`${Resources.terminalRed}${this.formatRow(Resources.failedLabel, totals.failed)}${Resources.terminalReset}`);
|
|
52
|
+
if (totals.skipped > 0)
|
|
53
|
+
lines.push(`${Resources.terminalYellow}${this.formatRow(Resources.skippedLabel, totals.skipped)}${Resources.terminalReset}`);
|
|
54
|
+
return lines;
|
|
55
|
+
}
|
|
56
|
+
formatRow(label, value) {
|
|
57
|
+
return `${label.padEnd(TestReportWriter.LABEL_WIDTH)}${value}`;
|
|
58
|
+
}
|
|
59
|
+
formatDuration(durationMilliseconds) {
|
|
60
|
+
const roundedMilliseconds = Math.round(durationMilliseconds);
|
|
61
|
+
if (roundedMilliseconds < Resources.millisecondsPerSecond)
|
|
62
|
+
return `${roundedMilliseconds} ${Resources.millisecondUnit}`;
|
|
63
|
+
const totalCentiseconds = Math.round(roundedMilliseconds / Resources.millisecondsPerCentisecond);
|
|
64
|
+
const centisecondsPerMinute = Resources.centisecondsPerSecond * Resources.secondsPerMinute;
|
|
65
|
+
if (totalCentiseconds < centisecondsPerMinute)
|
|
66
|
+
return `${(totalCentiseconds / Resources.centisecondsPerSecond).toFixed(Resources.durationDecimalPlaces)} ${Resources.secondUnit}`;
|
|
67
|
+
const totalMinutes = Math.floor(totalCentiseconds / centisecondsPerMinute);
|
|
68
|
+
const seconds = totalCentiseconds % centisecondsPerMinute / Resources.centisecondsPerSecond;
|
|
69
|
+
if (totalMinutes < Resources.minutesPerHour)
|
|
70
|
+
return `${totalMinutes} ${Resources.minuteUnit} ${seconds.toFixed(Resources.durationDecimalPlaces)} ${Resources.secondUnit}`;
|
|
71
|
+
const hours = Math.floor(totalMinutes / Resources.minutesPerHour);
|
|
72
|
+
const minutes = totalMinutes % Resources.minutesPerHour;
|
|
73
|
+
return `${hours} ${Resources.hourUnit} ${minutes} ${Resources.minuteUnit} ${seconds.toFixed(Resources.durationDecimalPlaces)} ${Resources.secondUnit}`;
|
|
74
|
+
}
|
|
75
|
+
formatMethodName(methodResult) {
|
|
76
|
+
if (Object.isUndefined(methodResult.testDataIndex))
|
|
77
|
+
return methodResult.methodName;
|
|
78
|
+
return `${methodResult.methodName}[${methodResult.testDataIndex}](${methodResult.testData.map(t => this.formatValue(t)).join(Resources.valueSeparator)})`;
|
|
79
|
+
}
|
|
80
|
+
formatFailureLines(failure) {
|
|
81
|
+
try {
|
|
82
|
+
if (failure instanceof AssertFailedException) {
|
|
83
|
+
const lines = [`${Resources.reportIndent.repeat(2)}${this.formatValue(failure)}`];
|
|
84
|
+
if (!Object.isUndefined(failure.expected) || !Object.isUndefined(failure.actual)) {
|
|
85
|
+
lines.push(`${Resources.reportIndent.repeat(2)}${Resources.expectedLabel} ${this.formatValue(failure.expected)}`);
|
|
86
|
+
lines.push(`${Resources.reportIndent.repeat(2)}${Resources.actualLabel} ${this.formatValue(failure.actual)}`);
|
|
87
|
+
}
|
|
88
|
+
return lines;
|
|
89
|
+
}
|
|
90
|
+
if (failure instanceof Error)
|
|
91
|
+
return [`${Resources.reportIndent.repeat(2)}${this.formatValue(failure)}`];
|
|
92
|
+
return [`${Resources.reportIndent.repeat(2)}${Resources.threwLabel} ${this.formatValue(failure)}`];
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return [`${Resources.reportIndent.repeat(2)}${Resources.threwLabel} ${Resources.unprintableValue}`];
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
formatValue(value) {
|
|
99
|
+
try {
|
|
100
|
+
if (Object.isString(value))
|
|
101
|
+
return JSON.stringify(value);
|
|
102
|
+
if (value instanceof Error)
|
|
103
|
+
return `${value.name}: ${value.message}`;
|
|
104
|
+
return String(value);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return Resources.unprintableValue;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=test-report-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-report-writer.js","sourceRoot":"","sources":["../../../../../src/noldova.context.testing/src/services/reporting/test-report-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright (c) Noldova.
|
|
4
|
+
*
|
|
5
|
+
* This source code is licensed under the license found in the
|
|
6
|
+
* LICENSE file in the root directory of this source tree.
|
|
7
|
+
*/
|
|
8
|
+
export class SystemClock {
|
|
9
|
+
keepsProcessAlive;
|
|
10
|
+
constructor(keepsProcessAlive = true) {
|
|
11
|
+
this.keepsProcessAlive = keepsProcessAlive;
|
|
12
|
+
}
|
|
13
|
+
now() {
|
|
14
|
+
return performance.now();
|
|
15
|
+
}
|
|
16
|
+
setTimeout(callback, delayMilliseconds) {
|
|
17
|
+
const timer = setTimeout(callback, delayMilliseconds);
|
|
18
|
+
if (!this.keepsProcessAlive)
|
|
19
|
+
timer.unref();
|
|
20
|
+
return Number(timer);
|
|
21
|
+
}
|
|
22
|
+
clearTimeout(timer) {
|
|
23
|
+
clearTimeout(timer);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=system-clock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-clock.js","sourceRoot":"","sources":["../../../../../src/noldova.context.testing/src/services/timing/system-clock.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,OAAO,WAAW;IACL,iBAAiB,CAAU;IAE5C,YAAmB,iBAAiB,GAAY,IAAI;QAClD,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;IAEM,GAAG;QACR,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IAEM,UAAU,CAAC,QAAoB,EAAE,iBAAyB;QAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,iBAAiB;YACzB,KAAK,CAAC,KAAK,EAAE,CAAC;QAEhB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEM,YAAY,CAAC,KAAyB;QAC3C,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;CACF"}
|
package/README.md
DELETED