1// Copyright 2016 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 6// Flags: --harmony-async-await --allow-natives-syntax 7 8var Debug = debug.Debug; 9 10function assertEqualsAsync(expected, run, msg) { 11 var actual; 12 var hadValue = false; 13 var hadError = false; 14 var promise = run(); 15 16 if (typeof promise !== "object" || typeof promise.then !== "function") { 17 throw new MjsUnitAssertionError( 18 "Expected " + run.toString() + 19 " to return a Promise, but it returned " + promise); 20 } 21 22 promise.then(function(value) { hadValue = true; actual = value; }, 23 function(error) { hadError = true; actual = error; }); 24 25 assertFalse(hadValue || hadError); 26 27 %RunMicrotasks(); 28 29 if (hadError) throw actual; 30 31 assertTrue( 32 hadValue, "Expected '" + run.toString() + "' to produce a value"); 33 34 assertEquals(expected, actual, msg); 35} 36 37var break_count = 0; 38var exception = null; 39 40function listener(event, exec_state, event_data, data) { 41 if (event != Debug.DebugEvent.Break) return; 42 try { 43 break_count++; 44 var line = exec_state.frame(0).sourceLineText(); 45 print(line); 46 assertTrue(line.indexOf(`B${break_count}`) > 0); 47 } catch (e) { 48 exception = e; 49 } 50} 51 52 53async function g() { 54 setbreaks(); 55 throw 1; // B1 56} 57 58async function f() { 59 try { 60 await g(); 61 } catch (e) {} 62 return 2; // B2 63} 64 65function setbreaks() { 66 Debug.setListener(listener); 67 Debug.setBreakPoint(g, 2); 68 Debug.setBreakPoint(f, 4); 69} 70 71f(); 72 73%RunMicrotasks(); 74 75assertEqualsAsync(2, async () => break_count); 76assertEqualsAsync(null, async () => exception); 77 78Debug.setListener(null); 79