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

Side by Side Diff: test/debugger/test-api.js

Issue 2447073007: [debugger] Various break-related functionality in test wrapper (Closed)
Patch Set: Port further tests, wrap listener invocation, add --allow-natives-syntax to test-runner default fla… 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
« no previous file with comments | « test/debugger/debugger/debug-step-4.js ('k') | test/debugger/testcfg.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // If true, prints all messages sent and received by inspector. 5 // If true, prints all messages sent and received by inspector.
6 const printProtocolMessages = false; 6 const printProtocolMessages = false;
7 7
8 // The active wrapper instance. 8 // The active wrapper instance.
9 let activeWrapper = undefined; 9 let activeWrapper = undefined;
10 10
(...skipping 15 matching lines...) Expand all
26 class DebugWrapper { 26 class DebugWrapper {
27 constructor() { 27 constructor() {
28 // Message dictionary storing {id, message} pairs. 28 // Message dictionary storing {id, message} pairs.
29 this.receivedMessages = {}; 29 this.receivedMessages = {};
30 30
31 // Each message dispatched by the Debug wrapper is assigned a unique number 31 // Each message dispatched by the Debug wrapper is assigned a unique number
32 // using nextMessageId. 32 // using nextMessageId.
33 this.nextMessageId = 0; 33 this.nextMessageId = 0;
34 34
35 // The listener method called on certain events. 35 // The listener method called on certain events.
36 this.listener = () => undefined; 36 this.listener = undefined;
37 37
38 // Register as the active wrapper. 38 // Register as the active wrapper.
39 assertTrue(activeWrapper === undefined); 39 assertTrue(activeWrapper === undefined);
40 activeWrapper = this; 40 activeWrapper = this;
41 } 41 }
42 42
43 enable() { 43 enable() { this.sendMessageForMethodChecked("Debugger.enable"); }
44 const {msgid, msg} = this.createMessage("Debugger.enable"); 44 disable() { this.sendMessageForMethodChecked("Debugger.disable"); }
45
46 setListener(listener) { this.listener = listener; }
47
48 stepOver() { this.sendMessageForMethodChecked("Debugger.stepOver"); }
49 stepInto() { this.sendMessageForMethodChecked("Debugger.stepInto"); }
50 stepOut() { this.sendMessageForMethodChecked("Debugger.stepOut"); }
51
52 // Returns the resulting breakpoint id.
53 setBreakPoint(func, opt_line, opt_column, opt_condition) {
54 assertTrue(%IsFunction(func));
55 assertFalse(%FunctionIsAPIFunction(func));
56
57 // TODO(jgruber): We handle only script breakpoints for now.
58 // TODO(jgruber): Handle conditions.
59
60 const script = %FunctionGetScript(func);
61 assertTrue(!!script.id);
Yang 2016/10/28 05:51:06 This still relies on the script wrapper object, wh
jgruber 2016/10/28 07:36:27 Done.
62
63 const offset = %FunctionGetScriptSourcePosition(func);
64 const loc = %ScriptLocationFromLine(script, opt_line, opt_column, offset);
65
66 const {msgid, msg} = this.createMessage(
67 "Debugger.setBreakpoint",
68 { location : { scriptId : script.id.toString()
69 , lineNumber : loc.line
70 , columnNumber : loc.column
71 }
72 });
73 this.sendMessage(msg);
74
75 const reply = this.receivedMessages[msgid];
76 const breakid = reply.result.breakpointId;
77 assertTrue(breakid !== undefined);
78
79 return breakid;
80 }
81
82 clearBreakPoint(breakid) {
83 const {msgid, msg} = this.createMessage(
84 "Debugger.removeBreakpoint", { breakpointId : breakid });
45 this.sendMessage(msg); 85 this.sendMessage(msg);
46 assertTrue(this.receivedMessages[msgid] !== undefined); 86 assertTrue(this.receivedMessages[msgid] !== undefined);
47 } 87 }
48 88
49 disable() { 89 // Returns the serialized result of the given expression. For example:
50 const {msgid, msg} = this.createMessage("Debugger.disable"); 90 // {"type":"number", "value":33, "description":"33"}.
91 evaluate(frameid, expression) {
92 const {msgid, msg} = this.createMessage(
93 "Debugger.evaluateOnCallFrame",
94 { callFrameId : frameid
95 , expression : expression
96 });
51 this.sendMessage(msg); 97 this.sendMessage(msg);
52 assertTrue(this.receivedMessages[msgid] !== undefined);
53 }
54 98
55 setListener(listener) { 99 const reply = this.receivedMessages[msgid];
56 this.listener = listener; 100 return reply.result.result;
57 } 101 }
58 102
59 // --- Internal methods. ----------------------------------------------------- 103 // --- Internal methods. -----------------------------------------------------
60 104
61 getNextMessageId() { 105 getNextMessageId() {
62 return this.nextMessageId++; 106 return this.nextMessageId++;
63 } 107 }
64 108
65 createMessage(method, params) { 109 createMessage(method, params) {
66 const id = this.getNextMessageId(); 110 const id = this.getNextMessageId();
(...skipping 14 matching lines...) Expand all
81 } 125 }
82 126
83 this.dispatchMessage(parsedMessage); 127 this.dispatchMessage(parsedMessage);
84 } 128 }
85 129
86 sendMessage(message) { 130 sendMessage(message) {
87 if (printProtocolMessages) print(message); 131 if (printProtocolMessages) print(message);
88 send(message); 132 send(message);
89 } 133 }
90 134
135 sendMessageForMethodChecked(method) {
136 const {msgid, msg} = this.createMessage(method);
137 this.sendMessage(msg);
138 assertTrue(this.receivedMessages[msgid] !== undefined);
139 }
140
91 // --- Message handlers. ----------------------------------------------------- 141 // --- Message handlers. -----------------------------------------------------
92 142
93 dispatchMessage(message) { 143 dispatchMessage(message) {
94 const method = message.method; 144 const method = message.method;
95 if (method == "Debugger.scriptParsed") { 145 if (method == "Debugger.paused") {
146 this.handleDebuggerPaused(message);
147 } else if (method == "Debugger.scriptParsed") {
96 this.handleDebuggerScriptParsed(message); 148 this.handleDebuggerScriptParsed(message);
97 } 149 }
98 } 150 }
99 151
152 handleDebuggerPaused(message) {
153 const params = message.params;
154
155 // TODO(jgruber): Arguments as needed.
156 let execState = { frames: params.callFrames };
157 this.invokeListener(DebugEvent.Break, execState);
158 }
159
100 handleDebuggerScriptParsed(message) { 160 handleDebuggerScriptParsed(message) {
101 const params = message.params; 161 const params = message.params;
102 let eventData = { scriptId : params.scriptId 162 let eventData = { scriptId : params.scriptId
103 , eventType : DebugEvent.AfterCompile 163 , eventType : DebugEvent.AfterCompile
104 } 164 }
105 165
106 // TODO(jgruber): Arguments as needed. Still completely missing exec_state, 166 // TODO(jgruber): Arguments as needed. Still completely missing exec_state,
107 // and eventData used to contain the script mirror instead of its id. 167 // and eventData used to contain the script mirror instead of its id.
108 this.listener(DebugEvent.AfterCompile, undefined, eventData, undefined); 168 this.invokeListener(DebugEvent.AfterCompile, undefined, eventData,
169 undefined);
170 }
171
172 invokeListener(event, exec_state, event_data, data) {
173 if (this.listener) {
174 this.listener(event, exec_state, event_data, data);
175 }
109 } 176 }
110 } 177 }
OLDNEW
« no previous file with comments | « test/debugger/debugger/debug-step-4.js ('k') | test/debugger/testcfg.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698