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