blob: c6070ce284a82293450ddf2a402814c0312a522d [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2015 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
6
7Debug = debug.Debug
8
9function BestEditor() {
Ben Murdochc5610432016-08-08 18:44:38 +010010 return 'Emacs';
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000011}
12
13var exception = null;
14var results = [];
15var log = []
16
17function listener(event, exec_state, event_data, data) {
18 if (event != Debug.DebugEvent.Break) return;
19 try {
20 var source_line = event_data.sourceLineText();
21 log.push(source_line);
22 if (source_line.indexOf("return") >= 0) {
23 switch (results.length) {
24 case 0:
25 break;
26 case 1:
27 Replace(BestEditor, "Emacs", "Eclipse");
28 break;
29 case 2:
30 Replace(BestEditor, "Eclipse", "Vim");
31 break;
32 default:
33 assertUnreachable();
34 }
35 }
36 exec_state.prepareStep(Debug.StepAction.StepIn);
37 } catch (e) {
38 exception = e;
39 }
40};
41
42function Replace(fun, original, patch) {
43 var script = Debug.findScript(fun);
44 if (fun.toString().indexOf(original) < 0) return;
45 var patch_pos = script.source.indexOf(original);
46 var change_log = [];
47 Debug.LiveEdit.TestApi.ApplySingleChunkPatch(script, patch_pos, original.length, patch, change_log);
48}
49
50Debug.setListener(listener);
51
52debugger;
53results.push(BestEditor());
54results.push(BestEditor());
55results.push(BestEditor());
56Debug.setListener(null);
57
58assertNull(exception);
59assertEquals(["Emacs", "Eclipse", "Vim"], results);
60print(JSON.stringify(log, 1));
61assertEquals([
62 "debugger;",
63 "results.push(BestEditor());",
Ben Murdochc5610432016-08-08 18:44:38 +010064 " return 'Emacs';","}",
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000065 "results.push(BestEditor());",
66 "results.push(BestEditor());",
Ben Murdochc5610432016-08-08 18:44:38 +010067 " return 'Emacs';",
68 " return 'Eclipse';","}",
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000069 "results.push(BestEditor());",
70 "results.push(BestEditor());",
Ben Murdochc5610432016-08-08 18:44:38 +010071 " return 'Eclipse';",
72 " return 'Vim';",
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000073 "}","results.push(BestEditor());",
74 "Debug.setListener(null);"
75], log);