@git.zone/tstest 1.5.0 → 1.8.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.
Files changed (68) hide show
  1. package/dist_ts/00_commitinfo_data.js +1 -1
  2. package/dist_ts/index.js +9 -2
  3. package/dist_ts/tstest.classes.tap.parser.d.ts +4 -0
  4. package/dist_ts/tstest.classes.tap.parser.js +114 -24
  5. package/dist_ts/tstest.classes.testdirectory.d.ts +10 -0
  6. package/dist_ts/tstest.classes.testdirectory.js +31 -1
  7. package/dist_ts/tstest.classes.tstest.d.ts +3 -1
  8. package/dist_ts/tstest.classes.tstest.js +52 -27
  9. package/dist_ts_tapbundle/index.d.ts +1 -0
  10. package/dist_ts_tapbundle/index.js +2 -1
  11. package/dist_ts_tapbundle/tapbundle.classes.tap.d.ts +54 -1
  12. package/dist_ts_tapbundle/tapbundle.classes.tap.js +288 -24
  13. package/dist_ts_tapbundle/tapbundle.classes.taptest.d.ts +7 -1
  14. package/dist_ts_tapbundle/tapbundle.classes.taptest.js +75 -27
  15. package/dist_ts_tapbundle/tapbundle.classes.taptools.d.ts +81 -1
  16. package/dist_ts_tapbundle/tapbundle.classes.taptools.js +180 -2
  17. package/dist_ts_tapbundle/ts_tapbundle/00_commitinfo_data.d.ts +8 -0
  18. package/dist_ts_tapbundle/ts_tapbundle/00_commitinfo_data.js +9 -0
  19. package/dist_ts_tapbundle/ts_tapbundle/index.d.ts +6 -0
  20. package/dist_ts_tapbundle/ts_tapbundle/index.js +7 -0
  21. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.pretask.d.ts +10 -0
  22. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.pretask.js +13 -0
  23. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tap.d.ts +104 -0
  24. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tap.js +401 -0
  25. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptest.d.ts +38 -0
  26. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptest.js +110 -0
  27. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptools.d.ts +109 -0
  28. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.taptools.js +241 -0
  29. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tapwrap.d.ts +8 -0
  30. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.classes.tapwrap.js +7 -0
  31. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.plugins.d.ts +8 -0
  32. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.plugins.js +10 -0
  33. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.tapcreator.d.ts +3 -0
  34. package/dist_ts_tapbundle/ts_tapbundle/tapbundle.tapcreator.js +5 -0
  35. package/dist_ts_tapbundle/ts_tapbundle/webhelpers.d.ts +7 -0
  36. package/dist_ts_tapbundle/ts_tapbundle/webhelpers.js +35 -0
  37. package/dist_ts_tapbundle/ts_tapbundle_node/classes.pathinject.d.ts +5 -0
  38. package/dist_ts_tapbundle/ts_tapbundle_node/classes.pathinject.js +13 -0
  39. package/dist_ts_tapbundle/ts_tapbundle_node/plugins.d.ts +11 -0
  40. package/dist_ts_tapbundle/ts_tapbundle_node/plugins.js +14 -0
  41. package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.classes.taptest.d.ts +38 -0
  42. package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.classes.taptest.js +110 -0
  43. package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.classes.taptools.d.ts +109 -0
  44. package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.classes.taptools.js +241 -0
  45. package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.plugins.d.ts +8 -0
  46. package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.plugins.js +10 -0
  47. package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.tapcreator.d.ts +3 -0
  48. package/dist_ts_tapbundle_node/ts_tapbundle/tapbundle.tapcreator.js +5 -0
  49. package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.pathinject.d.ts +5 -0
  50. package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.pathinject.js +13 -0
  51. package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.tapnodetools.d.ts +25 -0
  52. package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.tapnodetools.js +81 -0
  53. package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.testfileprovider.d.ts +6 -0
  54. package/dist_ts_tapbundle_node/ts_tapbundle_node/classes.testfileprovider.js +16 -0
  55. package/dist_ts_tapbundle_node/ts_tapbundle_node/index.d.ts +2 -0
  56. package/dist_ts_tapbundle_node/ts_tapbundle_node/index.js +3 -0
  57. package/dist_ts_tapbundle_node/ts_tapbundle_node/paths.d.ts +2 -0
  58. package/dist_ts_tapbundle_node/ts_tapbundle_node/paths.js +4 -0
  59. package/dist_ts_tapbundle_node/ts_tapbundle_node/plugins.d.ts +11 -0
  60. package/dist_ts_tapbundle_node/ts_tapbundle_node/plugins.js +14 -0
  61. package/package.json +11 -8
  62. package/readme.md +141 -0
  63. package/readme.plan.md +253 -30
  64. package/ts/00_commitinfo_data.ts +1 -1
  65. package/ts/index.ts +8 -1
  66. package/ts/tstest.classes.tap.parser.ts +111 -25
  67. package/ts/tstest.classes.testdirectory.ts +39 -0
  68. package/ts/tstest.classes.tstest.ts +61 -27
