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
31Debug = debug.Debug
32
33function 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
71function 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
80function CheckCompare(s1, s2) {
81  CheckCompareOneWayPlayWithLF(s1, s2);
82  CheckCompareOneWayPlayWithLF(s2, s1);
83}
84
85CheckCompare("", "");
86
87CheckCompare("a", "b");
88
89CheckCompare(
90    "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
91    "yesterday\nall\nmy\ntroubles\nseem\nso\nfar\naway"
92);
93
94CheckCompare(
95    "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
96    "\nall\nmy\ntroubles\nseemed\nso\nfar\naway"
97);
98
99CheckCompare(
100    "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
101    "all\nmy\ntroubles\nseemed\nso\nfar\naway"
102);
103
104CheckCompare(
105    "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
106    "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway\n"
107);
108
109CheckCompare(
110    "yesterday\nall\nmy\ntroubles\nseemed\nso\nfar\naway",
111    "yesterday\nall\nmy\ntroubles\nseemed\nso\n"
112);
113