Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Side by Side Diff: test/inspector/debugger/async-step-into-for-promise.js

Issue 2655253004: [inspector] introduced stepIntoAsync for chained callbacks (Closed)
Patch Set: addressed Yang's comment Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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('Checks Protocol.Debugger.stepIntoAsync() for promises');
6
7 InspectorTest.addScript(`
8 function foo1() {
9 }
10
11 function foo2() {
12 }
13
14 function promiseThen() {
15 var resolve1;
16 var p1 = new Promise(resolve => resolve1 = resolve);
17 debugger;
18 var p2 = p1.then(foo1);
19 resolve1();
20 return p2;
21 }
22
23 function promiseThenWithoutAssignment() {
24 var nextTest;
25 var testPromise = new Promise(resolve => nextTest = resolve);
26
27 var resolve1;
28 var p1 = new Promise(resolve => resolve1 = resolve);
29 debugger;
30 p1.then(foo1).then(nextTest);
31 resolve1();
32 return testPromise;
33 }
34
35 function promiseAll() {
36 var resolve1;
37 var resolve2;
38 var p1 = new Promise(resolve => resolve1 = resolve);
39 var p2 = new Promise(resolve => resolve2 = resolve);
40 debugger;
41 var p3 = Promise.all([ p1, p2 ]).then(foo1);
42 resolve1();
43 resolve2();
44 return p3;
45 }
46
47 function promiseAllWithoutAssignment() {
48 var nextTest;
49 var testPromise = new Promise(resolve => nextTest = resolve);
50
51 var resolve1;
52 var resolve2;
53 var p1 = new Promise(resolve => resolve1 = resolve);
54 var p2 = new Promise(resolve => resolve2 = resolve);
55
56 debugger;
57 Promise.all([ p1, p2 ]).then(foo1).then(nextTest);
58 resolve1();
59 resolve2();
60 return testPromise;
61 }
62
63 function promise() {
64 debugger;
65 var resolve;
66 var p1 = new Promise(r => resolve = r);
67 var p2 = p1.then(foo1);
68 resolve();
69 return p2;
70 }
71
72 function promiseResolvedBySetTimeout() {
73 var resolve;
74 var p1 = new Promise(r => resolve = r);
75 debugger;
76 var p2 = p1.then(foo1);
77 setTimeout(resolve, 0);
78 return p2;
79 }
80
81 function promiseAllWithPrimitiveValues() {
82 debugger;
83 return Promise.all([ 1, 2 ]).then(foo1);
84 }
85
86 function promiseAllReverseOrder() {
87 var resolve1;
88 var resolve2;
89 var p1 = new Promise(resolve => resolve1 = resolve);
90 var p2 = new Promise(resolve => resolve2 = resolve);
91 debugger;
92 var p3 = Promise.all([ p1, p2 ]).then(foo1);
93 resolve2();
94 resolve1();
95 return p3;
96 }
97
98 function promiseRace() {
99 var resolve1;
100 var resolve2;
101 var p1 = new Promise(resolve => resolve1 = resolve);
102 var p2 = new Promise(resolve => resolve2 = resolve);
103 debugger;
104 var p3 = Promise.race([ p1, p2 ]).then(foo1);
105 resolve1();
106 resolve2();
107 return p3;
108 }
109
110 function twoChainedCallbacks() {
111 var resolve1;
112 var p1 = new Promise(resolve => resolve1 = resolve);
113 debugger;
114 var p2 = p1.then(foo1).then(foo2);
115 resolve1();
116 return p2;
117 }
118
119 function promiseResolve() {
120 debugger;
121 return Promise.resolve().then(foo1).then(foo2);
122 }
123
124 function thenableJobResolvedInSetTimeout() {
125 function thenableJob() {
126 var resolve2;
127 var p2 = new Promise(resolve => resolve2 = resolve);
128 setTimeout(resolve2, 0);
129 return p2;
130 }
131 var resolve1;
132 var p1 = new Promise(resolve => resolve1 = resolve);
133 debugger;
134 var p3 = p1.then(() => thenableJob()).then(foo1);
135 resolve1();
136 return p3;
137 }
138
139 function thenableJobResolvedByPromise() {
140 function thenableJob() {
141 var resolve2;
142 var p2 = new Promise(resolve => resolve2 = resolve);
143 Promise.resolve().then(resolve2);
144 return p2;
145 }
146 var resolve1;
147 var p1 = new Promise(resolve => resolve1 = resolve);
148 debugger;
149 var p3 = p1.then(() => thenableJob()).then(foo1);
150 resolve1();
151 return p3;
152 }
153
154 function lateThenCallback() {
155 var resolve1;
156 var p1 = new Promise(resolve => resolve1 = resolve);
157 resolve1();
158 debugger;
159 return p1.then(foo1);
160 }
161
162 function complex() {
163 var testResolve;
164 var testPromise = new Promise(resolve => testResolve = resolve);
165
166 function foo1() {
167 }
168
169 function foo2() {
170 var resolve20;
171 function inner2() {
172 resolve20();
173 }
174 var p20 = new Promise(resolve => resolve20 = resolve);
175 Promise.resolve().then(inner2);
176 return p20;
177 }
178
179 function foo3() {
180 var resolve17;
181 function inner3() {
182 resolve17();
183 }
184 var p17 = new Promise(resolve => resolve17 = resolve);
185 setTimeout(inner3, 0);
186 return p17;
187 }
188
189 function foo4() {
190 function inner4() {
191 return;
192 }
193 return inner4();
194 }
195
196 function foo5() {
197 return Promise.all([ Promise.resolve(), Promise.resolve() ])
198 .then(() => 42);
199 }
200
201 function foo6() {
202 return Promise.race([ Promise.resolve(), Promise.resolve()])
203 .then(() => 42);
204 }
205
206 debugger;
207 var p = Promise.resolve()
208 .then(foo6)
209 .then(foo5)
210 .then(foo4)
211 .then(foo3)
212 .then(foo2)
213 .then(foo1);
214
215 return testPromise;
216 }
217
218 function reject() {
219 debugger;
220 return Promise.reject().catch(foo1);
221 }
222
223 //# sourceURL=test.js`, 7, 26);
224
225 InspectorTest.setupScriptMap();
226 var testActions = [];
227 Protocol.Debugger.onPaused(message => {
228 InspectorTest.log('reason: ' + message.params.reason);
229 InspectorTest.logCallFrames(message.params.callFrames);
230 InspectorTest.logAsyncStackTrace(message.params.asyncStackTrace);
231 var action = testActions.shift() || 'resume';
232 InspectorTest.log('executing ' + action);
233 Protocol.Debugger[action]().then(message => {
234 if (!message.error) return;
235 InspectorTest.logMessage(message);
236 Protocol.Debugger.resume();
237 });
238 InspectorTest.log('');
239 });
240
241 Protocol.Debugger.enable();
242 Protocol.Debugger.setAsyncCallStackDepth({ maxDepth: 128 });
243 var testListWithoutAsync = [
244 [ 'promiseThen', 2 ],
245 [ 'promiseThenWithoutAssignment', 2 ],
246 [ 'promiseAll', 4 ],
247 [ 'promiseAllWithoutAssignment', 2 ],
248 ];
249 var testListWithAsync = [
250 [ 'promiseThen', 2 ],
251 [ 'promiseThenWithoutAssignment', 2 ],
252 [ 'promiseAll', 4 ],
253 [ 'promiseAllWithoutAssignment', 2 ],
254 /*
255 [ 'promise', 5 ],
256 [ 'promiseResolvedBySetTimeout', 2 ],
257 [ 'promiseAllReverseOrder', 4 ],
258 [ 'promiseAllWithPrimitiveValues', 2 ],
259 [ 'promiseRace', 4 ],
260 [ 'twoChainedCallbacks', 3 ],
261 [ 'twoChainedCallbacks', 5 ],
262 [ 'promiseResolve', 2 ],
263 [ 'promiseResolve', 3 ],
264 [ 'thenableJobResolvedInSetTimeout', 5 ],
265 [ 'thenableJobResolvedByPromise', 5 ],
266 [ 'lateThenCallback', 2 ],
267 [ 'reject', 2 ],
268 // [ 'complex', 1 ],
269 */
270 ];
271
272 var testsWithoutAsync = testListWithoutAsync.map(test => {
273 var name = test[0];
274 var stepIntoBeforeAsync = test[1];
275 return eval(`
276 (function test${capitalize(name)}(next) {
277 runTestSuite('${name}()', ${stepIntoBeforeAsync}, next);
278 })
279 `);
280 });
281
282 var testsWithAsync = testListWithAsync.map(test => {
283 var name = test[0];
284 var stepIntoBeforeAsync = test[1];
285 return eval(`
286 (function test${capitalize(name)}(next) {
287 runTestSuite('${name}()', ${stepIntoBeforeAsync}, next);
288 })
289 `);
290 });
291
292 InspectorTest.runTestSuite(testsWithAsync.concat([
293 function switchAsyncOff(next) {
294 Protocol.Debugger.setAsyncCallStackDepth({ maxDepth: 0 })
295 .then(next);
296 }
297 ]).concat(testsWithoutAsync));
298
299 function runTestSuite(expression, stepIntoBeforeAsync, next) {
300 testActions = [];
301 for (var i = 0; i < stepIntoBeforeAsync; ++i)
302 testActions.push('stepInto');
303 testActions.push('stepIntoAsync');
304 Protocol.Runtime.evaluate({
305 expression: expression + '//# sourceURL=expr.js',
306 awaitPromise: true }).then(next);
307 }
308
309 function capitalize(string) {
310 return string.charAt(0).toUpperCase() + string.slice(1);
311 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698