| // Copyright 2019 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| Debug = debug.Debug |
| |
| const evaluate = Debug.evaluateGlobalREPL; |
| |
| (async () => { |
| // Test that the completion value of the REPL script is the resolve value of the |
| // promise returned by evalute. |
| let result = evaluate('5;'); |
| assertPromiseResult(result, (value) => { |
| assertEquals(5, value); |
| }, assertUnreachable); |
| |
| // Test that top-level await in REPL mode works. |
| result = evaluate('let x = await Promise.resolve(42);'); |
| assertPromiseResult(result, (value) => { |
| assertEquals(undefined, value); |
| assertEquals(42, x); |
| }, assertUnreachable); |
| |
| // Test that a throwing REPL script results in a rejected promise. |
| result = evaluate('throw new Error("ba dum tsh");'); |
| assertPromiseResult(result, assertUnreachable, (error) => { |
| assertEquals("ba dum tsh", error.message); |
| }); |
| |
| // Test that a rejected promise throws. |
| result = evaluate('await Promise.reject("Reject promise!");'); |
| assertPromiseResult(result, assertUnreachable, (error) => { |
| assertEquals('Reject promise!', error); |
| }); |
| |
| // Test that we can bind a promise in REPL mode. |
| await evaluate('let y = Promise.resolve(21);'); |
| assertPromiseResult(y, (value) => { |
| assertEquals(21, value); |
| }, assertUnreachable); |
| })().then(() => { |
| print("Async test completed successfully."); |
| }).catch(e => { |
| print(e.stack); |
| %AbortJS("Async test is failing"); |
| }); |