Deprecate spec/suite orders that interleave suites
This commit is contained in:
@@ -107,7 +107,7 @@ var getJasmineRequireObj = (function(jasmineGlobal) {
|
||||
j$.Suite = jRequire.Suite(j$);
|
||||
j$.SuiteBuilder = jRequire.SuiteBuilder(j$);
|
||||
j$.Timer = jRequire.Timer();
|
||||
j$.TreeProcessor = jRequire.TreeProcessor();
|
||||
j$.TreeProcessor = jRequire.TreeProcessor(j$);
|
||||
j$.version = jRequire.version();
|
||||
j$.Order = jRequire.Order();
|
||||
j$.DiffBuilder = jRequire.DiffBuilder(j$);
|
||||
@@ -11299,7 +11299,7 @@ getJasmineRequireObj().Timer = function() {
|
||||
return Timer;
|
||||
};
|
||||
|
||||
getJasmineRequireObj().TreeProcessor = function() {
|
||||
getJasmineRequireObj().TreeProcessor = function(j$) {
|
||||
const defaultMin = Infinity;
|
||||
const defaultMax = 1 - Infinity;
|
||||
|
||||
@@ -11429,14 +11429,17 @@ getJasmineRequireObj().TreeProcessor = function() {
|
||||
|
||||
segmentChildren(node, orderedChildren, this.#stats, executableIndex);
|
||||
|
||||
if (
|
||||
!node.canBeReentered() &&
|
||||
this.#stats[node.id].segments.length > 1
|
||||
) {
|
||||
this.#stats = { valid: false };
|
||||
throw new Error(
|
||||
'Invalid order: would cause a beforeAll or afterAll to be run multiple times'
|
||||
);
|
||||
if (this.#stats[node.id].segments.length > 1) {
|
||||
if (node.canBeReentered()) {
|
||||
j$.getEnv().deprecated(
|
||||
'The specified spec/suite order splits up a suite, running unrelated specs in the middle of it. This will become an error in a future release.'
|
||||
);
|
||||
} else {
|
||||
this.#stats = { valid: false };
|
||||
throw new Error(
|
||||
'Invalid order: would cause a beforeAll or afterAll to be run multiple times'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -241,18 +241,24 @@ describe('TreeProcessor', function() {
|
||||
});
|
||||
|
||||
it('marks the run order valid if a node being re-entered allows re-entry', function() {
|
||||
const leaf1 = new Leaf(),
|
||||
leaf2 = new Leaf(),
|
||||
leaf3 = new Leaf(),
|
||||
reentered = new Node({ children: [leaf1, leaf2] }),
|
||||
root = new Node({ children: [reentered, leaf3] }),
|
||||
processor = new jasmineUnderTest.TreeProcessor({
|
||||
tree: root,
|
||||
runnableIds: [leaf1.id, leaf3.id, leaf2.id]
|
||||
}),
|
||||
result = processor.processTree();
|
||||
const leaf1 = new Leaf();
|
||||
const leaf2 = new Leaf();
|
||||
const leaf3 = new Leaf();
|
||||
const reentered = new Node({ children: [leaf1, leaf2] });
|
||||
const root = new Node({ children: [reentered, leaf3] });
|
||||
const processor = new jasmineUnderTest.TreeProcessor({
|
||||
tree: root,
|
||||
runnableIds: [leaf1.id, leaf3.id, leaf2.id]
|
||||
});
|
||||
const env = jasmineUnderTest.getEnv();
|
||||
spyOn(env, 'deprecated');
|
||||
|
||||
const result = processor.processTree();
|
||||
|
||||
expect(result.valid).toBe(true);
|
||||
expect(env.deprecated).toHaveBeenCalledWith(
|
||||
'The specified spec/suite order splits up a suite, running unrelated specs in the middle of it. This will become an error in a future release.'
|
||||
);
|
||||
});
|
||||
|
||||
it("marks the run order valid if a node which can't be re-entered is only entered once", function() {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
getJasmineRequireObj().TreeProcessor = function() {
|
||||
getJasmineRequireObj().TreeProcessor = function(j$) {
|
||||
const defaultMin = Infinity;
|
||||
const defaultMax = 1 - Infinity;
|
||||
|
||||
@@ -128,14 +128,17 @@ getJasmineRequireObj().TreeProcessor = function() {
|
||||
|
||||
segmentChildren(node, orderedChildren, this.#stats, executableIndex);
|
||||
|
||||
if (
|
||||
!node.canBeReentered() &&
|
||||
this.#stats[node.id].segments.length > 1
|
||||
) {
|
||||
this.#stats = { valid: false };
|
||||
throw new Error(
|
||||
'Invalid order: would cause a beforeAll or afterAll to be run multiple times'
|
||||
);
|
||||
if (this.#stats[node.id].segments.length > 1) {
|
||||
if (node.canBeReentered()) {
|
||||
j$.getEnv().deprecated(
|
||||
'The specified spec/suite order splits up a suite, running unrelated specs in the middle of it. This will become an error in a future release.'
|
||||
);
|
||||
} else {
|
||||
this.#stats = { valid: false };
|
||||
throw new Error(
|
||||
'Invalid order: would cause a beforeAll or afterAll to be run multiple times'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ var getJasmineRequireObj = (function(jasmineGlobal) {
|
||||
j$.Suite = jRequire.Suite(j$);
|
||||
j$.SuiteBuilder = jRequire.SuiteBuilder(j$);
|
||||
j$.Timer = jRequire.Timer();
|
||||
j$.TreeProcessor = jRequire.TreeProcessor();
|
||||
j$.TreeProcessor = jRequire.TreeProcessor(j$);
|
||||
j$.version = jRequire.version();
|
||||
j$.Order = jRequire.Order();
|
||||
j$.DiffBuilder = jRequire.DiffBuilder(j$);
|
||||
|
||||
Reference in New Issue
Block a user