| // Copyright 2016 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. |
| |
| let {session, contextGroup, Protocol} = InspectorTest.start("Tests that Runtime.evaluate works with awaitPromise flag."); |
| |
| contextGroup.addScript(` |
| function createPromiseAndScheduleResolve() |
| { |
| var resolveCallback; |
| var promise = new Promise((resolve) => resolveCallback = resolve); |
| setTimeout(resolveCallback.bind(null, { a : 239 }), 0); |
| return promise; |
| } |
| |
| function throwError() |
| { |
| function foo() { |
| throw new Error('MyError'); |
| } |
| foo(); |
| } |
| |
| function throwSyntaxError() |
| { |
| function foo() { |
| eval('}'); |
| } |
| foo(); |
| } |
| `); |
| |
| InspectorTest.runAsyncTestSuite([ |
| async function testResolvedPromise() |
| { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: "Promise.resolve(239)", |
| awaitPromise: true, |
| generatePreview: true |
| })); |
| }, |
| |
| async function testRejectedPromise() |
| { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: "Promise.reject(239)", |
| awaitPromise: true |
| })); |
| }, |
| |
| async function testRejectedPromiseWithError() |
| { |
| Protocol.Runtime.enable(); |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: "Promise.resolve().then(throwError)", |
| awaitPromise: true |
| })); |
| await Protocol.Runtime.disable(); |
| }, |
| |
| async function testRejectedPromiseWithSyntaxError() |
| { |
| Protocol.Runtime.enable(); |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: "Promise.resolve().then(throwSyntaxError)", |
| awaitPromise: true |
| })); |
| await Protocol.Runtime.disable(); |
| }, |
| |
| async function testPrimitiveValueInsteadOfPromise() |
| { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: "true", |
| awaitPromise: true |
| })); |
| }, |
| |
| async function testObjectInsteadOfPromise() |
| { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: "({})", |
| awaitPromise: true, |
| returnByValue: true |
| })); |
| }, |
| |
| async function testPendingPromise() |
| { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: "createPromiseAndScheduleResolve()", |
| awaitPromise: true, |
| returnByValue: true |
| })); |
| }, |
| |
| async function testExceptionInEvaluate() |
| { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: "throw 239", |
| awaitPromise: true |
| })); |
| }, |
| |
| async function testThenableJob() |
| { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: '({then: resolve => resolve(42)})', |
| awaitPromise: true})); |
| }, |
| |
| async function testLastEvaluatedResult() |
| { |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: 'Promise.resolve(42)', |
| awaitPromise: true, |
| objectGroup: 'console' |
| })); |
| InspectorTest.logMessage(await Protocol.Runtime.evaluate({ |
| expression: '$_', |
| includeCommandLineAPI: true |
| })); |
| }, |
| |
| async function testRuntimeDisable() |
| { |
| await Protocol.Runtime.enable(); |
| Protocol.Runtime.evaluate({ |
| expression: 'new Promise(r1 => r = r1)', |
| awaitPromise: true }).then(InspectorTest.logMessage); |
| await Protocol.Runtime.disable(); |
| InspectorTest.log('Resolving promise..'); |
| await Protocol.Runtime.evaluate({expression: 'r({a:1})'}); |
| InspectorTest.log('Promise resolved'); |
| }, |
| |
| async function testImmediatelyResolvedAfterAfterContextDestroyed() |
| { |
| Protocol.Runtime.evaluate({ |
| expression: 'new Promise(() => 42)', |
| awaitPromise: true }).then(InspectorTest.logMessage); |
| InspectorTest.log('Destroying context..'); |
| await Protocol.Runtime.evaluate({expression: 'inspector.fireContextDestroyed()'}); |
| InspectorTest.log('Context destroyed'); |
| InspectorTest.log('Triggering weak callback..'); |
| await Protocol.HeapProfiler.collectGarbage(); |
| } |
| ]); |