| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 | 88 |
| 89 | 89 |
| 90 function listener(event, exec_state, event_data, data) { | 90 function listener(event, exec_state, event_data, data) { |
| 91 try { | 91 try { |
| 92 if (event == Debug.DebugEvent.Break) { | 92 if (event == Debug.DebugEvent.Break) { |
| 93 // Get the debug command processor. | 93 // Get the debug command processor. |
| 94 var dcp = exec_state.debugCommandProcessor(); | 94 var dcp = exec_state.debugCommandProcessor(); |
| 95 | 95 |
| 96 // Test some illegal lookup requests. | 96 // Test some illegal lookup requests. |
| 97 lookupRequest(dcp, void 0, false); | 97 lookupRequest(dcp, void 0, false); |
| 98 lookupRequest(dcp, '{"handle":"a"}', false); | 98 lookupRequest(dcp, '{"handles":["a"]}', false); |
| 99 lookupRequest(dcp, '{"handle":-1}', false); | 99 lookupRequest(dcp, '{"handles":[-1]}', false); |
| 100 | 100 |
| 101 // Evaluate and get some handles. | 101 // Evaluate and get some handles. |
| 102 var handle_o = evaluateRequest(dcp, '{"expression":"o"}'); | 102 var handle_o = evaluateRequest(dcp, '{"expression":"o"}'); |
| 103 var handle_p = evaluateRequest(dcp, '{"expression":"p"}'); | 103 var handle_p = evaluateRequest(dcp, '{"expression":"p"}'); |
| 104 var handle_b = evaluateRequest(dcp, '{"expression":"a"}'); | 104 var handle_b = evaluateRequest(dcp, '{"expression":"a"}'); |
| 105 var handle_a = evaluateRequest(dcp, '{"expression":"b","frame":1}'); | 105 var handle_a = evaluateRequest(dcp, '{"expression":"b","frame":1}'); |
| 106 assertEquals(handle_o, handle_a); | 106 assertEquals(handle_o, handle_a); |
| 107 assertEquals(handle_a, handle_b); | 107 assertEquals(handle_a, handle_b); |
| 108 assertFalse(handle_o == handle_p, "o and p have he same handle"); | 108 assertFalse(handle_o == handle_p, "o and p have he same handle"); |
| 109 | 109 |
| 110 var response; | 110 var response; |
| 111 var count; | 111 var count; |
| 112 response = lookupRequest(dcp, '{"handle":' + handle_o + '}', true); | 112 response = lookupRequest(dcp, '{"handles":[' + handle_o + ']}', true); |
| 113 assertEquals(handle_o, response.body.handle); | 113 var obj = response.body[handle_o]; |
| 114 assertTrue(!!obj, 'Object not found: ' + handle_o); |
| 115 assertEquals(handle_o, obj.handle); |
| 114 count = 0; | 116 count = 0; |
| 115 for (i in response.body.properties) { | 117 for (i in obj.properties) { |
| 116 switch (response.body.properties[i].name) { | 118 switch (obj.properties[i].name) { |
| 117 case 'o': | 119 case 'o': |
| 118 response.body.properties[i].ref = handle_o; | 120 obj.properties[i].ref = handle_o; |
| 119 count++; | 121 count++; |
| 120 break; | 122 break; |
| 121 case 'p': | 123 case 'p': |
| 122 response.body.properties[i].ref = handle_p; | 124 obj.properties[i].ref = handle_p; |
| 123 count++; | 125 count++; |
| 124 break; | 126 break; |
| 125 } | 127 } |
| 126 } | 128 } |
| 127 assertEquals(2, count, 'Either "o" or "p" not found'); | 129 assertEquals(2, count, 'Either "o" or "p" not found'); |
| 128 response = lookupRequest(dcp, '{"handle":' + handle_p + '}', true); | 130 response = lookupRequest(dcp, '{"handles":[' + handle_p + ']}', true); |
| 129 assertEquals(handle_p, response.body.handle); | 131 obj = response.body[handle_p]; |
| 132 assertTrue(!!obj, 'Object not found: ' + handle_p); |
| 133 assertEquals(handle_p, obj.handle); |
| 130 | 134 |
| 131 // Check handles for functions on the stack. | 135 // Check handles for functions on the stack. |
| 132 var handle_f = evaluateRequest(dcp, '{"expression":"f"}'); | 136 var handle_f = evaluateRequest(dcp, '{"expression":"f"}'); |
| 133 var handle_g = evaluateRequest(dcp, '{"expression":"g"}'); | 137 var handle_g = evaluateRequest(dcp, '{"expression":"g"}'); |
| 134 var handle_caller = evaluateRequest(dcp, '{"expression":"f.caller"}'); | 138 var handle_caller = evaluateRequest(dcp, '{"expression":"f.caller"}'); |
| 135 | 139 |
| 136 assertFalse(handle_f == handle_g, "f and g have he same handle"); | 140 assertFalse(handle_f == handle_g, "f and g have he same handle"); |
| 137 assertEquals(handle_g, handle_caller, "caller for f should be g"); | 141 assertEquals(handle_g, handle_caller, "caller for f should be g"); |
| 138 | 142 |
| 139 response = lookupRequest(dcp, '{"handle":' + handle_f + '}', true); | 143 response = lookupRequest(dcp, '{"handles":[' + handle_f + ']}', true); |
| 140 assertEquals(handle_f, response.body.handle); | 144 obj = response.body[handle_f]; |
| 145 assertEquals(handle_f, obj.handle); |
| 146 |
| 141 count = 0; | 147 count = 0; |
| 142 for (i in response.body.properties) { | 148 for (i in obj.properties) { |
| 143 var arguments = '{"handle":' + response.body.properties[i].ref + '}' | 149 var ref = obj.properties[i].ref; |
| 144 switch (response.body.properties[i].name) { | 150 var arguments = '{"handles":[' + ref + ']}'; |
| 151 switch (obj.properties[i].name) { |
| 145 case 'name': | 152 case 'name': |
| 146 var response_name; | 153 var response_name; |
| 147 response_name = lookupRequest(dcp, arguments, true); | 154 response_name = lookupRequest(dcp, arguments, true); |
| 148 assertEquals('string', response_name.body.type); | 155 assertEquals('string', response_name.body[ref].type); |
| 149 assertEquals("f", response_name.body.value); | 156 assertEquals("f", response_name.body[ref].value); |
| 150 count++; | 157 count++; |
| 151 break; | 158 break; |
| 152 case 'length': | 159 case 'length': |
| 153 var response_length; | 160 var response_length; |
| 154 response_length = lookupRequest(dcp, arguments, true); | 161 response_length = lookupRequest(dcp, arguments, true); |
| 155 assertEquals('number', response_length.body.type); | 162 assertEquals('number', response_length.body[ref].type); |
| 156 assertEquals(1, response_length.body.value); | 163 assertEquals(1, response_length.body[ref].value); |
| 157 count++; | 164 count++; |
| 158 break; | 165 break; |
| 159 case 'caller': | 166 case 'caller': |
| 160 assertEquals(handle_g, response.body.properties[i].ref); | 167 assertEquals(handle_g, obj.properties[i].ref); |
| 161 count++; | 168 count++; |
| 162 break; | 169 break; |
| 163 } | 170 } |
| 164 } | 171 } |
| 165 assertEquals(3, count, 'Either "name", "length" or "caller" not found'); | 172 assertEquals(3, count, 'Either "name", "length" or "caller" not found'); |
| 166 | 173 |
| 167 | 174 |
| 175 // Resolve all at once. |
| 176 var refs = []; |
| 177 for (i in obj.properties) { |
| 178 refs.push(obj.properties[i].ref); |
| 179 } |
| 180 |
| 181 var arguments = '{"handles":[' + refs.join(',') + ']}'; |
| 182 response = lookupRequest(dcp, arguments, true); |
| 183 count = 0; |
| 184 for (i in obj.properties) { |
| 185 var ref = obj.properties[i].ref; |
| 186 var val = response.body[ref]; |
| 187 assertTrue(!!val, 'Failed to lookup "' + obj.properties[i].name + '"'); |
| 188 switch (obj.properties[i].name) { |
| 189 case 'name': |
| 190 assertEquals('string', val.type); |
| 191 assertEquals("f", val.value); |
| 192 count++; |
| 193 break; |
| 194 case 'length': |
| 195 assertEquals('number', val.type); |
| 196 assertEquals(1, val.value); |
| 197 count++; |
| 198 break; |
| 199 case 'caller': |
| 200 assertEquals('function', val.type); |
| 201 assertEquals(handle_g, ref); |
| 202 count++; |
| 203 break; |
| 204 } |
| 205 } |
| 206 assertEquals(3, count, 'Either "name", "length" or "caller" not found'); |
| 207 |
| 208 count = 0; |
| 209 for (var handle in response.body) { |
| 210 assertTrue(refs.indexOf(parseInt(handle)) != -1, |
| 211 'Handle not in the request: ' + handle); |
| 212 count++; |
| 213 } |
| 214 assertEquals(count, obj.properties.length, |
| 215 'Unexpected number of resolved objects'); |
| 216 |
| 217 |
| 168 // Indicate that all was processed. | 218 // Indicate that all was processed. |
| 169 listenerComplete = true; | 219 listenerComplete = true; |
| 170 } | 220 } |
| 171 } catch (e) { | 221 } catch (e) { |
| 172 exception = e | 222 exception = e |
| 173 }; | 223 }; |
| 174 }; | 224 }; |
| 175 | 225 |
| 176 // Add the debug event listener. | 226 // Add the debug event listener. |
| 177 Debug.setListener(listener); | 227 Debug.setListener(listener); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 188 Debug.setBreakPoint(f, 2, 0); | 238 Debug.setBreakPoint(f, 2, 0); |
| 189 o = {}; | 239 o = {}; |
| 190 p = {} | 240 p = {} |
| 191 o.o = o; | 241 o.o = o; |
| 192 o.p = p; | 242 o.p = p; |
| 193 p.o = o; | 243 p.o = o; |
| 194 p.p = p; | 244 p.p = p; |
| 195 g(o); | 245 g(o); |
| 196 | 246 |
| 197 // Make sure that the debug event listener vas invoked. | 247 // Make sure that the debug event listener vas invoked. |
| 198 assertTrue(listenerComplete, "listener did not run to completion"); | 248 assertTrue(listenerComplete, "listener did not run to completion: " + exception)
; |
| 199 assertFalse(exception, "exception in listener") | 249 assertFalse(exception, "exception in listener") |
| OLD | NEW |