OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 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 25 matching lines...) Expand all Loading... |
36 try { | 36 try { |
37 return eval('(' + code + ')'); | 37 return eval('(' + code + ')'); |
38 } catch (e) { | 38 } catch (e) { |
39 assertEquals(void 0, e); | 39 assertEquals(void 0, e); |
40 return undefined; | 40 return undefined; |
41 } | 41 } |
42 } | 42 } |
43 | 43 |
44 | 44 |
45 // Send an evaluation request and return the handle of the result. | 45 // Send an evaluation request and return the handle of the result. |
46 function evaluateRequest(dcp, arguments) { | 46 function evaluateRequest(exec_state, arguments) { |
| 47 // Get the debug command processor. |
| 48 var dcp = exec_state.debugCommandProcessor("unspecified_running_state"); |
| 49 |
47 // The base part of all evaluate requests. | 50 // The base part of all evaluate requests. |
48 var base_request = '"seq":0,"type":"request","command":"evaluate"' | 51 var base_request = '"seq":0,"type":"request","command":"evaluate"' |
49 | 52 |
50 // Generate request with the supplied arguments. | 53 // Generate request with the supplied arguments. |
51 var request; | 54 var request; |
52 if (arguments) { | 55 if (arguments) { |
53 request = '{' + base_request + ',"arguments":' + arguments + '}'; | 56 request = '{' + base_request + ',"arguments":' + arguments + '}'; |
54 } else { | 57 } else { |
55 request = '{' + base_request + '}' | 58 request = '{' + base_request + '}' |
56 } | 59 } |
57 | 60 |
58 var response = safeEval(dcp.processDebugJSONRequest(request)); | 61 var response = safeEval(dcp.processDebugJSONRequest(request)); |
59 assertTrue(response.success, request + ' -> ' + response.message); | 62 assertTrue(response.success, request + ' -> ' + response.message); |
60 | 63 |
61 return response.body.handle; | 64 return response.body.handle; |
62 } | 65 } |
63 | 66 |
64 | 67 |
65 // Send a lookup request and return the evaluated JSON response. | 68 // Send a lookup request and return the evaluated JSON response. |
66 function lookupRequest(dcp, arguments, success) { | 69 function lookupRequest(exec_state, arguments, success) { |
| 70 // Get the debug command processor. |
| 71 var dcp = exec_state.debugCommandProcessor("unspecified_running_state"); |
| 72 |
67 // The base part of all lookup requests. | 73 // The base part of all lookup requests. |
68 var base_request = '"seq":0,"type":"request","command":"lookup"' | 74 var base_request = '"seq":0,"type":"request","command":"lookup"' |
69 | 75 |
70 // Generate request with the supplied arguments. | 76 // Generate request with the supplied arguments. |
71 var request; | 77 var request; |
72 if (arguments) { | 78 if (arguments) { |
73 request = '{' + base_request + ',"arguments":' + arguments + '}'; | 79 request = '{' + base_request + ',"arguments":' + arguments + '}'; |
74 } else { | 80 } else { |
75 request = '{' + base_request + '}' | 81 request = '{' + base_request + '}' |
76 } | 82 } |
77 | 83 |
78 var response = safeEval(dcp.processDebugJSONRequest(request)); | 84 var response = safeEval(dcp.processDebugJSONRequest(request)); |
79 if (success) { | 85 if (success) { |
80 assertTrue(response.success, request + ' -> ' + response.message); | 86 assertTrue(response.success, request + ' -> ' + response.message); |
81 } else { | 87 } else { |
82 assertFalse(response.success, request + ' -> ' + response.message); | 88 assertFalse(response.success, request + ' -> ' + response.message); |
83 } | 89 } |
84 assertFalse(response.running, request + ' -> expected not running'); | 90 assertEquals(response.running, dcp.isRunning(), request + ' -> expected not ru
nning'); |
85 | 91 |
86 return response; | 92 return response; |
87 } | 93 } |
88 | 94 |
89 | 95 |
90 function listener(event, exec_state, event_data, data) { | 96 function listener(event, exec_state, event_data, data) { |
91 try { | 97 try { |
92 if (event == Debug.DebugEvent.Break) { | 98 if (event == Debug.DebugEvent.Break) { |
93 // Get the debug command processor. | |
94 var dcp = exec_state.debugCommandProcessor(); | |
95 | |
96 // Test some illegal lookup requests. | 99 // Test some illegal lookup requests. |
97 lookupRequest(dcp, void 0, false); | 100 lookupRequest(exec_state, void 0, false); |
98 lookupRequest(dcp, '{"handles":["a"]}', false); | 101 lookupRequest(exec_state, '{"handles":["a"]}', false); |
99 lookupRequest(dcp, '{"handles":[-1]}', false); | 102 lookupRequest(exec_state, '{"handles":[-1]}', false); |
100 | 103 |
101 // Evaluate and get some handles. | 104 // Evaluate and get some handles. |
102 var handle_o = evaluateRequest(dcp, '{"expression":"o"}'); | 105 var handle_o = evaluateRequest(exec_state, '{"expression":"o"}'); |
103 var handle_p = evaluateRequest(dcp, '{"expression":"p"}'); | 106 var handle_p = evaluateRequest(exec_state, '{"expression":"p"}'); |
104 var handle_b = evaluateRequest(dcp, '{"expression":"a"}'); | 107 var handle_b = evaluateRequest(exec_state, '{"expression":"a"}'); |
105 var handle_a = evaluateRequest(dcp, '{"expression":"b","frame":1}'); | 108 var handle_a = evaluateRequest(exec_state, '{"expression":"b","frame":1}'); |
106 assertEquals(handle_o, handle_a); | 109 assertEquals(handle_o, handle_a); |
107 assertEquals(handle_a, handle_b); | 110 assertEquals(handle_a, handle_b); |
108 assertFalse(handle_o == handle_p, "o and p have he same handle"); | 111 assertFalse(handle_o == handle_p, "o and p have he same handle"); |
109 | 112 |
110 var response; | 113 var response; |
111 var count; | 114 var count; |
112 response = lookupRequest(dcp, '{"handles":[' + handle_o + ']}', true); | 115 response = lookupRequest(exec_state, '{"handles":[' + handle_o + ']}', true)
; |
113 var obj = response.body[handle_o]; | 116 var obj = response.body[handle_o]; |
114 assertTrue(!!obj, 'Object not found: ' + handle_o); | 117 assertTrue(!!obj, 'Object not found: ' + handle_o); |
115 assertEquals(handle_o, obj.handle); | 118 assertEquals(handle_o, obj.handle); |
116 count = 0; | 119 count = 0; |
117 for (i in obj.properties) { | 120 for (i in obj.properties) { |
118 switch (obj.properties[i].name) { | 121 switch (obj.properties[i].name) { |
119 case 'o': | 122 case 'o': |
120 obj.properties[i].ref = handle_o; | 123 obj.properties[i].ref = handle_o; |
121 count++; | 124 count++; |
122 break; | 125 break; |
123 case 'p': | 126 case 'p': |
124 obj.properties[i].ref = handle_p; | 127 obj.properties[i].ref = handle_p; |
125 count++; | 128 count++; |
126 break; | 129 break; |
127 } | 130 } |
128 } | 131 } |
129 assertEquals(2, count, 'Either "o" or "p" not found'); | 132 assertEquals(2, count, 'Either "o" or "p" not found'); |
130 response = lookupRequest(dcp, '{"handles":[' + handle_p + ']}', true); | 133 response = lookupRequest(exec_state, '{"handles":[' + handle_p + ']}', true)
; |
131 obj = response.body[handle_p]; | 134 obj = response.body[handle_p]; |
132 assertTrue(!!obj, 'Object not found: ' + handle_p); | 135 assertTrue(!!obj, 'Object not found: ' + handle_p); |
133 assertEquals(handle_p, obj.handle); | 136 assertEquals(handle_p, obj.handle); |
134 | 137 |
135 // Check handles for functions on the stack. | 138 // Check handles for functions on the stack. |
136 var handle_f = evaluateRequest(dcp, '{"expression":"f"}'); | 139 var handle_f = evaluateRequest(exec_state, '{"expression":"f"}'); |
137 var handle_g = evaluateRequest(dcp, '{"expression":"g"}'); | 140 var handle_g = evaluateRequest(exec_state, '{"expression":"g"}'); |
138 var handle_caller = evaluateRequest(dcp, '{"expression":"f.caller"}'); | 141 var handle_caller = evaluateRequest(exec_state, '{"expression":"f.caller"}')
; |
139 | 142 |
140 assertFalse(handle_f == handle_g, "f and g have he same handle"); | 143 assertFalse(handle_f == handle_g, "f and g have he same handle"); |
141 assertEquals(handle_g, handle_caller, "caller for f should be g"); | 144 assertEquals(handle_g, handle_caller, "caller for f should be g"); |
142 | 145 |
143 response = lookupRequest(dcp, '{"handles":[' + handle_f + ']}', true); | 146 response = lookupRequest(exec_state, '{"handles":[' + handle_f + ']}', true)
; |
144 obj = response.body[handle_f]; | 147 obj = response.body[handle_f]; |
145 assertEquals(handle_f, obj.handle); | 148 assertEquals(handle_f, obj.handle); |
146 | 149 |
147 count = 0; | 150 count = 0; |
148 for (i in obj.properties) { | 151 for (i in obj.properties) { |
149 var ref = obj.properties[i].ref; | 152 var ref = obj.properties[i].ref; |
150 var arguments = '{"handles":[' + ref + ']}'; | 153 var arguments = '{"handles":[' + ref + ']}'; |
151 switch (obj.properties[i].name) { | 154 switch (obj.properties[i].name) { |
152 case 'name': | 155 case 'name': |
153 var response_name; | 156 var response_name; |
154 response_name = lookupRequest(dcp, arguments, true); | 157 response_name = lookupRequest(exec_state, arguments, true); |
155 assertEquals('string', response_name.body[ref].type); | 158 assertEquals('string', response_name.body[ref].type); |
156 assertEquals("f", response_name.body[ref].value); | 159 assertEquals("f", response_name.body[ref].value); |
157 count++; | 160 count++; |
158 break; | 161 break; |
159 case 'length': | 162 case 'length': |
160 var response_length; | 163 var response_length; |
161 response_length = lookupRequest(dcp, arguments, true); | 164 response_length = lookupRequest(exec_state, arguments, true); |
162 assertEquals('number', response_length.body[ref].type); | 165 assertEquals('number', response_length.body[ref].type); |
163 assertEquals(1, response_length.body[ref].value); | 166 assertEquals(1, response_length.body[ref].value); |
164 count++; | 167 count++; |
165 break; | 168 break; |
166 case 'caller': | 169 case 'caller': |
167 assertEquals(handle_g, obj.properties[i].ref); | 170 assertEquals(handle_g, obj.properties[i].ref); |
168 count++; | 171 count++; |
169 break; | 172 break; |
170 } | 173 } |
171 } | 174 } |
172 assertEquals(3, count, 'Either "name", "length" or "caller" not found'); | 175 assertEquals(3, count, 'Either "name", "length" or "caller" not found'); |
173 | 176 |
174 | 177 |
175 // Resolve all at once. | 178 // Resolve all at once. |
176 var refs = []; | 179 var refs = []; |
177 for (i in obj.properties) { | 180 for (i in obj.properties) { |
178 refs.push(obj.properties[i].ref); | 181 refs.push(obj.properties[i].ref); |
179 } | 182 } |
180 | 183 |
181 var arguments = '{"handles":[' + refs.join(',') + ']}'; | 184 var arguments = '{"handles":[' + refs.join(',') + ']}'; |
182 response = lookupRequest(dcp, arguments, true); | 185 response = lookupRequest(exec_state, arguments, true); |
183 count = 0; | 186 count = 0; |
184 for (i in obj.properties) { | 187 for (i in obj.properties) { |
185 var ref = obj.properties[i].ref; | 188 var ref = obj.properties[i].ref; |
186 var val = response.body[ref]; | 189 var val = response.body[ref]; |
187 assertTrue(!!val, 'Failed to lookup "' + obj.properties[i].name + '"'); | 190 assertTrue(!!val, 'Failed to lookup "' + obj.properties[i].name + '"'); |
188 switch (obj.properties[i].name) { | 191 switch (obj.properties[i].name) { |
189 case 'name': | 192 case 'name': |
190 assertEquals('string', val.type); | 193 assertEquals('string', val.type); |
191 assertEquals("f", val.value); | 194 assertEquals("f", val.value); |
192 count++; | 195 count++; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 // Set a break point at return in f and invoke g to hit the breakpoint. | 240 // Set a break point at return in f and invoke g to hit the breakpoint. |
238 Debug.setBreakPoint(f, 2, 0); | 241 Debug.setBreakPoint(f, 2, 0); |
239 o = {}; | 242 o = {}; |
240 p = {} | 243 p = {} |
241 o.o = o; | 244 o.o = o; |
242 o.p = p; | 245 o.p = p; |
243 p.o = o; | 246 p.o = o; |
244 p.p = p; | 247 p.p = p; |
245 g(o); | 248 g(o); |
246 | 249 |
| 250 assertFalse(exception, "exception in listener") |
247 // Make sure that the debug event listener vas invoked. | 251 // Make sure that the debug event listener vas invoked. |
248 assertTrue(listenerComplete, "listener did not run to completion: " + exception)
; | 252 assertTrue(listenerComplete, "listener did not run to completion: " + exception)
; |
249 assertFalse(exception, "exception in listener") | |
OLD | NEW |