@@ -1,6 +1,36 @@
1
1
  import { type IPreTaskFunction } from './tapbundle.classes.pretask.js';
2
2
  import { TapTest, type ITestFunction } from './tapbundle.classes.taptest.js';
3
+ export interface ITestSuite {
4
+ description: string;
5
+ tests: TapTest<any>[];
6
+ beforeEach?: ITestFunction<any>;
7
+ afterEach?: ITestFunction<any>;
8
+ parent?: ITestSuite;
9
+ children: ITestSuite[];
10
+ }
11
+ declare class TestBuilder<T> {
12
+ private _tap;
13
+ private _tags;
14
+ private _priority;
15
+ private _retryCount?;
16
+ private _timeoutMs?;
17
+ constructor(tap: Tap<T>);
18
+ tags(...tags: string[]): this;
19
+ priority(level: 'high' | 'medium' | 'low'): this;
20
+ retry(count: number): this;
21
+ timeout(ms: number): this;
22
+ test(description: string, testFunction: ITestFunction<T>): TapTest<T>;
23
+ testOnly(description: string, testFunction: ITestFunction<T>): TapTest<T>;
24
+ testSkip(description: string, testFunction: ITestFunction<T>): TapTest<T>;
25
+ }
3
26
  export declare class Tap<T> {
27
+ private _skipCount;
28
+ private _filterTags;
29
+ constructor();
30
+ tags(...tags: string[]): TestBuilder<T>;
31
+ priority(level: 'high' | 'medium' | 'low'): TestBuilder<T>;
32
+ retry(count: number): TestBuilder<T>;
33
+ timeout(ms: number): TestBuilder<T>;
4
34
  /**
5
35
  * skips a test
6
36
  * tests marked with tap.skip.test() are never executed
@@ -18,6 +48,8 @@ export declare class Tap<T> {
18
48
  private _tapPreTasks;
19
49
  private _tapTests;
20
50
  private _tapTestsOnly;
51
+ private _currentSuite;
52
+ private _rootSuites;
21
53
  /**
22
54
  * Normal test function, will run one by one
23
55
  * @param testDescription - A description of what the test does
@@ -31,12 +63,32 @@ export declare class Tap<T> {
31
63
  * @param testFunction - A Function that returns a Promise and resolves or rejects
32
64
  */
33
65
  testParallel(testDescription: string, testFunction: ITestFunction<T>): void;
66
+ /**
67
+ * Create a test suite for grouping related tests
68
+ */
69
+ describe(description: string, suiteFunction: () => void): void;
70
+ /**
71
+ * Set up a function to run before each test in the current suite
72
+ */
73
+ beforeEach(setupFunction: ITestFunction<any>): void;
74
+ /**
75
+ * Set up a function to run after each test in the current suite
76
+ */
77
+ afterEach(teardownFunction: ITestFunction<any>): void;
78
+ /**
79
+ * collect all tests from suites
80
+ */
81
+ private _collectTests;
34
82
  /**
35
83
  * starts the test evaluation
36
84
  */
37
85
  start(optionsArg?: {
38
86
  throwOnError: boolean;
39
87
  }): Promise<void>;
88
+ /**
89
+ * Run tests in a suite with lifecycle hooks
90
+ */
91
+ private _runSuite;
40
92
  stopForcefully(codeArg?: number, directArg?: boolean): Promise<void>;
41
93
  /**
42
94
  * handle errors
@@ -48,4 +100,5 @@ export declare class Tap<T> {
48
100
  */
49
101
  fail(message?: string): never;
50
102
  }
