Home | History | Annotate | Download | only in mjsunit
      1 // Copyright 2010 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 
     31 Debug = debug.Debug
     32 
     33 function CheckCompareOneWay(s1, s2) {
     34   var diff_array = Debug.LiveEdit.TestApi.CompareStrings(s1, s2);
     35 
     36   var pos1 = 0;
     37   var pos2 = 0;
     38   print("Compare:");
     39   print("s1='" + s1 + "'");
     40   print("s2='" + s2 + "'");
     41   print("Diff:");
     42   print("" + diff_array);
     43   for (var i = 0; i < diff_array.length; i += 3) {
     44     var similar_length = diff_array[i] - pos1;
     45     assertEquals(s1.substring(pos1, pos1 + similar_length),
     46                  s2.substring(pos2, pos2 + similar_length));
     47 
     48     print(s1.substring(pos1, pos1 + similar_length));
     49     pos1 += similar_length;
     50     pos2 += similar_length;
     51     print("<<< " + pos1 + " " + diff_array[i + 1]);
     52     print(s1.substring(pos1, diff_array[i + 1]));
     53     print("===");
     54     print(s2.substring(pos2, diff_array[i + 2]));
     55     print(">>> " + pos2 + " " + diff_array[i + 2]);
     56     pos1 = diff_array[i + 1];
     57     pos2 = diff_array[i + 2];
     58   }
     59   {
     60     // After last change
     61     var similar_length = s1.length - pos1;
     62     assertEquals(similar_length, s2.length - pos2);
     63     assertEquals(s1.substring(pos1, pos1 + similar_length),
     64                  s2.substring(pos2, pos2 + similar_length));
     65 
     66     print(s1.substring(pos1, pos1 + similar_length));
     67   }
     68   print("");
     69 }
     70 
     71 function CheckCompareOneWayPlayWithLF(s1, s2) {
     72   var s1Oneliner = s1.replace(/\n/g, ' ');
     73   var s2Oneliner = s2.replace(/\n/g, ' ');
     74   CheckCompareOneWay(s1, s2);
     75   CheckCompareOneWay(s1Oneliner, s2);
     76   CheckCompareOneWay(s1, s2Oneliner);
     77   CheckCompareOneWay(s1Oneliner, s2Oneliner);
     78 }
     79 
     80 function CheckCompare(s1, s2) {
     81   CheckCompareOneWayPlayWithLF(s1, s2);
     82   CheckCompareOneWayPlayWithLF(s2, s1);
     83 }
     84 
     85 CheckCompare("", "");
     86 
     87 CheckCompare("a", "b");
     88 
     89 CheckCompare(
     90     "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
     91     "yesterday\nall\nmy\ntroubles\nseem\nso\nfar\naway"
     92 );
     93 
     94 CheckCompare(
     95     "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
     96     "\nall\nmy\ntroubles\nseemed\nso\nfar\naway"
     97 );
     98 
     99 CheckCompare(
    100     "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
    101     "all\nmy\ntroubles\nseemed\nso\nfar\naway"
    102 );
    103 
    104 CheckCompare(
    105     "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
    106     "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway\n"
    107 );
    108 
    109 CheckCompare(
    110     "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
    111     "yesterday\nall\nmy\ntroubles\nseemed\nso\n"
    112 );
    113 
    114