blob: 7285ae7ff0866fe59d7fa81573d14b3be59ad75e [file] [log] [blame]
(async function(testRunner) {
const {page, session, dp} = await testRunner.startBlank(
'Tests that console message from worker contains stack trace.');
await dp.Target.setAutoAttach({autoAttach: true, waitForDebuggerOnStart: false,
flatten: true});
const attachedPromise = dp.Target.onceAttachedToTarget();
session.evaluate(`
window.worker1 = new Worker('${testRunner.url('../resources/worker-with-throw.js')}');
window.worker1.onerror = function(e) {
e.preventDefault();
worker1.terminate();
}
`);
let event = await attachedPromise;
const childSession = session.createChild(event.params.sessionId);
testRunner.log('Worker created');
await childSession.protocol.Runtime.enable();
const detachedPromise = dp.Target.onceDetachedFromTarget();
session.evaluate('worker1.postMessage(239);');
await detachedPromise;
testRunner.log('Worker destroyed');
const attachedPromise2 = dp.Target.onceAttachedToTarget();
session.evaluate(`
window.worker2 = new Worker('${testRunner.url('../resources/worker-with-throw.js')}');
`);
event = await attachedPromise2;
const childSession2 = session.createChild(event.params.sessionId);
testRunner.log('\nWorker created');
await childSession2.protocol.Runtime.enable();
const thrownPromise = childSession2.protocol.Runtime.onceExceptionThrown();
session.evaluate('worker2.postMessage(42);');
event = await thrownPromise;
const callFrames = event.params.exceptionDetails.stackTrace ? event.params.exceptionDetails.stackTrace.callFrames : [];
testRunner.log(callFrames.length > 0 ? 'Message with stack trace received.' : '[FAIL] Message contains empty stack trace');
testRunner.completeTest();
})