Files
jasmine/src/core/CompleteOnFirstErrorSkipPolicy.js
2021-11-29 20:37:07 -08:00

52 lines
1.3 KiB
JavaScript

getJasmineRequireObj().CompleteOnFirstErrorSkipPolicy = function(j$) {
function CompleteOnFirstErrorSkipPolicy(queueableFns) {
this.queueableFns_ = queueableFns;
this.erroredFnIx_ = null;
}
CompleteOnFirstErrorSkipPolicy.prototype.skipTo = function(lastRanFnIx) {
let i;
for (
i = lastRanFnIx + 1;
i < this.queueableFns_.length && this.shouldSkip_(i);
i++
) {}
return i;
};
CompleteOnFirstErrorSkipPolicy.prototype.fnErrored = function(fnIx) {
this.erroredFnIx_ = fnIx;
};
CompleteOnFirstErrorSkipPolicy.prototype.shouldSkip_ = function(fnIx) {
if (this.erroredFnIx_ === null) {
return false;
}
const fn = this.queueableFns_[fnIx];
const candidateSuite = fn.suite;
const errorSuite = this.queueableFns_[this.erroredFnIx_].suite;
const wasCleanupFn =
fn.type === 'afterEach' ||
fn.type === 'afterAll' ||
fn.type === 'specCleanup';
return (
!wasCleanupFn ||
(candidateSuite && isDescendent(candidateSuite, errorSuite))
);
};
function isDescendent(candidate, ancestor) {
if (!candidate.parentSuite) {
return false;
} else if (candidate.parentSuite === ancestor) {
return true;
} else {
return isDescendent(candidate.parentSuite, ancestor);
}
}
return CompleteOnFirstErrorSkipPolicy;
};