Checks Debugger.scheduleStepIntoAsync.

Running test: testScheduleErrors
paused at:
function testNoScheduledTask() {
  #debugger;
  return 42;

paused at:
  debugger;
  #return 42;
}

paused at:
  debugger;
  return 42;#
}


Running test: testSimple
paused at:
function testSimple() {
  #debugger;
  Promise.resolve().then(v => v * 2);

paused at:
  debugger;
  #Promise.resolve().then(v => v * 2);
}

paused at:
  debugger;
  Promise.resolve().#then(v => v * 2);
}

asyncCallStackTraceId is set

paused at:
  debugger;
  Promise.resolve().then(#v => v * 2);
}


Running test: testNotResolvedPromise
paused at:
  var p = new Promise(resolve => resolveCallback = resolve);
  #debugger;
  p.then(v => v * 2);

paused at:
  debugger;
  p.#then(v => v * 2);
  resolveCallback();

paused at:
  debugger;
  p.#then(v => v * 2);
  resolveCallback();

asyncCallStackTraceId is set

paused at:
  debugger;
  p.then(#v => v * 2);
  resolveCallback();


Running test: testTwoAsyncTasks
paused at:
function testTwoAsyncTasks() {
  #debugger;
  Promise.resolve().then(v => v * 2);

paused at:
  debugger;
  #Promise.resolve().then(v => v * 2);
  Promise.resolve().then(v => v * 4);

paused at:
  debugger;
  Promise.resolve().#then(v => v * 2);
  Promise.resolve().then(v => v * 4);

asyncCallStackTraceId is set

paused at:
  debugger;
  Promise.resolve().then(#v => v * 2);
  Promise.resolve().then(v => v * 4);


Running test: testTwoTasksAndGoToSecond
paused at:
function testTwoAsyncTasks() {
  #debugger;
  Promise.resolve().then(v => v * 2);

paused at:
  debugger;
  #Promise.resolve().then(v => v * 2);
  Promise.resolve().then(v => v * 4);

paused at:
  Promise.resolve().then(v => v * 2);
  #Promise.resolve().then(v => v * 4);
}

paused at:
  Promise.resolve().then(v => v * 2);
  Promise.resolve().#then(v => v * 4);
}

asyncCallStackTraceId is set

paused at:
  Promise.resolve().then(v => v * 2);
  Promise.resolve().then(#v => v * 4);
}


Running test: testTwoAsyncTasksWithBreak
paused at:
function testTwoAsyncTasksWithBreak() {
  #debugger;
  Promise.resolve().then(v => v * 2);

paused at:
  debugger;
  #Promise.resolve().then(v => v * 2);
  debugger;

paused at:
  debugger;
  Promise.resolve().#then(v => v * 2);
  debugger;

asyncCallStackTraceId is set

paused at:
  Promise.resolve().then(v => v * 2);
  #debugger;
  Promise.resolve().then(v => v * 4);

paused at:
  debugger;
  #Promise.resolve().then(v => v * 4);
}

paused at:
  debugger;
  Promise.resolve().#then(v => v * 4);
}

asyncCallStackTraceId is set

paused at:
  debugger;
  Promise.resolve().then(#v => v * 4);
}


Running test: testPromiseAll
paused at:
function testPromiseAll() {
  #debugger;
  Promise.all([ Promise.resolve(), Promise.resolve() ]).then(v => v * 2);

paused at:
  debugger;
  #Promise.all([ Promise.resolve(), Promise.resolve() ]).then(v => v * 2);
}

paused at:
  debugger;
  Promise.all([ Promise.resolve(), Promise.resolve() ]).#then(v => v * 2);
}

asyncCallStackTraceId is set

paused at:
  debugger;
  Promise.all([ Promise.resolve(), Promise.resolve() ]).then(#v => v * 2);
}


Running test: testWithBlackboxedCode
paused at:
function testBlackboxedCreatePromise() {
  #debugger;
  createPromise().then(v => v * 2);

paused at:
  debugger;
  #createPromise().then(v => v * 2);
}

paused at:
  debugger;
  createPromise().#then(v => v * 2);
}

asyncCallStackTraceId is set

paused at:
  debugger;
  createPromise().then(#v => v * 2);
}


Running test: testWithBlackboxedCode
paused at:
function testBlackboxedCreatePromise() {
  #debugger;
  createPromise().then(v => v * 2);

paused at:
  debugger;
  #createPromise().then(v => v * 2);
}

paused at:
  debugger;
  createPromise().#then(v => v * 2);
}

asyncCallStackTraceId is set

paused at:
  debugger;
  createPromise().then(#v => v * 2);
}


Running test: testAsyncFunction
paused at:
async function testAsyncFunction() {
  #debugger;
  foo();

paused at:
  debugger;
  #foo();
  await foo();

paused at:
  async function foo() {
    #return 42;
  }

paused at:
  foo();
  await #foo();
  foo().then(boo);

paused at:
  async function foo() {
    #return 42;
  }

paused at:
  await foo();
  #foo().then(boo);


paused at:
  async function foo() {
    #return 42;
  }

paused at:
  await foo();
  foo().#then(boo);


paused at:
  await foo();
  foo().#then(boo);


asyncCallStackTraceId is set

paused at:

  function boo#() {
  }

