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

Side by Side Diff: test/mjsunit/harmony/debug-blockscopes.js

Issue 726643002: harmony-scoping: Implement debugger support for script scope. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Nit + rebased Created 6 years, 1 month 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
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 listener_delegate = null; 66 listener_delegate = null;
67 listener_called = false; 67 listener_called = false;
68 exception = null; 68 exception = null;
69 begin_test_count++; 69 begin_test_count++;
70 } 70 }
71 71
72 72
73 // Check result of a test. 73 // Check result of a test.
74 function EndTest() { 74 function EndTest() {
75 assertTrue(listener_called, "listerner not called for " + test_name); 75 assertTrue(listener_called, "listerner not called for " + test_name);
76 assertNull(exception, test_name); 76 assertNull(exception, test_name, exception);
77 end_test_count++; 77 end_test_count++;
78 } 78 }
79 79
80 var global_object = this; 80 var global_object = this;
81 81
82 // Check that the scope chain contains the expected types of scopes. 82 // Check that the scope chain contains the expected types of scopes.
83 function CheckScopeChain(scopes, exec_state) { 83 function CheckScopeChain(scopes, exec_state) {
84 assertEquals(scopes.length, exec_state.frame().scopeCount()); 84 assertEquals(scopes.length, exec_state.frame().scopeCount());
85 for (var i = 0; i < scopes.length; i++) { 85 for (var i = 0; i < scopes.length; i++) {
86 var scope = exec_state.frame().scope(i); 86 var scope = exec_state.frame().scope(i);
(...skipping 14 matching lines...) Expand all
101 // Send a scopes request and check the result. 101 // Send a scopes request and check the result.
102 var json; 102 var json;
103 var request_json = '{"seq":0,"type":"request","command":"scopes"}'; 103 var request_json = '{"seq":0,"type":"request","command":"scopes"}';
104 var response_json = dcp.processDebugJSONRequest(request_json); 104 var response_json = dcp.processDebugJSONRequest(request_json);
105 var response = JSON.parse(response_json); 105 var response = JSON.parse(response_json);
106 assertEquals(scopes.length, response.body.scopes.length); 106 assertEquals(scopes.length, response.body.scopes.length);
107 for (var i = 0; i < scopes.length; i++) { 107 for (var i = 0; i < scopes.length; i++) {
108 assertEquals(i, response.body.scopes[i].index); 108 assertEquals(i, response.body.scopes[i].index);
109 assertEquals(scopes[i], response.body.scopes[i].type); 109 assertEquals(scopes[i], response.body.scopes[i].type);
110 if (scopes[i] == debug.ScopeType.Local || 110 if (scopes[i] == debug.ScopeType.Local ||
111 scopes[i] == debug.ScopeType.Script ||
111 scopes[i] == debug.ScopeType.Closure) { 112 scopes[i] == debug.ScopeType.Closure) {
112 assertTrue(response.body.scopes[i].object.ref < 0); 113 assertTrue(response.body.scopes[i].object.ref < 0);
113 } else { 114 } else {
114 assertTrue(response.body.scopes[i].object.ref >= 0); 115 assertTrue(response.body.scopes[i].object.ref >= 0);
115 } 116 }
116 var found = false; 117 var found = false;
117 for (var j = 0; j < response.refs.length && !found; j++) { 118 for (var j = 0; j < response.refs.length && !found; j++) {
118 found = response.refs[j].handle == response.body.scopes[i].object.ref; 119 found = response.refs[j].handle == response.body.scopes[i].object.ref;
119 } 120 }
120 assertTrue(found, "Scope object " + response.body.scopes[i].object.ref + " n ot found"); 121 assertTrue(found, "Scope object " + response.body.scopes[i].object.ref + " n ot found");
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 BeginTest("Local block 1"); 191 BeginTest("Local block 1");
191 192
192 function local_block_1() { 193 function local_block_1() {
193 { 194 {
194 debugger; 195 debugger;
195 } 196 }
196 } 197 }
197 198
198 listener_delegate = function(exec_state) { 199 listener_delegate = function(exec_state) {
199 CheckScopeChain([debug.ScopeType.Local, 200 CheckScopeChain([debug.ScopeType.Local,
201 debug.ScopeType.Script,
200 debug.ScopeType.Global], exec_state); 202 debug.ScopeType.Global], exec_state);
201 CheckScopeContent({}, 0, exec_state); 203 CheckScopeContent({}, 0, exec_state);
202 }; 204 };
203 local_block_1(); 205 local_block_1();
204 EndTest(); 206 EndTest();
205 207
206 208
207 // Simple empty block scope in local scope with a parameter. 209 // Simple empty block scope in local scope with a parameter.
208 BeginTest("Local 2"); 210 BeginTest("Local 2");
209 211
210 function local_2(a) { 212 function local_2(a) {
211 { 213 {
212 debugger; 214 debugger;
213 } 215 }
214 } 216 }
215 217
216 listener_delegate = function(exec_state) { 218 listener_delegate = function(exec_state) {
217 CheckScopeChain([debug.ScopeType.Local, 219 CheckScopeChain([debug.ScopeType.Local,
220 debug.ScopeType.Script,
218 debug.ScopeType.Global], exec_state); 221 debug.ScopeType.Global], exec_state);
219 CheckScopeContent({a:1}, 0, exec_state); 222 CheckScopeContent({a:1}, 0, exec_state);
220 }; 223 };
221 local_2(1); 224 local_2(1);
222 EndTest(); 225 EndTest();
223 226
224 227
225 // Local scope with a parameter and a local variable. 228 // Local scope with a parameter and a local variable.
226 BeginTest("Local 3"); 229 BeginTest("Local 3");
227 230
228 function local_3(a) { 231 function local_3(a) {
229 let x = 3; 232 let x = 3;
230 debugger; 233 debugger;
231 } 234 }
232 235
233 listener_delegate = function(exec_state) { 236 listener_delegate = function(exec_state) {
234 CheckScopeChain([debug.ScopeType.Local, 237 CheckScopeChain([debug.ScopeType.Local,
238 debug.ScopeType.Script,
235 debug.ScopeType.Global], exec_state); 239 debug.ScopeType.Global], exec_state);
236 CheckScopeContent({a:1,x:3}, 0, exec_state); 240 CheckScopeContent({a:1,x:3}, 0, exec_state);
237 }; 241 };
238 local_3(1); 242 local_3(1);
239 EndTest(); 243 EndTest();
240 244
241 245
242 // Local scope with parameters and local variables. 246 // Local scope with parameters and local variables.
243 BeginTest("Local 4"); 247 BeginTest("Local 4");
244 248
245 function local_4(a, b) { 249 function local_4(a, b) {
246 let x = 3; 250 let x = 3;
247 let y = 4; 251 let y = 4;
248 debugger; 252 debugger;
249 } 253 }
250 254
251 listener_delegate = function(exec_state) { 255 listener_delegate = function(exec_state) {
252 CheckScopeChain([debug.ScopeType.Local, 256 CheckScopeChain([debug.ScopeType.Local,
257 debug.ScopeType.Script,
253 debug.ScopeType.Global], exec_state); 258 debug.ScopeType.Global], exec_state);
254 CheckScopeContent({a:1,b:2,x:3,y:4}, 0, exec_state); 259 CheckScopeContent({a:1,b:2,x:3,y:4}, 0, exec_state);
255 }; 260 };
256 local_4(1, 2); 261 local_4(1, 2);
257 EndTest(); 262 EndTest();
258 263
259 264
260 // Single variable in a block scope. 265 // Single variable in a block scope.
261 BeginTest("Local 5"); 266 BeginTest("Local 5");
262 267
263 function local_5(a) { 268 function local_5(a) {
264 { 269 {
265 let x = 5; 270 let x = 5;
266 debugger; 271 debugger;
267 } 272 }
268 } 273 }
269 274
270 listener_delegate = function(exec_state) { 275 listener_delegate = function(exec_state) {
271 CheckScopeChain([debug.ScopeType.Block, 276 CheckScopeChain([debug.ScopeType.Block,
272 debug.ScopeType.Local, 277 debug.ScopeType.Local,
278 debug.ScopeType.Script,
273 debug.ScopeType.Global], exec_state); 279 debug.ScopeType.Global], exec_state);
274 CheckScopeContent({x:5}, 0, exec_state); 280 CheckScopeContent({x:5}, 0, exec_state);
275 CheckScopeContent({a:1}, 1, exec_state); 281 CheckScopeContent({a:1}, 1, exec_state);
276 }; 282 };
277 local_5(1); 283 local_5(1);
278 EndTest(); 284 EndTest();
279 285
280 286
281 // Two variables in a block scope. 287 // Two variables in a block scope.
282 BeginTest("Local 6"); 288 BeginTest("Local 6");
283 289
284 function local_6(a) { 290 function local_6(a) {
285 { 291 {
286 let x = 6; 292 let x = 6;
287 let y = 7; 293 let y = 7;
288 debugger; 294 debugger;
289 } 295 }
290 } 296 }
291 297
292 listener_delegate = function(exec_state) { 298 listener_delegate = function(exec_state) {
293 CheckScopeChain([debug.ScopeType.Block, 299 CheckScopeChain([debug.ScopeType.Block,
294 debug.ScopeType.Local, 300 debug.ScopeType.Local,
301 debug.ScopeType.Script,
295 debug.ScopeType.Global], exec_state); 302 debug.ScopeType.Global], exec_state);
296 CheckScopeContent({x:6,y:7}, 0, exec_state); 303 CheckScopeContent({x:6,y:7}, 0, exec_state);
297 CheckScopeContent({a:1}, 1, exec_state); 304 CheckScopeContent({a:1}, 1, exec_state);
298 }; 305 };
299 local_6(1); 306 local_6(1);
300 EndTest(); 307 EndTest();
301 308
302 309
303 // Two variables in a block scope. 310 // Two variables in a block scope.
304 BeginTest("Local 7"); 311 BeginTest("Local 7");
305 312
306 function local_7(a) { 313 function local_7(a) {
307 { 314 {
308 { 315 {
309 let x = 8; 316 let x = 8;
310 debugger; 317 debugger;
311 } 318 }
312 } 319 }
313 } 320 }
314 321
315 listener_delegate = function(exec_state) { 322 listener_delegate = function(exec_state) {
316 CheckScopeChain([debug.ScopeType.Block, 323 CheckScopeChain([debug.ScopeType.Block,
317 debug.ScopeType.Local, 324 debug.ScopeType.Local,
325 debug.ScopeType.Script,
318 debug.ScopeType.Global], exec_state); 326 debug.ScopeType.Global], exec_state);
319 CheckScopeContent({x:8}, 0, exec_state); 327 CheckScopeContent({x:8}, 0, exec_state);
320 CheckScopeContent({a:1}, 1, exec_state); 328 CheckScopeContent({a:1}, 1, exec_state);
321 }; 329 };
322 local_7(1); 330 local_7(1);
323 EndTest(); 331 EndTest();
324 332
325 333
326 // Simple closure formed by returning an inner function referering to an outer 334 // Simple closure formed by returning an inner function referering to an outer
327 // block local variable and an outer function's parameter. 335 // block local variable and an outer function's parameter.
328 BeginTest("Closure 1"); 336 BeginTest("Closure 1");
329 337
330 function closure_1(a) { 338 function closure_1(a) {
331 var x = 2; 339 var x = 2;
332 let y = 3; 340 let y = 3;
333 if (true) { 341 if (true) {
334 let z = 4; 342 let z = 4;
335 function f() { 343 function f() {
336 debugger; 344 debugger;
337 return a + x + y + z; 345 return a + x + y + z;
338 }; 346 };
339 return f; 347 return f;
340 } 348 }
341 } 349 }
342 350
343 listener_delegate = function(exec_state) { 351 listener_delegate = function(exec_state) {
344 CheckScopeChain([debug.ScopeType.Local, 352 CheckScopeChain([debug.ScopeType.Local,
345 debug.ScopeType.Block, 353 debug.ScopeType.Block,
346 debug.ScopeType.Closure, 354 debug.ScopeType.Closure,
355 debug.ScopeType.Script,
347 debug.ScopeType.Global], exec_state); 356 debug.ScopeType.Global], exec_state);
348 CheckScopeContent({}, 0, exec_state); 357 CheckScopeContent({}, 0, exec_state);
349 CheckScopeContent({a:1,x:2,y:3}, 2, exec_state); 358 CheckScopeContent({a:1,x:2,y:3}, 2, exec_state);
350 }; 359 };
351 closure_1(1)(); 360 closure_1(1)();
352 EndTest(); 361 EndTest();
353 362
354 363
355 // Simple for-in loop over the keys of an object. 364 // Simple for-in loop over the keys of an object.
356 BeginTest("For loop 1"); 365 BeginTest("For loop 1");
357 366
358 function for_loop_1() { 367 function for_loop_1() {
359 for (let x in {y:undefined}) { 368 for (let x in {y:undefined}) {
360 debugger; 369 debugger;
361 } 370 }
362 } 371 }
363 372
364 listener_delegate = function(exec_state) { 373 listener_delegate = function(exec_state) {
365 CheckScopeChain([debug.ScopeType.Block, 374 CheckScopeChain([debug.ScopeType.Block,
366 debug.ScopeType.Local, 375 debug.ScopeType.Local,
376 debug.ScopeType.Script,
367 debug.ScopeType.Global], exec_state); 377 debug.ScopeType.Global], exec_state);
368 CheckScopeContent({x:'y'}, 0, exec_state); 378 CheckScopeContent({x:'y'}, 0, exec_state);
369 // The function scope contains a temporary iteration variable, but it is 379 // The function scope contains a temporary iteration variable, but it is
370 // hidden to the debugger. 380 // hidden to the debugger.
371 CheckScopeContent({}, 1, exec_state); 381 CheckScopeContent({}, 1, exec_state);
372 }; 382 };
373 for_loop_1(); 383 for_loop_1();
374 EndTest(); 384 EndTest();
375 385
376 386
377 // For-in loop over the keys of an object with a block scoped let variable 387 // For-in loop over the keys of an object with a block scoped let variable
378 // shadowing the iteration variable. 388 // shadowing the iteration variable.
379 BeginTest("For loop 2"); 389 BeginTest("For loop 2");
380 390
381 function for_loop_2() { 391 function for_loop_2() {
382 for (let x in {y:undefined}) { 392 for (let x in {y:undefined}) {
383 let x = 3; 393 let x = 3;
384 debugger; 394 debugger;
385 } 395 }
386 } 396 }
387 397
388 listener_delegate = function(exec_state) { 398 listener_delegate = function(exec_state) {
389 CheckScopeChain([debug.ScopeType.Block, 399 CheckScopeChain([debug.ScopeType.Block,
390 debug.ScopeType.Block, 400 debug.ScopeType.Block,
391 debug.ScopeType.Local, 401 debug.ScopeType.Local,
402 debug.ScopeType.Script,
392 debug.ScopeType.Global], exec_state); 403 debug.ScopeType.Global], exec_state);
393 CheckScopeContent({x:3}, 0, exec_state); 404 CheckScopeContent({x:3}, 0, exec_state);
394 CheckScopeContent({x:'y'}, 1, exec_state); 405 CheckScopeContent({x:'y'}, 1, exec_state);
395 // The function scope contains a temporary iteration variable, hidden to the 406 // The function scope contains a temporary iteration variable, hidden to the
396 // debugger. 407 // debugger.
397 CheckScopeContent({}, 2, exec_state); 408 CheckScopeContent({}, 2, exec_state);
398 }; 409 };
399 for_loop_2(); 410 for_loop_2();
400 EndTest(); 411 EndTest();
401 412
402 413
403 // Simple for loop. 414 // Simple for loop.
404 BeginTest("For loop 3"); 415 BeginTest("For loop 3");
405 416
406 function for_loop_3() { 417 function for_loop_3() {
407 for (let x = 3; x < 4; ++x) { 418 for (let x = 3; x < 4; ++x) {
408 debugger; 419 debugger;
409 } 420 }
410 } 421 }
411 422
412 listener_delegate = function(exec_state) { 423 listener_delegate = function(exec_state) {
413 CheckScopeChain([debug.ScopeType.Block, 424 CheckScopeChain([debug.ScopeType.Block,
414 debug.ScopeType.Block, 425 debug.ScopeType.Block,
415 debug.ScopeType.Local, 426 debug.ScopeType.Local,
427 debug.ScopeType.Script,
416 debug.ScopeType.Global], exec_state); 428 debug.ScopeType.Global], exec_state);
417 CheckScopeContent({x:3}, 0, exec_state); 429 CheckScopeContent({x:3}, 0, exec_state);
418 CheckScopeContent({x:3}, 1, exec_state); 430 CheckScopeContent({x:3}, 1, exec_state);
419 CheckScopeContent({}, 2, exec_state); 431 CheckScopeContent({}, 2, exec_state);
420 }; 432 };
421 for_loop_3(); 433 for_loop_3();
422 EndTest(); 434 EndTest();
423 435
424 436
425 // For loop with a block scoped let variable shadowing the iteration variable. 437 // For loop with a block scoped let variable shadowing the iteration variable.
426 BeginTest("For loop 4"); 438 BeginTest("For loop 4");
427 439
428 function for_loop_4() { 440 function for_loop_4() {
429 for (let x = 3; x < 4; ++x) { 441 for (let x = 3; x < 4; ++x) {
430 let x = 5; 442 let x = 5;
431 debugger; 443 debugger;
432 } 444 }
433 } 445 }
434 446
435 listener_delegate = function(exec_state) { 447 listener_delegate = function(exec_state) {
436 CheckScopeChain([debug.ScopeType.Block, 448 CheckScopeChain([debug.ScopeType.Block,
437 debug.ScopeType.Block, 449 debug.ScopeType.Block,
438 debug.ScopeType.Block, 450 debug.ScopeType.Block,
439 debug.ScopeType.Local, 451 debug.ScopeType.Local,
452 debug.ScopeType.Script,
440 debug.ScopeType.Global], exec_state); 453 debug.ScopeType.Global], exec_state);
441 CheckScopeContent({x:5}, 0, exec_state); 454 CheckScopeContent({x:5}, 0, exec_state);
442 CheckScopeContent({x:3}, 1, exec_state); 455 CheckScopeContent({x:3}, 1, exec_state);
443 CheckScopeContent({x:3}, 2, exec_state); 456 CheckScopeContent({x:3}, 2, exec_state);
444 CheckScopeContent({}, 3, exec_state); 457 CheckScopeContent({}, 3, exec_state);
445 }; 458 };
446 for_loop_4(); 459 for_loop_4();
447 EndTest(); 460 EndTest();
448 461
449 462
450 // For loop with two variable declarations. 463 // For loop with two variable declarations.
451 BeginTest("For loop 5"); 464 BeginTest("For loop 5");
452 465
453 function for_loop_5() { 466 function for_loop_5() {
454 for (let x = 3, y = 5; x < 4; ++x) { 467 for (let x = 3, y = 5; x < 4; ++x) {
455 debugger; 468 debugger;
456 } 469 }
457 } 470 }
458 471
459 listener_delegate = function(exec_state) { 472 listener_delegate = function(exec_state) {
460 CheckScopeChain([debug.ScopeType.Block, 473 CheckScopeChain([debug.ScopeType.Block,
461 debug.ScopeType.Block, 474 debug.ScopeType.Block,
462 debug.ScopeType.Local, 475 debug.ScopeType.Local,
476 debug.ScopeType.Script,
463 debug.ScopeType.Global], exec_state); 477 debug.ScopeType.Global], exec_state);
464 CheckScopeContent({x:3,y:5}, 0, exec_state); 478 CheckScopeContent({x:3,y:5}, 0, exec_state);
465 CheckScopeContent({x:3,y:5}, 1, exec_state); 479 CheckScopeContent({x:3,y:5}, 1, exec_state);
466 CheckScopeContent({}, 2, exec_state); 480 CheckScopeContent({}, 2, exec_state);
467 }; 481 };
468 for_loop_5(); 482 for_loop_5();
469 EndTest(); 483 EndTest();
OLDNEW
« no previous file with comments | « test/mjsunit/es6/generators-debug-scopes.js ('k') | test/mjsunit/harmony/debug-function-scopes.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698