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);
}


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();


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);


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);
}


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:
  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);
}


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);
}


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);
}


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);
}


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:
  function boo() {
  #}
}

