blob: 28ec01dbad5bff921a61dcd5714e58c63e19e605 [file] [log] [blame]
Ben Murdochc5610432016-08-08 18:44:38 +01001// 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// Flags: --expose-debug-as debug
6
7Debug = debug.Debug
8
9function BestEditor() {
10 throw 'Emacs';
11}
12
13var exception = null;
14var results = [];
15var log = []
16
17function listener(event, exec_state, event_data, data) {
18 if (event != Debug.DebugEvent.Exception) return;
19 try {
20 var source_line = event_data.sourceLineText();
21 print(source_line);
22 log.push(source_line);
23 switch (results.length) {
24 case 0:
25 Replace(BestEditor, "Emacs", "Eclipse");
26 break;
27 case 1:
28 Replace(BestEditor, "Eclipse", "Vim");
29 break;
30 case 2:
31 break;
32 default:
33 assertUnreachable();
34 }
35 } catch (e) {
36 exception = e;
37 }
38};
39
40function Replace(fun, original, patch) {
41 var script = Debug.findScript(fun);
42 if (fun.toString().indexOf(original) < 0) return;
43 var patch_pos = script.source.indexOf(original);
44 var change_log = [];
45 Debug.LiveEdit.TestApi.ApplySingleChunkPatch(script, patch_pos, original.length, patch, change_log);
46}
47
48Debug.setListener(listener);
49Debug.setBreakOnException();
50
51for (var i = 0; i < 3; i++) {
52 try {
53 BestEditor();
54 } catch (e) {
55 results.push(e);
56 }
57}
58Debug.setListener(null);
59
60assertNull(exception);
61assertEquals(["Emacs", "Eclipse", "Vim"], results);
62print(JSON.stringify(log, 1));
63assertEquals([
64 " throw 'Emacs';",
65 " throw 'Eclipse';",
66 " throw 'Vim';",
67], log);