| OLD | NEW | 
|   1 // Copyright 2014 the V8 project authors. All rights reserved. |   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 |   2 // Use of this source code is governed by a BSD-style license that can be | 
|   3 // found in the LICENSE file. |   3 // found in the LICENSE file. | 
|   4  |   4  | 
|   5 // Flags: --expose-debug-as debug |   5 // Flags: --expose-debug-as debug | 
|   6  |   6  | 
|   7 // Test debug events when we only listen to uncaught exceptions and |   7 // Test debug events when we only listen to uncaught exceptions and | 
|   8 // an exception is thrown in the the Promise constructor. |   8 // an exception is thrown in the Promise constructor, but caught in an | 
 |   9 // inner try-catch.  The Promise is rejected afterwards. | 
|   9 // We expect an Exception debug event with a promise to be triggered. |  10 // We expect an Exception debug event with a promise to be triggered. | 
|  10  |  11  | 
|  11 Debug = debug.Debug; |  12 Debug = debug.Debug; | 
|  12  |  13  | 
|  13 var step = 0; |  14 var step = 0; | 
|  14 var exception = null; |  15 var exception = null; | 
|  15  |  16  | 
|  16 function listener(event, exec_state, event_data, data) { |  17 function listener(event, exec_state, event_data, data) { | 
|  17   try { |  18   try { | 
|  18     // Ignore exceptions during startup in stress runs. |  | 
|  19     if (step >= 1) return; |  | 
|  20     if (event == Debug.DebugEvent.Exception) { |  19     if (event == Debug.DebugEvent.Exception) { | 
|  21       assertEquals(0, step); |  20       assertEquals(0, step); | 
|  22       assertEquals("uncaught", event_data.exception().message); |  21       assertEquals("uncaught", event_data.exception().message); | 
|  23       assertTrue(event_data.promise() instanceof Promise); |  22       assertTrue(event_data.promise() instanceof Promise); | 
|  24       assertTrue(event_data.uncaught()); |  23       assertTrue(event_data.uncaught()); | 
|  25       // Assert that the debug event is triggered at the throw site. |  24       // Assert that the debug event is triggered at the throw site. | 
|  26       assertTrue(exec_state.frame(0).sourceLineText().indexOf("// event") > 0); |  25       assertTrue(exec_state.frame(0).sourceLineText().indexOf("// event") > 0); | 
|  27       step++; |  26       step++; | 
|  28     } |  27     } | 
|  29   } catch (e) { |  28   } catch (e) { | 
|  30     // Signal a failure with exit code 1.  This is necessary since the |  | 
|  31     // debugger swallows exceptions and we expect the chained function |  | 
|  32     // and this listener to be executed after the main script is finished. |  | 
|  33     print("Unexpected exception: " + e + "\n" + e.stack); |  | 
|  34     exception = e; |  29     exception = e; | 
|  35   } |  30   } | 
|  36 } |  31 } | 
|  37  |  32  | 
|  38 Debug.setBreakOnUncaughtException(); |  33 Debug.setBreakOnUncaughtException(); | 
|  39 Debug.setListener(listener); |  34 Debug.setListener(listener); | 
|  40  |  35  | 
|  41 var p = new Promise(function(resolve, reject) { |  36 var p = new Promise(function(resolve, reject) { | 
|  42   throw new Error("uncaught");  // event |  37   try {  // This try-catch must not prevent this uncaught reject event. | 
 |  38     throw new Error("caught"); | 
 |  39   } catch (e) { } | 
 |  40   reject(new Error("uncaught"));  // event | 
|  43 }); |  41 }); | 
|  44  |  42  | 
|  45 assertEquals(1, step); |  43 assertEquals(1, step); | 
|  46 assertNull(exception); |  44 assertNull(exception); | 
| OLD | NEW |