@git.zone/tstest 1.3.1 → 1.5.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 +1 -1
- package/dist_ts/tstest.classes.tap.parser.d.ts +2 -0
- package/dist_ts/tstest.classes.tap.parser.js +37 -4
- package/dist_ts/tstest.logging.d.ts +3 -0
- package/dist_ts/tstest.logging.js +38 -2
- package/dist_ts/tstest.plugins.d.ts +1 -1
- package/dist_ts/tstest.plugins.js +2 -2
- package/dist_ts_tapbundle/00_commitinfo_data.d.ts +8 -0
- package/dist_ts_tapbundle/00_commitinfo_data.js +9 -0
- package/dist_ts_tapbundle/index.d.ts +5 -0
- package/dist_ts_tapbundle/index.js +6 -0
- package/dist_ts_tapbundle/tapbundle.classes.pretask.d.ts +10 -0
- package/dist_ts_tapbundle/tapbundle.classes.pretask.js +13 -0
- package/dist_ts_tapbundle/tapbundle.classes.tap.d.ts +51 -0
- package/dist_ts_tapbundle/tapbundle.classes.tap.js +154 -0
- package/dist_ts_tapbundle/tapbundle.classes.taptest.d.ts +32 -0
- package/dist_ts_tapbundle/tapbundle.classes.taptest.js +62 -0
- package/dist_ts_tapbundle/tapbundle.classes.taptools.d.ts +27 -0
- package/dist_ts_tapbundle/tapbundle.classes.taptools.js +51 -0
- package/dist_ts_tapbundle/tapbundle.classes.tapwrap.d.ts +8 -0
- package/dist_ts_tapbundle/tapbundle.classes.tapwrap.js +7 -0
- package/dist_ts_tapbundle/tapbundle.plugins.d.ts +7 -0
- package/dist_ts_tapbundle/tapbundle.plugins.js +9 -0
- package/dist_ts_tapbundle/tapbundle.tapcreator.d.ts +3 -0
- package/dist_ts_tapbundle/tapbundle.tapcreator.js +5 -0
- package/dist_ts_tapbundle/webhelpers.d.ts +7 -0
- package/dist_ts_tapbundle/webhelpers.js +35 -0
- package/dist_ts_tapbundle_node/classes.tapnodetools.d.ts +25 -0
- package/dist_ts_tapbundle_node/classes.tapnodetools.js +81 -0
- package/dist_ts_tapbundle_node/classes.testfileprovider.d.ts +6 -0
- package/dist_ts_tapbundle_node/classes.testfileprovider.js +16 -0
- package/dist_ts_tapbundle_node/index.d.ts +1 -0
- package/dist_ts_tapbundle_node/index.js +2 -0
- package/dist_ts_tapbundle_node/paths.d.ts +2 -0
- package/dist_ts_tapbundle_node/paths.js +4 -0
- package/dist_ts_tapbundle_node/plugins.d.ts +11 -0
- package/dist_ts_tapbundle_node/plugins.js +14 -0
- package/package.json +18 -8
- package/readme.hints.md +62 -0
- package/readme.md +177 -34
- package/readme.plan.md +41 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/tspublish.json +3 -0
- package/ts/tstest.classes.tap.parser.ts +38 -3
- package/ts/tstest.logging.ts +42 -1
- package/ts/tstest.plugins.ts +1 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { TapTools } from './tapbundle.classes.taptools.js';
|
|
2
|
+
import { HrtMeasurement } from '@push.rocks/smarttime';
|
|
3
|
+
export type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout';
|
|
4
|
+
export interface ITestFunction<T> {
|
|
5
|
+
(tapTools?: TapTools): Promise<T>;
|
|
6
|
+
}
|
|
7
|
+
export declare class TapTest<T = unknown> {
|
|
8
|
+
description: string;
|
|
9
|
+
failureAllowed: boolean;
|
|
10
|
+
hrtMeasurement: HrtMeasurement;
|
|
11
|
+
parallel: boolean;
|
|
12
|
+
status: TTestStatus;
|
|
13
|
+
tapTools: TapTools;
|
|
14
|
+
testFunction: ITestFunction<T>;
|
|
15
|
+
testKey: number;
|
|
16
|
+
private testDeferred;
|
|
17
|
+
testPromise: Promise<TapTest<T>>;
|
|
18
|
+
private testResultDeferred;
|
|
19
|
+
testResultPromise: Promise<T>;
|
|
20
|
+
/**
|
|
21
|
+
* constructor
|
|
22
|
+
*/
|
|
23
|
+
constructor(optionsArg: {
|
|
24
|
+
description: string;
|
|
25
|
+
testFunction: ITestFunction<T>;
|
|
26
|
+
parallel: boolean;
|
|
27
|
+
});
|
|
28
|
+
/**
|
|
29
|
+
* run the test
|
|
30
|
+
*/
|
|
31
|
+
run(testKeyArg: number): Promise<void>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as plugins from './tapbundle.plugins.js';
|
|
2
|
+
import { tapCreator } from './tapbundle.tapcreator.js';
|
|
3
|
+
import { TapTools } from './tapbundle.classes.taptools.js';
|
|
4
|
+
// imported interfaces
|
|
5
|
+
import { Deferred } from '@push.rocks/smartpromise';
|
|
6
|
+
import { HrtMeasurement } from '@push.rocks/smarttime';
|
|
7
|
+
export class TapTest {
|
|
8
|
+
/**
|
|
9
|
+
* constructor
|
|
10
|
+
*/
|
|
11
|
+
constructor(optionsArg) {
|
|
12
|
+
this.testDeferred = plugins.smartpromise.defer();
|
|
13
|
+
this.testPromise = this.testDeferred.promise;
|
|
14
|
+
this.testResultDeferred = plugins.smartpromise.defer();
|
|
15
|
+
this.testResultPromise = this.testResultDeferred.promise;
|
|
16
|
+
this.description = optionsArg.description;
|
|
17
|
+
this.hrtMeasurement = new HrtMeasurement();
|
|
18
|
+
this.parallel = optionsArg.parallel;
|
|
19
|
+
this.status = 'pending';
|
|
20
|
+
this.tapTools = new TapTools(this);
|
|
21
|
+
this.testFunction = optionsArg.testFunction;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* run the test
|
|
25
|
+
*/
|
|
26
|
+
async run(testKeyArg) {
|
|
27
|
+
this.hrtMeasurement.start();
|
|
28
|
+
this.testKey = testKeyArg;
|
|
29
|
+
const testNumber = testKeyArg + 1;
|
|
30
|
+
try {
|
|
31
|
+
const testReturnValue = await this.testFunction(this.tapTools);
|
|
32
|
+
if (this.status === 'timeout') {
|
|
33
|
+
throw new Error('Test succeeded, but timed out...');
|
|
34
|
+
}
|
|
35
|
+
this.hrtMeasurement.stop();
|
|
36
|
+
console.log(`ok ${testNumber} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
|
|
37
|
+
this.status = 'success';
|
|
38
|
+
this.testDeferred.resolve(this);
|
|
39
|
+
this.testResultDeferred.resolve(testReturnValue);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
this.hrtMeasurement.stop();
|
|
43
|
+
console.log(`not ok ${testNumber} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
|
|
44
|
+
this.testDeferred.resolve(this);
|
|
45
|
+
this.testResultDeferred.resolve(err);
|
|
46
|
+
// if the test has already succeeded before
|
|
47
|
+
if (this.status === 'success') {
|
|
48
|
+
this.status = 'errorAfterSuccess';
|
|
49
|
+
console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull');
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.status = 'error';
|
|
53
|
+
}
|
|
54
|
+
// if the test is allowed to fail
|
|
55
|
+
if (this.failureAllowed) {
|
|
56
|
+
console.log(`please note: failure allowed!`);
|
|
57
|
+
}
|
|
58
|
+
console.log(err);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3RhcGJ1bmRsZS90YXBidW5kbGUuY2xhc3Nlcy50YXB0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUUzRCxzQkFBc0I7QUFDdEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQVN2RCxNQUFNLE9BQU8sT0FBTztJQWFsQjs7T0FFRztJQUNILFlBQVksVUFJWDtRQVhPLGlCQUFZLEdBQXlCLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkUsZ0JBQVcsR0FBd0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDNUQsdUJBQWtCLEdBQWdCLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEUsc0JBQWlCLEdBQWUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztRQVNyRSxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQWtCO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDMUIsTUFBTSxVQUFVLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUM7WUFDSCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9ELElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQ1QsTUFBTSxVQUFVLE1BQU0sSUFBSSxDQUFDLFdBQVcsV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksSUFBSSxDQUN0RixDQUFDO1lBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQ1QsVUFBVSxVQUFVLE1BQU0sSUFBSSxDQUFDLFdBQVcsV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksSUFBSSxDQUMxRixDQUFDO1lBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVyQywyQ0FBMkM7WUFDM0MsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDO2dCQUNsQyxPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7WUFDekYsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLENBQUM7WUFFRCxpQ0FBaUM7WUFDakMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as plugins from './tapbundle.plugins.js';
|
|
2
|
+
import { TapTest } from './tapbundle.classes.taptest.js';
|
|
3
|
+
export interface IPromiseFunc {
|
|
4
|
+
(): Promise<any>;
|
|
5
|
+
}
|
|
6
|
+
export declare class TapTools {
|
|
7
|
+
/**
|
|
8
|
+
* the referenced TapTest
|
|
9
|
+
*/
|
|
10
|
+
private _tapTest;
|
|
11
|
+
constructor(TapTestArg: TapTest<any>);
|
|
12
|
+
/**
|
|
13
|
+
* allow failure
|
|
14
|
+
*/
|
|
15
|
+
allowFailure(): void;
|
|
16
|
+
/**
|
|
17
|
+
* async/await delay method
|
|
18
|
+
*/
|
|
19
|
+
delayFor(timeMilliArg: number): Promise<void>;
|
|
20
|
+
delayForRandom(timeMilliMinArg: number, timeMilliMaxArg: number): Promise<void>;
|
|
21
|
+
coloredString(...args: Parameters<typeof plugins.consolecolor.coloredString>): Promise<string>;
|
|
22
|
+
timeout(timeMilliArg: number): Promise<void>;
|
|
23
|
+
returnError(throwingFuncArg: IPromiseFunc): Promise<Error>;
|
|
24
|
+
defer(): plugins.smartpromise.Deferred<unknown>;
|
|
25
|
+
cumulativeDefer(): plugins.smartpromise.CumulativeDeferred;
|
|
26
|
+
smartjson: typeof plugins.smartjson;
|
|
27
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as plugins from './tapbundle.plugins.js';
|
|
2
|
+
import { TapTest } from './tapbundle.classes.taptest.js';
|
|
3
|
+
export class TapTools {
|
|
4
|
+
constructor(TapTestArg) {
|
|
5
|
+
this.smartjson = plugins.smartjson;
|
|
6
|
+
this._tapTest = TapTestArg;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* allow failure
|
|
10
|
+
*/
|
|
11
|
+
allowFailure() {
|
|
12
|
+
this._tapTest.failureAllowed = true;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* async/await delay method
|
|
16
|
+
*/
|
|
17
|
+
async delayFor(timeMilliArg) {
|
|
18
|
+
await plugins.smartdelay.delayFor(timeMilliArg);
|
|
19
|
+
}
|
|
20
|
+
async delayForRandom(timeMilliMinArg, timeMilliMaxArg) {
|
|
21
|
+
await plugins.smartdelay.delayForRandom(timeMilliMinArg, timeMilliMaxArg);
|
|
22
|
+
}
|
|
23
|
+
async coloredString(...args) {
|
|
24
|
+
return plugins.consolecolor.coloredString(...args);
|
|
25
|
+
}
|
|
26
|
+
async timeout(timeMilliArg) {
|
|
27
|
+
const timeout = new plugins.smartdelay.Timeout(timeMilliArg);
|
|
28
|
+
timeout.makeUnrefed();
|
|
29
|
+
await timeout.promise;
|
|
30
|
+
if (this._tapTest.status === 'pending') {
|
|
31
|
+
this._tapTest.status = 'timeout';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async returnError(throwingFuncArg) {
|
|
35
|
+
let funcErr;
|
|
36
|
+
try {
|
|
37
|
+
await throwingFuncArg();
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
funcErr = err;
|
|
41
|
+
}
|
|
42
|
+
return funcErr;
|
|
43
|
+
}
|
|
44
|
+
defer() {
|
|
45
|
+
return plugins.smartpromise.defer();
|
|
46
|
+
}
|
|
47
|
+
cumulativeDefer() {
|
|
48
|
+
return plugins.smartpromise.cumulativeDefer();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwdG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGUvdGFwYnVuZGxlLmNsYXNzZXMudGFwdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFNekQsTUFBTSxPQUFPLFFBQVE7SUFNbkIsWUFBWSxVQUF3QjtRQXFEN0IsY0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFwRG5DLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBb0I7UUFDeEMsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sS0FBSyxDQUFDLGNBQWMsQ0FBQyxlQUF1QixFQUFFLGVBQXVCO1FBQzFFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFTSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBMkQ7UUFDdkYsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQW9CO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0QsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXLENBQUMsZUFBNkI7UUFDcEQsSUFBSSxPQUFjLENBQUM7UUFDbkIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztZQUNsQixPQUFPLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU0sS0FBSztRQUNWLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sZUFBZTtRQUNwQixPQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDaEQsQ0FBQztDQUdGIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as plugins from './tapbundle.plugins.js';
|
|
2
|
+
export class TapWrap {
|
|
3
|
+
constructor(optionsArg) {
|
|
4
|
+
this.options = optionsArg;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwd3JhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3RhcGJ1bmRsZS90YXBidW5kbGUuY2xhc3Nlcy50YXB3cmFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFPbEQsTUFBTSxPQUFPLE9BQU87SUFFbEIsWUFBWSxVQUEyQjtRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztJQUM1QixDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as consolecolor from '@push.rocks/consolecolor';
|
|
2
|
+
import * as smartdelay from '@push.rocks/smartdelay';
|
|
3
|
+
import * as smartenv from '@push.rocks/smartenv';
|
|
4
|
+
import * as smartexpect from '@push.rocks/smartexpect';
|
|
5
|
+
import * as smartjson from '@push.rocks/smartjson';
|
|
6
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
7
|
+
export { consolecolor, smartdelay, smartenv, smartexpect, smartjson, smartpromise };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// pushrocks
|
|
2
|
+
import * as consolecolor from '@push.rocks/consolecolor';
|
|
3
|
+
import * as smartdelay from '@push.rocks/smartdelay';
|
|
4
|
+
import * as smartenv from '@push.rocks/smartenv';
|
|
5
|
+
import * as smartexpect from '@push.rocks/smartexpect';
|
|
6
|
+
import * as smartjson from '@push.rocks/smartjson';
|
|
7
|
+
import * as smartpromise from '@push.rocks/smartpromise';
|
|
8
|
+
export { consolecolor, smartdelay, smartenv, smartexpect, smartjson, smartpromise };
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGUvdGFwYnVuZGxlLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUNaLE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssUUFBUSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDIn0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import * as plugins from './tapbundle.plugins.js';
|
|
2
|
+
export class TapCreator {
|
|
3
|
+
}
|
|
4
|
+
export let tapCreator = new TapCreator();
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLnRhcGNyZWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGUvdGFwYnVuZGxlLnRhcGNyZWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUVsRCxNQUFNLE9BQU8sVUFBVTtDQUV0QjtBQUVELE1BQU0sQ0FBQyxJQUFJLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDIn0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as plugins from './tapbundle.plugins.js';
|
|
2
|
+
import { tap } from './tapbundle.classes.tap.js';
|
|
3
|
+
class WebHelpers {
|
|
4
|
+
constructor() {
|
|
5
|
+
const smartenv = new plugins.smartenv.Smartenv();
|
|
6
|
+
// Initialize HTML template tag function
|
|
7
|
+
this.html = (strings, ...values) => {
|
|
8
|
+
let result = '';
|
|
9
|
+
for (let i = 0; i < strings.length; i++) {
|
|
10
|
+
result += strings[i];
|
|
11
|
+
if (i < values.length) {
|
|
12
|
+
result += values[i];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
};
|
|
17
|
+
// Initialize fixture function based on environment
|
|
18
|
+
if (smartenv.isBrowser) {
|
|
19
|
+
this.fixture = async (htmlString) => {
|
|
20
|
+
const container = document.createElement('div');
|
|
21
|
+
container.innerHTML = htmlString.trim();
|
|
22
|
+
const element = container.firstChild;
|
|
23
|
+
return element;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Node.js environment - provide a stub or alternative implementation
|
|
28
|
+
this.fixture = async (htmlString) => {
|
|
29
|
+
throw new Error('WebHelpers.fixture is only available in browser environment');
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export const webhelpers = new WebHelpers();
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2ViaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3RhcGJ1bmRsZS93ZWJoZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWpELE1BQU0sVUFBVTtJQUlkO1FBQ0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpELHdDQUF3QztRQUN4QyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBNkIsRUFBRSxHQUFHLE1BQWEsRUFBRSxFQUFFO1lBQzlELElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNoQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RCLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDO1FBRUYsbURBQW1EO1FBQ25ELElBQUksUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxFQUFFLFVBQWtCLEVBQXdCLEVBQUU7Z0JBQ2hFLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hELFNBQVMsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN4QyxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsVUFBeUIsQ0FBQztnQkFDcEQsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixxRUFBcUU7WUFDckUsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLEVBQUUsVUFBa0IsRUFBZ0IsRUFBRTtnQkFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1lBQ2pGLENBQUMsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQyJ9
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { TestFileProvider } from './classes.testfileprovider.js';
|
|
2
|
+
import * as plugins from './plugins.js';
|
|
3
|
+
declare class TapNodeTools {
|
|
4
|
+
private smartshellInstance;
|
|
5
|
+
testFileProvider: TestFileProvider;
|
|
6
|
+
constructor();
|
|
7
|
+
private qenv;
|
|
8
|
+
getQenv(): Promise<plugins.qenv.Qenv>;
|
|
9
|
+
getEnvVarOnDemand(envVarNameArg: string): Promise<string>;
|
|
10
|
+
runCommand(commandArg: string): Promise<any>;
|
|
11
|
+
createHttpsCert(commonName?: string, allowSelfSigned?: boolean): Promise<{
|
|
12
|
+
key: string;
|
|
13
|
+
cert: string;
|
|
14
|
+
}>;
|
|
15
|
+
/**
|
|
16
|
+
* create and return a smartmongo instance
|
|
17
|
+
*/
|
|
18
|
+
createSmartmongo(): Promise<import("@push.rocks/smartmongo").SmartMongo>;
|
|
19
|
+
/**
|
|
20
|
+
* create and return a smarts3 instance
|
|
21
|
+
*/
|
|
22
|
+
createSmarts3(): Promise<import("@push.rocks/smarts3").Smarts3>;
|
|
23
|
+
}
|
|
24
|
+
export declare const tapNodeTools: TapNodeTools;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { TestFileProvider } from './classes.testfileprovider.js';
|
|
2
|
+
import * as plugins from './plugins.js';
|
|
3
|
+
class TapNodeTools {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.testFileProvider = new TestFileProvider();
|
|
6
|
+
}
|
|
7
|
+
async getQenv() {
|
|
8
|
+
this.qenv = this.qenv || new plugins.qenv.Qenv('./', '.nogit/');
|
|
9
|
+
return this.qenv;
|
|
10
|
+
}
|
|
11
|
+
async getEnvVarOnDemand(envVarNameArg) {
|
|
12
|
+
const qenv = await this.getQenv();
|
|
13
|
+
return qenv.getEnvVarOnDemand(envVarNameArg);
|
|
14
|
+
}
|
|
15
|
+
async runCommand(commandArg) {
|
|
16
|
+
if (!this.smartshellInstance) {
|
|
17
|
+
this.smartshellInstance = new plugins.smartshell.Smartshell({
|
|
18
|
+
executor: 'bash',
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const result = await this.smartshellInstance.exec(commandArg);
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
async createHttpsCert(commonName = 'localhost', allowSelfSigned = true) {
|
|
25
|
+
if (allowSelfSigned) {
|
|
26
|
+
// set node to allow self-signed certificates
|
|
27
|
+
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
|
|
28
|
+
}
|
|
29
|
+
// Generate a key pair
|
|
30
|
+
const keys = plugins.smartcrypto.nodeForge.pki.rsa.generateKeyPair(2048);
|
|
31
|
+
// Create a self-signed certificate
|
|
32
|
+
const cert = plugins.smartcrypto.nodeForge.pki.createCertificate();
|
|
33
|
+
cert.publicKey = keys.publicKey;
|
|
34
|
+
cert.serialNumber = '01';
|
|
35
|
+
cert.validity.notBefore = new Date();
|
|
36
|
+
cert.validity.notAfter = new Date();
|
|
37
|
+
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1);
|
|
38
|
+
const attrs = [
|
|
39
|
+
{ name: 'commonName', value: commonName },
|
|
40
|
+
{ name: 'countryName', value: 'US' },
|
|
41
|
+
{ shortName: 'ST', value: 'California' },
|
|
42
|
+
{ name: 'localityName', value: 'San Francisco' },
|
|
43
|
+
{ name: 'organizationName', value: 'My Company' },
|
|
44
|
+
{ shortName: 'OU', value: 'Dev' },
|
|
45
|
+
];
|
|
46
|
+
cert.setSubject(attrs);
|
|
47
|
+
cert.setIssuer(attrs);
|
|
48
|
+
// Sign the certificate with its own private key (self-signed)
|
|
49
|
+
cert.sign(keys.privateKey, plugins.smartcrypto.nodeForge.md.sha256.create());
|
|
50
|
+
// PEM encode the private key and certificate
|
|
51
|
+
const pemKey = plugins.smartcrypto.nodeForge.pki.privateKeyToPem(keys.privateKey);
|
|
52
|
+
const pemCert = plugins.smartcrypto.nodeForge.pki.certificateToPem(cert);
|
|
53
|
+
return {
|
|
54
|
+
key: pemKey,
|
|
55
|
+
cert: pemCert,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* create and return a smartmongo instance
|
|
60
|
+
*/
|
|
61
|
+
async createSmartmongo() {
|
|
62
|
+
const smartmongoMod = await import('@push.rocks/smartmongo');
|
|
63
|
+
const smartmongoInstance = new smartmongoMod.SmartMongo();
|
|
64
|
+
await smartmongoInstance.start();
|
|
65
|
+
return smartmongoInstance;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* create and return a smarts3 instance
|
|
69
|
+
*/
|
|
70
|
+
async createSmarts3() {
|
|
71
|
+
const smarts3Mod = await import('@push.rocks/smarts3');
|
|
72
|
+
const smarts3Instance = new smarts3Mod.Smarts3({
|
|
73
|
+
port: 3003,
|
|
74
|
+
cleanSlate: true,
|
|
75
|
+
});
|
|
76
|
+
await smarts3Instance.start();
|
|
77
|
+
return smarts3Instance;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export const tapNodeTools = new TapNodeTools();
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50YXBub2RldG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGVfbm9kZS9jbGFzc2VzLnRhcG5vZGV0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLFlBQVk7SUFJaEI7UUFGTyxxQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7SUFFbEMsQ0FBQztJQUdULEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNoRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNNLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFxQjtRQUNsRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFrQjtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7Z0JBQzFELFFBQVEsRUFBRSxNQUFNO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVN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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
import * as paths from './paths.js';
|
|
3
|
+
export const fileUrls = {
|
|
4
|
+
dockerAlpineImage: 'https://code.foss.global/testassets/docker/raw/branch/main/alpine.tar',
|
|
5
|
+
};
|
|
6
|
+
export class TestFileProvider {
|
|
7
|
+
async getDockerAlpineImageAsLocalTarball() {
|
|
8
|
+
const filePath = plugins.path.join(paths.testFilesDir, 'alpine.tar');
|
|
9
|
+
// fetch the docker alpine image
|
|
10
|
+
const response = await plugins.smartrequest.getBinary(fileUrls.dockerAlpineImage);
|
|
11
|
+
await plugins.smartfile.fs.ensureDir(paths.testFilesDir);
|
|
12
|
+
await plugins.smartfile.memory.toFs(response.body, filePath);
|
|
13
|
+
return filePath;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50ZXN0ZmlsZXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfdGFwYnVuZGxlX25vZGUvY2xhc3Nlcy50ZXN0ZmlsZXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRztJQUN0QixpQkFBaUIsRUFBRSx1RUFBdUU7Q0FDM0YsQ0FBQTtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsS0FBSyxDQUFDLGtDQUFrQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ3BFLGdDQUFnQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzdELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './classes.tapnodetools.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from './classes.tapnodetools.js';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGVfbm9kZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDIn0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as plugins from './plugins.js';
|
|
2
|
+
export const cwd = process.cwd();
|
|
3
|
+
export const testFilesDir = plugins.path.join(cwd, './.nogit/testfiles/');
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGVfbm9kZS9wYXRocy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUV4QyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as crypto from 'crypto';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
export { crypto, fs, path, };
|
|
5
|
+
import * as qenv from '@push.rocks/qenv';
|
|
6
|
+
import * as smartcrypto from '@push.rocks/smartcrypto';
|
|
7
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
8
|
+
import * as smartpath from '@push.rocks/smartpath';
|
|
9
|
+
import * as smartrequest from '@push.rocks/smartrequest';
|
|
10
|
+
import * as smartshell from '@push.rocks/smartshell';
|
|
11
|
+
export { qenv, smartcrypto, smartfile, smartpath, smartrequest, smartshell, };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// node native
|
|
2
|
+
import * as crypto from 'crypto';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
export { crypto, fs, path, };
|
|
6
|
+
// @push.rocks scope
|
|
7
|
+
import * as qenv from '@push.rocks/qenv';
|
|
8
|
+
import * as smartcrypto from '@push.rocks/smartcrypto';
|
|
9
|
+
import * as smartfile from '@push.rocks/smartfile';
|
|
10
|
+
import * as smartpath from '@push.rocks/smartpath';
|
|
11
|
+
import * as smartrequest from '@push.rocks/smartrequest';
|
|
12
|
+
import * as smartshell from '@push.rocks/smartshell';
|
|
13
|
+
export { qenv, smartcrypto, smartfile, smartpath, smartrequest, smartshell, };
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzX3RhcGJ1bmRsZV9ub2RlL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBRSxNQUFNLEVBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO0FBRTVCLG9CQUFvQjtBQUNwQixPQUFPLEtBQUssSUFBSSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sS0FBSyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxLQUFLLFNBQVMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEdBQUcsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tstest",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.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",
|
|
@@ -20,13 +20,22 @@
|
|
|
20
20
|
"@git.zone/tsbundle": "^2.2.5",
|
|
21
21
|
"@git.zone/tsrun": "^1.3.3",
|
|
22
22
|
"@push.rocks/consolecolor": "^2.0.2",
|
|
23
|
+
"@push.rocks/qenv": "^6.1.0",
|
|
23
24
|
"@push.rocks/smartbrowser": "^2.0.8",
|
|
25
|
+
"@push.rocks/smartcrypto": "^2.0.4",
|
|
24
26
|
"@push.rocks/smartdelay": "^3.0.5",
|
|
27
|
+
"@push.rocks/smartenv": "^5.0.12",
|
|
28
|
+
"@push.rocks/smartexpect": "^2.4.2",
|
|
25
29
|
"@push.rocks/smartfile": "^11.2.0",
|
|
26
|
-
"@push.rocks/
|
|
30
|
+
"@push.rocks/smartjson": "^5.0.20",
|
|
31
|
+
"@push.rocks/smartlog": "^3.1.1",
|
|
32
|
+
"@push.rocks/smartmongo": "^2.0.12",
|
|
33
|
+
"@push.rocks/smartpath": "^5.0.18",
|
|
27
34
|
"@push.rocks/smartpromise": "^4.2.3",
|
|
35
|
+
"@push.rocks/smartrequest": "^2.1.0",
|
|
36
|
+
"@push.rocks/smarts3": "^2.2.5",
|
|
28
37
|
"@push.rocks/smartshell": "^3.2.3",
|
|
29
|
-
"@push.rocks/
|
|
38
|
+
"@push.rocks/smarttime": "^4.1.1",
|
|
30
39
|
"@types/ws": "^8.18.1",
|
|
31
40
|
"figures": "^6.1.0",
|
|
32
41
|
"ws": "^8.18.2"
|
|
@@ -47,11 +56,12 @@
|
|
|
47
56
|
"last 1 chrome versions"
|
|
48
57
|
],
|
|
49
58
|
"scripts": {
|
|
50
|
-
"test": "
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
59
|
+
"test": "pnpm run build && pnpm run test:tapbundle && pnpm run test:tstest",
|
|
60
|
+
"test:tapbundle": "tsx ./cli.child.ts test/tapbundle/**/*.ts",
|
|
61
|
+
"test:tapbundle:verbose": "tsx ./cli.child.ts test/tapbundle/**/*.ts --verbose",
|
|
62
|
+
"test:tstest": "tsx ./cli.child.ts test/tstest/**/*.ts",
|
|
63
|
+
"test:tstest:verbose": "tsx ./cli.child.ts test/tstest/**/*.ts --verbose",
|
|
64
|
+
"build": "(tsbuild tsfolders)",
|
|
55
65
|
"buildDocs": "tsdoc"
|
|
56
66
|
}
|
|
57
67
|
}
|
package/readme.hints.md
CHANGED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Architecture Overview
|
|
2
|
+
|
|
3
|
+
## Project Structure
|
|
4
|
+
|
|
5
|
+
This project integrates tstest with tapbundle through a modular architecture:
|
|
6
|
+
|
|
7
|
+
1. **tstest** (`/ts/`) - The test runner that discovers and executes test files
|
|
8
|
+
2. **tapbundle** (`/ts_tapbundle/`) - The TAP testing framework for writing tests
|
|
9
|
+
3. **tapbundle_node** (`/ts_tapbundle_node/`) - Node.js-specific testing utilities
|
|
10
|
+
|
|
11
|
+
## How Components Work Together
|
|
12
|
+
|
|
13
|
+
### Test Execution Flow
|
|
14
|
+
|
|
15
|
+
1. **CLI Entry Point** (`cli.js` � `cli.ts.js` � `cli.child.ts`)
|
|
16
|
+
- The CLI uses tsx to run TypeScript files directly
|
|
17
|
+
- Accepts glob patterns to find test files
|
|
18
|
+
- Supports options like `--verbose`, `--quiet`, `--web`
|
|
19
|
+
|
|
20
|
+
2. **Test Discovery**
|
|
21
|
+
- tstest scans for test files matching the provided pattern
|
|
22
|
+
- Defaults to `test/**/*.ts` when no pattern is specified
|
|
23
|
+
- Supports both file and directory modes
|
|
24
|
+
|
|
25
|
+
3. **Test Runner**
|
|
26
|
+
- Each test file imports `tap` and `expect` from tapbundle
|
|
27
|
+
- Tests are written using `tap.test()` with async functions
|
|
28
|
+
- Browser tests are compiled with esbuild and run in Chromium via Puppeteer
|
|
29
|
+
|
|
30
|
+
### Key Integration Points
|
|
31
|
+
|
|
32
|
+
1. **Import Structure**
|
|
33
|
+
- Test files import from local tapbundle: `import { tap, expect } from '../../ts_tapbundle/index.js'`
|
|
34
|
+
- Node-specific tests also import from tapbundle_node: `import { tapNodeTools } from '../../ts_tapbundle_node/index.js'`
|
|
35
|
+
|
|
36
|
+
2. **WebHelpers**
|
|
37
|
+
- Browser tests can use webhelpers for DOM manipulation
|
|
38
|
+
- `webhelpers.html` - Template literal for creating HTML strings
|
|
39
|
+
- `webhelpers.fixture` - Creates DOM elements from HTML strings
|
|
40
|
+
- Automatically detects browser environment and only enables in browser context
|
|
41
|
+
|
|
42
|
+
3. **Build System**
|
|
43
|
+
- Uses `tsbuild tsfolders` to compile TypeScript
|
|
44
|
+
- Maintains separate output directories: `/dist_ts/`, `/dist_ts_tapbundle/`, `/dist_ts_tapbundle_node/`
|
|
45
|
+
- Compilation order is resolved automatically based on dependencies
|
|
46
|
+
|
|
47
|
+
### Test Scripts
|
|
48
|
+
|
|
49
|
+
The package.json defines several test scripts:
|
|
50
|
+
- `test` - Builds and runs all tests (tapbundle and tstest)
|
|
51
|
+
- `test:tapbundle` - Runs tapbundle framework tests
|
|
52
|
+
- `test:tstest` - Runs tstest's own tests
|
|
53
|
+
- Both support `:verbose` variants for detailed output
|
|
54
|
+
|
|
55
|
+
### Environment Detection
|
|
56
|
+
|
|
57
|
+
The framework automatically detects the runtime environment:
|
|
58
|
+
- Node.js tests run directly via tsx
|
|
59
|
+
- Browser tests are compiled and served via a local server
|
|
60
|
+
- WebHelpers are only enabled in browser environment
|
|
61
|
+
|
|
62
|
+
This architecture allows for seamless testing across both Node.js and browser environments while maintaining a clean separation of concerns.
|