Index: third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-await-promise.js |
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-await-promise.js b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-await-promise.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..56e102ec4c397e297a5ca5d593ef431591c46327 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/inspector-protocol/runtime/runtime-await-promise.js |
@@ -0,0 +1,91 @@ |
+(async function(testRunner) { |
+ let {page, session, dp} = await testRunner.startBlank('Tests that Runtime.awaitPromise works.'); |
+ |
+ function dumpResult(result) { |
+ if (result.exceptionDetails) { |
+ if (result.exceptionDetails.stackTrace && result.exceptionDetails.stackTrace.parent) { |
+ for (var frame of result.exceptionDetails.stackTrace.parent.callFrames) { |
+ frame.scriptId = 0; |
+ frame.url = ''; |
+ } |
+ } |
+ result.exceptionDetails.exceptionId = 0; |
+ if (result.exceptionDetails.exception) |
+ result.exceptionDetails.exception.objectId = 0; |
+ } |
+ testRunner.logObject(result); |
+ } |
+ |
+ await session.evaluate(` |
+ 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 runGC() { |
+ if (window.gc) |
+ window.gc(); |
+ } |
+ `); |
+ |
+ await dp.Debugger.enable(); |
+ await dp.Debugger.setAsyncCallStackDepth({ maxDepth: 128 }); |
+ |
+ await testRunner.runTestSuite([ |
+ async function testResolvedPromise() { |
+ var result = await dp.Runtime.evaluate({ expression: 'Promise.resolve(239)'}); |
+ result = await dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId, returnByValue: false, generatePreview: true }); |
+ dumpResult(result.result); |
+ }, |
+ |
+ async function testRejectedPromise() { |
+ var result = await dp.Runtime.evaluate({ expression: 'Promise.reject({ a : 1 })'}); |
+ result = await dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId, returnByValue: true, generatePreview: false }); |
+ dumpResult(result.result); |
+ }, |
+ |
+ async function testRejectedPromiseWithStack() { |
+ var result = await dp.Runtime.evaluate({ expression: 'createPromise()'}); |
+ var promise = dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId }); |
+ dp.Runtime.evaluate({ expression: 'rejectPromise()' }); |
+ result = await promise; |
+ dumpResult(result.result); |
+ }, |
+ |
+ async function testPendingPromise() { |
+ var result = await dp.Runtime.evaluate({ expression: 'createPromise()'}); |
+ var promise = dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId }); |
+ dp.Runtime.evaluate({ expression: 'resolvePromise()' }); |
+ result = await promise; |
+ dumpResult(result.result); |
+ }, |
+ |
+ async function testResolvedWithoutArgsPromise() { |
+ var result = await dp.Runtime.evaluate({ expression: 'Promise.resolve()'}); |
+ result = await dp.Runtime.awaitPromise({ promiseObjectId: result.result.result.objectId, returnByValue: true, generatePreview: false }); |
+ dumpResult(result.result); |
+ }, |
+ |
+ async function testGarbageCollectedPromise() { |
+ var result = await dp.Runtime.evaluate({ expression: 'new Promise(() => undefined)'}); |
+ var objectId = result.result.result.objectId; |
+ var promise = dp.Runtime.awaitPromise({ promiseObjectId: objectId }); |
+ dp.Runtime.releaseObject({ objectId: objectId}).then(() => dp.Runtime.evaluate({ expression: 'runGC()' })); |
+ result = await promise; |
+ testRunner.logObject(result.error); |
+ } |
+ ]); |
+}) |