Deprecate spec/suite orders that interleave suites

This commit is contained in:
Steve Gravrock
2025-08-13 19:02:36 -07:00
parent 8e3ec25f6d
commit 2299c85751
4 changed files with 42 additions and 30 deletions

View File

@@ -107,7 +107,7 @@ var getJasmineRequireObj = (function(jasmineGlobal) {
j$.Suite = jRequire.Suite(j$); j$.Suite = jRequire.Suite(j$);
j$.SuiteBuilder = jRequire.SuiteBuilder(j$); j$.SuiteBuilder = jRequire.SuiteBuilder(j$);
j$.Timer = jRequire.Timer(); j$.Timer = jRequire.Timer();
j$.TreeProcessor = jRequire.TreeProcessor(); j$.TreeProcessor = jRequire.TreeProcessor(j$);
j$.version = jRequire.version(); j$.version = jRequire.version();
j$.Order = jRequire.Order(); j$.Order = jRequire.Order();
j$.DiffBuilder = jRequire.DiffBuilder(j$); j$.DiffBuilder = jRequire.DiffBuilder(j$);
@@ -11299,7 +11299,7 @@ getJasmineRequireObj().Timer = function() {
return Timer; return Timer;
}; };
getJasmineRequireObj().TreeProcessor = function() { getJasmineRequireObj().TreeProcessor = function(j$) {
const defaultMin = Infinity; const defaultMin = Infinity;
const defaultMax = 1 - Infinity; const defaultMax = 1 - Infinity;
@@ -11429,14 +11429,17 @@ getJasmineRequireObj().TreeProcessor = function() {
segmentChildren(node, orderedChildren, this.#stats, executableIndex); segmentChildren(node, orderedChildren, this.#stats, executableIndex);
if ( if (this.#stats[node.id].segments.length > 1) {
!node.canBeReentered() && if (node.canBeReentered()) {
this.#stats[node.id].segments.length > 1 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.'
this.#stats = { valid: false }; );
throw new Error( } else {
'Invalid order: would cause a beforeAll or afterAll to be run multiple times' this.#stats = { valid: false };
); throw new Error(
'Invalid order: would cause a beforeAll or afterAll to be run multiple times'
);
}
} }
} }
} }

View File

@@ -241,18 +241,24 @@ describe('TreeProcessor', function() {
}); });
it('marks the run order valid if a node being re-entered allows re-entry', function() { it('marks the run order valid if a node being re-entered allows re-entry', function() {
const leaf1 = new Leaf(), const leaf1 = new Leaf();
leaf2 = new Leaf(), const leaf2 = new Leaf();
leaf3 = new Leaf(), const leaf3 = new Leaf();
reentered = new Node({ children: [leaf1, leaf2] }), const reentered = new Node({ children: [leaf1, leaf2] });
root = new Node({ children: [reentered, leaf3] }), const root = new Node({ children: [reentered, leaf3] });
processor = new jasmineUnderTest.TreeProcessor({ const processor = new jasmineUnderTest.TreeProcessor({
tree: root, tree: root,
runnableIds: [leaf1.id, leaf3.id, leaf2.id] runnableIds: [leaf1.id, leaf3.id, leaf2.id]
}), });
result = processor.processTree(); const env = jasmineUnderTest.getEnv();
spyOn(env, 'deprecated');
const result = processor.processTree();
expect(result.valid).toBe(true); 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() { it("marks the run order valid if a node which can't be re-entered is only entered once", function() {

View File

@@ -1,4 +1,4 @@
getJasmineRequireObj().TreeProcessor = function() { getJasmineRequireObj().TreeProcessor = function(j$) {
const defaultMin = Infinity; const defaultMin = Infinity;
const defaultMax = 1 - Infinity; const defaultMax = 1 - Infinity;
@@ -128,14 +128,17 @@ getJasmineRequireObj().TreeProcessor = function() {
segmentChildren(node, orderedChildren, this.#stats, executableIndex); segmentChildren(node, orderedChildren, this.#stats, executableIndex);
if ( if (this.#stats[node.id].segments.length > 1) {
!node.canBeReentered() && if (node.canBeReentered()) {
this.#stats[node.id].segments.length > 1 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.'
this.#stats = { valid: false }; );
throw new Error( } else {
'Invalid order: would cause a beforeAll or afterAll to be run multiple times' this.#stats = { valid: false };
); throw new Error(
'Invalid order: would cause a beforeAll or afterAll to be run multiple times'
);
}
} }
} }
} }

View File

@@ -83,7 +83,7 @@ var getJasmineRequireObj = (function(jasmineGlobal) {
j$.Suite = jRequire.Suite(j$); j$.Suite = jRequire.Suite(j$);
j$.SuiteBuilder = jRequire.SuiteBuilder(j$); j$.SuiteBuilder = jRequire.SuiteBuilder(j$);
j$.Timer = jRequire.Timer(); j$.Timer = jRequire.Timer();
j$.TreeProcessor = jRequire.TreeProcessor(); j$.TreeProcessor = jRequire.TreeProcessor(j$);
j$.version = jRequire.version(); j$.version = jRequire.version();
j$.Order = jRequire.Order(); j$.Order = jRequire.Order();
j$.DiffBuilder = jRequire.DiffBuilder(j$); j$.DiffBuilder = jRequire.DiffBuilder(j$);