@git.zone/tstest 3.6.5 → 3.6.7
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/.smartconfig.json +18 -6
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_tapbundle/00_commitinfo_data.js +4 -4
- package/dist_ts_tapbundle/tapbundle.classes.taptools.d.ts +1 -1
- package/package.json +30 -30
- package/readme.hints.md +17 -0
- package/readme.md +14 -10
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/readme.md +4 -4
- package/dist_ts_tapbundle_node/classes.tapnodetools.d.ts +0 -25
- package/dist_ts_tapbundle_node/classes.tapnodetools.js +0 -81
- package/dist_ts_tapbundle_node/classes.testfileprovider.d.ts +0 -6
- package/dist_ts_tapbundle_node/classes.testfileprovider.js +0 -19
- package/dist_ts_tapbundle_node/index.d.ts +0 -1
- package/dist_ts_tapbundle_node/index.js +0 -2
- package/dist_ts_tapbundle_node/paths.d.ts +0 -2
- package/dist_ts_tapbundle_node/paths.js +0 -4
- package/dist_ts_tapbundle_node/plugins.d.ts +0 -11
- package/dist_ts_tapbundle_node/plugins.js +0 -14
- package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.classes.taptest.d.ts +0 -38
- package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.classes.taptest.js +0 -110
- package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.classes.taptools.d.ts +0 -109
- package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.classes.taptools.js +0 -241
- package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.plugins.d.ts +0 -8
- package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.plugins.js +0 -10
- package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.tapcreator.d.ts +0 -3
- package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.tapcreator.js +0 -5
- package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.pathinject.d.ts +0 -5
- package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.pathinject.js +0 -13
- package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.tapnodetools.d.ts +0 -25
- package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.tapnodetools.js +0 -81
- package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.testfileprovider.d.ts +0 -6
- package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.testfileprovider.js +0 -16
- package/dist_ts_tapbundle_node/ts_tapbundle_node/index.d.ts +0 -2
- package/dist_ts_tapbundle_node/ts_tapbundle_node/index.js +0 -3
- package/dist_ts_tapbundle_node/ts_tapbundle_node/paths.d.ts +0 -2
- package/dist_ts_tapbundle_node/ts_tapbundle_node/paths.js +0 -4
- package/dist_ts_tapbundle_node/ts_tapbundle_node/plugins.d.ts +0 -11
- package/dist_ts_tapbundle_node/ts_tapbundle_node/plugins.js +0 -14
package/.smartconfig.json
CHANGED
|
@@ -10,12 +10,24 @@
|
|
|
10
10
|
"license": "MIT"
|
|
11
11
|
},
|
|
12
12
|
"release": {
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
"targets": {
|
|
14
|
+
"git": {
|
|
15
|
+
"enabled": true,
|
|
16
|
+
"remote": "origin",
|
|
17
|
+
"pushBranch": true,
|
|
18
|
+
"pushTags": true
|
|
19
|
+
},
|
|
20
|
+
"npm": {
|
|
21
|
+
"enabled": true,
|
|
22
|
+
"registries": [
|
|
23
|
+
"https://verdaccio.lossless.digital",
|
|
24
|
+
"https://registry.npmjs.org"
|
|
25
|
+
],
|
|
26
|
+
"accessLevel": "public"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"schemaVersion": 2
|
|
19
31
|
},
|
|
20
32
|
"@ship.zone/szci": {
|
|
21
33
|
"npmGlobalTools": []
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@git.zone/tstest',
|
|
6
|
-
version: '3.6.
|
|
6
|
+
version: '3.6.7',
|
|
7
7
|
description: 'A powerful, modern test runner for TypeScript with multi-runtime support (Node.js, Deno, Bun, Chromium) and a batteries-included test framework.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLGtKQUFrSjtDQUNoSyxDQUFBIn0=
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* autocreated commitinfo by @push.rocks/commitinfo
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
|
-
name: '@
|
|
6
|
-
version: '6.
|
|
7
|
-
description: '
|
|
5
|
+
name: '@git.zone/tstest/tapbundle',
|
|
6
|
+
version: '3.6.5',
|
|
7
|
+
description: 'Core TAP testing framework with enhanced assertions and lifecycle hooks.'
|
|
8
8
|
};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfdGFwYnVuZGxlLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNEJBQTRCO0lBQ2xDLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSwwRUFBMEU7Q0FDeEYsQ0FBQSJ9
|
|
@@ -78,7 +78,7 @@ export declare class TapTools {
|
|
|
78
78
|
*/
|
|
79
79
|
waitForTimeout(timeMilliArg: number): Promise<void>;
|
|
80
80
|
returnError(throwingFuncArg: IPromiseFunc): Promise<Error>;
|
|
81
|
-
defer(): plugins.smartpromise.Deferred<
|
|
81
|
+
defer(): plugins.smartpromise.Deferred<void>;
|
|
82
82
|
cumulativeDefer(): plugins.smartpromise.CumulativeDeferred;
|
|
83
83
|
smartjson: typeof plugins.smartjson;
|
|
84
84
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@git.zone/tstest",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.7",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "A powerful, modern test runner for TypeScript with multi-runtime support (Node.js, Deno, Bun, Chromium) and a batteries-included test framework.",
|
|
6
6
|
"exports": {
|
|
@@ -15,41 +15,33 @@
|
|
|
15
15
|
"bin": {
|
|
16
16
|
"tstest": "./cli.js"
|
|
17
17
|
},
|
|
18
|
-
"scripts": {
|
|
19
|
-
"test": "pnpm run build && pnpm run test:tapbundle:verbose && pnpm run test:tstest:verbose",
|
|
20
|
-
"test:tapbundle": "tsx ./cli.child.ts \"test/tapbundle/**/*.ts\"",
|
|
21
|
-
"test:tapbundle:verbose": "tsx ./cli.child.ts \"test/tapbundle/**/*.ts\" --verbose",
|
|
22
|
-
"test:tstest": "tsx ./cli.child.ts \"test/tstest/**/*.ts\"",
|
|
23
|
-
"test:tstest:verbose": "tsx ./cli.child.ts \"test/tstest/**/*.ts\" --verbose",
|
|
24
|
-
"build": "(tsbuild tsfolders)",
|
|
25
|
-
"buildDocs": "tsdoc"
|
|
26
|
-
},
|
|
27
18
|
"devDependencies": {
|
|
28
|
-
"@git.zone/tsbuild": "^4.4.
|
|
29
|
-
"@types/node": "^
|
|
19
|
+
"@git.zone/tsbuild": "^4.4.2",
|
|
20
|
+
"@types/node": "^26.1.1",
|
|
21
|
+
"tsx": "^4.23.1"
|
|
30
22
|
},
|
|
31
23
|
"dependencies": {
|
|
32
|
-
"@git.zone/tsbundle": "^2.
|
|
33
|
-
"@git.zone/tsrun": "^2.0.
|
|
34
|
-
"@push.rocks/consolecolor": "^2.0.
|
|
35
|
-
"@push.rocks/qenv": "^6.1.
|
|
24
|
+
"@git.zone/tsbundle": "^2.11.3",
|
|
25
|
+
"@git.zone/tsrun": "^2.0.5",
|
|
26
|
+
"@push.rocks/consolecolor": "^2.0.4",
|
|
27
|
+
"@push.rocks/qenv": "^6.1.4",
|
|
36
28
|
"@push.rocks/smartbrowser": "^2.0.11",
|
|
37
29
|
"@push.rocks/smartcrypto": "^2.0.4",
|
|
38
|
-
"@push.rocks/smartdelay": "^3.0
|
|
39
|
-
"@push.rocks/smartenv": "^6.
|
|
30
|
+
"@push.rocks/smartdelay": "^3.1.0",
|
|
31
|
+
"@push.rocks/smartenv": "^6.1.0",
|
|
40
32
|
"@push.rocks/smartexpect": "^2.5.0",
|
|
41
|
-
"@push.rocks/smartfile": "^13.1.
|
|
42
|
-
"@push.rocks/smartfs": "^1.5.
|
|
43
|
-
"@push.rocks/smartjson": "^6.0.
|
|
44
|
-
"@push.rocks/smartlog": "^3.2.
|
|
45
|
-
"@push.rocks/smartmongo": "^
|
|
46
|
-
"@push.rocks/smartnetwork": "^4.
|
|
33
|
+
"@push.rocks/smartfile": "^13.1.3",
|
|
34
|
+
"@push.rocks/smartfs": "^1.5.1",
|
|
35
|
+
"@push.rocks/smartjson": "^6.0.1",
|
|
36
|
+
"@push.rocks/smartlog": "^3.2.2",
|
|
37
|
+
"@push.rocks/smartmongo": "^7.0.0",
|
|
38
|
+
"@push.rocks/smartnetwork": "^4.7.1",
|
|
47
39
|
"@push.rocks/smartpath": "^6.0.0",
|
|
48
|
-
"@push.rocks/smartpromise": "^4.2.
|
|
49
|
-
"@push.rocks/smartrequest": "^5.0.
|
|
50
|
-
"@push.rocks/smartserve": "^2.0.
|
|
40
|
+
"@push.rocks/smartpromise": "^4.2.4",
|
|
41
|
+
"@push.rocks/smartrequest": "^5.0.3",
|
|
42
|
+
"@push.rocks/smartserve": "^2.0.4",
|
|
51
43
|
"@push.rocks/smartshell": "^3.3.8",
|
|
52
|
-
"@push.rocks/smartstorage": "^6.
|
|
44
|
+
"@push.rocks/smartstorage": "^6.5.1",
|
|
53
45
|
"@push.rocks/smarttime": "^4.2.3",
|
|
54
46
|
"@push.rocks/smartwatch": "^6.4.0",
|
|
55
47
|
"@types/ws": "^8.18.1",
|
|
@@ -71,5 +63,13 @@
|
|
|
71
63
|
"browserslist": [
|
|
72
64
|
"last 1 chrome versions"
|
|
73
65
|
],
|
|
74
|
-
"
|
|
75
|
-
|
|
66
|
+
"scripts": {
|
|
67
|
+
"test": "pnpm run build && pnpm run test:tapbundle:verbose && pnpm run test:tstest:verbose",
|
|
68
|
+
"test:tapbundle": "tsx ./cli.child.ts \"test/tapbundle/**/*.ts\"",
|
|
69
|
+
"test:tapbundle:verbose": "tsx ./cli.child.ts \"test/tapbundle/**/*.ts\" --verbose",
|
|
70
|
+
"test:tstest": "tsx ./cli.child.ts \"test/tstest/**/*.ts\"",
|
|
71
|
+
"test:tstest:verbose": "tsx ./cli.child.ts \"test/tstest/**/*.ts\" --verbose",
|
|
72
|
+
"build": "(tsbuild tsfolders)",
|
|
73
|
+
"buildDocs": "tsdoc"
|
|
74
|
+
}
|
|
75
|
+
}
|
package/readme.hints.md
CHANGED
|
@@ -8,6 +8,23 @@ This project integrates tstest with tapbundle through a modular architecture:
|
|
|
8
8
|
2. **tapbundle** (`/ts_tapbundle/`) - The TAP testing framework for writing tests
|
|
9
9
|
3. **tapbundle_serverside** (`/ts_tapbundle_serverside/`) - Server-side testing utilities (network port finding, runCommand, env vars, HTTPS certs, MongoDB, S3, test assets)
|
|
10
10
|
|
|
11
|
+
## Node Runtime CJS JSON Compatibility
|
|
12
|
+
|
|
13
|
+
Node 24 and newer exposed a `tsx` synchronous-loader regression in versions
|
|
14
|
+
4.22.0 and 4.22.1: JSON reached through CommonJS `require()` was transformed
|
|
15
|
+
into JavaScript in memory, then passed to Node's CommonJS JSON parser. The
|
|
16
|
+
resulting error misleadingly showed generated JavaScript such as `var ...` as
|
|
17
|
+
invalid JSON.
|
|
18
|
+
|
|
19
|
+
The upstream fix shipped in `tsx` 4.22.2. `tstest` requires
|
|
20
|
+
`@git.zone/tsrun` 2.0.5 or newer, whose `tsx` dependency starts at a fixed
|
|
21
|
+
version. The Node runtime regression test covers the ESM hook to CommonJS
|
|
22
|
+
`require()` to JSON path and verifies that the fixture bytes remain unchanged.
|
|
23
|
+
|
|
24
|
+
This loader failure is not evidence that `node_modules/**/db.json` was
|
|
25
|
+
overwritten on disk. Any observed file hash or content change is a separate
|
|
26
|
+
filesystem-writer issue and must be traced independently.
|
|
27
|
+
|
|
11
28
|
## How Components Work Together
|
|
12
29
|
|
|
13
30
|
### Test Execution Flow
|
package/readme.md
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
🧪 **A powerful, modern test runner for TypeScript** — beautiful output, multi-runtime support, and a batteries-included test framework that makes testing actually enjoyable.
|
|
4
4
|
|
|
5
|
+
## Issue Reporting and Security
|
|
6
|
+
|
|
7
|
+
For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.
|
|
8
|
+
|
|
5
9
|
## Availability and Links
|
|
6
10
|
|
|
7
11
|
- [npmjs.org (npm package)](https://www.npmjs.com/package/@git.zone/tstest)
|
|
8
12
|
- [code.foss.global (source)](https://code.foss.global/git.zone/tstest)
|
|
9
13
|
|
|
10
|
-
## Issue Reporting and Security
|
|
11
|
-
|
|
12
|
-
For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.
|
|
13
|
-
|
|
14
14
|
## Why tstest?
|
|
15
15
|
|
|
16
16
|
Most TypeScript test runners feel like an afterthought — clunky configuration, ugly output, and poor TypeScript support. **tstest** was built from the ground up for TypeScript developers who want:
|
|
@@ -126,7 +126,7 @@ Name your test files with runtime specifiers to control where they run:
|
|
|
126
126
|
|
|
127
127
|
### Runtime Execution Order
|
|
128
128
|
|
|
129
|
-
When multiple runtimes are specified, tests execute in this order: **Node.js →
|
|
129
|
+
When multiple runtimes are specified, tests execute in this order: **Node.js → Chromium → Deno → Bun**
|
|
130
130
|
|
|
131
131
|
### Migration from Legacy Naming
|
|
132
132
|
|
|
@@ -147,6 +147,7 @@ tstest migrate --write
|
|
|
147
147
|
|
|
148
148
|
| Option | Description |
|
|
149
149
|
|---|---|
|
|
150
|
+
| `--version` | Show the installed tstest version |
|
|
150
151
|
| `--quiet`, `-q` | Minimal output — perfect for CI |
|
|
151
152
|
| `--verbose`, `-v` | Show all console output from tests |
|
|
152
153
|
| `--no-color` | Disable colored output |
|
|
@@ -158,7 +159,6 @@ tstest migrate --write
|
|
|
158
159
|
| `--stopAt <n>` | Stop at test file number N |
|
|
159
160
|
| `--watch`, `-w` | Re-run tests on file changes |
|
|
160
161
|
| `--watch-ignore <patterns>` | Ignore patterns in watch mode |
|
|
161
|
-
| `--only` | Run only tests marked with `.only` |
|
|
162
162
|
|
|
163
163
|
## Writing Tests with tapbundle
|
|
164
164
|
|
|
@@ -287,7 +287,9 @@ tap.test('snapshot test', async (tools) => {
|
|
|
287
287
|
### Test Fixtures
|
|
288
288
|
|
|
289
289
|
```typescript
|
|
290
|
-
tap
|
|
290
|
+
import { tap, expect, TapTools } from '@git.zone/tstest/tapbundle';
|
|
291
|
+
|
|
292
|
+
TapTools.defineFixture('testUser', async (data) => ({
|
|
291
293
|
id: Date.now(),
|
|
292
294
|
name: data?.name || 'Test User',
|
|
293
295
|
email: data?.email || 'test@example.com',
|
|
@@ -368,8 +370,10 @@ expect(7).customAssertion(v => v % 2 === 1, 'Value is not odd');
|
|
|
368
370
|
For Node.js-only tests, import server-side utilities:
|
|
369
371
|
|
|
370
372
|
```typescript
|
|
371
|
-
import { tapNodeTools } from '@git.zone/tstest/tapbundle_serverside';
|
|
372
373
|
import { tap, expect } from '@git.zone/tstest/tapbundle';
|
|
374
|
+
import { TapNodeTools } from '@git.zone/tstest/tapbundle_serverside';
|
|
375
|
+
|
|
376
|
+
const tapNodeTools = new TapNodeTools(tap);
|
|
373
377
|
```
|
|
374
378
|
|
|
375
379
|
### 🌐 Network Utilities
|
|
@@ -437,7 +441,7 @@ await mongo.stop();
|
|
|
437
441
|
### 📦 Local S3 Storage
|
|
438
442
|
|
|
439
443
|
```typescript
|
|
440
|
-
const s3 = await tapNodeTools.
|
|
444
|
+
const s3 = await tapNodeTools.createSmartStorage();
|
|
441
445
|
// ... run object storage tests ...
|
|
442
446
|
await s3.stop();
|
|
443
447
|
```
|
|
@@ -448,7 +452,7 @@ Control runtime behavior directly from your test files using special comment dir
|
|
|
448
452
|
|
|
449
453
|
### Deno Permissions
|
|
450
454
|
|
|
451
|
-
By default, Deno tests run with `--allow-read`, `--allow-env`, `--allow-net`, `--allow-write`, `--allow-sys`, and `--
|
|
455
|
+
By default, Deno tests run with `--allow-read`, `--allow-env`, `--allow-net`, `--allow-write`, `--allow-sys`, `--allow-import`, `--node-modules-dir`, and `--sloppy-imports`. Add directives to request additional permissions:
|
|
452
456
|
|
|
453
457
|
```typescript
|
|
454
458
|
// tstest:deno:allowAll
|
package/ts/00_commitinfo_data.ts
CHANGED
package/ts/readme.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
> 🚀 Multi-runtime TypeScript test runner with beautiful output and intelligent test orchestration
|
|
4
4
|
|
|
5
|
+
## Issue Reporting and Security
|
|
6
|
+
|
|
7
|
+
For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.
|
|
8
|
+
|
|
5
9
|
## Installation
|
|
6
10
|
|
|
7
11
|
```bash
|
|
@@ -9,10 +13,6 @@
|
|
|
9
13
|
pnpm install --save-dev @git.zone/tstest
|
|
10
14
|
```
|
|
11
15
|
|
|
12
|
-
## Issue Reporting and Security
|
|
13
|
-
|
|
14
|
-
For reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.
|
|
15
|
-
|
|
16
16
|
## Overview
|
|
17
17
|
|
|
18
18
|
This is the core test runner module of `@git.zone/tstest`. It provides the CLI, test discovery, multi-runtime execution, TAP output parsing, structured logging, and test orchestration. It ties together the entire testing pipeline — from finding test files to dispatching them across Node.js, Chromium, Deno, Bun, and Docker runtimes.
|
|
@@ -1,25 +0,0 @@
|
|
|
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 {};
|
|
@@ -1,81 +0,0 @@
|
|
|
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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
|
|
@@ -1,19 +0,0 @@
|
|
|
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.SmartRequest.create()
|
|
11
|
-
.url(fileUrls.dockerAlpineImage)
|
|
12
|
-
.get();
|
|
13
|
-
await plugins.smartfile.fs.ensureDir(paths.testFilesDir);
|
|
14
|
-
const buffer = Buffer.from(await response.arrayBuffer());
|
|
15
|
-
await plugins.smartfile.memory.toFs(buffer, filePath);
|
|
16
|
-
return filePath;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50ZXN0ZmlsZXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfdGFwYnVuZGxlX25vZGUvY2xhc3Nlcy50ZXN0ZmlsZXByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRztJQUN0QixpQkFBaUIsRUFBRSx1RUFBdUU7Q0FDM0YsQ0FBQTtBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsS0FBSyxDQUFDLGtDQUFrQztRQUM3QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQ3BFLGdDQUFnQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTthQUM5RCxHQUFHLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO2FBQy9CLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEQsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGIn0=
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './classes.tapnodetools.js';
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './classes.tapnodetools.js';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c190YXBidW5kbGVfbm9kZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDJCQUEyQixDQUFDIn0=
|
|
@@ -1,4 +0,0 @@
|
|
|
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
|
|
@@ -1,11 +0,0 @@
|
|
|
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, };
|
|
@@ -1,14 +0,0 @@
|
|
|
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
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { TapTools } from './tapbundle.classes.taptools.js';
|
|
2
|
-
import { HrtMeasurement } from '@push.rocks/smarttime';
|
|
3
|
-
export type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout' | 'skipped';
|
|
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
|
-
timeoutMs?: number;
|
|
17
|
-
isTodo: boolean;
|
|
18
|
-
todoReason?: string;
|
|
19
|
-
tags: string[];
|
|
20
|
-
priority: 'high' | 'medium' | 'low';
|
|
21
|
-
fileName?: string;
|
|
22
|
-
private testDeferred;
|
|
23
|
-
testPromise: Promise<TapTest<T>>;
|
|
24
|
-
private testResultDeferred;
|
|
25
|
-
testResultPromise: Promise<T>;
|
|
26
|
-
/**
|
|
27
|
-
* constructor
|
|
28
|
-
*/
|
|
29
|
-
constructor(optionsArg: {
|
|
30
|
-
description: string;
|
|
31
|
-
testFunction: ITestFunction<T>;
|
|
32
|
-
parallel: boolean;
|
|
33
|
-
});
|
|
34
|
-
/**
|
|
35
|
-
* run the test
|
|
36
|
-
*/
|
|
37
|
-
run(testKeyArg: number): Promise<void>;
|
|
38
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import * as plugins from './tapbundle.plugins.js';
|
|
2
|
-
import { tapCreator } from './tapbundle.tapcreator.js';
|
|
3
|
-
import { TapTools, SkipError } 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.isTodo = false;
|
|
13
|
-
this.tags = [];
|
|
14
|
-
this.priority = 'medium';
|
|
15
|
-
this.testDeferred = plugins.smartpromise.defer();
|
|
16
|
-
this.testPromise = this.testDeferred.promise;
|
|
17
|
-
this.testResultDeferred = plugins.smartpromise.defer();
|
|
18
|
-
this.testResultPromise = this.testResultDeferred.promise;
|
|
19
|
-
this.description = optionsArg.description;
|
|
20
|
-
this.hrtMeasurement = new HrtMeasurement();
|
|
21
|
-
this.parallel = optionsArg.parallel;
|
|
22
|
-
this.status = 'pending';
|
|
23
|
-
this.tapTools = new TapTools(this);
|
|
24
|
-
this.testFunction = optionsArg.testFunction;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* run the test
|
|
28
|
-
*/
|
|
29
|
-
async run(testKeyArg) {
|
|
30
|
-
this.testKey = testKeyArg;
|
|
31
|
-
const testNumber = testKeyArg + 1;
|
|
32
|
-
// Handle todo tests
|
|
33
|
-
if (this.isTodo) {
|
|
34
|
-
const todoText = this.todoReason ? `# TODO ${this.todoReason}` : '# TODO';
|
|
35
|
-
console.log(`ok ${testNumber} - ${this.description} ${todoText}`);
|
|
36
|
-
this.status = 'success';
|
|
37
|
-
this.testDeferred.resolve(this);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
// Run test with retries
|
|
41
|
-
let lastError;
|
|
42
|
-
const maxRetries = this.tapTools.maxRetries;
|
|
43
|
-
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
44
|
-
this.hrtMeasurement.start();
|
|
45
|
-
try {
|
|
46
|
-
// Set up timeout if specified
|
|
47
|
-
let timeoutHandle;
|
|
48
|
-
let timeoutPromise = null;
|
|
49
|
-
if (this.timeoutMs) {
|
|
50
|
-
timeoutPromise = new Promise((_, reject) => {
|
|
51
|
-
timeoutHandle = setTimeout(() => {
|
|
52
|
-
this.status = 'timeout';
|
|
53
|
-
reject(new Error(`Test timed out after ${this.timeoutMs}ms`));
|
|
54
|
-
}, this.timeoutMs);
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
// Run the test function with potential timeout
|
|
58
|
-
const testPromise = this.testFunction(this.tapTools);
|
|
59
|
-
const testReturnValue = timeoutPromise
|
|
60
|
-
? await Promise.race([testPromise, timeoutPromise])
|
|
61
|
-
: await testPromise;
|
|
62
|
-
// Clear timeout if test completed
|
|
63
|
-
if (timeoutHandle) {
|
|
64
|
-
clearTimeout(timeoutHandle);
|
|
65
|
-
}
|
|
66
|
-
this.hrtMeasurement.stop();
|
|
67
|
-
console.log(`ok ${testNumber} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
|
|
68
|
-
this.status = 'success';
|
|
69
|
-
this.testDeferred.resolve(this);
|
|
70
|
-
this.testResultDeferred.resolve(testReturnValue);
|
|
71
|
-
return; // Success, exit retry loop
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
this.hrtMeasurement.stop();
|
|
75
|
-
// Handle skip
|
|
76
|
-
if (err instanceof SkipError || err.name === 'SkipError') {
|
|
77
|
-
console.log(`ok ${testNumber} - ${this.description} # SKIP ${err.message.replace('Skipped: ', '')}`);
|
|
78
|
-
this.status = 'skipped';
|
|
79
|
-
this.testDeferred.resolve(this);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
lastError = err;
|
|
83
|
-
// If we have retries left, try again
|
|
84
|
-
if (attempt < maxRetries) {
|
|
85
|
-
console.log(`# Retry ${attempt + 1}/${maxRetries} for test: ${this.description}`);
|
|
86
|
-
this.tapTools._incrementRetryCount();
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
// Final failure
|
|
90
|
-
console.log(`not ok ${testNumber} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`);
|
|
91
|
-
this.testDeferred.resolve(this);
|
|
92
|
-
this.testResultDeferred.resolve(err);
|
|
93
|
-
// if the test has already succeeded before
|
|
94
|
-
if (this.status === 'success') {
|
|
95
|
-
this.status = 'errorAfterSuccess';
|
|
96
|
-
console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull');
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
this.status = 'error';
|
|
100
|
-
}
|
|
101
|
-
// if the test is allowed to fail
|
|
102
|
-
if (this.failureAllowed) {
|
|
103
|
-
console.log(`please note: failure allowed!`);
|
|
104
|
-
}
|
|
105
|
-
console.log(err);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3RhcGJ1bmRsZS90YXBidW5kbGUuY2xhc3Nlcy50YXB0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sd0JBQXdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTdkQsTUFBTSxPQUFPLE9BQU87SUFtQmxCOztPQUVHO0lBQ0gsWUFBWSxVQUlYO1FBaEJNLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFeEIsU0FBSSxHQUFhLEVBQUUsQ0FBQztRQUNwQixhQUFRLEdBQThCLFFBQVEsQ0FBQztRQUU5QyxpQkFBWSxHQUF5QixPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25FLGdCQUFXLEdBQXdCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQzVELHVCQUFrQixHQUFnQixPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hFLHNCQUFpQixHQUFlLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFTckUsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFB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
|