Merge branch 'master' into 'master'
update to latest standards See merge request !1
This commit is contained in:
		
							
								
								
									
										2
									
								
								dist/index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/index.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,4 @@ | ||||
| import 'typings-global'; | ||||
| import { expect } from 'smartchai'; | ||||
| import { tap } from './tapbundle.tap'; | ||||
| import { tap } from './tapbundle.classes.tap'; | ||||
| export { tap, expect }; | ||||
|   | ||||
							
								
								
									
										6
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
								
							| @@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| require("typings-global"); | ||||
| const smartchai_1 = require("smartchai"); | ||||
| exports.expect = smartchai_1.expect; | ||||
| const tapbundle_tap_1 = require("./tapbundle.tap"); | ||||
| exports.tap = tapbundle_tap_1.tap; | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2Qix5Q0FBa0M7QUFNaEMsaUJBTk8sa0JBQU0sQ0FNUDtBQUxSLG1EQUFxQztBQUluQyxjQUpPLG1CQUFHLENBSVAifQ== | ||||
| const tapbundle_classes_tap_1 = require("./tapbundle.classes.tap"); | ||||
| exports.tap = tapbundle_classes_tap_1.tap; | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2Qix5Q0FBa0M7QUFNaEMsb0NBQU07QUFMUixtRUFBNkM7QUFJM0MsMENBQUcifQ== | ||||
| @@ -1,27 +1,4 @@ | ||||
| import { HrtMeasurement } from 'early'; | ||||
| export declare type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess'; | ||||
| export interface ITestFunction { | ||||
|     (): Promise<any>; | ||||
| } | ||||
| export declare class TapTest { | ||||
|     description: string; | ||||
|     parallel: boolean; | ||||
|     hrtMeasurement: HrtMeasurement; | ||||
|     testFunction: ITestFunction; | ||||
|     status: TTestStatus; | ||||
|     /** | ||||
|      * constructor | ||||
|      */ | ||||
|     constructor(optionsArg: { | ||||
|         description: string; | ||||
|         testFunction: ITestFunction; | ||||
|         parallel: boolean; | ||||
|     }); | ||||
|     /** | ||||
|      * run the test | ||||
|      */ | ||||
|     run(testKeyArg: number): Promise<void>; | ||||
| } | ||||
| import { TapTest, ITestFunction } from './tapbundle.classes.taptest'; | ||||
| export declare class Tap { | ||||
|     private _tests; | ||||
|     /** | ||||
| @@ -29,7 +6,7 @@ export declare class Tap { | ||||
|      * @param testDescription - A description of what the test does | ||||
|      * @param testFunction - A Function that returns a Promise and resolves or rejects | ||||
|      */ | ||||
|     test(testDescription: string, testFunction: ITestFunction): Promise<void>; | ||||
|     test(testDescription: string, testFunction: ITestFunction): Promise<TapTest>; | ||||
|     /** | ||||
|      * A parallel test that will not be waited for before the next starts. | ||||
|      * @param testDescription - A description of what the test does | ||||
							
								
								
									
										85
									
								
								dist/tapbundle.classes.tap.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								dist/tapbundle.classes.tap.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| "use strict"; | ||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||
|     return new (P || (P = Promise))(function (resolve, reject) { | ||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||
|         function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||
|     }); | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| const tapbundle_classes_taptest_1 = require("./tapbundle.classes.taptest"); | ||||
| class Tap { | ||||
|     constructor() { | ||||
|         this._tests = []; | ||||
|     } | ||||
|     /** | ||||
|      * Normal test function, will run one by one | ||||
|      * @param testDescription - A description of what the test does | ||||
|      * @param testFunction - A Function that returns a Promise and resolves or rejects | ||||
|      */ | ||||
|     test(testDescription, testFunction) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             let localTest = new tapbundle_classes_taptest_1.TapTest({ | ||||
|                 description: testDescription, | ||||
|                 testFunction: testFunction, | ||||
|                 parallel: false | ||||
|             }); | ||||
|             this._tests.push(localTest); | ||||
|             return localTest; | ||||
|         }); | ||||
|     } | ||||
|     /** | ||||
|      * A parallel test that will not be waited for before the next starts. | ||||
|      * @param testDescription - A description of what the test does | ||||
|      * @param testFunction - A Function that returns a Promise and resolves or rejects | ||||
|      */ | ||||
|     testParallel(testDescription, testFunction) { | ||||
|         this._tests.push(new tapbundle_classes_taptest_1.TapTest({ | ||||
|             description: testDescription, | ||||
|             testFunction: testFunction, | ||||
|             parallel: true | ||||
|         })); | ||||
|     } | ||||
|     /** | ||||
|      * tests leakage | ||||
|      * @param testDescription - A description of what the test does | ||||
|      * @param testFunction - A Function that returns a Promise and resolves or rejects | ||||
|      */ | ||||
|     testLeakage(testDescription, testFunction) { | ||||
|     } | ||||
|     /** | ||||
|      * starts the test evaluation | ||||
|      */ | ||||
|     start() { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             let promiseArray = []; | ||||
|             // safeguard against empty test array | ||||
|             if (this._tests.length === 0) { | ||||
|                 console.log('no tests specified. Ending here!'); | ||||
|                 return; | ||||
|             } | ||||
|             console.log(`1..${this._tests.length}`); | ||||
|             for (let testKey = 0; testKey < this._tests.length; testKey++) { | ||||
|                 let currentTest = this._tests[testKey]; | ||||
|                 let testPromise = currentTest.run(testKey); | ||||
|                 if (currentTest.parallel) { | ||||
|                     promiseArray.push(testPromise); | ||||
|                 } | ||||
|                 else { | ||||
|                     yield testPromise; | ||||
|                 } | ||||
|             } | ||||
|             yield Promise.all(promiseArray); | ||||
|         }); | ||||
|     } | ||||
|     /** | ||||
|      * handle errors | ||||
|      */ | ||||
|     threw(err) { | ||||
|         console.log(err); | ||||
|     } | ||||
| } | ||||
| exports.Tap = Tap; | ||||
| exports.tap = new Tap(); | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvdGFwYnVuZGxlLmNsYXNzZXMudGFwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFQSwyRUFBb0U7QUFFcEU7SUFBQTtRQUNVLFdBQU0sR0FBYyxFQUFFLENBQUE7SUFzRWhDLENBQUM7SUFwRUM7Ozs7T0FJRztJQUNHLElBQUksQ0FBRSxlQUF1QixFQUFFLFlBQTJCOztZQUM5RCxJQUFJLFNBQVMsR0FBRyxJQUFJLG1DQUFPLENBQUM7Z0JBQzFCLFdBQVcsRUFBRSxlQUFlO2dCQUM1QixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDM0IsTUFBTSxDQUFDLFNBQVMsQ0FBQTtRQUNsQixDQUFDO0tBQUE7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxDQUFFLGVBQXVCLEVBQUUsWUFBMkI7UUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxtQ0FBTyxDQUFDO1lBQzNCLFdBQVcsRUFBRSxlQUFlO1lBQzVCLFlBQVksRUFBRSxZQUFZO1lBQzFCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBRSxlQUF1QixFQUFFLFlBQTJCO0lBRWpFLENBQUM7SUFFRDs7T0FFRztJQUNHLEtBQUs7O1lBQ1QsSUFBSSxZQUFZLEdBQW1CLEVBQUUsQ0FBQTtZQUVyQyxxQ0FBcUM7WUFDckMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO2dCQUMvQyxNQUFNLENBQUE7WUFDUixDQUFDO1lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtZQUN2QyxHQUFHLENBQUMsQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQzlELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ3RDLElBQUksV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQzFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUN6QixZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUNoQyxDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNOLE1BQU0sV0FBVyxDQUFBO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztZQUNELE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNqQyxDQUFDO0tBQUE7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBRSxHQUFHO1FBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNsQixDQUFDO0NBQ0Y7QUF2RUQsa0JBdUVDO0FBRVUsUUFBQSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQSJ9 | ||||
							
								
								
									
										27
									
								
								dist/tapbundle.classes.taptest.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								dist/tapbundle.classes.taptest.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| import { TapTools } from './tapbundle.classes.taptools'; | ||||
