Index: test/mjsunit/debug-backtrace.js |
=================================================================== |
--- test/mjsunit/debug-backtrace.js (revision 1079) |
+++ test/mjsunit/debug-backtrace.js (working copy) |
@@ -43,14 +43,33 @@ |
listenerCalled = false; |
exception = false; |
-function safeEval(code) { |
- try { |
- return eval('(' + code + ')'); |
- } catch (e) { |
- return undefined; |
+ |
+function ParsedResponse(json) { |
+ this.response_ = eval('(' + json + ')'); |
+ this.refs_ = []; |
+ if (this.response_.refs) { |
+ for (var i = 0; i < this.response_.refs.length; i++) { |
+ this.refs_[this.response_.refs[i].handle] = this.response_.refs[i]; |
+ } |
} |
} |
+ |
+ParsedResponse.prototype.response = function() { |
+ return this.response_; |
+} |
+ |
+ |
+ParsedResponse.prototype.body = function() { |
+ return this.response_.body; |
+} |
+ |
+ |
+ParsedResponse.prototype.lookup = function(handle) { |
+ return this.refs_[handle]; |
+} |
+ |
+ |
function listener(event, exec_state, event_data, data) { |
try { |
if (event == Debug.DebugEvent.Break) |
@@ -60,13 +79,19 @@ |
// 1: g |
// 2: [anonymous] |
+ var response; |
+ var backtrace; |
+ var frame; |
+ var source; |
+ |
// Get the debug command processor. |
var dcp = exec_state.debugCommandProcessor(); |
// Get the backtrace. |
var json; |
json = '{"seq":0,"type":"request","command":"backtrace"}' |
- var backtrace = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ backtrace = response.body(); |
assertEquals(0, backtrace.fromFrame); |
assertEquals(3, backtrace.toFrame); |
assertEquals(3, backtrace.totalFrames); |
@@ -76,15 +101,16 @@ |
assertEquals('frame', frames[i].type); |
} |
assertEquals(0, frames[0].index); |
- assertEquals("f", frames[0].func.name); |
+ assertEquals("f", response.lookup(frames[0].func.ref).name); |
assertEquals(1, frames[1].index); |
- assertEquals("g", frames[1].func.name); |
+ assertEquals("g", response.lookup(frames[1].func.ref).name); |
assertEquals(2, frames[2].index); |
- assertEquals("", frames[2].func.name); |
+ assertEquals("", response.lookup(frames[2].func.ref).name); |
// Get backtrace with two frames. |
json = '{"seq":0,"type":"request","command":"backtrace","arguments":{"fromFrame":1,"toFrame":3}}' |
- var backtrace = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ backtrace = response.body(); |
assertEquals(1, backtrace.fromFrame); |
assertEquals(3, backtrace.toFrame); |
assertEquals(3, backtrace.totalFrames); |
@@ -94,71 +120,77 @@ |
assertEquals('frame', frames[i].type); |
} |
assertEquals(1, frames[0].index); |
- assertEquals("g", frames[0].func.name); |
+ assertEquals("g", response.lookup(frames[0].func.ref).name); |
assertEquals(2, frames[1].index); |
- assertEquals("", frames[1].func.name); |
+ assertEquals("", response.lookup(frames[1].func.ref).name); |
// Get the individual frames. |
- var frame; |
json = '{"seq":0,"type":"request","command":"frame"}' |
- frame = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ frame = response.body(); |
assertEquals(0, frame.index); |
- assertEquals("f", frame.func.name); |
+ assertEquals("f", response.lookup(frame.func.ref).name); |
assertTrue(frame.constructCall); |
assertEquals(31, frame.line); |
assertEquals(3, frame.column); |
assertEquals(2, frame.arguments.length); |
assertEquals('x', frame.arguments[0].name); |
- assertEquals('number', frame.arguments[0].value.type); |
- assertEquals(1, frame.arguments[0].value.value); |
+ assertEquals('number', response.lookup(frame.arguments[0].value.ref).type); |
+ assertEquals(1, response.lookup(frame.arguments[0].value.ref).value); |
assertEquals('y', frame.arguments[1].name); |
- assertEquals('undefined', frame.arguments[1].value.type); |
+ assertEquals('undefined', response.lookup(frame.arguments[1].value.ref).type); |
json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":0}}' |
- frame = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ frame = response.body(); |
assertEquals(0, frame.index); |
- assertEquals("f", frame.func.name); |
+ assertEquals("f", response.lookup(frame.func.ref).name); |
assertEquals(31, frame.line); |
assertEquals(3, frame.column); |
assertEquals(2, frame.arguments.length); |
assertEquals('x', frame.arguments[0].name); |
- assertEquals('number', frame.arguments[0].value.type); |
- assertEquals(1, frame.arguments[0].value.value); |
+ assertEquals('number', response.lookup(frame.arguments[0].value.ref).type); |
+ assertEquals(1, response.lookup(frame.arguments[0].value.ref).value); |
assertEquals('y', frame.arguments[1].name); |
- assertEquals('undefined', frame.arguments[1].value.type); |
+ assertEquals('undefined', response.lookup(frame.arguments[1].value.ref).type); |
json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":1}}' |
- frame = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ frame = response.body(); |
assertEquals(1, frame.index); |
- assertEquals("g", frame.func.name); |
+ assertEquals("g", response.lookup(frame.func.ref).name); |
assertFalse(frame.constructCall); |
assertEquals(35, frame.line); |
assertEquals(2, frame.column); |
assertEquals(0, frame.arguments.length); |
json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":2}}' |
- frame = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ frame = response.body(); |
assertEquals(2, frame.index); |
- assertEquals("", frame.func.name); |
+ assertEquals("", response.lookup(frame.func.ref).name); |
// Source slices for the individual frames (they all refer to this script). |
json = '{"seq":0,"type":"request","command":"source",' + |
'"arguments":{"frame":0,"fromLine":30,"toLine":32}}' |
- source = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ source = response.body(); |
assertEquals("function f(x, y) {", source.source.substring(0, 18)); |
assertEquals(30, source.fromLine); |
assertEquals(32, source.toLine); |
json = '{"seq":0,"type":"request","command":"source",' + |
'"arguments":{"frame":1,"fromLine":31,"toLine":32}}' |
- source = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ source = response.body(); |
assertEquals(" a=1;", source.source.substring(0, 6)); |
assertEquals(31, source.fromLine); |
assertEquals(32, source.toLine); |
json = '{"seq":0,"type":"request","command":"source",' + |
'"arguments":{"frame":2,"fromLine":35,"toLine":36}}' |
- source = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ source = response.body(); |
assertEquals(" new f(1);", source.source.substring(0, 11)); |
assertEquals(35, source.fromLine); |
assertEquals(36, source.toLine); |
@@ -166,12 +198,13 @@ |
// Test line interval way beyond this script will result in an error. |
json = '{"seq":0,"type":"request","command":"source",' + |
'"arguments":{"frame":0,"fromLine":10000,"toLine":20000}}' |
- response = safeEval(dcp.processDebugJSONRequest(json)); |
- assertFalse(response.success); |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ assertFalse(response.response().success); |
// Test without arguments. |
json = '{"seq":0,"type":"request","command":"source"}' |
- source = safeEval(dcp.processDebugJSONRequest(json)).body; |
+ response = new ParsedResponse(dcp.processDebugJSONRequest(json)); |
+ source = response.body(); |
assertEquals(Debug.findScript(f).source, source.source); |
listenerCalled = true; |