Home | History | Annotate | Download | only in mjsunit
      1 // Copyright 2008 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 // Source lines for test.
     30 var lines = [ 'function a() { b(); };\n',
     31               'function    b() {\n',
     32               '  c(true);\n',
     33               '};\n',
     34               '  function c(x) {\n',
     35               '    if (x) {\n',
     36               '      return 1;\n',
     37               '    } else {\n',
     38               '      return 1;\n',
     39               '    }\n',
     40               '  };\n' ];
     41 
     42 // Build source by putting all lines together
     43 var source = '';
     44 for (var i = 0; i < lines.length; i++) {
     45   source += lines[i];
     46 }
     47 eval(source);
     48 
     49 // Flags: --expose-debug-as debug
     50 // Get the Debug object exposed from the debug context global object.
     51 Debug = debug.Debug
     52 
     53 // Get the script object from one of the functions in the source.
     54 var script = Debug.findScript(a);
     55 
     56 // Make sure that the source is as expected.
     57 assertEquals(source, script.source);
     58 assertEquals(source, script.sourceSlice().sourceText());
     59 
     60 // Try all possible line interval slices.
     61 for (var slice_size = 0; slice_size < lines.length; slice_size++) {
     62   for (var n = 0; n < lines.length - slice_size; n++) {
     63     var slice = script.sourceSlice(n, n + slice_size);
     64     assertEquals(n, slice.from_line);
     65     assertEquals(n + slice_size, slice.to_line);
     66 
     67     var text = slice.sourceText();
     68     var expected = '';
     69     for (var i = 0; i < slice_size; i++) {
     70       expected += lines[n + i];
     71     }
     72     assertEquals(expected, text);
     73   }
     74 }
     75