Convert clearStack from a function to an object

This commit is contained in:
Steve Gravrock
2025-11-11 11:43:18 -08:00
parent e930622548
commit 7b2807b321
9 changed files with 242 additions and 210 deletions
+17 -21
View File
@@ -1181,7 +1181,7 @@ describe('Env integration', function() {
global: {
setTimeout: function(cb, t) {
const stack = new Error().stack;
if (stack.indexOf('ClearStack') >= 0) {
if (stack.indexOf('clearStack') >= 0) {
return realSetTimeout(cb, t);
} else {
return setTimeout(cb, t);
@@ -3259,13 +3259,11 @@ describe('Env integration', function() {
});
it('is resolved after the stack is cleared', function(done) {
const realClearStack = privateUnderTest.getClearStack(
jasmineUnderTest.getGlobal()
),
clearStackSpy = jasmine
.createSpy('clearStack')
.and.callFake(realClearStack);
spyOn(privateUnderTest, 'getClearStack').and.returnValue(clearStackSpy);
const stackClearer = privateUnderTest.getStackClearer(
jasmineUnderTest.getGlobal()
);
spyOn(stackClearer, 'clearStack').and.callThrough();
spyOn(privateUnderTest, 'getStackClearer').and.returnValue(stackClearer);
// Create a new env that has the clearStack defined above
env.cleanup_();
@@ -3276,10 +3274,10 @@ describe('Env integration', function() {
});
env.execute(null).then(function() {
expect(clearStackSpy).toHaveBeenCalled(); // (many times)
clearStackSpy.calls.reset();
expect(stackClearer.clearStack).toHaveBeenCalled(); // (many times)
stackClearer.clearStack.calls.reset();
setTimeout(function() {
expect(clearStackSpy).not.toHaveBeenCalled();
expect(stackClearer.clearStack).not.toHaveBeenCalled();
done();
});
});
@@ -3368,13 +3366,11 @@ describe('Env integration', function() {
});
it('is called after the stack is cleared', async function() {
const realClearStack = privateUnderTest.getClearStack(
jasmineUnderTest.getGlobal()
),
clearStackSpy = jasmine
.createSpy('clearStack')
.and.callFake(realClearStack);
spyOn(privateUnderTest, 'getClearStack').and.returnValue(clearStackSpy);
const stackClearer = privateUnderTest.getStackClearer(
jasmineUnderTest.getGlobal()
);
spyOn(stackClearer, 'clearStack').and.callThrough();
spyOn(privateUnderTest, 'getStackClearer').and.returnValue(stackClearer);
// Create a new env that has the clearStack defined above
env.cleanup_();
@@ -3386,12 +3382,12 @@ describe('Env integration', function() {
await env.execute();
expect(clearStackSpy).toHaveBeenCalled(); // (many times)
clearStackSpy.calls.reset();
expect(stackClearer.clearStack).toHaveBeenCalled(); // (many times)
stackClearer.clearStack.calls.reset();
await new Promise(resolve => setTimeout(resolve));
expect(clearStackSpy).not.toHaveBeenCalled();
expect(stackClearer.clearStack).not.toHaveBeenCalled();
});
it('is called after QueueRunner timeouts are cleared', async function() {
@@ -167,10 +167,11 @@ describe('Global error handling (integration)', function() {
}
};
const realClearStack = privateUnderTest.getClearStack(global);
const stackClearer = privateUnderTest.getStackClearer(global);
const realClearStack = stackClearer.clearStack;
const clearStackCallbacks = {};
let clearStackCallCount = 0;
spyOn(privateUnderTest, 'getClearStack').and.returnValue(function(fn) {
spyOn(stackClearer, 'clearStack').and.callFake(function(fn) {
clearStackCallCount++;
if (clearStackCallbacks[clearStackCallCount]) {
@@ -179,6 +180,9 @@ describe('Global error handling (integration)', function() {
realClearStack(fn);
});
spyOn(privateUnderTest, 'getStackClearer').and.returnValue(
stackClearer
);
env.cleanup_();
env = new privateUnderTest.Env({ global });
@@ -282,10 +286,11 @@ describe('Global error handling (integration)', function() {
}
};
const realClearStack = privateUnderTest.getClearStack(global);
const stackClearer = privateUnderTest.getStackClearer(global);
const realClearStack = stackClearer.clearStack;
const clearStackCallbacks = {};
let clearStackCallCount = 0;
spyOn(privateUnderTest, 'getClearStack').and.returnValue(function(fn) {
spyOn(stackClearer, 'clearStack').and.callFake(function(fn) {
clearStackCallCount++;
if (clearStackCallbacks[clearStackCallCount]) {
@@ -294,6 +299,9 @@ describe('Global error handling (integration)', function() {
realClearStack(fn);
});
spyOn(privateUnderTest, 'getStackClearer').and.returnValue(
stackClearer
);
env.cleanup_();
env = new privateUnderTest.Env({ global });
@@ -391,12 +399,13 @@ describe('Global error handling (integration)', function() {
}
};
const realClearStack = privateUnderTest.getClearStack(global);
const stackClearer = privateUnderTest.getStackClearer(global);
const realClearStack = stackClearer.clearStack;
let clearStackCallCount = 0;
let jasmineDone = false;
const expectedErrors = [];
const expectedErrorsAfterJasmineDone = [];
spyOn(privateUnderTest, 'getClearStack').and.returnValue(function(fn) {
spyOn(stackClearer, 'clearStack').and.callFake(function(fn) {
clearStackCallCount++;
const msg = `Error in clearStack #${clearStackCallCount}`;
@@ -409,6 +418,7 @@ describe('Global error handling (integration)', function() {
dispatchErrorEvent(global, 'error', { error: msg });
realClearStack(fn);
});
spyOn(privateUnderTest, 'getStackClearer').and.returnValue(stackClearer);
spyOn(console, 'error');
env.cleanup_();
@@ -507,10 +517,11 @@ describe('Global error handling (integration)', function() {
}
};
const realClearStack = privateUnderTest.getClearStack(global);
const stackClearer = privateUnderTest.getStackClearer(global);
const realClearStack = stackClearer.clearStack;
const clearStackCallbacks = {};
let clearStackCallCount = 0;
spyOn(privateUnderTest, 'getClearStack').and.returnValue(function(fn) {
spyOn(stackClearer, 'clearStack').and.callFake(function(fn) {
clearStackCallCount++;
if (clearStackCallbacks[clearStackCallCount]) {
@@ -519,6 +530,9 @@ describe('Global error handling (integration)', function() {
realClearStack(fn);
});
spyOn(privateUnderTest, 'getStackClearer').and.returnValue(
stackClearer
);
env.cleanup_();
env = new privateUnderTest.Env({ global });
@@ -624,10 +638,11 @@ describe('Global error handling (integration)', function() {
}
};
const realClearStack = privateUnderTest.getClearStack(global);
const stackClearer = privateUnderTest.getStackClearer(global);
const realClearStack = stackClearer.clearStack;
const clearStackCallbacks = {};
let clearStackCallCount = 0;
spyOn(privateUnderTest, 'getClearStack').and.returnValue(function(fn) {
spyOn(stackClearer, 'clearStack').and.callFake(function(fn) {
clearStackCallCount++;
if (clearStackCallbacks[clearStackCallCount]) {
@@ -636,6 +651,9 @@ describe('Global error handling (integration)', function() {
realClearStack(fn);
});
spyOn(privateUnderTest, 'getStackClearer').and.returnValue(
stackClearer
);
env.cleanup_();
env = new privateUnderTest.Env({ global });
@@ -735,12 +753,13 @@ describe('Global error handling (integration)', function() {
}
};
const realClearStack = privateUnderTest.getClearStack(global);
const stackClearer = privateUnderTest.getStackClearer(global);
const realClearStack = stackClearer.clearStack;
let clearStackCallCount = 0;
let jasmineDone = false;
const expectedErrors = [];
const expectedErrorsAfterJasmineDone = [];
spyOn(privateUnderTest, 'getClearStack').and.returnValue(function(fn) {
spyOn(stackClearer, 'clearStack').and.callFake(function(fn) {
clearStackCallCount++;
const reason = `Error in clearStack #${clearStackCallCount}`;
const expectedMsg = `Unhandled promise rejection: ${reason} thrown`;
@@ -754,6 +773,7 @@ describe('Global error handling (integration)', function() {
dispatchErrorEvent(global, 'unhandledrejection', { reason });
realClearStack(fn);
});
spyOn(privateUnderTest, 'getStackClearer').and.returnValue(stackClearer);
spyOn(console, 'error');
env.cleanup_();