Home | History | Annotate | Download | only in harmony
      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 
      8 var Debug = debug.Debug;
      9 
     10 function 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 
     37 var break_count = 0;
     38 var exception = null;
     39 
     40 function 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     assertTrue(line.indexOf(`B${break_count}`) > 0);
     46   } catch (e) {
     47     exception = e;
     48   }
     49 }
     50 
     51 Debug.setListener(listener);
     52 
     53 async function g() {
     54   throw 1;
     55 }
     56 
     57 async function f() {
     58   try {
     59     await g();                   // B1
     60   } catch (e) {}
     61   assertEquals(2, break_count);  // B2
     62   return 1;                      // B3
     63 }
     64 
     65 Debug.setBreakPoint(f, 2);
     66 Debug.setBreakPoint(f, 4);
     67 Debug.setBreakPoint(f, 5);
     68 
     69 f();
     70 
     71 %RunMicrotasks();
     72 
     73 assertEqualsAsync(3, async () => break_count);
     74 assertEqualsAsync(null, async () => exception);
     75 
     76 Debug.setListener(null);
     77