| import { HrtMeasurement } from 'early'; | ||||
| export declare type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout'; | ||||
| export interface ITestFunction { | ||||
|     (tapTools?: TapTools): Promise<any>; | ||||
| } | ||||
| export declare class TapTest { | ||||
|     description: string; | ||||
|     failureAllowed: boolean; | ||||
|     hrtMeasurement: HrtMeasurement; | ||||
|     parallel: boolean; | ||||
|     status: TTestStatus; | ||||
|     tapTools: TapTools; | ||||
|     testFunction: ITestFunction; | ||||
|     /** | ||||
|      * constructor | ||||
|      */ | ||||
|     constructor(optionsArg: { | ||||
|         description: string; | ||||
|         testFunction: ITestFunction; | ||||
|         parallel: boolean; | ||||
|     }); | ||||
|     /** | ||||
|      * run the test | ||||
|      */ | ||||
|     run(testKeyArg: number): Promise<void>; | ||||
| } | ||||
							
								
								
									
										57
									
								
								dist/tapbundle.classes.taptest.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								dist/tapbundle.classes.taptest.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| "use strict"; | ||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||
|     return new (P || (P = Promise))(function (resolve, reject) { | ||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||
|         function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||
|     }); | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| const tapbundle_classes_taptools_1 = require("./tapbundle.classes.taptools"); | ||||
| // imported interfaces | ||||
| const early_1 = require("early"); | ||||
| class TapTest { | ||||
|     /** | ||||
|      * constructor | ||||
|      */ | ||||
|     constructor(optionsArg) { | ||||
|         this.description = optionsArg.description; | ||||
|         this.hrtMeasurement = new early_1.HrtMeasurement(); | ||||
|         this.parallel = optionsArg.parallel; | ||||
|         this.status = 'pending'; | ||||
|         this.tapTools = new tapbundle_classes_taptools_1.TapTools(this); | ||||
|         this.testFunction = optionsArg.testFunction; | ||||
|     } | ||||
|     /** | ||||
|      * run the test | ||||
|      */ | ||||
|     run(testKeyArg) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             this.hrtMeasurement.start(); | ||||
|             try { | ||||
|                 yield this.testFunction(this.tapTools); | ||||
|                 if (this.status === 'timeout') { | ||||
|                     throw new Error('Test succeeded, but timed out...'); | ||||
|                 } | ||||
|                 this.hrtMeasurement.stop(); | ||||
|                 console.log(`ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`); | ||||
|                 this.status = 'success'; | ||||
|             } | ||||
|             catch (err) { | ||||
|                 this.hrtMeasurement.stop(); | ||||
|                 console.log(`not ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`); | ||||
|                 if (this.status === 'success') { | ||||
|                     this.status = 'errorAfterSuccess'; | ||||
|                     console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull'); | ||||
|                 } | ||||
|                 if (this.failureAllowed) { | ||||
|                     console.log(`please note: failure allowed!`); | ||||
|                 } | ||||
|                 console.log(err); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| exports.TapTest = TapTest; | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwdGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3RhcGJ1bmRsZS5jbGFzc2VzLnRhcHRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUNBLDZFQUF1RDtBQUV2RCxzQkFBc0I7QUFDdEIsaUNBQXNDO0FBVXRDO0lBUUU7O09BRUc7SUFDSCxZQUFhLFVBSVo7UUFDQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUE7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHNCQUFjLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUE7UUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUE7UUFDdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHFDQUFRLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFBO0lBQzdDLENBQUM7SUFFRDs7T0FFRztJQUNHLEdBQUcsQ0FBRSxVQUFrQjs7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtZQUMzQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtnQkFDdEMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUM5QixNQUFNLElBQUksS0FBSyxDQUFFLGtDQUFrQyxDQUFDLENBQUE7Z0JBQ3RELENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUE7Z0JBQ3RHLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO1lBQ3pCLENBQUM7WUFBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxVQUFVLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLFdBQVcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFBO2dCQUMxRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUE7b0JBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMseUVBQXlFLENBQUMsQ0FBQTtnQkFDeEYsQ0FBQztnQkFDRCxFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO2dCQUM5QyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDbEIsQ0FBQztRQUNILENBQUM7S0FBQTtDQUNGO0FBbERELDBCQWtEQyJ9 | ||||
							
								
								
									
										16
									
								
								dist/tapbundle.classes.taptools.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								dist/tapbundle.classes.taptools.d.ts
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| export declare class TapTools { | ||||
|     /** | ||||
|      * the referenced TapTest | ||||
|      */ | ||||
|     private _tapTest; | ||||
|     constructor(TapTestArg: any); | ||||
|     /** | ||||
|      * allow failure | ||||
|      */ | ||||
|     allowFailure(): void; | ||||
|     /** | ||||
|      * async/await delay method | ||||
|      */ | ||||
|     delayFor(timeMilliArg: any): Promise<void>; | ||||
|     timeout(timeMilliArg: number): Promise<void>; | ||||
| } | ||||
							
								
								
									
										40
									
								
								dist/tapbundle.classes.taptools.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								dist/tapbundle.classes.taptools.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| "use strict"; | ||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||
|     return new (P || (P = Promise))(function (resolve, reject) { | ||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||
|         function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||
|     }); | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| const plugins = require("./tapbundle.plugins"); | ||||
| class TapTools { | ||||
|     constructor(TapTestArg) { | ||||
|         this._tapTest = TapTestArg; | ||||
|     } | ||||
|     /** | ||||
|      * allow failure | ||||
|      */ | ||||
|     allowFailure() { | ||||
|         this._tapTest.failureAllowed = true; | ||||
|     } | ||||
|     /** | ||||
|      * async/await delay method | ||||
|      */ | ||||
|     delayFor(timeMilliArg) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             yield plugins.smartdelay.delayFor(timeMilliArg); | ||||
|         }); | ||||
|     } | ||||
|     timeout(timeMilliArg) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             yield plugins.smartdelay.delayFor(timeMilliArg); | ||||
|             if (this._tapTest.status === 'pending') { | ||||
|                 this._tapTest.status = 'timeout'; | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| exports.TapTools = TapTools; | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLmNsYXNzZXMudGFwdG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXBidW5kbGUuY2xhc3Nlcy50YXB0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsK0NBQThDO0FBRzlDO0lBT0UsWUFBWSxVQUFVO1FBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFBO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQVk7UUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUE7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0csUUFBUSxDQUFDLFlBQVk7O1lBQ3pCLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDakQsQ0FBQztLQUFBO0lBRUssT0FBTyxDQUFFLFlBQW9COztZQUNqQyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQy9DLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQTtZQUNsQyxDQUFDO1FBQ0gsQ0FBQztLQUFBO0NBRUY7QUFoQ0QsNEJBZ0NDIn0= | ||||
							
								
								
									
										3
									
								
								dist/tapbundle.plugins.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								dist/tapbundle.plugins.d.ts
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1,6 @@ | ||||
| import 'typings-global'; | ||||
| import * as early from 'early'; | ||||
| import * as leakage from 'leakage'; | ||||
| import * as smartdelay from 'smartdelay'; | ||||
| import * as smartq from 'smartq'; | ||||
| export { early, smartq, leakage }; | ||||
| export { early, smartdelay, smartq, leakage }; | ||||
|   | ||||
							
								
								
									
										4
									
								
								dist/tapbundle.plugins.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								dist/tapbundle.plugins.js
									
									
									
									
										vendored
									
									
								
							| @@ -5,6 +5,8 @@ const early = require("early"); | ||||
| exports.early = early; | ||||
| const leakage = require("leakage"); | ||||
| exports.leakage = leakage; | ||||
| const smartdelay = require("smartdelay"); | ||||
| exports.smartdelay = smartdelay; | ||||
| const smartq = require("smartq"); | ||||
| exports.smartq = smartq; | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXBidW5kbGUucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2QiwrQkFBOEI7QUFLNUIsc0JBQUs7QUFKUCxtQ0FBa0M7QUFNaEMsMEJBQU87QUFMVCxpQ0FBZ0M7QUFJOUIsd0JBQU0ifQ== | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy90YXBidW5kbGUucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2QiwrQkFBOEI7QUFNNUIsc0JBQUs7QUFMUCxtQ0FBa0M7QUFRaEMsMEJBQU87QUFQVCx5Q0FBd0M7QUFLdEMsZ0NBQVU7QUFKWixpQ0FBZ0M7QUFLOUIsd0JBQU0ifQ== | ||||
							
								
								
									
										120
									
								
								dist/tapbundle.tap.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										120
									
								
								dist/tapbundle.tap.js
									
									
									
									
										vendored
									
									
								
							| @@ -1,120 +0,0 @@ | ||||
| "use strict"; | ||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||
|     return new (P || (P = Promise))(function (resolve, reject) { | ||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||
|         function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } | ||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||
|     }); | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||||
| // imported interfaces | ||||
| const early_1 = require("early"); | ||||
| class TapTest { | ||||
|     /** | ||||
|      * constructor | ||||
|      */ | ||||
|     constructor(optionsArg) { | ||||
|         this.description = optionsArg.description; | ||||
|         this.testFunction = optionsArg.testFunction; | ||||
|         this.parallel = optionsArg.parallel; | ||||
|         this.status = 'pending'; | ||||
|         this.hrtMeasurement = new early_1.HrtMeasurement(); | ||||
|     } | ||||
|     /** | ||||
|      * run the test | ||||
|      */ | ||||
|     run(testKeyArg) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             this.hrtMeasurement.start(); | ||||
|             try { | ||||
|                 yield this.testFunction(); | ||||
|                 this.hrtMeasurement.stop(); | ||||
|                 console.log(`ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`); | ||||
|                 this.status = 'success'; | ||||
|             } | ||||
|             catch (err) { | ||||
|                 this.hrtMeasurement.stop(); | ||||
|                 console.log(`not ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`); | ||||
|                 if (this.status === 'success') { | ||||
|                     this.status = 'errorAfterSuccess'; | ||||
|                     console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull'); | ||||
|                 } | ||||
|                 console.log(err); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| exports.TapTest = TapTest; | ||||
| class Tap { | ||||
|     constructor() { | ||||
|         this._tests = []; | ||||
|     } | ||||
|     /** | ||||
|      * Normal test function, will run one by one | ||||
|      * @param testDescription - A description of what the test does | ||||
|      * @param testFunction - A Function that returns a Promise and resolves or rejects | ||||
|      */ | ||||
|     test(testDescription, testFunction) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             this._tests.push(new TapTest({ | ||||
|                 description: testDescription, | ||||
|                 testFunction: testFunction, | ||||
|                 parallel: false | ||||
|             })); | ||||
|         }); | ||||
|     } | ||||
|     /** | ||||
|      * A parallel test that will not be waited for before the next starts. | ||||
|      * @param testDescription - A description of what the test does | ||||
|      * @param testFunction - A Function that returns a Promise and resolves or rejects | ||||
|      */ | ||||
|     testParallel(testDescription, testFunction) { | ||||
|         this._tests.push(new TapTest({ | ||||
|             description: testDescription, | ||||
|             testFunction: testFunction, | ||||
|             parallel: true | ||||
|         })); | ||||
|     } | ||||
|     /** | ||||
|      * tests leakage | ||||
|      * @param testDescription - A description of what the test does | ||||
|      * @param testFunction - A Function that returns a Promise and resolves or rejects | ||||
|      */ | ||||
|     testLeakage(testDescription, testFunction) { | ||||
|     } | ||||
|     /** | ||||
|      * starts the test evaluation | ||||
|      */ | ||||
|     start() { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             let promiseArray = []; | ||||
|             // safeguard against empty test array | ||||
|             if (this._tests.length === 0) { | ||||
|                 console.log('no tests specified. Ending here!'); | ||||
|                 return; | ||||
|             } | ||||
|             console.log(`1..${this._tests.length}`); | ||||
|             for (let testKey = 0; testKey < this._tests.length; testKey++) { | ||||
|                 let currentTest = this._tests[testKey]; | ||||
|                 let testPromise = currentTest.run(testKey); | ||||
|                 if (currentTest.parallel) { | ||||
|                     promiseArray.push(testPromise); | ||||
|                 } | ||||
|                 else { | ||||
|                     yield testPromise; | ||||
|                 } | ||||
|             } | ||||
|             yield Promise.all(promiseArray); | ||||
|         }); | ||||
|     } | ||||
|     /** | ||||
|      * handle errors | ||||
|      */ | ||||
|     threw(err) { | ||||
|         console.log(err); | ||||
|     } | ||||
| } | ||||
| exports.Tap = Tap; | ||||
| exports.tap = new Tap(); | ||||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFwYnVuZGxlLnRhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3RhcGJ1bmRsZS50YXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUlBLHNCQUFzQjtBQUN0QixpQ0FBc0M7QUFVdEM7SUFPRTs7T0FFRztJQUNILFlBQWEsVUFJWjtRQUNDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQTtRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUE7UUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFBO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxzQkFBYyxFQUFFLENBQUE7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0csR0FBRyxDQUFFLFVBQWtCOztZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFBO1lBQzNCLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtnQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsV0FBVyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUE7Z0JBQ3RHLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFBO1lBQ3pCLENBQUM7WUFBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxVQUFVLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLFdBQVcsSUFBSSxD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 | ||||
| @@ -21,6 +21,7 @@ | ||||
|     "early": "^2.1.1", | ||||
|     "leakage": "^0.2.0", | ||||
|     "smartchai": "^1.0.3", | ||||
|     "smartdelay": "^1.0.1", | ||||
|     "smartq": "^1.1.1", | ||||
|     "typings-global": "^1.0.16" | ||||
|   } | ||||
|   | ||||
							
								
								
									
										27
									
								
								test/test.ts
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								test/test.ts
									
									
									
									
									
								
							| @@ -1,7 +1,32 @@ | ||||
