// Copyright 2016 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Flags: --harmony-async-await --expose-debug-as debug --allow-natives-syntax Debug = debug.Debug; var base_id = -1; var exception = null; var expected = [ "enqueue #1", "willHandle #1", "then #1", "enqueue #2", "enqueue #3", "didHandle #1", "willHandle #2", "then #2", "didHandle #2", "willHandle #3", "enqueue #4", "didHandle #3", "willHandle #4", "didHandle #4", ]; function assertLog(msg) { print(msg); assertTrue(expected.length > 0); assertEquals(expected.shift(), msg); if (!expected.length) { Debug.setListener(null); } } function listener(event, exec_state, event_data, data) { if (event != Debug.DebugEvent.AsyncTaskEvent) return; try { if (base_id < 0) base_id = event_data.id(); var id = event_data.id() - base_id + 1; assertTrue("Promise.resolve" == event_data.name() || "PromiseResolveThenableJob" == event_data.name()); assertLog(event_data.type() + " #" + id); } catch (e) { print(e + e.stack) exception = e; } } Debug.setListener(listener); var resolver; var p = new Promise(function(resolve, reject) { resolver = resolve; }); async function main() { await p; assertLog("then #1"); await undefined; assertLog("then #2"); } main(); resolver(); %RunMicrotasks(); assertNull(exception);