| 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);
|
| +}
|
|
|