Home | History | Annotate | Download | only in debug-promises
      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 
      7 Debug = debug.Debug;
      8 
      9 var base_id = -1;
     10 var exception = null;
     11 var 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 
     25 function 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 
     34 function 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 
     48 Debug.setListener(listener);
     49 
     50 var resolver;
     51 var p = new Promise(function(resolve, reject) {
     52   resolver = resolve;
     53 });
     54 p.then(function() {
     55   assertLog("then #1");
     56 }).then(function() {
     57   assertLog("then #2");
     58 });
     59 resolver();
     60 
     61 %RunMicrotasks();
     62 
     63 assertNull(exception);
     64