diff options
Diffstat (limited to 'deps/v8/test/inspector/runtime/await-promise.js')
-rw-r--r-- | deps/v8/test/inspector/runtime/await-promise.js | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/deps/v8/test/inspector/runtime/await-promise.js b/deps/v8/test/inspector/runtime/await-promise.js new file mode 100644 index 0000000000..dc0c132bab --- /dev/null +++ b/deps/v8/test/inspector/runtime/await-promise.js @@ -0,0 +1,116 @@ +// 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 + +print("Tests that Runtime.awaitPromise works."); + +InspectorTest.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; +} + +//# 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 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()" })); + } + } + ]); +} |