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

Side by Side Diff: test/mjsunit/es6/generators-debug-liveedit.js

Issue 2503293002: [debug-wrapper] LiveEdit, frame.restart(), breakpoints (Closed)
Patch Set: Address comments Created 4 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
(Empty)
1 // Copyright 2014 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 // Flags: --expose-debug-as debug --allow-natives-syntax
6
7 var Debug = debug.Debug;
8 var LiveEdit = Debug.LiveEdit;
9
10 unique_id = 0;
11
12 var Generator = (function*(){}).constructor;
13
14 function assertIteratorResult(value, done, result) {
15 assertEquals({value: value, done: done}, result);
16 }
17
18 function MakeGenerator() {
19 // Prevents eval script caching.
20 unique_id++;
21 return Generator('callback',
22 "/* " + unique_id + "*/\n" +
23 "yield callback();\n" +
24 "return 'Cat';\n");
25 }
26
27 function MakeFunction() {
28 // Prevents eval script caching.
29 unique_id++;
30 return Function('callback',
31 "/* " + unique_id + "*/\n" +
32 "callback();\n" +
33 "return 'Cat';\n");
34 }
35
36 // First, try MakeGenerator with no perturbations.
37 (function(){
38 var generator = MakeGenerator();
39 function callback() {};
40 var iter = generator(callback);
41 assertIteratorResult(undefined, false, iter.next());
42 assertIteratorResult("Cat", true, iter.next());
43 })();
44
45 function patch(fun, from, to) {
46 function debug() {
47 var log = new Array();
48 var script = Debug.findScript(fun);
49 var pos = script.source.indexOf(from);
50 try {
51 LiveEdit.TestApi.ApplySingleChunkPatch(script, pos, from.length, to,
52 log);
53 } finally {
54 print("Change log: " + JSON.stringify(log) + "\n");
55 }
56 }
57 %ExecuteInDebugContext(debug);
58 }
59
60 // Try to edit a MakeGenerator while it's running, then again while it's
61 // stopped.
62 (function(){
63 var generator = MakeGenerator();
64
65 var gen_patch_attempted = false;
66 function attempt_gen_patch() {
67 assertFalse(gen_patch_attempted);
68 gen_patch_attempted = true;
69 assertThrows(function() { patch(generator, "'Cat'", "'Capybara'") },
70 LiveEdit.Failure);
71 };
72 var iter = generator(attempt_gen_patch);
73 assertIteratorResult(undefined, false, iter.next());
74 // Patch should not succeed because there is a live generator activation on
75 // the stack.
76 assertIteratorResult("Cat", true, iter.next());
77 assertTrue(gen_patch_attempted);
78
79 // At this point one iterator is live, but closed, so the patch will succeed.
80 patch(generator, "'Cat'", "'Capybara'");
81 iter = generator(function(){});
82 assertIteratorResult(undefined, false, iter.next());
83 // Patch successful.
84 assertIteratorResult("Capybara", true, iter.next());
85
86 // Patching will fail however when a live iterator is suspended.
87 iter = generator(function(){});
88 assertIteratorResult(undefined, false, iter.next());
89 assertThrows(function() { patch(generator, "'Capybara'", "'Tapir'") },
90 LiveEdit.Failure);
91 assertIteratorResult("Capybara", true, iter.next());
92
93 // Try to patch functions with activations inside and outside generator
94 // function activations. We should succeed in the former case, but not in the
95 // latter.
96 var fun_outside = MakeFunction();
97 var fun_inside = MakeFunction();
98 var fun_patch_attempted = false;
99 var fun_patch_restarted = false;
100 function attempt_fun_patches() {
101 if (fun_patch_attempted) {
102 assertFalse(fun_patch_restarted);
103 fun_patch_restarted = true;
104 return;
105 }
106 fun_patch_attempted = true;
107 // Patching outside a generator activation must fail.
108 assertThrows(function() { patch(fun_outside, "'Cat'", "'Cobra'") },
109 LiveEdit.Failure);
110 // Patching inside a generator activation may succeed.
111 patch(fun_inside, "'Cat'", "'Koala'");
112 }
113 iter = generator(function() { return fun_inside(attempt_fun_patches) });
114 assertEquals('Cat',
115 fun_outside(function () {
116 assertIteratorResult('Koala', false, iter.next());
117 assertTrue(fun_patch_restarted);
118 }));
119 })();
OLDNEW
« no previous file with comments | « test/mjsunit/es6/debug-liveedit-new-target-3.js ('k') | test/mjsunit/harmony/debug-async-liveedit.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698