blob: 97e1ead9eeceab1f16c8680ee8e051f3707f8c5a [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
(async function() {
TestRunner.addResult(`Tests asynchronous call stacks for async functions.\n`);
await TestRunner.loadModule('sources_test_runner');
await TestRunner.showPanel('sources');
await TestRunner.evaluateInPagePromise(`
function timeoutPromise(value, ms)
{
return new Promise(function promiseCallback(resolve, reject) {
function resolvePromise()
{
resolve(value);
}
function rejectPromise()
{
reject(value);
}
if (value instanceof Error)
setTimeout(rejectPromise, ms || 0);
else
setTimeout(resolvePromise, ms || 0);
});
}
function settledPromise(value)
{
function resolveCallback(resolve, reject)
{
resolve(value);
}
function rejectCallback(resolve, reject)
{
reject(value);
}
if (value instanceof Error)
return new Promise(rejectCallback);
else
return new Promise(resolveCallback);
}
function testFunction()
{
setTimeout(testFunctionTimeout, 0);
}
function testFunctionTimeout()
{
var functions = [doTestPromiseAll, doTestThrowFromChain, doTestRejectFromChain, doTestPromiseResolve, doTestPromiseReject];
for (var i = 0; i < functions.length; ++i)
functions[i]();
}
function thenCallback(value)
{
debugger;
}
function errorCallback(error)
{
debugger;
}
async function doTestPromiseAll()
{
try {
let all = await Promise.all([11, 22, 33, 44, 55].map(timeoutPromise));
thenCallback(all);
} catch (e) {
errorCallback(e);
}
}
async function throwFromChain()
{
await timeoutPromise(1);
await timeoutPromise(2);
await settledPromise(3);
throw Error("thrown from 4");
await timeoutPromise(5);
debugger;
}
async function doTestThrowFromChain()
{
try {
let result = await throwFromChain();
thencallback(result);
} catch (e) {
errorCallback(e);
}
}
async function rejectFromChain()
{
await timeoutPromise(1);
await timeoutPromise(2);
await timeoutPromise(3);
await timeoutPromise(new Error(4));
throw new Error("thrown from rejectFromChain");
debugger;
}
async function doTestRejectFromChain()
{
try {
let result = await rejectFromChain();
thenCallback(result);
} catch (e) {
errorCallback(e);
}
}
async function doTestPromiseResolve()
{
try {
let result = await Promise.resolve(1);
thenCallback(result);
} catch (e) {
errorCallback(e);
}
}
async function doTestPromiseReject()
{
try {
let result = await Promise.reject(new Error("2"))
thenCallback(result);
} catch (e) {
errorCallback(e);
}
}
`);
var totalDebuggerStatements = 5;
SourcesTestRunner.runAsyncCallStacksTest(totalDebuggerStatements);
})();