Files
jasmine/src/core/CompleteOnFirstErrorSkipPolicy.js
Steve Gravrock b67a3043c7 Skip afterEach fns in nested suites when a beforeEach fn errors
This matches the behavior of beforeAll errors.

* #1533
2021-10-06 08:55:01 -07:00

46 lines
1.2 KiB
JavaScript

getJasmineRequireObj().CompleteOnFirstErrorSkipPolicy = function(j$) {
function CompleteOnFirstErrorSkipPolicy(queueableFns, firstCleanupIx) {
this.queueableFns_ = queueableFns;
this.firstCleanupIx_ = firstCleanupIx;
this.erroredFnIx_ = null;
}
CompleteOnFirstErrorSkipPolicy.prototype.skipTo = function(lastRanFnIx) {
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 candidateSuite = this.queueableFns_[fnIx].suite;
const errorSuite = this.queueableFns_[this.erroredFnIx_].suite;
return (
fnIx < this.firstCleanupIx_ ||
(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;
};