blob: 98a638d20f8d13a97bcb7da2497fc914f2c4cd0a [file] [log] [blame]
(async function(testRunner) {
var {page, session, dp} = await testRunner.startBlank('Tests that Runtime.awaitPromise works.');
function dumpResult(result) {
if (result.exceptionDetails) {
if (result.exceptionDetails.stackTrace && result.exceptionDetails.stackTrace.parent) {
for (var frame of result.exceptionDetails.stackTrace.parent.callFrames) {
frame.scriptId = 0;
frame.url = '';
}
}
result.exceptionDetails.exceptionId = 0;
if (result.exceptionDetails.exception)
result.exceptionDetails.exception.objectId = 0;
}
testRunner.log(result);
}
await session.evaluate(`
var resolveCallback;
var rejectCallback;
function createPromise() {
return new Promise((resolve, reject) => { resolveCallback = resolve; rejectCallback = reject });
}
function resolvePromise() {
resolveCallback(239);
resolveCallback = undefined;
rejectCallback = undefined;
}
function rejectPromise() {
rejectCallback(239);
resolveCallback = undefined;
rejectCallback = undefined;
}
function runGC() {
if (window.gc)
window.gc();
}
`);
await dp.Debugger.enable();
await dp.Debugger.setAsyncCallStackDepth({ maxDepth: 128 });
await testRunner.runTestSuite([
async function testResolvedPromise() {
var result = await dp.Runtime.evaluate({ expression: 'Promise.resolve(239)'});
result = await dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId, returnByValue: false, generatePreview: true });
dumpResult(result.result);
},
async function testRejectedPromise() {
var result = await dp.Runtime.evaluate({ expression: 'Promise.reject({ a : 1 })'});
result = await dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId, returnByValue: true, generatePreview: false });
dumpResult(result.result);
},
async function testRejectedPromiseWithStack() {
var result = await dp.Runtime.evaluate({ expression: 'createPromise()'});
var promise = dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId });
dp.Runtime.evaluate({ expression: 'rejectPromise()' });
result = await promise;
dumpResult(result.result);
},
async function testPendingPromise() {
var result = await dp.Runtime.evaluate({ expression: 'createPromise()'});
var promise = dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId });
dp.Runtime.evaluate({ expression: 'resolvePromise()' });
result = await promise;
dumpResult(result.result);
},
async function testResolvedWithoutArgsPromise() {
var result = await dp.Runtime.evaluate({ expression: 'Promise.resolve()'});
result = await dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId, returnByValue: true, generatePreview: false });
dumpResult(result.result);
},
async function testGarbageCollectedPromise() {
var result = await dp.Runtime.evaluate({ expression: 'new Promise(() => undefined)'});
var objectId = result.result.result.objectId;
var promise = dp.Runtime.awaitPromise({ promiseObjectId: objectId });
dp.Runtime.releaseObject({ objectId: objectId}).then(() => dp.Runtime.evaluate({ expression: 'runGC()' }));
result = await promise;
testRunner.log(result.error);
}
]);
})