UNPKG

fast-check

Version:

Property based testing framework for JavaScript (like QuickCheck)

63 lines (62 loc) 2.24 kB
"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;