@git.zone/tstest 1.0.95 → 1.1.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 +21 -3
- 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 +3 -1
- package/dist_ts/tstest.classes.tstest.js +7 -6
- package/package.json +12 -12
- package/readme.plan.md +51 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +21 -2
- package/ts/tstest.classes.testdirectory.ts +59 -14
- package/ts/tstest.classes.tstest.ts +7 -5
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tstest',
|
|
6
|
-
version: '1.0
|
|
6
|
+
version: '1.1.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,28 @@
|
|
|
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
9
|
if (!process.argv[2]) {
|
|
4
|
-
console.error('You must specify a test directory as argument. Please try again.');
|
|
10
|
+
console.error('You must specify a test directory/file/pattern as argument. Please try again.');
|
|
5
11
|
process.exit(1);
|
|
6
12
|
}
|
|
7
|
-
const
|
|
13
|
+
const testPath = process.argv[2];
|
|
14
|
+
let executionMode;
|
|
15
|
+
// Detect execution mode based on the argument
|
|
16
|
+
if (testPath.includes('*') || testPath.includes('?') || testPath.includes('[') || testPath.includes('{')) {
|
|
17
|
+
executionMode = TestExecutionMode.GLOB;
|
|
18
|
+
}
|
|
19
|
+
else if (testPath.endsWith('.ts')) {
|
|
20
|
+
executionMode = TestExecutionMode.FILE;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
executionMode = TestExecutionMode.DIRECTORY;
|
|
24
|
+
}
|
|
25
|
+
const tsTestInstance = new TsTest(process.cwd(), testPath, executionMode);
|
|
8
26
|
await tsTestInstance.run();
|
|
9
27
|
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFcEQsTUFBTSxDQUFOLElBQVksaUJBSVg7QUFKRCxXQUFZLGlCQUFpQjtJQUMzQiw0Q0FBdUIsQ0FBQTtJQUN2QixrQ0FBYSxDQUFBO0lBQ2Isa0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBSTVCO0FBRUQsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxFQUFFO0lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQy9GLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsSUFBSSxhQUFnQyxDQUFDO0lBRXJDLDhDQUE4QztJQUM5QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN6RyxhQUFhLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7U0FBTSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxhQUFhLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7U0FBTSxDQUFDO1FBQ04sYUFBYSxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMxRSxNQUFNLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3QixDQUFDLENBQUMifQ==
|
|
@@ -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,12 +1,14 @@
|
|
|
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';
|
|
4
5
|
export declare class TsTest {
|
|
5
6
|
testDir: TestDirectory;
|
|
7
|
+
executionMode: TestExecutionMode;
|
|
6
8
|
smartshellInstance: plugins.smartshell.Smartshell;
|
|
7
9
|
smartbrowserInstance: plugins.smartbrowser.SmartBrowser;
|
|
8
10
|
tsbundleInstance: plugins.tsbundle.TsBundle;
|
|
9
|
-
constructor(cwdArg: string,
|
|
11
|
+
constructor(cwdArg: string, testPathArg: string, executionModeArg: TestExecutionMode);
|
|
10
12
|
run(): Promise<void>;
|
|
11
13
|
runInNode(fileNameArg: string): Promise<TapParser>;
|
|
12
14
|
runInChrome(fileNameArg: string): Promise<TapParser>;
|
|
@@ -5,8 +5,9 @@ import { coloredString as cs } from '@push.rocks/consolecolor';
|
|
|
5
5
|
import { TestDirectory } from './tstest.classes.testdirectory.js';
|
|
6
6
|
import { TapCombinator } from './tstest.classes.tap.combinator.js';
|
|
7
7
|
import { TapParser } from './tstest.classes.tap.parser.js';
|
|
8
|
+
import { TestExecutionMode } from './index.js';
|
|
8
9
|
export class TsTest {
|
|
9
|
-
constructor(cwdArg,
|
|
10
|
+
constructor(cwdArg, testPathArg, executionModeArg) {
|
|
10
11
|
this.smartshellInstance = new plugins.smartshell.Smartshell({
|
|
11
12
|
executor: 'bash',
|
|
12
13
|
pathDirectories: [paths.binDirectory],
|
|
@@ -14,7 +15,8 @@ export class TsTest {
|
|
|
14
15
|
});
|
|
15
16
|
this.smartbrowserInstance = new plugins.smartbrowser.SmartBrowser();
|
|
16
17
|
this.tsbundleInstance = new plugins.tsbundle.TsBundle();
|
|
17
|
-
this.
|
|
18
|
+
this.executionMode = executionModeArg;
|
|
19
|
+
this.testDir = new TestDirectory(cwdArg, testPathArg, executionModeArg);
|
|
18
20
|
}
|
|
19
21
|
async run() {
|
|
20
22
|
const fileNamesToRun = await this.testDir.getTestFilePathArray();
|
|
@@ -138,18 +140,17 @@ export class TsTest {
|
|
|
138
140
|
try {
|
|
139
141
|
// Dynamically import the test module
|
|
140
142
|
const testModule = await import(`/${bundleName}`);
|
|
141
|
-
await new Promise(resolve => setTimeout(resolve, 0));
|
|
142
143
|
if (testModule && testModule.default && testModule.default instanceof Promise) {
|
|
143
144
|
// Execute the exported test function
|
|
144
145
|
await testModule.default;
|
|
145
146
|
}
|
|
146
|
-
else if (testModule && testModule.default && testModule.default.then === 'function') {
|
|
147
|
+
else if (testModule && testModule.default && typeof testModule.default.then === 'function') {
|
|
147
148
|
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
|
|
148
149
|
console.log('Test module default export is just promiselike: Something might be messing with your Promise implementation.');
|
|
149
150
|
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
|
|
150
151
|
await testModule.default;
|
|
151
152
|
}
|
|
152
|
-
else if (globalThis.tapPromise && globalThis.tapPromise.then === 'function') {
|
|
153
|
+
else if (globalThis.tapPromise && typeof globalThis.tapPromise.then === 'function') {
|
|
153
154
|
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
|
|
154
155
|
console.log('Using globalThis.tapPromise');
|
|
155
156
|
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
|
|
@@ -177,4 +178,4 @@ export class TsTest {
|
|
|
177
178
|
}
|
|
178
179
|
async runInDeno() { }
|
|
179
180
|
}
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LmNsYXNzZXMudHN0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdHN0ZXN0LmNsYXNzZXMudHN0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFM0QsTUFBTSxPQUFPLE1BQU07SUFZakIsWUFBWSxNQUFjLEVBQUUsMkJBQW1DO1FBVHhELHVCQUFrQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDNUQsUUFBUSxFQUFFLE1BQU07WUFDaEIsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUNyQyxlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDLENBQUM7UUFDSSx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFL0QscUJBQWdCLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBR3hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxjQUFjLEdBQWEsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENB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
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0ZXN0LmNsYXNzZXMudHN0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdHN0ZXN0LmNsYXNzZXMudHN0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxLQUFLLEtBQUssTUFBTSxtQkFBbUIsQ0FBQztBQUMzQyxPQUFPLEtBQUssV0FBVyxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxhQUFhLElBQUksRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRS9DLE1BQU0sT0FBTyxNQUFNO0lBYWpCLFlBQVksTUFBYyxFQUFFLFdBQW1CLEVBQUUsZ0JBQW1DO1FBVDdFLHVCQUFrQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7WUFDNUQsUUFBUSxFQUFFLE1BQU07WUFDaEIsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztZQUNyQyxlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFDLENBQUM7UUFDSSx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFL0QscUJBQWdCLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBR3hELElBQUksQ0FBQyxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7UUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLGdCQUFn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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tstest",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "a test utility to run tests that match test/**/*.ts",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -12,24 +12,24 @@
|
|
|
12
12
|
"tstest": "./cli.js"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
|
-
"@git.zone/tsbuild": "^2.
|
|
16
|
-
"@types/node": "^22.
|
|
15
|
+
"@git.zone/tsbuild": "^2.5.1",
|
|
16
|
+
"@types/node": "^22.15.18"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@api.global/typedserver": "^3.0.
|
|
20
|
-
"@git.zone/tsbundle": "^2.
|
|
19
|
+
"@api.global/typedserver": "^3.0.74",
|
|
20
|
+
"@git.zone/tsbundle": "^2.2.5",
|
|
21
21
|
"@git.zone/tsrun": "^1.3.3",
|
|
22
22
|
"@push.rocks/consolecolor": "^2.0.2",
|
|
23
23
|
"@push.rocks/smartbrowser": "^2.0.8",
|
|
24
24
|
"@push.rocks/smartdelay": "^3.0.5",
|
|
25
|
-
"@push.rocks/smartfile": "^11.
|
|
26
|
-
"@push.rocks/smartlog": "^3.0.
|
|
27
|
-
"@push.rocks/smartpromise": "^4.2.
|
|
28
|
-
"@push.rocks/smartshell": "^3.2.
|
|
29
|
-
"@push.rocks/tapbundle": "^
|
|
30
|
-
"@types/ws": "^8.
|
|
25
|
+
"@push.rocks/smartfile": "^11.2.0",
|
|
26
|
+
"@push.rocks/smartlog": "^3.0.9",
|
|
27
|
+
"@push.rocks/smartpromise": "^4.2.3",
|
|
28
|
+
"@push.rocks/smartshell": "^3.2.3",
|
|
29
|
+
"@push.rocks/tapbundle": "^6.0.3",
|
|
30
|
+
"@types/ws": "^8.18.1",
|
|
31
31
|
"figures": "^6.1.0",
|
|
32
|
-
"ws": "^8.18.
|
|
32
|
+
"ws": "^8.18.2"
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
35
|
"ts/**/*",
|
package/readme.plan.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Plan for adding single file and glob pattern execution support to tstest
|
|
2
|
+
|
|
3
|
+
!! FIRST: Reread /home/philkunz/.claude/CLAUDE.md to ensure following all guidelines !!
|
|
4
|
+
|
|
5
|
+
## Goal - ✅ COMPLETED
|
|
6
|
+
- ✅ Make `tstest test/test.abc.ts` run the specified file directly
|
|
7
|
+
- ✅ Support glob patterns like `tstest test/*.spec.ts` or `tstest test/**/*.test.ts`
|
|
8
|
+
- ✅ Maintain backward compatibility with directory argument
|
|
9
|
+
|
|
10
|
+
## Current behavior - UPDATED
|
|
11
|
+
- ✅ tstest now supports three modes: directory, single file, and glob patterns
|
|
12
|
+
- ✅ Directory mode now searches recursively using `**/test*.ts` pattern
|
|
13
|
+
- ✅ Single file mode runs a specific test file
|
|
14
|
+
- ✅ Glob mode runs files matching the pattern
|
|
15
|
+
|
|
16
|
+
## Completed changes
|
|
17
|
+
|
|
18
|
+
### 1. ✅ Update cli argument handling in index.ts
|
|
19
|
+
- ✅ Detect argument type: file path, glob pattern, or directory
|
|
20
|
+
- ✅ Check if argument contains glob characters (*, **, ?, [], etc.)
|
|
21
|
+
- ✅ Pass appropriate mode to TsTest constructor
|
|
22
|
+
- ✅ Added TestExecutionMode enum
|
|
23
|
+
|
|
24
|
+
### 2. ✅ Modify TsTest constructor and class
|
|
25
|
+
- ✅ Add support for three modes: directory, file, glob
|
|
26
|
+
- ✅ Update constructor to accept pattern/path and mode
|
|
27
|
+
- ✅ Added executionMode property to track the mode
|
|
28
|
+
|
|
29
|
+
### 3. ✅ Update TestDirectory class
|
|
30
|
+
- ✅ Used `listFileTree` for glob pattern support
|
|
31
|
+
- ✅ Used `SmartFile.fromFilePath` for single file loading
|
|
32
|
+
- ✅ Refactored to support all three modes in `_init` method
|
|
33
|
+
- ✅ Return appropriate file array based on mode
|
|
34
|
+
- ✅ Changed default directory behavior to recursive search
|
|
35
|
+
- ✅ When directory argument: use `**/test*.ts` pattern for recursive search
|
|
36
|
+
- ✅ This ensures subdirectories are included in test discovery
|
|
37
|
+
|
|
38
|
+
### 4. ✅ Test the implementation
|
|
39
|
+
- ✅ Created test file `test/test.single.ts` for single file functionality
|
|
40
|
+
- ✅ Created test file `test/test.glob.ts` for glob pattern functionality
|
|
41
|
+
- ✅ Created test in subdirectory `test/subdir/test.sub.ts` for recursive search
|
|
42
|
+
- ✅ Tested with existing test files for backward compatibility
|
|
43
|
+
- ✅ Tested glob patterns: `test/test.*.ts` works correctly
|
|
44
|
+
- ✅ Verified that default behavior now includes subdirectories
|
|
45
|
+
|
|
46
|
+
## Implementation completed
|
|
47
|
+
1. ✅ CLI argument type detection implemented
|
|
48
|
+
2. ✅ TsTest class supports all three modes
|
|
49
|
+
3. ✅ TestDirectory handles files, globs, and directories
|
|
50
|
+
4. ✅ Default pattern changed from `test*.ts` to `**/test*.ts` for recursive search
|
|
51
|
+
5. ✅ Comprehensive tests added and all modes verified
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/index.ts
CHANGED
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
import { TsTest } from './tstest.classes.tstest.js';
|
|
2
2
|
|
|
3
|
+
export enum TestExecutionMode {
|
|
4
|
+
DIRECTORY = 'directory',
|
|
5
|
+
FILE = 'file',
|
|
6
|
+
GLOB = 'glob'
|
|
7
|
+
}
|
|
8
|
+
|
|
3
9
|
export const runCli = async () => {
|
|
4
10
|
if (!process.argv[2]) {
|
|
5
|
-
console.error('You must specify a test directory as argument. Please try again.');
|
|
11
|
+
console.error('You must specify a test directory/file/pattern as argument. Please try again.');
|
|
6
12
|
process.exit(1);
|
|
7
13
|
}
|
|
8
|
-
|
|
14
|
+
|
|
15
|
+
const testPath = process.argv[2];
|
|
16
|
+
let executionMode: TestExecutionMode;
|
|
17
|
+
|
|
18
|
+
// Detect execution mode based on the argument
|
|
19
|
+
if (testPath.includes('*') || testPath.includes('?') || testPath.includes('[') || testPath.includes('{')) {
|
|
20
|
+
executionMode = TestExecutionMode.GLOB;
|
|
21
|
+
} else if (testPath.endsWith('.ts')) {
|
|
22
|
+
executionMode = TestExecutionMode.FILE;
|
|
23
|
+
} else {
|
|
24
|
+
executionMode = TestExecutionMode.DIRECTORY;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const tsTestInstance = new TsTest(process.cwd(), testPath, executionMode);
|
|
9
28
|
await tsTestInstance.run();
|
|
10
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
|
|
|
5
6
|
// tap related stuff
|
|
6
7
|
import { TapCombinator } from './tstest.classes.tap.combinator.js';
|
|
@@ -14,14 +15,14 @@ export class TestDirectory {
|
|
|
14
15
|
cwd: string;
|
|
15
16
|
|
|
16
17
|
/**
|
|
17
|
-
* the
|
|
18
|
+
* the test path or pattern
|
|
18
19
|
*/
|
|
19
|
-
|
|
20
|
+
testPath: string;
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
|
-
* the
|
|
23
|
+
* the execution mode
|
|
23
24
|
*/
|
|
24
|
-
|
|
25
|
+
executionMode: TestExecutionMode;
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
28
|
* an array of Smartfiles
|
|
@@ -30,27 +31,71 @@ export class TestDirectory {
|
|
|
30
31
|
|
|
31
32
|
/**
|
|
32
33
|
* the constructor for TestDirectory
|
|
33
|
-
*
|
|
34
|
-
* @param
|
|
34
|
+
* @param cwdArg - the current working directory
|
|
35
|
+
* @param testPathArg - the test path/pattern
|
|
36
|
+
* @param executionModeArg - the execution mode
|
|
35
37
|
*/
|
|
36
|
-
constructor(cwdArg: string,
|
|
38
|
+
constructor(cwdArg: string, testPathArg: string, executionModeArg: TestExecutionMode) {
|
|
37
39
|
this.cwd = cwdArg;
|
|
38
|
-
this.
|
|
40
|
+
this.testPath = testPathArg;
|
|
41
|
+
this.executionMode = executionModeArg;
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
private async _init() {
|
|
42
|
-
this.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
switch (this.executionMode) {
|
|
46
|
+
case TestExecutionMode.FILE:
|
|
47
|
+
// Single file mode
|
|
48
|
+
const filePath = plugins.path.isAbsolute(this.testPath)
|
|
49
|
+
? this.testPath
|
|
50
|
+
: plugins.path.join(this.cwd, this.testPath);
|
|
51
|
+
|
|
52
|
+
if (await plugins.smartfile.fs.fileExists(filePath)) {
|
|
53
|
+
this.testfileArray = [await plugins.smartfile.SmartFile.fromFilePath(filePath)];
|
|
54
|
+
} else {
|
|
55
|
+
throw new Error(`Test file not found: ${filePath}`);
|
|
56
|
+
}
|
|
57
|
+
break;
|
|
58
|
+
|
|
59
|
+
case TestExecutionMode.GLOB:
|
|
60
|
+
// Glob pattern mode - use listFileTree which supports glob patterns
|
|
61
|
+
const globPattern = this.testPath;
|
|
62
|
+
const matchedFiles = await plugins.smartfile.fs.listFileTree(this.cwd, globPattern);
|
|
63
|
+
|
|
64
|
+
this.testfileArray = await Promise.all(
|
|
65
|
+
matchedFiles.map(async (filePath) => {
|
|
66
|
+
const absolutePath = plugins.path.isAbsolute(filePath)
|
|
67
|
+
? filePath
|
|
68
|
+
: plugins.path.join(this.cwd, filePath);
|
|
69
|
+
return await plugins.smartfile.SmartFile.fromFilePath(absolutePath);
|
|
70
|
+
})
|
|
71
|
+
);
|
|
72
|
+
break;
|
|
73
|
+
|
|
74
|
+
case TestExecutionMode.DIRECTORY:
|
|
75
|
+
// Directory mode - now recursive with ** pattern
|
|
76
|
+
const dirPath = plugins.path.join(this.cwd, this.testPath);
|
|
77
|
+
const testPattern = '**/test*.ts';
|
|
78
|
+
|
|
79
|
+
const testFiles = await plugins.smartfile.fs.listFileTree(dirPath, testPattern);
|
|
80
|
+
|
|
81
|
+
this.testfileArray = await Promise.all(
|
|
82
|
+
testFiles.map(async (filePath) => {
|
|
83
|
+
const absolutePath = plugins.path.isAbsolute(filePath)
|
|
84
|
+
? filePath
|
|
85
|
+
: plugins.path.join(dirPath, filePath);
|
|
86
|
+
return await plugins.smartfile.SmartFile.fromFilePath(absolutePath);
|
|
87
|
+
})
|
|
88
|
+
);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
46
91
|
}
|
|
47
92
|
|
|
48
93
|
async getTestFilePathArray() {
|
|
49
94
|
await this._init();
|
|
50
95
|
const testFilePaths: string[] = [];
|
|
51
96
|
for (const testFile of this.testfileArray) {
|
|
52
|
-
|
|
53
|
-
testFilePaths.push(
|
|
97
|
+
// Use the path directly from the SmartFile
|
|
98
|
+
testFilePaths.push(testFile.path);
|
|
54
99
|
}
|
|
55
100
|
return testFilePaths;
|
|
56
101
|
}
|
|
@@ -7,9 +7,11 @@ import { coloredString as cs } from '@push.rocks/consolecolor';
|
|
|
7
7
|
import { TestDirectory } from './tstest.classes.testdirectory.js';
|
|
8
8
|
import { TapCombinator } from './tstest.classes.tap.combinator.js';
|
|
9
9
|
import { TapParser } from './tstest.classes.tap.parser.js';
|
|
10
|
+
import { TestExecutionMode } from './index.js';
|
|
10
11
|
|
|
11
12
|
export class TsTest {
|
|
12
13
|
public testDir: TestDirectory;
|
|
14
|
+
public executionMode: TestExecutionMode;
|
|
13
15
|
|
|
14
16
|
public smartshellInstance = new plugins.smartshell.Smartshell({
|
|
15
17
|
executor: 'bash',
|
|
@@ -20,8 +22,9 @@ export class TsTest {
|
|
|
20
22
|
|
|
21
23
|
public tsbundleInstance = new plugins.tsbundle.TsBundle();
|
|
22
24
|
|
|
23
|
-
constructor(cwdArg: string,
|
|
24
|
-
this.
|
|
25
|
+
constructor(cwdArg: string, testPathArg: string, executionModeArg: TestExecutionMode) {
|
|
26
|
+
this.executionMode = executionModeArg;
|
|
27
|
+
this.testDir = new TestDirectory(cwdArg, testPathArg, executionModeArg);
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
async run() {
|
|
@@ -170,16 +173,15 @@ export class TsTest {
|
|
|
170
173
|
try {
|
|
171
174
|
// Dynamically import the test module
|
|
172
175
|
const testModule = await import(`/${bundleName}`);
|
|
173
|
-
await new Promise(resolve => setTimeout(resolve, 0));
|
|
174
176
|
if (testModule && testModule.default && testModule.default instanceof Promise) {
|
|
175
177
|
// Execute the exported test function
|
|
176
178
|
await testModule.default;
|
|
177
|
-
} else if (testModule && testModule.default && testModule.default.then === 'function') {
|
|
179
|
+
} else if (testModule && testModule.default && typeof testModule.default.then === 'function') {
|
|
178
180
|
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
|
|
179
181
|
console.log('Test module default export is just promiselike: Something might be messing with your Promise implementation.');
|
|
180
182
|
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
|
|
181
183
|
await testModule.default;
|
|
182
|
-
} else if (globalThis.tapPromise && globalThis.tapPromise.then === 'function') {
|
|
184
|
+
} else if (globalThis.tapPromise && typeof globalThis.tapPromise.then === 'function') {
|
|
183
185
|
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
|
|
184
186
|
console.log('Using globalThis.tapPromise');
|
|
185
187
|
console.log('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!');
|