1// Copyright 2014 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --expose-debug-as debug --allow-natives-syntax
6
7Debug = debug.Debug;
8
9var base_id = -1;
10var exception = null;
11var expected = [
12  "enqueue #1",
13  "willHandle #1",
14  "then #1",
15  "enqueue #2",
16  "didHandle #1",
17  "willHandle #2",
18  "then #2",
19  "didHandle #2",
20  "enqueue #3",
21  "willHandle #3",
22  "didHandle #3"
23];
24
25function assertLog(msg) {
26  print(msg);
27  assertTrue(expected.length > 0);
28  assertEquals(expected.shift(), msg);
29  if (!expected.length) {
30    Debug.setListener(null);
31  }
32}
33
34function listener(event, exec_state, event_data, data) {
35  if (event != Debug.DebugEvent.AsyncTaskEvent) return;
36  try {
37    if (base_id < 0)
38      base_id = event_data.id();
39    var id = event_data.id() - base_id + 1;
40    assertEquals("Promise.resolve", event_data.name());
41    assertLog(event_data.type() + " #" + id);
42  } catch (e) {
43    print(e + e.stack)
44    exception = e;
45  }
46}
47
48Debug.setListener(listener);
49
50var resolver;
51var p = new Promise(function(resolve, reject) {
52  resolver = resolve;
53});
54p.then(function() {
55  assertLog("then #1");
56}).then(function() {
57  assertLog("then #2");
58});
59resolver();
60
61%RunMicrotasks();
62
63assertNull(exception);
64