19258b6bc66e09368ada54001f619d53b4fc976d5ager@chromium.org// Copyright 2008 the V8 project authors. All rights reserved. 29a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Redistribution and use in source and binary forms, with or without 39a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// modification, are permitted provided that the following conditions are 49a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// met: 59a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// 69a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Redistributions of source code must retain the above copyright 79a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// notice, this list of conditions and the following disclaimer. 89a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Redistributions in binary form must reproduce the above 99a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// copyright notice, this list of conditions and the following 109a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// disclaimer in the documentation and/or other materials provided 119a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// with the distribution. 129a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// * Neither the name of Google Inc. nor the names of its 139a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// contributors may be used to endorse or promote products derived 149a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// from this software without specific prior written permission. 159a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// 169a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 179a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 189a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 199a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 209a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 219a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 229a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 239a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 249a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 259a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 269a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 279a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 289a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Flags: --expose-debug-as debug 299a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// The functions used for testing backtraces. They are at the top to make the 309a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// testing of source line/column easier. 319a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comfunction f(x, y) { 329a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com a=1; 339a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com}; 349a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 359085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgvar m = function() { 369a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com new f(1); 379a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com}; 389a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 399085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.orgfunction g() { 40b3284ad36ee358a35b81379ad1c449e4f8021362kasperl@chromium.org m(); 419085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org}; 429085a016223a6b72bf580d5781c93ec7b9e54422ager@chromium.org 439a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 449a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Get the Debug object exposed from the debug context global object. 459a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comDebug = debug.Debug 469a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 479a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comlistenerCalled = false; 489a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comexception = false; 499a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 503291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 513291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgfunction ParsedResponse(json) { 523291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org this.response_ = eval('(' + json + ')'); 533291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org this.refs_ = []; 543291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org if (this.response_.refs) { 553291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org for (var i = 0; i < this.response_.refs.length; i++) { 563291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org this.refs_[this.response_.refs[i].handle] = this.response_.refs[i]; 573291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org } 589a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com } 599a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com} 609a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 613291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 623291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgParsedResponse.prototype.response = function() { 633291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org return this.response_; 643291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org} 653291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 663291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 673291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgParsedResponse.prototype.body = function() { 683291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org return this.response_.body; 693291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org} 703291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 713291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 729d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.comParsedResponse.prototype.running = function() { 739d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com return this.response_.running; 749d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com} 759d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 769d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 773291210ab99f306b74430ebbc4b7d939629e699fager@chromium.orgParsedResponse.prototype.lookup = function(handle) { 783291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org return this.refs_[handle]; 793291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org} 803291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 813291210ab99f306b74430ebbc4b7d939629e699fager@chromium.org 829a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comfunction listener(event, exec_state, event_data, data) { 839a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com try { 84defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org if (event == Debug.DebugEvent.Break) { 85defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // The expected backtrace is 86defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // 0: f 87defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // 1: m 88defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // 2: g 89defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // 3: [anonymous] 90defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 91defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org var response; 92defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org var backtrace; 93defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org var frame; 94defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org var source; 95defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 969d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com var dcp; 979d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // New copy of debug command processor paused state. 989d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com dcp = exec_state.debugCommandProcessor(false); 99defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 100defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // Get the backtrace. 101defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org var json; 102defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"backtrace"}' 103defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org var resp = dcp.processDebugJSONRequest(json); 104defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(resp); 105defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org backtrace = response.body(); 106defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(0, backtrace.fromFrame); 107defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(4, backtrace.toFrame); 108defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(4, backtrace.totalFrames); 109defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org var frames = backtrace.frames; 110defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(4, frames.length); 111defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org for (var i = 0; i < frames.length; i++) { 112defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('frame', frames[i].type); 113defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org } 114defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(0, frames[0].index); 115defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("f", response.lookup(frames[0].func.ref).name); 116defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(1, frames[1].index); 117defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("", response.lookup(frames[1].func.ref).name); 118defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("m", response.lookup(frames[1].func.ref).inferredName); 119defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(2, frames[2].index); 120defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("g", response.lookup(frames[2].func.ref).name); 121defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(3, frames[3].index); 122defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("", response.lookup(frames[3].func.ref).name); 1239d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com assertFalse(response.running(), "expected not running"); 124defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 125defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // Get backtrace with two frames. 126defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"backtrace","arguments":{"fromFrame":1,"toFrame":3}}' 127defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 128defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org backtrace = response.body(); 129defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(1, backtrace.fromFrame); 130defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(3, backtrace.toFrame); 131defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(4, backtrace.totalFrames); 132defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org var frames = backtrace.frames; 133defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(2, frames.length); 134defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org for (var i = 0; i < frames.length; i++) { 135defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('frame', frames[i].type); 136defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org } 137defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(1, frames[0].index); 138defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("", response.lookup(frames[0].func.ref).name); 139defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("m", response.lookup(frames[0].func.ref).inferredName); 140defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(2, frames[1].index); 141defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("g", response.lookup(frames[1].func.ref).name); 142defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 143defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // Get backtrace with bottom two frames. 144defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"backtrace","arguments":{"fromFrame":0,"toFrame":2, "bottom":true}}' 145defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 146defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org backtrace = response.body(); 147defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(2, backtrace.fromFrame); 148defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(4, backtrace.toFrame); 149defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(4, backtrace.totalFrames); 150defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org var frames = backtrace.frames; 151defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(2, frames.length); 152defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org for (var i = 0; i < frames.length; i++) { 153defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('frame', frames[i].type); 154defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org } 155defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(2, frames[0].index); 156defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("g", response.lookup(frames[0].func.ref).name); 157defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(3, frames[1].index); 158defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("", response.lookup(frames[1].func.ref).name); 159defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 160defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // Get the individual frames. 161defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"frame"}' 162defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 163defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org frame = response.body(); 164defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(0, frame.index); 165defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("f", response.lookup(frame.func.ref).name); 166defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertTrue(frame.constructCall); 167defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(31, frame.line); 168defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(3, frame.column); 169defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(2, frame.arguments.length); 170defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('x', frame.arguments[0].name); 171defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('number', response.lookup(frame.arguments[0].value.ref).type); 172defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(1, response.lookup(frame.arguments[0].value.ref).value); 173defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('y', frame.arguments[1].name); 174defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('undefined', response.lookup(frame.arguments[1].value.ref).type); 175defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 176defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":0}}' 177defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 178defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org frame = response.body(); 179defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(0, frame.index); 180defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("f", response.lookup(frame.func.ref).name); 181defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(31, frame.line); 182defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(3, frame.column); 183defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(2, frame.arguments.length); 184defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('x', frame.arguments[0].name); 185defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('number', response.lookup(frame.arguments[0].value.ref).type); 186defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(1, response.lookup(frame.arguments[0].value.ref).value); 187defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('y', frame.arguments[1].name); 188defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals('undefined', response.lookup(frame.arguments[1].value.ref).type); 189defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 190defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":1}}' 191defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 192defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org frame = response.body(); 193defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(1, frame.index); 194defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("", response.lookup(frame.func.ref).name); 195defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("m", response.lookup(frame.func.ref).inferredName); 196defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertFalse(frame.constructCall); 197defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(35, frame.line); 198030d38ee536bc25856546e75fdac60d1a0c42bddwhesse@chromium.org assertEquals(6, frame.column); 199defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(0, frame.arguments.length); 200defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 201defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"frame","arguments":{"number":3}}' 202defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 203defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org frame = response.body(); 204defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(3, frame.index); 205defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("", response.lookup(frame.func.ref).name); 206defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 207defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // Source slices for the individual frames (they all refer to this script). 208defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"source",' + 209defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org '"arguments":{"frame":0,"fromLine":30,"toLine":32}}' 210defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 211defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org source = response.body(); 212defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals("function f(x, y) {", source.source.substring(0, 18)); 213defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(30, source.fromLine); 214defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(32, source.toLine); 215defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 216defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"source",' + 217defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org '"arguments":{"frame":1,"fromLine":31,"toLine":32}}' 218defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 219defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org source = response.body(); 220defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(" a=1;", source.source.substring(0, 6)); 221defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(31, source.fromLine); 222defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(32, source.toLine); 223defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 224defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"source",' + 225defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org '"arguments":{"frame":2,"fromLine":35,"toLine":36}}' 226defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 227defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org source = response.body(); 228defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(" new f(1);", source.source.substring(0, 11)); 229defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(35, source.fromLine); 230defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(36, source.toLine); 231defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 232defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // Test line interval way beyond this script will result in an error. 233defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"source",' + 234defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org '"arguments":{"frame":0,"fromLine":10000,"toLine":20000}}' 235defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 236defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertFalse(response.response().success); 237defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 238defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org // Test without arguments. 239defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org json = '{"seq":0,"type":"request","command":"source"}' 240defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org response = new ParsedResponse(dcp.processDebugJSONRequest(json)); 241defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org source = response.body(); 242defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org assertEquals(Debug.findScript(f).source, source.source); 243defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org 2449d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // New copy of debug command processor in running state. 2459d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com dcp = exec_state.debugCommandProcessor(true); 2469d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // Get the backtrace. 2479d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com json = '{"seq":0,"type":"request","command":"backtrace"}' 2489d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com resp = dcp.processDebugJSONRequest(json); 2499d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com response = new ParsedResponse(resp); 2509d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // It might be argueable, but we expect response to have body when 2519d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com // not suspended 2529d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com assertTrue(!!response.body(), "response should be null"); 2539d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com assertTrue(response.running(), "expected running"); 2549d58c2b1c27d8b2890b9bd46e57d3842b09e0292christian.plesner.hansen@gmail.com 255defbd109bb9bd556bb8ece103c3b340d3552155ekasperl@chromium.org listenerCalled = true; 2569a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com } 2579a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com } catch (e) { 2589a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com exception = e 2599a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com }; 2609a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com}; 2619a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 2629a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Add the debug event listener. 263245aa859d34fd516161c48ef4c69d38d9b889284iposva@chromium.orgDebug.setListener(listener); 2649a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 2659a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Set a break point and call to invoke the debug event listener. 2669a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comDebug.setBreakPoint(f, 0, 0); 2679a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comg(); 2689a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com 2699a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.com// Make sure that the debug event listener vas invoked. 2709a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comassertFalse(exception, "exception in listener"); 2719a4089a092cad9ff23b6416b92cd5d818dc101d1mads.s.ager@gmail.comassertTrue(listenerCalled); 272