@webda/core
Version:
Expose API with Lambda
98 lines • 4.32 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { suite, test } from "@testdeck/mocha";
import * as assert from "assert";
import * as sinon from "sinon";
import { Logger } from "./logger.js";
import { CancelableLoopPromise, CancelablePromise, WaitDelayerFactories, WaitExponentialDelay, WaitFor, WaitLinearDelay } from "./waiter.js";
let WaiterTest = class WaiterTest {
async cancellablePromise() {
let promise = new CancelablePromise();
await promise.cancel();
await assert.rejects(() => promise, /Cancelled/);
let callback = false;
promise = new CancelablePromise(() => { }, async () => {
callback = true;
});
await promise.cancel();
await assert.rejects(() => promise, /Cancelled/);
assert.strictEqual(callback, true);
}
async testWaitFor() {
let logger = new Logger(undefined, undefined);
let consoleSpy = sinon.stub(logger, "log");
sinon.stub(logger, "logProgressStart");
sinon.stub(logger, "logProgressUpdate");
WaitDelayerFactories.registerFactory("static", () => {
return t => t;
});
try {
await assert.rejects(async () => await WaitFor(async () => false, 3, "title", logger, WaitExponentialDelay(1)), /Timeout while waiting for title/g);
assert.strictEqual(consoleSpy.callCount, 3);
assert.strictEqual(consoleSpy.calledWith("DEBUG", "[1/3]", "title"), true);
assert.strictEqual(consoleSpy.calledWith("DEBUG", "[2/3]", "title"), true);
assert.strictEqual(consoleSpy.calledWith("DEBUG", "[3/3]", "title"), true);
consoleSpy.resetHistory();
let res = await WaitFor(async (resolve, reject) => {
if (consoleSpy.callCount === 2) {
resolve({ myobject: "test" });
return true;
}
}, 3, "title", logger, WaitLinearDelay(1));
assert.strictEqual(consoleSpy.callCount, 2);
assert.strictEqual(consoleSpy.calledWith("DEBUG", "[1/3]", "title"), true);
assert.strictEqual(consoleSpy.calledWith("DEBUG", "[2/3]", "title"), true);
assert.strictEqual(consoleSpy.calledWith("DEBUG", "[3/3]", "title"), false);
assert.deepStrictEqual(res, { myobject: "test" });
let time = Date.now();
consoleSpy.resetHistory();
await WaitFor(async (resolve, reject) => {
if (consoleSpy.callCount === 3) {
resolve({ myobject: "test" });
return true;
}
}, 3, "title", logger);
let elapsed = Date.now() - time;
assert.strictEqual(elapsed > 2500 && elapsed < 3500, true, `Should have a duration close to 3 seconds, got: ${elapsed}ms`);
// COV test
await WaitFor(async (resolve, reject) => {
resolve();
return true;
}, 3);
await WaitFor(async (resolve, reject) => {
resolve();
return true;
}, 3, "title");
}
finally {
consoleSpy.restore();
}
}
async loopPromise() {
let i = 0;
await new CancelableLoopPromise(async (canceller) => {
i++;
if (i > 10) {
await canceller();
}
}, async () => { });
assert.strictEqual(i, 11);
}
};
__decorate([
test
], WaiterTest.prototype, "cancellablePromise", null);
__decorate([
test
], WaiterTest.prototype, "testWaitFor", null);
__decorate([
test
], WaiterTest.prototype, "loopPromise", null);
WaiterTest = __decorate([
suite
], WaiterTest);
//# sourceMappingURL=waiter.spec.js.map