Index: test/inspector/runtime/call-function-on-async.js |
diff --git a/test/inspector/runtime/call-function-on-async.js b/test/inspector/runtime/call-function-on-async.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8cf8977578bc4aa2526cca98d8503336374934c9 |
--- /dev/null |
+++ b/test/inspector/runtime/call-function-on-async.js |
@@ -0,0 +1,142 @@ |
+// 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. |
+ |
+print("Tests that Runtime.callFunctionOn works with awaitPromise flag."); |
+ |
+InspectorTest.runTestSuite([ |
+ function testArguments(next) |
+ { |
+ callFunctionOn( |
+ "({a : 1})", |
+ "function(arg1, arg2, arg3, arg4) { return \"\" + arg1 + \"|\" + arg2 + \"|\" + arg3 + \"|\" + arg4; }", |
+ [ "undefined", "NaN", "({a:2})", "this"], |
+ /* returnByValue */ true, |
+ /* generatePreview */ false, |
+ /* awaitPromise */ false) |
+ .then((result) => dumpResult(result.result)) |
+ .then(() => next()); |
+ }, |
+ |
+ function testSyntaxErrorInFunction(next) |
+ { |
+ callFunctionOn( |
+ "({a : 1})", |
+ "\n }", |
+ [], |
+ /* returnByValue */ false, |
+ /* generatePreview */ false, |
+ /* awaitPromise */ true) |
+ .then((result) => dumpResult(result.result)) |
+ .then(() => next()); |
+ }, |
+ |
+ function testExceptionInFunctionExpression(next) |
+ { |
+ callFunctionOn( |
+ "({a : 1})", |
+ "(function() { throw new Error() })()", |
+ [], |
+ /* returnByValue */ false, |
+ /* generatePreview */ false, |
+ /* awaitPromise */ true) |
+ .then((result) => dumpResult(result.result)) |
+ .then(() => next()); |
+ }, |
+ |
+ function testFunctionReturnNotPromise(next) |
+ { |
+ callFunctionOn( |
+ "({a : 1})", |
+ "(function() { return 239; })", |
+ [], |
+ /* returnByValue */ false, |
+ /* generatePreview */ false, |
+ /* awaitPromise */ true) |
+ .then((result) => InspectorTest.logObject(result.error)) |
+ .then(() => next()); |
+ }, |
+ |
+ function testFunctionReturnResolvedPromiseReturnByValue(next) |
+ { |
+ callFunctionOn( |
+ "({a : 1})", |
+ "(function(arg) { return Promise.resolve({a : this.a + arg.a}); })", |
+ [ "({a:2})" ], |
+ /* returnByValue */ true, |
+ /* generatePreview */ false, |
+ /* awaitPromise */ true) |
+ .then((result) => dumpResult(result.result)) |
+ .then(() => next()); |
+ }, |
+ |
+ function testFunctionReturnResolvedPromiseWithPreview(next) |
+ { |
+ callFunctionOn( |
+ "({a : 1})", |
+ "(function(arg) { return Promise.resolve({a : this.a + arg.a}); })", |
+ [ "({a:2})" ], |
+ /* returnByValue */ false, |
+ /* generatePreview */ true, |
+ /* awaitPromise */ true) |
+ .then((result) => dumpResult(result.result)) |
+ .then(() => next()); |
+ }, |
+ |
+ function testFunctionReturnRejectedPromise(next) |
+ { |
+ callFunctionOn( |
+ "({a : 1})", |
+ "(function(arg) { return Promise.reject({a : this.a + arg.a}); })", |
+ [ "({a:2})" ], |
+ /* returnByValue */ true, |
+ /* generatePreview */ false, |
+ /* awaitPromise */ true) |
+ .then((result) => dumpResult(result.result)) |
+ .then(() => next()); |
+ } |
+]); |
+ |
+function callFunctionOn(objectExpression, functionDeclaration, argumentExpressions, returnByValue, generatePreview, awaitPromise) |
+{ |
+ var objectId; |
+ var callArguments = []; |
+ var promise = InspectorTest.sendCommandPromise("Runtime.evaluate", { expression: objectExpression }) |
+ .then((result) => objectId = result.result.result.objectId) |
+ for (let argumentExpression of argumentExpressions) { |
+ promise = promise |
+ .then(() => InspectorTest.sendCommandPromise("Runtime.evaluate", { expression: argumentExpression })) |
+ .then((result) => addArgument(result.result.result)); |
+ } |
+ return promise.then(() => InspectorTest.sendCommandPromise("Runtime.callFunctionOn", { objectId: objectId, functionDeclaration: functionDeclaration, arguments: callArguments, returnByValue: returnByValue, generatePreview: generatePreview, awaitPromise: awaitPromise })); |
+ |
+ function addArgument(result) |
+ { |
+ if (result.objectId) { |
+ callArguments.push({ objectId: result.objectId }); |
+ } else if (result.value) { |
+ callArguments.push({ value: result.value }) |
+ } else if (result.unserializableValue) { |
+ callArguments.push({ unserializableValue: result.unserializableValue }); |
+ } else if (result.type === "undefined") { |
+ callArguments.push({}); |
+ } else { |
+ InspectorTest.log("Unexpected argument object:"); |
+ InspectorTest.logObject(result); |
+ InspectorTest.completeTest(); |
+ } |
+ } |
+} |
+ |
+function dumpResult(result) |
+{ |
+ if (result.exceptionDetails && result.exceptionDetails.scriptId) |
+ result.exceptionDetails.scriptId = 0; |
+ if (result.result && result.result.objectId) |
+ result.result.objectId = "[ObjectId]"; |
+ if (result.exceptionDetails) { |
+ result.exceptionDetails.exceptionId = 0; |
+ result.exceptionDetails.exception.objectId = 0; |
+ } |
+ InspectorTest.logObject(result); |
+} |