51
- export declare let tap: Tap<unknown>;
103
+ export declare const tap: Tap<unknown>;
104
+ export {};
@@ -1,8 +1,78 @@
1
1
  import * as plugins from './tapbundle.plugins.js';
2
2
  import { PreTask } from './tapbundle.classes.pretask.js';
3
3
  import { TapTest } from './tapbundle.classes.taptest.js';
4
+ class TestBuilder {
5
+ constructor(tap) {
6
+ this._tags = [];
7
+ this._priority = 'medium';
8
+ this._tap = tap;
9
+ }
10
+ tags(...tags) {
11
+ this._tags = tags;
12
+ return this;
13
+ }
14
+ priority(level) {
15
+ this._priority = level;
16
+ return this;
17
+ }
18
+ retry(count) {
19
+ this._retryCount = count;
20
+ return this;
21
+ }
22
+ timeout(ms) {
23
+ this._timeoutMs = ms;
24
+ return this;
25
+ }
26
+ test(description, testFunction) {
27
+ const test = this._tap.test(description, testFunction, 'normal');
28
+ // Apply settings to the test
29
+ if (this._tags.length > 0) {
30
+ test.tags = this._tags;
31
+ }
32
+ test.priority = this._priority;
33
+ if (this._retryCount !== undefined) {
34
+ test.tapTools.retry(this._retryCount);
35
+ }
36
+ if (this._timeoutMs !== undefined) {
37
+ test.timeoutMs = this._timeoutMs;
38
+ }
39
+ return test;
40
+ }
41
+ testOnly(description, testFunction) {
42
+ const test = this._tap.test(description, testFunction, 'only');
43
+ // Apply settings to the test
44
+ if (this._tags.length > 0) {
45
+ test.tags = this._tags;
46
+ }
47
+ test.priority = this._priority;
48
+ if (this._retryCount !== undefined) {
49
+ test.tapTools.retry(this._retryCount);
50
+ }
51
+ if (this._timeoutMs !== undefined) {
52
+ test.timeoutMs = this._timeoutMs;
53
+ }
54
+ return test;
55
+ }
56
+ testSkip(description, testFunction) {
57
+ const test = this._tap.test(description, testFunction, 'skip');
58
+ // Apply settings to the test
59
+ if (this._tags.length > 0) {
60
+ test.tags = this._tags;
61
+ }
62
+ test.priority = this._priority;
63
+ if (this._retryCount !== undefined) {
64
+ test.tapTools.retry(this._retryCount);
65
+ }
66
+ if (this._timeoutMs !== undefined) {
67
+ test.timeoutMs = this._timeoutMs;
68
+ }
69
+ return test;
70
+ }
71
+ }
4
72
  export class Tap {
5
73
  constructor() {
74
+ this._skipCount = 0;
75
+ this._filterTags = [];
6
76
  /**
7
77
  * skips a test
8
78
  * tests marked with tap.skip.test() are never executed
@@ -10,9 +80,11 @@ export class Tap {
10
80
  this.skip = {
11
81
  test: (descriptionArg, functionArg) => {
12
82
  console.log(`skipped test: ${descriptionArg}`);
83
+ this._skipCount++;
13
84
  },
14
85
  testParallel: (descriptionArg, functionArg) => {
15
86
  console.log(`skipped test: ${descriptionArg}`);
87
+ this._skipCount++;
16
88
  },
17
89
  };
18
90
  /**
@@ -26,6 +98,29 @@ export class Tap {
26
98
  this._tapPreTasks = [];
27
99
  this._tapTests = [];
28
100
  this._tapTestsOnly = [];
101
+ this._currentSuite = null;
102
+ this._rootSuites = [];
103
+ // Get filter tags from environment
104
+ if (typeof process !== 'undefined' && process.env && process.env.TSTEST_FILTER_TAGS) {
105
+ this._filterTags = process.env.TSTEST_FILTER_TAGS.split(',');
106
+ }
107
+ }
108
+ // Fluent test builder
109
+ tags(...tags) {
110
+ const builder = new TestBuilder(this);
111
+ return builder.tags(...tags);
112
+ }
113
+ priority(level) {
114
+ const builder = new TestBuilder(this);
115
+ return builder.priority(level);
116
+ }
117
+ retry(count) {
118
+ const builder = new TestBuilder(this);
119
+ return builder.retry(count);
120
+ }
121
+ timeout(ms) {
122
+ const builder = new TestBuilder(this);
123
+ return builder.timeout(ms);
29
124
  }
30
125
  /**
31
126
  * Normal test function, will run one by one
@@ -38,11 +133,19 @@ export class Tap {
38
133
  testFunction,
39
134
  parallel: false,
40
135
  });
41
- if (modeArg === 'normal') {
42
- this._tapTests.push(localTest);
136
+ // No options applied here - use the fluent builder syntax instead
137
+ // If we're in a suite, add test to the suite
138
+ if (this._currentSuite) {
139
+ this._currentSuite.tests.push(localTest);
43
140
  }
44
- else if (modeArg === 'only') {
45
- this._tapTestsOnly.push(localTest);
141
+ else {
142
+ // Otherwise add to global test list
143
+ if (modeArg === 'normal') {
144
+ this._tapTests.push(localTest);
145
+ }
146
+ else if (modeArg === 'only') {
147
+ this._tapTestsOnly.push(localTest);
148
+ }
46
149
  }
47
150
  return localTest;
48
151
  }
@@ -55,11 +158,76 @@ export class Tap {
55
158
  * @param testFunction - A Function that returns a Promise and resolves or rejects
56
159
  */
57
160
  testParallel(testDescription, testFunction) {
58
- this._tapTests.push(new TapTest({
161
+ const localTest = new TapTest({
59
162
  description: testDescription,
60
163
  testFunction,
61
164
  parallel: true,
62
- }));
165
+ });
166
+ if (this._currentSuite) {
167
+ this._currentSuite.tests.push(localTest);
168
+ }
169
+ else {
170
+ this._tapTests.push(localTest);
171
+ }
172
+ }
173
+ /**
174
+ * Create a test suite for grouping related tests
175
+ */
176
+ describe(description, suiteFunction) {
177
+ const suite = {
178
+ description,
179
+ tests: [],
180
+ children: [],
181
+ parent: this._currentSuite,
182
+ };
183
+ // Add to parent or root
184
+ if (this._currentSuite) {
185
+ this._currentSuite.children.push(suite);
186
+ }
187
+ else {
188
+ this._rootSuites.push(suite);
189
+ }
190
+ // Execute suite function in context
191
+ const previousSuite = this._currentSuite;
192
+ this._currentSuite = suite;
193
+ try {
194
+ suiteFunction();
195
+ }
196
+ finally {
197
+ this._currentSuite = previousSuite;
198
+ }
199
+ }
200
+ /**
201
+ * Set up a function to run before each test in the current suite
202
+ */
203
+ beforeEach(setupFunction) {
204
+ if (this._currentSuite) {
205
+ this._currentSuite.beforeEach = setupFunction;
206
+ }
207
+ else {
208
+ throw new Error('beforeEach can only be used inside a describe block');
209
+ }
210
+ }
211
+ /**
212
+ * Set up a function to run after each test in the current suite
213
+ */
214
+ afterEach(teardownFunction) {
215
+ if (this._currentSuite) {
216
+ this._currentSuite.afterEach = teardownFunction;
217
+ }
218
+ else {
219
+ throw new Error('afterEach can only be used inside a describe block');
220
+ }
221
+ }
222
+ /**
223
+ * collect all tests from suites
224
+ */
225
+ _collectTests(suite, tests = []) {
226
+ tests.push(...suite.tests);
227
+ for (const childSuite of suite.children) {
228
+ this._collectTests(childSuite, tests);
229
+ }
230
+ return tests;
63
231
  }
64
232
  /**
65
233
  * starts the test evaluation
@@ -67,15 +235,25 @@ export class Tap {
67
235
  async start(optionsArg) {
68
236
  // lets set the tapbundle promise
69
237
  const smartenvInstance = new plugins.smartenv.Smartenv();
238
+ const globalPromise = plugins.smartpromise.defer();
70
239
  smartenvInstance.isBrowser
71
- ? (globalThis.tapbundleDeferred = plugins.smartpromise.defer())
240
+ ? (globalThis.tapbundleDeferred = globalPromise)
72
241
  : null;
242
+ // Also set tapPromise for backwards compatibility
243
+ smartenvInstance.isBrowser
244
+ ? (globalThis.tapPromise = globalPromise.promise)
245
+ : null;
246
+ // Path helpers will be initialized by the Node.js environment if available
73
247
  // lets continue with running the tests
74
248
  const promiseArray = [];
249
+ // Collect all tests including those in suites
250
+ let allTests = [...this._tapTests];
251
+ for (const suite of this._rootSuites) {
252
+ this._collectTests(suite, allTests);
253
+ }
75
254
  // safeguard against empty test array
76
- if (this._tapTests.length === 0) {
255
+ if (allTests.length === 0 && this._tapTestsOnly.length === 0) {
77
256
  console.log('no tests specified. Ending here!');
78
- // TODO: throw proper error
79
257
  return;
80
258
  }
81
259
  // determine which tests to run
@@ -84,16 +262,49 @@ export class Tap {
84
262
  concerningTests = this._tapTestsOnly;
85
263
  }
86
264
  else {
87
- concerningTests = this._tapTests;
265
+ concerningTests = allTests;
266
+ }
267
+ // Filter tests by tags if specified
268
+ if (this._filterTags.length > 0) {
269
+ concerningTests = concerningTests.filter(test => {
270
+ // Skip tests without tags when filtering is active
271
+ if (!test.tags || test.tags.length === 0) {
272
+ return false;
273
+ }
274
+ // Check if test has any of the filter tags
275
+ return test.tags.some(tag => this._filterTags.includes(tag));
276
+ });
88
277
  }
89
278
  // lets run the pretasks
90
279
  for (const preTask of this._tapPreTasks) {
91
280
  await preTask.run();
92
281
  }
282
+ // Count actual tests that will be run
93
283
  console.log(`1..${concerningTests.length}`);
94
- for (let testKey = 0; testKey < concerningTests.length; testKey++) {
95
- const currentTest = concerningTests[testKey];
96
- const testPromise = currentTest.run(testKey);
284
+ // Run tests from suites with lifecycle hooks
285
+ let testKey = 0;
286
+ // Run root suite tests with lifecycle hooks
287
+ if (this._rootSuites.length > 0) {
288
+ await this._runSuite(null, this._rootSuites, promiseArray, { testKey });
289
+ // Update testKey after running suite tests
290
+ for (const suite of this._rootSuites) {
291
+ const suiteTests = this._collectTests(suite);
292
+ testKey += suiteTests.length;
293
+ }
294
+ }
295
+ // Run non-suite tests (tests added directly without describe)
296
+ const nonSuiteTests = concerningTests.filter(test => {
297
+ // Check if test is not in any suite
298
+ for (const suite of this._rootSuites) {
299
+ const suiteTests = this._collectTests(suite);
300
+ if (suiteTests.includes(test)) {
301
+ return false;
302
+ }
303
+ }
304
+ return true;
305
+ });
306
+ for (const currentTest of nonSuiteTests) {
307
+ const testPromise = currentTest.run(testKey++);
97
308
  if (currentTest.parallel) {
98
309
  promiseArray.push(testPromise);
99
310
  }
@@ -107,7 +318,7 @@ export class Tap {
107
318
  const executionNotes = [];
108
319
  // collect failed tests
109
320
  for (const tapTest of concerningTests) {
110
- if (tapTest.status !== 'success') {
321
+ if (tapTest.status !== 'success' && tapTest.status !== 'skipped') {
111
322
  failReasons.push(`Test ${tapTest.testKey + 1} failed with status ${tapTest.status}:\n` +
112
323
  `|| ${tapTest.description}\n` +
113
324
  `|| for more information please take a look the logs above`);
@@ -118,22 +329,75 @@ export class Tap {
118
329
  console.log(failReason);
119
330
  }
120
331
  if (optionsArg && optionsArg.throwOnError && failReasons.length > 0) {
121
- if (!smartenvInstance.isBrowser)
332
+ if (!smartenvInstance.isBrowser && typeof process !== 'undefined')
122
333
  process.exit(1);
123
334
  }
124
335
  if (smartenvInstance.isBrowser) {
125
- globalThis.tapbundleDeferred.resolve();
336
+ globalPromise.resolve();
337
+ }
338
+ }
339
+ /**
340
+ * Run tests in a suite with lifecycle hooks
341
+ */
342
+ async _runSuite(parentSuite, suites, promiseArray, context) {
343
+ for (const suite of suites) {
344
+ // Run beforeEach from parent suites
345
+ const beforeEachFunctions = [];
346
+ let currentSuite = suite;
347
+ while (currentSuite) {
348
+ if (currentSuite.beforeEach) {
349
+ beforeEachFunctions.unshift(currentSuite.beforeEach);
350
+ }
351
+ currentSuite = currentSuite.parent || null;
352
+ }
353
+ // Run tests in this suite
354
+ for (const test of suite.tests) {
355
+ // Create wrapper test function that includes lifecycle hooks
356
+ const originalFunction = test.testFunction;
357
+ test.testFunction = async (tapTools) => {
358
+ // Run all beforeEach hooks
359
+ for (const beforeEach of beforeEachFunctions) {
360
+ await beforeEach(tapTools);
361
+ }
362
+ // Run the actual test
363
+ const result = await originalFunction(tapTools);
364
+ // Run afterEach hooks in reverse order
365
+ const afterEachFunctions = [];
366
+ currentSuite = suite;
367
+ while (currentSuite) {
368
+ if (currentSuite.afterEach) {
369
+ afterEachFunctions.push(currentSuite.afterEach);
370
+ }
371
+ currentSuite = currentSuite.parent || null;
372
+ }
373
+ for (const afterEach of afterEachFunctions) {
374
+ await afterEach(tapTools);
375
+ }
376
+ return result;
377
+ };
378
+ const testPromise = test.run(context.testKey++);
379
+ if (test.parallel) {
380
+ promiseArray.push(testPromise);
381
+ }
382
+ else {
383
+ await testPromise;
384
+ }
385
+ }
386
+ // Recursively run child suites
387
+ await this._runSuite(suite, suite.children, promiseArray, context);
126
388
  }
127
389
  }
128
390
  async stopForcefully(codeArg = 0, directArg = false) {
129
391
  console.log(`tap stopping forcefully! Code: ${codeArg} / Direct: ${directArg}`);
130
- if (directArg) {
131
- process.exit(codeArg);
132
- }
133
- else {
134
- setTimeout(() => {
392
+ if (typeof process !== 'undefined') {
393
+ if (directArg) {
135
394
  process.exit(codeArg);
136
- }, 10);
395
+ }
396
+ else {
397
+ setTimeout(() => {
398
+ process.exit(codeArg);
399
+ }, 10);
400
+ }
137
401
  }
138
402
  }
139
403
  /**
@@ -150,5 +414,5 @@ export class Tap {
150
414
  throw new Error(message);
151
415
  }
152
416
  }
153
- export let tap = new Tap();
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfdGFwYnVuZGxlL3RhcGJ1bmRsZS5jbGFzc2VzLnRhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHdCQUF3QixDQUFDO0FBRWxELE9BQU8sRUFBeUIsT0FBTyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLE9BQU8sRUFBc0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM3RSxNQUFNLE9BQU8sR0FBRztJQUFoQjtRQUNFOzs7V0FHRztRQUNJLFNBQUksR0FBRztZQUNaLElBQUksRUFBRSxDQUFDLGNBQXNCLEVBQUUsV0FBNkIsRUFBRSxFQUFFO2dCQUM5RCxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELENBQUM7WUFDRCxZQUFZLEVBQUUsQ0FBQyxjQUFzQixFQUFFLFdBQTZCLEVBQUUsRUFBRTtnQkFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsY0FBYyxFQUFFLENBQUMsQ0FBQztZQUNqRCxDQUFDO1NBQ0YsQ0FBQztRQUVGOztXQUVHO1FBQ0ksU0FBSSxHQUFHO1lBQ1osSUFBSSxFQUFFLENBQUMsY0FBc0IsRUFBRSxlQUFpQyxFQUFFLEVBQUU7Z0JBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyRCxDQUFDO1NBQ0YsQ0FBQztRQUVNLGlCQUFZLEdBQWMsRUFBRSxDQUFDO1FBQzdCLGNBQVMsR0FBbUIsRUFBRSxDQUFDO1FBQy9CLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztJQTZJN0MsQ0FBQztJQTNJQzs7OztPQUlHO0lBQ0ksSUFBSSxDQUNULGVBQXVCLEVBQ3ZCLFlBQThCLEVBQzlCLFVBQXNDLFFBQVE7UUFFOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLENB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
417
+ export const tap = new Tap();
418
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfdGFwYnVuZGxlL3RhcGJ1bmRsZS5jbGFzc2VzLnRhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHdCQUF3QixDQUFDO0FBRWxELE9BQU8sRUFBeUIsT0FBTyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLE9BQU8sRUFBc0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQVc3RSxNQUFNLFdBQVc7SUFPZixZQUFZLEdBQVc7UUFMZixVQUFLLEdBQWEsRUFBRSxDQUFDO1FBQ3JCLGNBQVMsR0FBOEIsUUFBUSxDQUFDO1FBS3RELElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBRyxJQUFjO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFnQztRQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYTtRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLENBQUMsV0FBbUIsRUFBRSxZQUE4QjtRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRWpFLDZCQUE2QjtRQUM3QixJQUFJLElBQUksQ0FB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
@@ -1,6 +1,6 @@
1
1
  import { TapTools } from './tapbundle.classes.taptools.js';
2
2
  import { HrtMeasurement } from '@push.rocks/smarttime';
3
- export type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout';
3
+ export type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout' | 'skipped';
4
4
  export interface ITestFunction<T> {
5
5
  (tapTools?: TapTools): Promise<T>;
6
6
  }
@@ -13,6 +13,12 @@ export declare class TapTest<T = unknown> {
13
13
  tapTools: TapTools;
14
14
  testFunction: ITestFunction<T>;
15
15
  testKey: number;
16
+ timeoutMs?: number;
17
+ isTodo: boolean;
18
+ todoReason?: string;
19
+ tags: string[];
20
+ priority: 'high' | 'medium' | 'low';
21
+ fileName?: string;
16
22
  private testDeferred;
17
23
  testPromise: Promise<TapTest<T>>;
18
24
  private testResultDeferred;