@git.zone/tstest 1.0.96 → 1.2.0
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_ts/00_commitinfo_data.js +2 -2
- package/dist_ts/index.d.ts +5 -0
- package/dist_ts/index.js +61 -4
- package/dist_ts/tstest.classes.tap.combinator.d.ts +3 -0
- package/dist_ts/tstest.classes.tap.combinator.js +14 -40
- package/dist_ts/tstest.classes.tap.parser.d.ts +3 -1
- package/dist_ts/tstest.classes.tap.parser.js +42 -18
- package/dist_ts/tstest.classes.tap.testresult.d.ts +1 -1
- package/dist_ts/tstest.classes.testdirectory.d.ts +9 -7
- package/dist_ts/tstest.classes.testdirectory.js +47 -8
- package/dist_ts/tstest.classes.tstest.d.ts +8 -3
- package/dist_ts/tstest.classes.tstest.js +35 -34
- package/dist_ts/tstest.logging.d.ts +48 -0
- package/dist_ts/tstest.logging.js +228 -0
- package/package.json +12 -12
- package/readme.plan.md +199 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +65 -3
- package/ts/tstest.classes.tap.combinator.ts +19 -41
- package/ts/tstest.classes.tap.parser.ts +44 -47
- package/ts/tstest.classes.testdirectory.ts +59 -14
- package/ts/tstest.classes.tstest.ts +42 -36
- package/ts/tstest.logging.ts +285 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tstest',
|
|
6
|
-
version: '1.0
|
|
6
|
+
version: '1.2.0',
|
|
7
7
|
description: 'a test utility to run tests that match test/**/*.ts'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHFEQUFxRDtDQUNuRSxDQUFBIn0=
|
package/dist_ts/index.d.ts
CHANGED
package/dist_ts/index.js
CHANGED
|
@@ -1,10 +1,67 @@
|
|
|
1
1
|
import { TsTest } from './tstest.classes.tstest.js';
|
|
2
|
+
export var TestExecutionMode;
|
|
3
|
+
(function (TestExecutionMode) {
|
|
4
|
+
TestExecutionMode["DIRECTORY"] = "directory";
|
|
5
|
+
TestExecutionMode["FILE"] = "file";
|
|
6
|
+
TestExecutionMode["GLOB"] = "glob";
|
|
7
|
+
})(TestExecutionMode || (TestExecutionMode = {}));
|
|
2
8
|
export const runCli = async () => {
|
|
3
|
-
|
|
4
|
-
|
|
9
|
+
// Parse command line arguments
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
const logOptions = {};
|
|
12
|
+
let testPath = null;
|
|
13
|
+
// Parse options
|
|
14
|
+
for (let i = 0; i < args.length; i++) {
|
|
15
|
+
const arg = args[i];
|
|
16
|
+
switch (arg) {
|
|
17
|
+
case '--quiet':
|
|
18
|
+
case '-q':
|
|
19
|
+
logOptions.quiet = true;
|
|
20
|
+
break;
|
|
21
|
+
case '--verbose':
|
|
22
|
+
case '-v':
|
|
23
|
+
logOptions.verbose = true;
|
|
24
|
+
break;
|
|
25
|
+
case '--no-color':
|
|
26
|
+
logOptions.noColor = true;
|
|
27
|
+
break;
|
|
28
|
+
case '--json':
|
|
29
|
+
logOptions.json = true;
|
|
30
|
+
break;
|
|
31
|
+
case '--log-file':
|
|
32
|
+
if (i + 1 < args.length) {
|
|
33
|
+
logOptions.logFile = args[++i];
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
default:
|
|
37
|
+
if (!arg.startsWith('-')) {
|
|
38
|
+
testPath = arg;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!testPath) {
|
|
43
|
+
console.error('You must specify a test directory/file/pattern as argument. Please try again.');
|
|
44
|
+
console.error('\nUsage: tstest <path> [options]');
|
|
45
|
+
console.error('\nOptions:');
|
|
46
|
+
console.error(' --quiet, -q Minimal output');
|
|
47
|
+
console.error(' --verbose, -v Verbose output');
|
|
48
|
+
console.error(' --no-color Disable colored output');
|
|
49
|
+
console.error(' --json Output results as JSON');
|
|
50
|
+
console.error(' --log-file Write logs to file');
|
|
5
51
|
process.exit(1);
|
|
6
52
|
}
|
|
7
|
-
|
|
53
|
+
let executionMode;
|
|
54
|
+
// Detect execution mode based on the argument
|
|
55
|
+
if (testPath.includes('*') || testPath.includes('?') || testPath.includes('[') || testPath.includes('{')) {
|
|
56
|
+
executionMode = TestExecutionMode.GLOB;
|
|
57
|
+
}
|
|
58
|
+
else if (testPath.endsWith('.ts')) {
|
|
59
|
+
executionMode = TestExecutionMode.FILE;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
executionMode = TestExecutionMode.DIRECTORY;
|
|
63
|
+
}
|
|
64
|
+
const tsTestInstance = new TsTest(process.cwd(), testPath, executionMode, logOptions);
|
|
8
65
|
await tsTestInstance.run();
|
|
9
66
|
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHcEQsTUFBTSxDQUFOLElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQiw0Q0FBdUIsQ0FBQTtJQUN2QixrQ0FBYSxDQUFBO0lBQ2Isa0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBSTVCO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQy9CLCtCQUErQjtJQUMvQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuQyxNQUFNLFVBQVUsR0FBZSxFQUFFLENBQUM7SUFDbEMsSUFBSSxRQUFRLEdBQWtCLElBQUksQ0FBQztJQUVuQyxnQkFBZ0I7SUFDaEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEIsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNaLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxJQUFJO2dCQUNQLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixNQUFNO1lBQ1IsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxJQUFJO2dCQUNQLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixNQUFNO1lBQ1IsS0FBSyxZQUFZO2dCQUNmLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLFVBQVUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUN2QixNQUFNO1lBQ1IsS0FBSyxZQUFZO2dCQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3hCLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7Z0JBQ0QsTUFBTTtZQUNSO2dCQUNFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLFFBQVEsR0FBRyxHQUFHLENBQUM7Z0JBQ2pCLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0VBQStFLENBQUMsQ0FBQztRQUMvRixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7UUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQztRQUMxRCxPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksYUFBZ0MsQ0FBQztJQUVyQyw4Q0FBOEM7SUFDOUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekcsYUFBYSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQztJQUN6QyxDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEMsYUFBYSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQztJQUN6QyxDQUFDO1NBQU0sQ0FBQztRQUNOLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RGLE1BQU0sY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdCLENBQUMsQ0FBQyJ9
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { TapParser } from './tstest.classes.tap.parser.js';
|
|
2
|
+
import { TsTestLogger } from './tstest.logging.js';
|
|
2
3
|
export declare class TapCombinator {
|
|
3
4
|
tapParserStore: TapParser[];
|
|
5
|
+
private logger;
|
|
6
|
+
constructor(logger: TsTestLogger);
|
|
4
7
|
addTapParser(tapParserArg: TapParser): void;
|
|
5
8
|
evaluate(): void;
|
|
6
9
|
}
|
|
@@ -5,58 +5,32 @@ import * as plugins from './tstest.plugins.js';
|
|
|
5
5
|
import { coloredString as cs } from '@push.rocks/consolecolor';
|
|
6
6
|
import { TapParser } from './tstest.classes.tap.parser.js';
|
|
7
7
|
import * as logPrefixes from './tstest.logprefixes.js';
|
|
8
|
+
import { TsTestLogger } from './tstest.logging.js';
|
|
8
9
|
export class TapCombinator {
|
|
9
|
-
constructor() {
|
|
10
|
+
constructor(logger) {
|
|
10
11
|
this.tapParserStore = [];
|
|
12
|
+
this.logger = logger;
|
|
11
13
|
}
|
|
12
14
|
addTapParser(tapParserArg) {
|
|
13
15
|
this.tapParserStore.push(tapParserArg);
|
|
14
16
|
}
|
|
15
17
|
evaluate() {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
// Call the logger's summary method
|
|
19
|
+
this.logger.summary();
|
|
20
|
+
// Check for failures
|
|
21
|
+
let failGlobal = false;
|
|
18
22
|
for (const tapParser of this.tapParserStore) {
|
|
19
|
-
if (!tapParser.expectedTests
|
|
23
|
+
if (!tapParser.expectedTests ||
|
|
24
|
+
tapParser.expectedTests !== tapParser.receivedTests ||
|
|
25
|
+
tapParser.getErrorTests().length > 0) {
|
|
20
26
|
failGlobal = true;
|
|
21
|
-
|
|
22
|
-
cs(` ${tapParser.fileName} ${plugins.figures.cross}`, 'red') +
|
|
23
|
-
` ${plugins.figures.pointer} ` +
|
|
24
|
-
`does not specify tests!`;
|
|
25
|
-
console.log(overviewString);
|
|
27
|
+
break;
|
|
26
28
|
}
|
|
27
|
-
else if (tapParser.expectedTests !== tapParser.receivedTests) {
|
|
28
|
-
failGlobal = true;
|
|
29
|
-
let overviewString = logPrefixes.TsTestPrefix +
|
|
30
|
-
cs(` ${tapParser.fileName} ${plugins.figures.cross}`, 'red') +
|
|
31
|
-
` ${plugins.figures.pointer} ` +
|
|
32
|
-
tapParser.getTestOverviewAsString() +
|
|
33
|
-
`did not execute all specified tests!`;
|
|
34
|
-
console.log(overviewString);
|
|
35
|
-
}
|
|
36
|
-
else if (tapParser.getErrorTests().length === 0) {
|
|
37
|
-
let overviewString = logPrefixes.TsTestPrefix +
|
|
38
|
-
cs(` ${tapParser.fileName} ${plugins.figures.tick}`, 'green') +
|
|
39
|
-
` ${plugins.figures.pointer} ` +
|
|
40
|
-
tapParser.getTestOverviewAsString();
|
|
41
|
-
console.log(overviewString);
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
failGlobal = true;
|
|
45
|
-
let overviewString = logPrefixes.TsTestPrefix +
|
|
46
|
-
cs(` ${tapParser.fileName} ${plugins.figures.cross}`, 'red') +
|
|
47
|
-
` ${plugins.figures.pointer} ` +
|
|
48
|
-
tapParser.getTestOverviewAsString();
|
|
49
|
-
console.log(overviewString);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
console.log(cs(plugins.figures.hamburger.repeat(48), 'cyan'));
|
|
53
|
-
if (!failGlobal) {
|
|
54
|
-
console.log(cs('FINAL RESULT: SUCCESS!', 'green'));
|
|
55
29
|
}
|
|
56
|
-
|
|
57
|
-
|
|
30
|
+
// Exit with error code if tests failed
|
|
31
|
+
if (failGlobal) {
|
|
58
32
|
process.exit(1);
|
|
59
33
|
}
|
|
60
34
|
}
|
|
61
35
|
}
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LmNsYXNzZXMudGFwLmNvbWJpbmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90c3Rlc3QuY2xhc3Nlcy50YXAuY29tYmluYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxlQUFlO0FBQ2YseURBQXlEO0FBQ3pELGVBQWU7QUFDZixPQUFPLEtBQUssT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxhQUFhO0lBSXhCLFlBQVksTUFBb0I7UUFIaEMsbUJBQWMsR0FBZ0IsRUFBRSxDQUFDO1FBSS9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZLENBQUMsWUFBdUI7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDTixtQ0FBbUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV0QixxQkFBcUI7UUFDckIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTtnQkFDeEIsU0FBUyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsYUFBYTtnQkFDbkQsU0FBUyxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDbEIsTUFBTTtZQUNSLENBQUM7UUFDSCxDQUFDO1FBRUQsdUNBQXVDO1FBQ3ZDLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ChildProcess } from 'child_process';
|
|
2
2
|
import { TapTestResult } from './tstest.classes.tap.testresult.js';
|
|
3
|
+
import { TsTestLogger } from './tstest.logging.js';
|
|
3
4
|
export declare class TapParser {
|
|
4
5
|
fileName: string;
|
|
5
6
|
testStore: TapTestResult[];
|
|
@@ -9,10 +10,11 @@ export declare class TapParser {
|
|
|
9
10
|
testStatusRegex: RegExp;
|
|
10
11
|
activeTapTestResult: TapTestResult;
|
|
11
12
|
pretaskRegex: RegExp;
|
|
13
|
+
private logger;
|
|
12
14
|
/**
|
|
13
15
|
* the constructor for TapParser
|
|
14
16
|
*/
|
|
15
|
-
constructor(fileName: string);
|
|
17
|
+
constructor(fileName: string, logger?: TsTestLogger);
|
|
16
18
|
private _getNewTapTestResult;
|
|
17
19
|
private _processLog;
|
|
18
20
|
/**
|
|
@@ -6,16 +6,18 @@ import { coloredString as cs } from '@push.rocks/consolecolor';
|
|
|
6
6
|
import * as plugins from './tstest.plugins.js';
|
|
7
7
|
import { TapTestResult } from './tstest.classes.tap.testresult.js';
|
|
8
8
|
import * as logPrefixes from './tstest.logprefixes.js';
|
|
9
|
+
import { TsTestLogger } from './tstest.logging.js';
|
|
9
10
|
export class TapParser {
|
|
10
11
|
/**
|
|
11
12
|
* the constructor for TapParser
|
|
12
13
|
*/
|
|
13
|
-
constructor(fileName) {
|
|
14
|
+
constructor(fileName, logger) {
|
|
14
15
|
this.fileName = fileName;
|
|
15
16
|
this.testStore = [];
|
|
16
17
|
this.expectedTestsRegex = /([0-9]*)\.\.([0-9]*)$/;
|
|
17
18
|
this.testStatusRegex = /(ok|not\sok)\s([0-9]+)\s-\s(.*)\s#\stime=(.*)ms$/;
|
|
18
19
|
this.pretaskRegex = /^::__PRETASK:(.*)$/;
|
|
20
|
+
this.logger = logger;
|
|
19
21
|
}
|
|
20
22
|
_getNewTapTestResult() {
|
|
21
23
|
this.activeTapTestResult = new TapTestResult(this.testStore.length + 1);
|
|
@@ -35,7 +37,9 @@ export class TapParser {
|
|
|
35
37
|
logLineIsTapProtocol = true;
|
|
36
38
|
const regexResult = this.expectedTestsRegex.exec(logLine);
|
|
37
39
|
this.expectedTests = parseInt(regexResult[2]);
|
|
38
|
-
|
|
40
|
+
if (this.logger) {
|
|
41
|
+
this.logger.tapOutput(`Expecting ${this.expectedTests} tests!`);
|
|
42
|
+
}
|
|
39
43
|
// initiating first TapResult
|
|
40
44
|
this._getNewTapTestResult();
|
|
41
45
|
}
|
|
@@ -43,7 +47,9 @@ export class TapParser {
|
|
|
43
47
|
logLineIsTapProtocol = true;
|
|
44
48
|
const pretaskContentMatch = this.pretaskRegex.exec(logLine);
|
|
45
49
|
if (pretaskContentMatch && pretaskContentMatch[1]) {
|
|
46
|
-
|
|
50
|
+
if (this.logger) {
|
|
51
|
+
this.logger.tapOutput(`Pretask -> ${pretaskContentMatch[1]}: Success.`);
|
|
52
|
+
}
|
|
47
53
|
}
|
|
48
54
|
}
|
|
49
55
|
else if (this.testStatusRegex.test(logLine)) {
|
|
@@ -60,25 +66,29 @@ export class TapParser {
|
|
|
60
66
|
const testDuration = parseInt(regexResult[4]);
|
|
61
67
|
// test for protocol error
|
|
62
68
|
if (testId !== this.activeTapTestResult.id) {
|
|
63
|
-
|
|
69
|
+
if (this.logger) {
|
|
70
|
+
this.logger.error('Something is strange! Test Ids are not equal!');
|
|
71
|
+
}
|
|
64
72
|
}
|
|
65
73
|
this.activeTapTestResult.setTestResult(testOk);
|
|
66
74
|
if (testOk) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
if (this.logger) {
|
|
76
|
+
this.logger.testResult(testSubject, true, testDuration);
|
|
77
|
+
}
|
|
70
78
|
}
|
|
71
79
|
else {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
80
|
+
if (this.logger) {
|
|
81
|
+
this.logger.testResult(testSubject, false, testDuration);
|
|
82
|
+
}
|
|
75
83
|
}
|
|
76
84
|
}
|
|
77
85
|
if (!logLineIsTapProtocol) {
|
|
78
86
|
if (this.activeTapTestResult) {
|
|
79
87
|
this.activeTapTestResult.addLogLine(logLine);
|
|
80
88
|
}
|
|
81
|
-
|
|
89
|
+
if (this.logger) {
|
|
90
|
+
this.logger.tapOutput(logLine);
|
|
91
|
+
}
|
|
82
92
|
}
|
|
83
93
|
if (this.activeTapTestResult && this.activeTapTestResult.testSettled) {
|
|
84
94
|
this.testStore.push(this.activeTapTestResult);
|
|
@@ -143,23 +153,37 @@ export class TapParser {
|
|
|
143
153
|
this.receivedTests = this.testStore.length;
|
|
144
154
|
// check wether all tests ran
|
|
145
155
|
if (this.expectedTests === this.receivedTests) {
|
|
146
|
-
|
|
156
|
+
if (this.logger) {
|
|
157
|
+
this.logger.tapOutput(`${this.receivedTests} out of ${this.expectedTests} Tests completed!`);
|
|
158
|
+
}
|
|
147
159
|
}
|
|
148
160
|
else {
|
|
149
|
-
|
|
161
|
+
if (this.logger) {
|
|
162
|
+
this.logger.error(`Only ${this.receivedTests} out of ${this.expectedTests} completed!`);
|
|
163
|
+
}
|
|
150
164
|
}
|
|
151
165
|
if (!this.expectedTests) {
|
|
152
|
-
|
|
166
|
+
if (this.logger) {
|
|
167
|
+
this.logger.error('No tests were defined. Therefore the testfile failed!');
|
|
168
|
+
}
|
|
153
169
|
}
|
|
154
170
|
else if (this.expectedTests !== this.receivedTests) {
|
|
155
|
-
|
|
171
|
+
if (this.logger) {
|
|
172
|
+
this.logger.error('The amount of received tests and expectedTests is unequal! Therefore the testfile failed');
|
|
173
|
+
}
|
|
156
174
|
}
|
|
157
175
|
else if (this.getErrorTests().length === 0) {
|
|
158
|
-
|
|
176
|
+
if (this.logger) {
|
|
177
|
+
this.logger.tapOutput('All tests are successfull!!!');
|
|
178
|
+
this.logger.testFileEnd(this.receivedTests, 0, 0);
|
|
179
|
+
}
|
|
159
180
|
}
|
|
160
181
|
else {
|
|
161
|
-
|
|
182
|
+
if (this.logger) {
|
|
183
|
+
this.logger.tapOutput(`${this.getErrorTests().length} tests threw an error!!!`, true);
|
|
184
|
+
this.logger.testFileEnd(this.receivedTests - this.getErrorTests().length, this.getErrorTests().length, 0);
|
|
185
|
+
}
|
|
162
186
|
}
|
|
163
187
|
}
|
|
164
188
|
}
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LmNsYXNzZXMudGFwLnBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3RzdGVzdC5jbGFzc2VzLnRhcC5wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxJQUFJLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRS9ELGVBQWU7QUFDZix5REFBeUQ7QUFDekQsZUFBZTtBQUNmLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRW5ELE1BQU0sT0FBTyxTQUFTO0lBY3BCOztPQUVHO0lBQ0gsWUFBbUIsUUFBZ0IsRUFBRSxNQUFxQjtRQUF2QyxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBaEJuQyxjQUFTLEdBQW9CLEVBQUUsQ0FBQztRQUVoQyx1QkFBa0IsR0FBRyx1QkFBdUIsQ0FBQztRQUk3QyxvQkFBZSxHQUFHLGtEQUFrRCxDQUFDO1FBR3JFLGlCQUFZLEdBQUcsb0JBQW9CLENBQUM7UUFRbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLFdBQVcsQ0FBQyxRQUF5QjtRQUMzQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM5QixRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFD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
|
|
@@ -1,27 +1,29 @@
|
|
|
1
1
|
import { SmartFile } from '@push.rocks/smartfile';
|
|
2
|
+
import { TestExecutionMode } from './index.js';
|
|
2
3
|
export declare class TestDirectory {
|
|
3
4
|
/**
|
|
4
5
|
* the current working directory
|
|
5
6
|
*/
|
|
6
7
|
cwd: string;
|
|
7
8
|
/**
|
|
8
|
-
* the
|
|
9
|
+
* the test path or pattern
|
|
9
10
|
*/
|
|
10
|
-
|
|
11
|
+
testPath: string;
|
|
11
12
|
/**
|
|
12
|
-
* the
|
|
13
|
+
* the execution mode
|
|
13
14
|
*/
|
|
14
|
-
|
|
15
|
+
executionMode: TestExecutionMode;
|
|
15
16
|
/**
|
|
16
17
|
* an array of Smartfiles
|
|
17
18
|
*/
|
|
18
19
|
testfileArray: SmartFile[];
|
|
19
20
|
/**
|
|
20
21
|
* the constructor for TestDirectory
|
|
21
|
-
*
|
|
22
|
-
* @param
|
|
22
|
+
* @param cwdArg - the current working directory
|
|
23
|
+
* @param testPathArg - the test path/pattern
|
|
24
|
+
* @param executionModeArg - the execution mode
|
|
23
25
|
*/
|
|
24
|
-
constructor(cwdArg: string,
|
|
26
|
+
constructor(cwdArg: string, testPathArg: string, executionModeArg: TestExecutionMode);
|
|
25
27
|
private _init;
|
|
26
28
|
getTestFilePathArray(): Promise<string[]>;
|
|
27
29
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as plugins from './tstest.plugins.js';
|
|
2
2
|
import * as paths from './tstest.paths.js';
|
|
3
3
|
import { SmartFile } from '@push.rocks/smartfile';
|
|
4
|
+
import { TestExecutionMode } from './index.js';
|
|
4
5
|
// tap related stuff
|
|
5
6
|
import { TapCombinator } from './tstest.classes.tap.combinator.js';
|
|
6
7
|
import { TapParser } from './tstest.classes.tap.parser.js';
|
|
@@ -8,28 +9,66 @@ import { TapTestResult } from './tstest.classes.tap.testresult.js';
|
|
|
8
9
|
export class TestDirectory {
|
|
9
10
|
/**
|
|
10
11
|
* the constructor for TestDirectory
|
|
11
|
-
*
|
|
12
|
-
* @param
|
|
12
|
+
* @param cwdArg - the current working directory
|
|
13
|
+
* @param testPathArg - the test path/pattern
|
|
14
|
+
* @param executionModeArg - the execution mode
|
|
13
15
|
*/
|
|
14
|
-
constructor(cwdArg,
|
|
16
|
+
constructor(cwdArg, testPathArg, executionModeArg) {
|
|
15
17
|
/**
|
|
16
18
|
* an array of Smartfiles
|
|
17
19
|
*/
|
|
18
20
|
this.testfileArray = [];
|
|
19
21
|
this.cwd = cwdArg;
|
|
20
|
-
this.
|
|
22
|
+
this.testPath = testPathArg;
|
|
23
|
+
this.executionMode = executionModeArg;
|
|
21
24
|
}
|
|
22
25
|
async _init() {
|
|
23
|
-
|
|
26
|
+
switch (this.executionMode) {
|
|
27
|
+
case TestExecutionMode.FILE:
|
|
28
|
+
// Single file mode
|
|
29
|
+
const filePath = plugins.path.isAbsolute(this.testPath)
|
|
30
|
+
? this.testPath
|
|
31
|
+
: plugins.path.join(this.cwd, this.testPath);
|
|
32
|
+
if (await plugins.smartfile.fs.fileExists(filePath)) {
|
|
33
|
+
this.testfileArray = [await plugins.smartfile.SmartFile.fromFilePath(filePath)];
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
throw new Error(`Test file not found: ${filePath}`);
|
|
37
|
+
}
|
|
38
|
+
break;
|
|
39
|
+
case TestExecutionMode.GLOB:
|
|
40
|
+
// Glob pattern mode - use listFileTree which supports glob patterns
|
|
41
|
+
const globPattern = this.testPath;
|
|
42
|
+
const matchedFiles = await plugins.smartfile.fs.listFileTree(this.cwd, globPattern);
|
|
43
|
+
this.testfileArray = await Promise.all(matchedFiles.map(async (filePath) => {
|
|
44
|
+
const absolutePath = plugins.path.isAbsolute(filePath)
|
|
45
|
+
? filePath
|
|
46
|
+
: plugins.path.join(this.cwd, filePath);
|
|
47
|
+
return await plugins.smartfile.SmartFile.fromFilePath(absolutePath);
|
|
48
|
+
}));
|
|
49
|
+
break;
|
|
50
|
+
case TestExecutionMode.DIRECTORY:
|
|
51
|
+
// Directory mode - now recursive with ** pattern
|
|
52
|
+
const dirPath = plugins.path.join(this.cwd, this.testPath);
|
|
53
|
+
const testPattern = '**/test*.ts';
|
|
54
|
+
const testFiles = await plugins.smartfile.fs.listFileTree(dirPath, testPattern);
|
|
55
|
+
this.testfileArray = await Promise.all(testFiles.map(async (filePath) => {
|
|
56
|
+
const absolutePath = plugins.path.isAbsolute(filePath)
|
|
57
|
+
? filePath
|
|
58
|
+
: plugins.path.join(dirPath, filePath);
|
|
59
|
+
return await plugins.smartfile.SmartFile.fromFilePath(absolutePath);
|
|
60
|
+
}));
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
24
63
|
}
|
|
25
64
|
async getTestFilePathArray() {
|
|
26
65
|
await this._init();
|
|
27
66
|
const testFilePaths = [];
|
|
28
67
|
for (const testFile of this.testfileArray) {
|
|
29
|
-
|
|
30
|
-
testFilePaths.push(
|
|
68
|
+
// Use the path directly from the SmartFile
|
|
69
|
+
testFilePaths.push(testFile.path);
|
|
31
70
|
}
|
|
32
71
|
return testFilePaths;
|
|
33
72
|
}
|
|
34
73
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LmNsYXNzZXMudGVzdGRpcmVjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3RzdGVzdC5jbGFzc2VzLnRlc3RkaXJlY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxxQkFBcUIsQ0FBQztBQUMvQyxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFL0Msb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRW5FLE1BQU0sT0FBTyxhQUFhO0lBcUJ4Qjs7Ozs7T0FLRztJQUNILFlBQVksTUFBYyxFQUFFLFdBQW1CLEVBQUUsZ0JBQW1DO1FBWHBGOztXQUVHO1FBQ0gsa0JBQWEsR0FBZ0IsRUFBRSxDQUFDO1FBUzlCLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7SUFDeEMsQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFLO1FBQ2pCLFFBQVEsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLEtBQUssaUJBQWlCLENBQUMsSUFBSTtnQkFDekIsbUJBQW1CO2dCQUNuQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7b0JBQ2YsQ0FBQyxDQUFD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
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import * as plugins from './tstest.plugins.js';
|
|
2
2
|
import { TestDirectory } from './tstest.classes.testdirectory.js';
|
|
3
3
|
import { TapParser } from './tstest.classes.tap.parser.js';
|
|
4
|
+
import { TestExecutionMode } from './index.js';
|
|
5
|
+
import { TsTestLogger } from './tstest.logging.js';
|
|
6
|
+
import type { LogOptions } from './tstest.logging.js';
|
|
4
7
|
export declare class TsTest {
|
|
5
8
|
testDir: TestDirectory;
|
|
9
|
+
executionMode: TestExecutionMode;
|
|
10
|
+
logger: TsTestLogger;
|
|
6
11
|
smartshellInstance: plugins.smartshell.Smartshell;
|
|
7
12
|
smartbrowserInstance: plugins.smartbrowser.SmartBrowser;
|
|
8
13
|
tsbundleInstance: plugins.tsbundle.TsBundle;
|
|
9
|
-
constructor(cwdArg: string,
|
|
14
|
+
constructor(cwdArg: string, testPathArg: string, executionModeArg: TestExecutionMode, logOptions?: LogOptions);
|
|
10
15
|
run(): Promise<void>;
|
|
11
|
-
runInNode(fileNameArg: string): Promise<TapParser>;
|
|
12
|
-
runInChrome(fileNameArg: string): Promise<TapParser>;
|
|
16
|
+
runInNode(fileNameArg: string, index: number, total: number): Promise<TapParser>;
|
|
17
|
+
runInChrome(fileNameArg: string, index: number, total: number): Promise<TapParser>;
|
|
13
18
|
runInDeno(): Promise<void>;
|
|
14
19
|
}
|