| import { tap, expect } from '../dist/index' | ||||
|  | ||||
| tap.test('my first test', async () => { | ||||
| let test1 = tap.test('my first test -> expect true to be true', async () => { | ||||
|   return expect(true).to.be.true | ||||
| }) | ||||
|  | ||||
| let test2 = tap.test('my second test', async (tools) => { | ||||
|   await tools.delayFor(1000) | ||||
| }) | ||||
|  | ||||
| let test3 = tap.test('my third test -> test2 should take longer than test1 and endure at least 1000ms', async () => { | ||||
|   expect((await test1).hrtMeasurement.milliSeconds < (await test2).hrtMeasurement.milliSeconds).to.be.true | ||||
|   expect((await test2).hrtMeasurement.milliSeconds > 1000).to.be.true | ||||
| }) | ||||
|  | ||||
| let test4 = tap.test('my 4th test -> should fail', async (tools) => { | ||||
|   tools.allowFailure() | ||||
|   expect(false).to.be.true | ||||
| }) | ||||
|  | ||||
| let test5 = tap.test('my 5th test -> should pass in about 500ms', async (tools) => { | ||||
|   tools.timeout(1000) | ||||
|   await tools.delayFor(500) | ||||
| }) | ||||
|  | ||||
| let test6 = tap.test('my 6th test -> should fail after 1000ms', async (tools) => { | ||||
|   tools.allowFailure() | ||||
|   tools.timeout(1000) | ||||
|   await tools.delayFor(2000) | ||||
| }) | ||||
|  | ||||
| tap.start() | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| import 'typings-global' | ||||
| import { expect } from 'smartchai' | ||||
| import { tap } from './tapbundle.tap' | ||||
| import { tap } from './tapbundle.classes.tap' | ||||
|  | ||||
|  | ||||
| export { | ||||
|   | ||||
| @@ -1,61 +1,6 @@ | ||||
| import * as plugins from './tapbundle.plugins' | ||||
| 
 | ||||
| import { tapCreator } from './tapbundle.tapcreator' | ||||
| 
 | ||||
| // imported interfaces
 | ||||
| import { HrtMeasurement } from 'early' | ||||
| 
 | ||||
| // interfaces
 | ||||
| export type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | ||||
| 
 | ||||
| export interface ITestFunction { | ||||
|   (): Promise<any> | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| export class TapTest { | ||||
|   description: string | ||||
|   parallel: boolean | ||||
|   hrtMeasurement: HrtMeasurement | ||||
|   testFunction: ITestFunction | ||||
|   status: TTestStatus | ||||
| 
 | ||||
|   /** | ||||
|    * constructor | ||||
|    */ | ||||
|   constructor (optionsArg: { | ||||
|     description: string, | ||||
|     testFunction: ITestFunction, | ||||
|     parallel: boolean | ||||
|   }) { | ||||
|     this.description = optionsArg.description | ||||
|     this.testFunction = optionsArg.testFunction | ||||
|     this.parallel = optionsArg.parallel | ||||
|     this.status = 'pending' | ||||
|     this.hrtMeasurement = new HrtMeasurement() | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
|    * run the test | ||||
|    */ | ||||
|   async run (testKeyArg: number) { | ||||
|     this.hrtMeasurement.start() | ||||
|     try { | ||||
|       await this.testFunction() | ||||
|       this.hrtMeasurement.stop() | ||||
|       console.log(`ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`) | ||||
|       this.status = 'success' | ||||
|     } catch (err) { | ||||
|       this.hrtMeasurement.stop() | ||||
|       console.log(`not ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`) | ||||
|       if (this.status === 'success') { | ||||
|         this.status = 'errorAfterSuccess' | ||||
|         console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull') | ||||
|       } | ||||
|       console.log(err) | ||||
|     } | ||||
|   } | ||||
| } | ||||
| import { TapTest, ITestFunction } from './tapbundle.classes.taptest' | ||||
| 
 | ||||
| export class Tap { | ||||
|   private _tests: TapTest[] = [] | ||||
| @@ -66,11 +11,13 @@ export class Tap { | ||||
|    * @param testFunction - A Function that returns a Promise and resolves or rejects | ||||
|    */ | ||||
|   async test (testDescription: string, testFunction: ITestFunction) { | ||||
|     this._tests.push(new TapTest({ | ||||
|     let localTest = new TapTest({ | ||||
|       description: testDescription, | ||||
|       testFunction: testFunction, | ||||
|       parallel: false | ||||
|     })) | ||||
|     }) | ||||
|     this._tests.push(localTest) | ||||
|     return localTest | ||||
|   } | ||||
| 
 | ||||
|   /** | ||||
							
								
								
									
										65
									
								
								ts/tapbundle.classes.taptest.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								ts/tapbundle.classes.taptest.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| import { tapCreator } from './tapbundle.tapcreator' | ||||
| import { TapTools } from './tapbundle.classes.taptools' | ||||
|  | ||||
| // imported interfaces | ||||
| import { HrtMeasurement } from 'early' | ||||
|  | ||||
| // interfaces | ||||
| export type TTestStatus = 'success' | 'error' | 'pending' | 'errorAfterSuccess' | 'timeout' | ||||
|  | ||||
| export interface ITestFunction { | ||||
|   (tapTools?: TapTools): Promise<any> | ||||
| } | ||||
|  | ||||
|  | ||||
| export class TapTest { | ||||
|   description: string | ||||
|   failureAllowed: boolean | ||||
|   hrtMeasurement: HrtMeasurement | ||||
|   parallel: boolean | ||||
|   status: TTestStatus | ||||
|   tapTools: TapTools | ||||
|   testFunction: ITestFunction | ||||
|   /** | ||||
|    * constructor | ||||
|    */ | ||||
|   constructor (optionsArg: { | ||||
|     description: string, | ||||
|     testFunction: ITestFunction, | ||||
|     parallel: boolean | ||||
|   }) { | ||||
|     this.description = optionsArg.description | ||||
|     this.hrtMeasurement = new HrtMeasurement() | ||||
|     this.parallel = optionsArg.parallel | ||||
|     this.status = 'pending' | ||||
|     this.tapTools = new TapTools(this) | ||||
|     this.testFunction = optionsArg.testFunction | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * run the test | ||||
|    */ | ||||
|   async run (testKeyArg: number) { | ||||
|     this.hrtMeasurement.start() | ||||
|     try { | ||||
|       await this.testFunction(this.tapTools) | ||||
|       if (this.status === 'timeout') { | ||||
|         throw new Error ('Test succeeded, but timed out...') | ||||
|       } | ||||
|       this.hrtMeasurement.stop() | ||||
|       console.log(`ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`) | ||||
|       this.status = 'success' | ||||
|     } catch (err) { | ||||
|       this.hrtMeasurement.stop() | ||||
|       console.log(`not ok ${testKeyArg + 1} - ${this.description} # time=${this.hrtMeasurement.milliSeconds}ms`) | ||||
|       if (this.status === 'success') { | ||||
|         this.status = 'errorAfterSuccess' | ||||
|         console.log('!!! ALERT !!!: weird behaviour, since test has been already successfull') | ||||
|       } | ||||
|       if(this.failureAllowed) { | ||||
|         console.log(`please note: failure allowed!`) | ||||
|       } | ||||
|       console.log(err) | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										36
									
								
								ts/tapbundle.classes.taptools.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								ts/tapbundle.classes.taptools.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| import * as plugins from './tapbundle.plugins' | ||||
| import { TapTest } from './tapbundle.classes.taptest' | ||||
|  | ||||
| export class TapTools { | ||||
|  | ||||
|   /** | ||||
|    * the referenced TapTest | ||||
|    */ | ||||
|   private _tapTest: TapTest | ||||
|  | ||||
|   constructor(TapTestArg) { | ||||
|     this._tapTest = TapTestArg | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * allow failure | ||||
|    */ | ||||
|   allowFailure() { | ||||
|     this._tapTest.failureAllowed = true | ||||
|   } | ||||
|  | ||||
|   /** | ||||
|    * async/await delay method | ||||
|    */ | ||||
|   async delayFor(timeMilliArg) { | ||||
|     await plugins.smartdelay.delayFor(timeMilliArg) | ||||
|   } | ||||
|  | ||||
|   async timeout (timeMilliArg: number) { | ||||
|     await plugins.smartdelay.delayFor(timeMilliArg) | ||||
|     if (this._tapTest.status === 'pending') { | ||||
|       this._tapTest.status = 'timeout' | ||||
|     } | ||||
|   } | ||||
|  | ||||
| } | ||||
| @@ -1,10 +1,12 @@ | ||||
| import 'typings-global' | ||||
| import * as early from 'early' | ||||
| import * as leakage from 'leakage' | ||||
| import * as smartdelay from 'smartdelay' | ||||
| import * as smartq from 'smartq' | ||||
|  | ||||
| export { | ||||
|   early, | ||||
|   smartdelay, | ||||
|   smartq, | ||||
|   leakage | ||||
| } | ||||
|   | ||||
| @@ -210,6 +210,12 @@ smartchai@^1.0.3: | ||||
|     chai-as-promised "^6.0.0" | ||||
|     chai-string "^1.3.0" | ||||
|  | ||||
| smartdelay@^1.0.1: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/smartdelay/-/smartdelay-1.0.1.tgz#687f8bcc09d7c62c9c5a8a1771c1aba3aff54156" | ||||
|   dependencies: | ||||
|     typings-global "^1.0.14" | ||||
|  | ||||
| smartq@^1.1.1: | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.1.tgz#efb358705260d41ae18aef7ffd815f7b6fe17dd3" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user