| OLD | NEW | 
|---|
|  | (Empty) | 
| 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 // Test debug events when we only listen to uncaught exceptions and |  | 
| 8 // there is a catch handler for the exception thrown in a Promise. |  | 
| 9 // We expect an Exception debug event with a promise to be triggered. |  | 
| 10 |  | 
| 11 Debug = debug.Debug; |  | 
| 12 |  | 
| 13 var expected_events = 1; |  | 
| 14 var log = []; |  | 
| 15 |  | 
| 16 var p = new Promise(function(resolve, reject) { |  | 
| 17   log.push("resolve"); |  | 
| 18   resolve(); |  | 
| 19 }); |  | 
| 20 |  | 
| 21 var q = p.then( |  | 
| 22   function() { |  | 
| 23     log.push("throw"); |  | 
| 24     throw new Error("uncaught");  // event |  | 
| 25   }); |  | 
| 26 |  | 
| 27 function listener(event, exec_state, event_data, data) { |  | 
| 28   if (event == Debug.DebugEvent.AsyncTaskEvent) return; |  | 
| 29   try { |  | 
| 30     if (event == Debug.DebugEvent.Exception) { |  | 
| 31       expected_events--; |  | 
| 32       assertTrue(expected_events >= 0); |  | 
| 33       assertEquals("uncaught", event_data.exception().message); |  | 
| 34       assertTrue(event_data.promise() instanceof Promise); |  | 
| 35       assertSame(q, event_data.promise()); |  | 
| 36       assertTrue(event_data.uncaught()); |  | 
| 37       // Assert that the debug event is triggered at the throw site. |  | 
| 38       assertTrue(exec_state.frame(0).sourceLineText().indexOf("// event") > 0); |  | 
| 39     } |  | 
| 40   } catch (e) { |  | 
| 41     %AbortJS(e + "\n" + e.stack); |  | 
| 42   } |  | 
| 43 } |  | 
| 44 |  | 
| 45 Debug.setBreakOnUncaughtException(); |  | 
| 46 Debug.setListener(listener); |  | 
| 47 |  | 
| 48 log.push("end main"); |  | 
| 49 |  | 
| 50 function testDone(iteration) { |  | 
| 51   function checkResult() { |  | 
| 52     try { |  | 
| 53       assertTrue(iteration < 10); |  | 
| 54       if (expected_events === 0) { |  | 
| 55         assertEquals(["resolve", "end main", "throw"], log); |  | 
| 56       } else { |  | 
| 57         testDone(iteration + 1); |  | 
| 58       } |  | 
| 59     } catch (e) { |  | 
| 60       %AbortJS(e + "\n" + e.stack); |  | 
| 61     } |  | 
| 62   } |  | 
| 63 |  | 
| 64   %EnqueueMicrotask(checkResult); |  | 
| 65 } |  | 
| 66 |  | 
| 67 testDone(0); |  | 
| OLD | NEW | 
|---|