|  | // 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. | 
|  | // Flags: --expose_gc | 
|  |  | 
|  | let {session, contextGroup, Protocol} = InspectorTest.start("Tests that Runtime.awaitPromise works."); | 
|  |  | 
|  | contextGroup.addScript( | 
|  | ` | 
|  | var resolveCallback; | 
|  | var rejectCallback; | 
|  | function createPromise() | 
|  | { | 
|  | return new Promise((resolve, reject) => { resolveCallback = resolve; rejectCallback = reject }); | 
|  | } | 
|  |  | 
|  | function resolvePromise() | 
|  | { | 
|  | resolveCallback(239); | 
|  | resolveCallback = undefined; | 
|  | rejectCallback = undefined; | 
|  | } | 
|  |  | 
|  | function rejectPromise() | 
|  | { | 
|  | rejectCallback(239); | 
|  | resolveCallback = undefined; | 
|  | rejectCallback = undefined; | 
|  | } | 
|  |  | 
|  | function rejectPromiseWithAnError() | 
|  | { | 
|  | rejectCallback(new Error('MyError')); | 
|  | resolveCallback = undefined; | 
|  | rejectCallback = undefined; | 
|  | } | 
|  |  | 
|  | function throwError() | 
|  | { | 
|  | throw new Error('MyError'); | 
|  | } | 
|  |  | 
|  | //# sourceURL=test.js`); | 
|  |  | 
|  | Protocol.Debugger.enable() | 
|  | .then(() => Protocol.Debugger.setAsyncCallStackDepth({ maxDepth: 128 })) | 
|  | .then(() => testSuite()); | 
|  |  | 
|  | function testSuite() | 
|  | { | 
|  | InspectorTest.runTestSuite([ | 
|  | function testResolvedPromise(next) | 
|  | { | 
|  | Protocol.Runtime.evaluate({ expression: "Promise.resolve(239)"}) | 
|  | .then(result => Protocol.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId, returnByValue: false, generatePreview: true })) | 
|  | .then(result => InspectorTest.logMessage(result)) | 
|  | .then(() => next()); | 
|  | }, | 
|  |  | 
|  | function testRejectedPromise(next) | 
|  | { | 
|  | Protocol.Runtime.evaluate({ expression: "Promise.reject({ a : 1 })"}) | 
|  | .then(result => Protocol.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId, returnByValue: true, generatePreview: false })) | 
|  | .then(result => InspectorTest.logMessage(result)) | 
|  | .then(() => next()); | 
|  | }, | 
|  |  | 
|  | function testRejectedPromiseWithStack(next) | 
|  | { | 
|  | Protocol.Runtime.evaluate({ expression: "createPromise()"}) | 
|  | .then(result => scheduleRejectAndAwaitPromise(result)) | 
|  | .then(result => InspectorTest.logMessage(result)) | 
|  | .then(() => next()); | 
|  |  | 
|  | function scheduleRejectAndAwaitPromise(result) | 
|  | { | 
|  | var promise = Protocol.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId }); | 
|  | Protocol.Runtime.evaluate({ expression: "rejectPromise()" }); | 
|  | return promise; | 
|  | } | 
|  | }, | 
|  |  | 
|  | function testRejectedPromiseWithError(next) | 
|  | { | 
|  | Protocol.Runtime.evaluate({ expression: "createPromise()"}) | 
|  | .then(result => scheduleRejectAndAwaitPromise(result)) | 
|  | .then(result => InspectorTest.logMessage(result)) | 
|  | .then(() => next()); | 
|  |  | 
|  | function scheduleRejectAndAwaitPromise(result) | 
|  | { | 
|  | var promise = Protocol.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId }); | 
|  | Protocol.Runtime.evaluate({ expression: "rejectPromiseWithAnError()" }); | 
|  | return promise; | 
|  | } | 
|  | }, | 
|  |  | 
|  | function testPendingPromise(next) | 
|  | { | 
|  | Protocol.Runtime.evaluate({ expression: "createPromise()"}) | 
|  | .then(result => scheduleFulfillAndAwaitPromise(result)) | 
|  | .then(result => InspectorTest.logMessage(result)) | 
|  | .then(() => next()); | 
|  |  | 
|  | function scheduleFulfillAndAwaitPromise(result) | 
|  | { | 
|  | var promise = Protocol.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId }); | 
|  | Protocol.Runtime.evaluate({ expression: "resolvePromise()" }); | 
|  | return promise; | 
|  | } | 
|  | }, | 
|  |  | 
|  | function testResolvedWithoutArgsPromise(next) | 
|  | { | 
|  | Protocol.Runtime.evaluate({ expression: "Promise.resolve()"}) | 
|  | .then(result => Protocol.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId, returnByValue: true, generatePreview: false })) | 
|  | .then(result => InspectorTest.logMessage(result)) | 
|  | .then(() => next()); | 
|  | }, | 
|  |  | 
|  | function testGarbageCollectedPromise(next) | 
|  | { | 
|  | Protocol.Runtime.evaluate({ expression: "new Promise(() => undefined)" }) | 
|  | .then(result => scheduleGCAndawaitPromise(result)) | 
|  | .then(result => InspectorTest.logMessage(result)) | 
|  | .then(() => next()); | 
|  |  | 
|  | function scheduleGCAndawaitPromise(result) | 
|  | { | 
|  | var objectId = result.result.result.objectId; | 
|  | var promise = Protocol.Runtime.awaitPromise({ promiseObjectId: objectId }); | 
|  | gcPromise(objectId); | 
|  | return promise; | 
|  | } | 
|  |  | 
|  | function gcPromise(objectId) | 
|  | { | 
|  | Protocol.Runtime.releaseObject({ objectId: objectId}) | 
|  | .then(() => Protocol.Runtime.evaluate({ expression: "gc()" })); | 
|  | } | 
|  | } | 
|  | ]); | 
|  | } |