Home | History | Annotate | Download | only in mjsunit
      1 // Copyright 2009 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 // Flags: --expose-debug-as debug
     29 // Get the Debug object exposed from the debug context global object.
     30 Debug = debug.Debug
     31 
     32 var exception = null;
     33 var step_out_count = 1;
     34 
     35 // Simple debug event handler which counts the number of breaks hit and steps.
     36 var break_point_hit_count = 0;
     37 function listener(event, exec_state, event_data, data) {
     38   try {
     39     if (event == Debug.DebugEvent.Break) {
     40       break_point_hit_count++;
     41       // Continue stepping until returned to bottom frame.
     42       if (exec_state.frameCount() > 1) {
     43         exec_state.prepareStep(Debug.StepAction.StepOut, step_out_count);
     44       }
     45 
     46     }
     47   } catch(e) {
     48     exception = e;
     49   }
     50 
     51 };
     52 
     53 function BeginTest(name) {
     54   test_name = name;
     55   break_point_hit_count = 0;
     56   exception = null;
     57 }
     58 
     59 function EndTest(expected_break_point_hit_count) {
     60   assertEquals(expected_break_point_hit_count, break_point_hit_count, test_name);
     61   assertNull(exception, test_name);
     62   test_name = null;
     63 }
     64 
     65 // Add the debug event listener.
     66 Debug.setListener(listener);
     67 
     68 
     69 var shouldBreak = null;
     70 function fact(x) {
     71   if (shouldBreak(x)) {
     72     debugger;
     73   }
     74   if (x < 2) {
     75     return 1;
     76   } else {
     77     return x*fact(x-1);
     78   }
     79 }
     80 
     81 BeginTest('Test 1');
     82 shouldBreak = function(x) { return x == 3; };
     83 step_out_count = 1;
     84 fact(3);
     85 EndTest(2);
     86 
     87 BeginTest('Test 2');
     88 shouldBreak = function(x) { return x == 2; };
     89 step_out_count = 1;
     90 fact(3);
     91 EndTest(3);
     92 
     93 BeginTest('Test 3');
     94 shouldBreak = function(x) { return x == 1; };
     95 step_out_count = 2;
     96 fact(3);
     97 EndTest(2);
     98 
     99 BeginTest('Test 4');
    100 shouldBreak = function(x) { return x == 1 || x == 3; };
    101 step_out_count = 2;
    102 fact(3);
    103 EndTest(3);
    104 
    105 // Get rid of the debug event listener.
    106 Debug.setListener(null);
    107