fast-check
Version:
Property based testing framework for JavaScript (like QuickCheck)
63 lines (62 loc) • 2.24 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SkipAfterProperty = void 0;
const PreconditionFailure_1 = require("../precondition/PreconditionFailure");
function interruptAfter(timeMs, setTimeoutSafe, clearTimeoutSafe) {
let timeoutHandle = null;
const promise = new Promise((resolve) => {
timeoutHandle = setTimeoutSafe(() => {
const preconditionFailure = new PreconditionFailure_1.PreconditionFailure(true);
resolve(preconditionFailure);
}, timeMs);
});
return {
clear: () => clearTimeoutSafe(timeoutHandle),
promise,
};
}
class SkipAfterProperty {
constructor(property, getTime, timeLimit, interruptExecution, setTimeoutSafe, clearTimeoutSafe) {
this.property = property;
this.getTime = getTime;
this.interruptExecution = interruptExecution;
this.setTimeoutSafe = setTimeoutSafe;
this.clearTimeoutSafe = clearTimeoutSafe;
this.skipAfterTime = this.getTime() + timeLimit;
}
isAsync() {
return this.property.isAsync();
}
generate(mrng, runId) {
return this.property.generate(mrng, runId);
}
shrink(value) {
return this.property.shrink(value);
}
run(v) {
const remainingTime = this.skipAfterTime - this.getTime();
if (remainingTime <= 0) {
const preconditionFailure = new PreconditionFailure_1.PreconditionFailure(this.interruptExecution);
if (this.isAsync()) {
return Promise.resolve(preconditionFailure);
}
else {
return preconditionFailure;
}
}
if (this.interruptExecution && this.isAsync()) {
const t = interruptAfter(remainingTime, this.setTimeoutSafe, this.clearTimeoutSafe);
const propRun = Promise.race([this.property.run(v), t.promise]);
propRun.then(t.clear, t.clear);
return propRun;
}
return this.property.run(v);
}
runBeforeEach() {
return this.property.runBeforeEach();
}
runAfterEach() {
return this.property.runAfterEach();
}
}
exports.SkipAfterProperty = SkipAfterProperty;