OLD | NEW |
| (Empty) |
1 // Copyright 2016 the V8 project authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 print("Tests that Runtime.callFunctionOn works with awaitPromise flag."); | |
6 | |
7 InspectorTest.runTestSuite([ | |
8 function testArguments(next) | |
9 { | |
10 callFunctionOn( | |
11 "({a : 1})", | |
12 "function(arg1, arg2, arg3, arg4) { return \"\" + arg1 + \"|\" + arg2 + \"
|\" + arg3 + \"|\" + arg4; }", | |
13 [ "undefined", "NaN", "({a:2})", "this"], | |
14 /* returnByValue */ true, | |
15 /* generatePreview */ false, | |
16 /* awaitPromise */ false) | |
17 .then((result) => dumpResult(result.result)) | |
18 .then(() => next()); | |
19 }, | |
20 | |
21 function testSyntaxErrorInFunction(next) | |
22 { | |
23 callFunctionOn( | |
24 "({a : 1})", | |
25 "\n }", | |
26 [], | |
27 /* returnByValue */ false, | |
28 /* generatePreview */ false, | |
29 /* awaitPromise */ true) | |
30 .then((result) => dumpResult(result.result)) | |
31 .then(() => next()); | |
32 }, | |
33 | |
34 function testExceptionInFunctionExpression(next) | |
35 { | |
36 callFunctionOn( | |
37 "({a : 1})", | |
38 "(function() { throw new Error() })()", | |
39 [], | |
40 /* returnByValue */ false, | |
41 /* generatePreview */ false, | |
42 /* awaitPromise */ true) | |
43 .then((result) => dumpResult(result.result)) | |
44 .then(() => next()); | |
45 }, | |
46 | |
47 function testFunctionReturnNotPromise(next) | |
48 { | |
49 callFunctionOn( | |
50 "({a : 1})", | |
51 "(function() { return 239; })", | |
52 [], | |
53 /* returnByValue */ false, | |
54 /* generatePreview */ false, | |
55 /* awaitPromise */ true) | |
56 .then((result) => InspectorTest.logObject(result.error)) | |
57 .then(() => next()); | |
58 }, | |
59 | |
60 function testFunctionReturnResolvedPromiseReturnByValue(next) | |
61 { | |
62 callFunctionOn( | |
63 "({a : 1})", | |
64 "(function(arg) { return Promise.resolve({a : this.a + arg.a}); })", | |
65 [ "({a:2})" ], | |
66 /* returnByValue */ true, | |
67 /* generatePreview */ false, | |
68 /* awaitPromise */ true) | |
69 .then((result) => dumpResult(result.result)) | |
70 .then(() => next()); | |
71 }, | |
72 | |
73 function testFunctionReturnResolvedPromiseWithPreview(next) | |
74 { | |
75 callFunctionOn( | |
76 "({a : 1})", | |
77 "(function(arg) { return Promise.resolve({a : this.a + arg.a}); })", | |
78 [ "({a:2})" ], | |
79 /* returnByValue */ false, | |
80 /* generatePreview */ true, | |
81 /* awaitPromise */ true) | |
82 .then((result) => dumpResult(result.result)) | |
83 .then(() => next()); | |
84 }, | |
85 | |
86 function testFunctionReturnRejectedPromise(next) | |
87 { | |
88 callFunctionOn( | |
89 "({a : 1})", | |
90 "(function(arg) { return Promise.reject({a : this.a + arg.a}); })", | |
91 [ "({a:2})" ], | |
92 /* returnByValue */ true, | |
93 /* generatePreview */ false, | |
94 /* awaitPromise */ true) | |
95 .then((result) => dumpResult(result.result)) | |
96 .then(() => next()); | |
97 } | |
98 ]); | |
99 | |
100 function callFunctionOn(objectExpression, functionDeclaration, argumentExpressio
ns, returnByValue, generatePreview, awaitPromise) | |
101 { | |
102 var objectId; | |
103 var callArguments = []; | |
104 var promise = InspectorTest.sendCommandPromise("Runtime.evaluate", { expressio
n: objectExpression }) | |
105 .then((result) => objectId = result.result.result.objectId) | |
106 for (let argumentExpression of argumentExpressions) { | |
107 promise = promise | |
108 .then(() => InspectorTest.sendCommandPromise("Runtime.evaluate", { express
ion: argumentExpression })) | |
109 .then((result) => addArgument(result.result.result)); | |
110 } | |
111 return promise.then(() => InspectorTest.sendCommandPromise("Runtime.callFuncti
onOn", { objectId: objectId, functionDeclaration: functionDeclaration, arguments
: callArguments, returnByValue: returnByValue, generatePreview: generatePreview,
awaitPromise: awaitPromise })); | |
112 | |
113 function addArgument(result) | |
114 { | |
115 if (result.objectId) { | |
116 callArguments.push({ objectId: result.objectId }); | |
117 } else if (result.value) { | |
118 callArguments.push({ value: result.value }) | |
119 } else if (result.unserializableValue) { | |
120 callArguments.push({ unserializableValue: result.unserializableValue }); | |
121 } else if (result.type === "undefined") { | |
122 callArguments.push({}); | |
123 } else { | |
124 InspectorTest.log("Unexpected argument object:"); | |
125 InspectorTest.logObject(result); | |
126 InspectorTest.completeTest(); | |
127 } | |
128 } | |
129 } | |
130 | |
131 function dumpResult(result) | |
132 { | |
133 if (result.exceptionDetails && result.exceptionDetails.scriptId) | |
134 result.exceptionDetails.scriptId = 0; | |
135 if (result.result && result.result.objectId) | |
136 result.result.objectId = "[ObjectId]"; | |
137 if (result.exceptionDetails) { | |
138 result.exceptionDetails.exceptionId = 0; | |
139 result.exceptionDetails.exception.objectId = 0; | |
140 } | |
141 InspectorTest.logObject(result); | |
142 } | |
OLD | NEW |