Merge branch 'master' into 'master'
update to latest standards See merge request !1
This commit is contained in:
commit
1c80c25b14
2
dist/index.d.ts
vendored
2
dist/index.d.ts
vendored
@ -1,4 +1,4 @@
|
|||||||
import 'typings-global';
|
import 'typings-global';
|
||||||
import { expect } from 'smartchai';
|
import { expect } from 'smartchai';
|
||||||
import { tap } from './tapbundle.tap';
|
import { tap } from './tapbundle.classes.tap';
|
||||||
export { tap, expect };
|
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");
|
require("typings-global");
|
||||||
const smartchai_1 = require("smartchai");
|
const smartchai_1 = require("smartchai");
|
||||||
exports.expect = smartchai_1.expect;
|
exports.expect = smartchai_1.expect;
|
||||||
const tapbundle_tap_1 = require("./tapbundle.tap");
|
const tapbundle_classes_tap_1 = require("./tapbundle.classes.tap");
|
||||||
exports.tap = tapbundle_tap_1.tap;
|
exports.tap = tapbundle_classes_tap_1.tap;
|
||||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2Qix5Q0FBa0M7QUFNaEMsaUJBTk8sa0JBQU0sQ0FNUDtBQUxSLG1EQUFxQztBQUluQyxjQUpPLG1CQUFHLENBSVAifQ==
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2Qix5Q0FBa0M7QUFNaEMsb0NBQU07QUFMUixtRUFBNkM7QUFJM0MsMENBQUcifQ==
|
@ -1,27 +1,4 @@
|
|||||||
import { HrtMeasurement } from 'early';
|
import { TapTest, ITestFunction } from './tapbundle.classes.taptest';
|
||||||
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>;
|
|
||||||
}
|
|
||||||
export declare class Tap {
|
export declare class Tap {
|
||||||
private _tests;
|
private _tests;
|
||||||
/**
|
/**
|
||||||
@ -29,7 +6,7 @@ export declare class Tap {
|
|||||||
* @param testDescription - A description of what the test does
|
* @param testDescription - A description of what the test does
|
||||||
* @param testFunction - A Function that returns a Promise and resolves or rejects
|
* @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.
|
* A parallel test that will not be waited for before the next starts.
|
||||||
* @param testDescription - A description of what the test does
|
* @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 'typings-global';
|
||||||
import * as early from 'early';
|
import * as early from 'early';
|
||||||
import * as leakage from 'leakage';
|
import * as leakage from 'leakage';
|
||||||
|
import * as smartdelay from 'smartdelay';
|
||||||
import * as smartq from 'smartq';
|
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;
|
exports.early = early;
|
||||||
const leakage = require("leakage");
|
const leakage = require("leakage");
|
||||||
exports.leakage = leakage;
|
exports.leakage = leakage;
|
||||||
|
const smartdelay = require("smartdelay");
|
||||||
|
exports.smartdelay = smartdelay;
|
||||||
const smartq = require("smartq");
|
const smartq = require("smartq");
|
||||||
exports.smartq = 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",
|
"early": "^2.1.1",
|
||||||
"leakage": "^0.2.0",
|
"leakage": "^0.2.0",
|
||||||
"smartchai": "^1.0.3",
|
"smartchai": "^1.0.3",
|
||||||
|
"smartdelay": "^1.0.1",
|
||||||
"smartq": "^1.1.1",
|
"smartq": "^1.1.1",
|
||||||
"typings-global": "^1.0.16"
|
"typings-global": "^1.0.16"
|
||||||
}
|
}
|
||||||
|
27
test/test.ts
27
test/test.ts
@ -1,7 +1,32 @@
|
|||||||
import { tap, expect } from '../dist/index'
|
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
|
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()
|
tap.start()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import 'typings-global'
|
import 'typings-global'
|
||||||
import { expect } from 'smartchai'
|
import { expect } from 'smartchai'
|
||||||
import { tap } from './tapbundle.tap'
|
import { tap } from './tapbundle.classes.tap'
|
||||||
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
|
@ -1,61 +1,6 @@
|
|||||||
import * as plugins from './tapbundle.plugins'
|
import * as plugins from './tapbundle.plugins'
|
||||||
|
|
||||||
import { tapCreator } from './tapbundle.tapcreator'
|
import { TapTest, ITestFunction } from './tapbundle.classes.taptest'
|
||||||
|
|
||||||
// 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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class Tap {
|
export class Tap {
|
||||||
private _tests: TapTest[] = []
|
private _tests: TapTest[] = []
|
||||||
@ -66,11 +11,13 @@ export class Tap {
|
|||||||
* @param testFunction - A Function that returns a Promise and resolves or rejects
|
* @param testFunction - A Function that returns a Promise and resolves or rejects
|
||||||
*/
|
*/
|
||||||
async test (testDescription: string, testFunction: ITestFunction) {
|
async test (testDescription: string, testFunction: ITestFunction) {
|
||||||
this._tests.push(new TapTest({
|
let localTest = new TapTest({
|
||||||
description: testDescription,
|
description: testDescription,
|
||||||
testFunction: testFunction,
|
testFunction: testFunction,
|
||||||
parallel: false
|
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 'typings-global'
|
||||||
import * as early from 'early'
|
import * as early from 'early'
|
||||||
import * as leakage from 'leakage'
|
import * as leakage from 'leakage'
|
||||||
|
import * as smartdelay from 'smartdelay'
|
||||||
import * as smartq from 'smartq'
|
import * as smartq from 'smartq'
|
||||||
|
|
||||||
export {
|
export {
|
||||||
early,
|
early,
|
||||||
|
smartdelay,
|
||||||
smartq,
|
smartq,
|
||||||
leakage
|
leakage
|
||||||
}
|
}
|
||||||
|
@ -210,6 +210,12 @@ smartchai@^1.0.3:
|
|||||||
chai-as-promised "^6.0.0"
|
chai-as-promised "^6.0.0"
|
||||||
chai-string "^1.3.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:
|
smartq@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.1.tgz#efb358705260d41ae18aef7ffd815f7b6fe17dd3"
|
resolved "https://registry.yarnpkg.com/smartq/-/smartq-1.1.1.tgz#efb358705260d41ae18aef7ffd815f7b6fe17dd3"
|
||||||
|
Loading…
Reference in New Issue
Block a user