13ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 23ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Redistribution and use in source and binary forms, with or without 33ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// modification, are permitted provided that the following conditions are 43ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// met: 53ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 63ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Redistributions of source code must retain the above copyright 73ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// notice, this list of conditions and the following disclaimer. 83ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Redistributions in binary form must reproduce the above 93ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// copyright notice, this list of conditions and the following 103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// disclaimer in the documentation and/or other materials provided 113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// with the distribution. 123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// * Neither the name of Google Inc. nor the names of its 133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// contributors may be used to endorse or promote products derived 143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// from this software without specific prior written permission. 153ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// 163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 173ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 183ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 193ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 203ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 213ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 223ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 233ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 243ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 253ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 263ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 283ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Flags: --expose-debug-as debug 293ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 303ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// Test whether scripts compiled after setting the break point are 313ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch// updated correctly. 323ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 333ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochDebug = debug.Debug; 343ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 353ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar break_count = 0; 363ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar test_break_1 = false; 373ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochvar test_break_2 = false; 383ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 393ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction sendCommand(state, cmd) { 403ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Get the debug command processor in paused state. 413ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var dcp = state.debugCommandProcessor(false); 423ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var request = JSON.stringify(cmd); 433ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch var response = dcp.processDebugJSONRequest(request); 443ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch return JSON.parse(response); 453ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 463ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 473ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction setBreakPointByName(state) { 483ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch sendCommand(state, { 493ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch seq: 0, 503ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch type: "request", 513ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch command: "setbreakpoint", 523ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch arguments: { 533ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch type: "script", 543ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch target: "testScriptOne", 553ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch line: 2 563ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 573ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 583ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 593ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 603ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction setBreakPointByRegExp(state) { 613ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch sendCommand(state, { 623ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch seq: 0, 633ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch type: "request", 643ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch command: "setbreakpoint", 653ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch arguments: { 663ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch type: "scriptRegExp", 673ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch target: "Scrip.Two", 683ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch line: 2 693ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 703ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch }); 713ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 723ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 733ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochfunction listener(event, exec_state, event_data, data) { 743ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch try { 753ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch if (event == Debug.DebugEvent.Break) { 763ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch switch (break_count) { 773ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case 0: 783ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set break points before the code has been compiled. 793ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch setBreakPointByName(exec_state); 803ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch setBreakPointByRegExp(exec_state); 813ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 823ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case 1: 833ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set the flag to prove that we hit the first break point. 843ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test_break_1 = true; 853ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 863ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch case 2: 873ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch // Set the flag to prove that we hit the second break point. 883ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch test_break_2 = true; 893ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break; 903ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 913ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch break_count++; 923ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 933ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } catch (e) { 943ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch print(e); 953ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch } 963ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch} 973ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 983ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochDebug.setListener(listener); 993ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochdebugger; 1003ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1013ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdocheval('function test1() { \n' + 1023ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ' assertFalse(test_break_1); \n' + 1033ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ' assertTrue(test_break_1); \n' + 1043ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch '} \n' + 1053ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch '//@ sourceURL=testScriptOne'); 1063ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1073ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdocheval('function test2() { \n' + 1083ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ' assertFalse(test_break_2); \n' + 1093ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch ' assertTrue(test_break_2); \n' + 1103ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch '} \n' + 1113ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch '//@ sourceURL=testScriptTwo'); 1123ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 1133ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest1(); 1143ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdochtest2(); 1153ef787dbeca8a5fb1086949cda830dccee07bfbdBen MurdochassertEquals(3, break_count); 1163ef787dbeca8a5fb1086949cda830dccee07bfbdBen Murdoch 117