diff --git a/lib/mergely.js b/lib/mergely.js
index eaccb46..8204810 100644
--- a/lib/mergely.js
+++ b/lib/mergely.js
@@ -125,7 +125,7 @@ $.extend(Mgly.diff.prototype, {
changes: function() { return this.items; },
normal_form: function() {
var nf = '';
- for (var index in this.items) {
+ for (var index = 0; index < this.items.length; ++index) {
var item = this.items[index];
var lhs_str = '';
var rhs_str = '';
@@ -658,6 +658,7 @@ $.extend(Mgly.mergely.prototype, {
this.trace('scroll', 'left_to', left_to);
for (var name in this.editor) {
+ if (!this.editor.hasOwnProperty(name)) continue;
if (editor_name == name) continue; //same editor
var this_side = editor_name.replace(this.id + '-', '');
var other_side = name.replace(this.id + '-', '');
@@ -666,7 +667,7 @@ $.extend(Mgly.mergely.prototype, {
// find the last change that is less than or within the midway point
// do not move the rhs until the lhs end point is >= the rhs end point.
var last_change = null;
- for (var i in this.changes) {
+ for (var i = 0; i < this.changes.length; ++i) {
var change = this.changes[i];
if ((midline.line >= change[this_side+'-line-from'])) {
last_change = change;
@@ -709,6 +710,7 @@ $.extend(Mgly.mergely.prototype, {
},
_changed: function(editor_name1, editor_name2) {
for (var name in this.editor) {
+ if (!this.editor.hasOwnProperty(name)) continue;
var editor = this.editor[name];
editor.operation(function() {
for (var i = 0, l = editor.lineCount(); i < l; ++i) {
@@ -718,7 +720,7 @@ $.extend(Mgly.mergely.prototype, {
});
}
//remove previous markup changes
- for (var i in this.change_funcs) {
+ for (var i = 0; i < this.change_funcs; ++i) {
var change = this.change_funcs[i];
if (change.clear != undefined) change.clear();
else change();//prev codemirror
@@ -804,7 +806,7 @@ $.extend(Mgly.mergely.prototype, {
this.draw_rhs_width = 5;
this.trace('calc', 'change offsets calculated', {top_offset: top_offset, lhs_min: this.draw_lhs_min, rhs_max: this.draw_rhs_max, lhs_width: this.draw_lhs_width, rhs_width: this.draw_rhs_width});
}
- for (var i in changes) {
+ for (var i = 0; i < changes.length; ++i) {
var change = changes[i];
var valign = 2;
var ls = this.editor[editor_name1].charCoords({line: change['lhs-line-from']});
@@ -854,7 +856,7 @@ $.extend(Mgly.mergely.prototype, {
var led = this.editor[editor_name1];
var red = this.editor[editor_name2];
led.operation(function() {
- for (var i in changes) {
+ for (var i = 0; i < changes.length; ++i) {
var change = changes[i];
var clazz = 'mergely ' + change['op'] + ' cid-' + i + ' ';
// lhs markup
@@ -1016,7 +1018,7 @@ $.extend(Mgly.mergely.prototype, {
}
});
red.operation(function() {
- for (var i in changes) {
+ for (var i = 0; i < changes.length; ++i) {
var change = changes[i];
var clazz = 'mergely ' + change['op'] + ' cid-' + i + ' ';
// rhs markup
@@ -1118,7 +1120,7 @@ $.extend(Mgly.mergely.prototype, {
ctx_rhs.fillRect(0, 0, 6.5, visible_page_height);
ctx_rhs.strokeRect(0, 0, 6.5, visible_page_height);
- for (var i in changes) {
+ for (var i = 0; i < changes.length; ++i) {
var change = changes[i];
var lhs_y_start = change['lhs-y-start'];
diff --git a/test/tests.js b/test/tests.js
index f912a66..e08443a 100755
--- a/test/tests.js
+++ b/test/tests.js
@@ -70,33 +70,33 @@ $(document).ready(function(){
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
var classes = lhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'a', 'lhs', 'start'];
- var notok_classes = ['d', 'c', 'bg', 'end'];
+ var notok_classes = ['d', 'c', 'end'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'start', 'bg', 'end'];
+ var ok_classes = ['mergely', 'a', 'rhs', 'start', 'end'];
var notok_classes = ['d', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
var classes = lhs_info.bgClass.split(' ');
- for (var clazz in ['mergely', 'a', 'rhs', 'start', 'bg', 'end']) {
+ for (var clazz in ['mergely', 'a', 'rhs', 'start', 'end']) {
JsUnit.okay($.inArray(clazz, classes), 'Expected lhs row to have class, "' + clazz + '"');
}
@@ -158,28 +158,28 @@ $(document).ready(function(){
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
var classes = lhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'a', 'lhs', 'start', 'end'];
- var notok_classes = ['d', 'c', 'bg'];
+ var notok_classes = ['d', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(1);
var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'start', 'bg', 'end'];
+ var ok_classes = ['mergely', 'a', 'rhs', 'start', 'end'];
var notok_classes = ['d', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var extents = mergely._get_extents();
@@ -241,28 +241,28 @@ $(document).ready(function(){
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
var classes = lhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'a', 'lhs', 'start'];
- var notok_classes = ['d', 'c', 'bg', 'end'];
+ var notok_classes = ['d', 'c', 'end'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'start', 'bg', 'end'];
+ var ok_classes = ['mergely', 'a', 'rhs', 'start', 'end'];
var notok_classes = ['d', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var extents = mergely._get_extents();
@@ -328,28 +328,28 @@ $(document).ready(function(){
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
var classes = lhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'a', 'lhs', 'start', 'end'];
- var notok_classes = ['d', 'c', 'bg'];
+ var notok_classes = ['d', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(1);
var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'start', 'bg', 'end'];
+ var ok_classes = ['mergely', 'a', 'rhs', 'start', 'end'];
var notok_classes = ['d', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var extents = mergely._get_extents();
@@ -383,8 +383,7 @@ $(document).ready(function(){
// description:
// This tests inserting three lines in the rhs only in the middle of text. The visual markup
// change for the lhs starts at the end of the lhs change (normal case), and the rhs
- // markup starts on line one of the first change, the next line of the change has 'bg' markup
- // and the final line has 'end' markup
+ // markup starts on line one of the first change, and the final line has 'end' markup
// example:
// one one
// five two
@@ -420,52 +419,52 @@ $(document).ready(function(){
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
var classes = lhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'a', 'lhs', 'start', 'end'];
- var notok_classes = ['d', 'c', 'bg'];
+ var notok_classes = ['d', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(1);
var classes = rhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'a', 'rhs', 'start'];
- var notok_classes = ['d', 'c', 'bg', 'end'];
+ var notok_classes = ['d', 'c', 'end'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(2);
var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'bg'];
+ var ok_classes = ['mergely', 'a', 'rhs'];
var notok_classes = ['d', 'c', 'start', 'end'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(3);
var classes = rhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'a', 'rhs', 'end'];
- var notok_classes = ['d', 'c', 'start', 'bg'];
+ var notok_classes = ['d', 'c', 'start'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var extents = mergely._get_extents();
@@ -531,34 +530,34 @@ $(document).ready(function(){
// test lhs classes
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'start', 'end', 'bg'];
+ var ok_classes = ['mergely', 'd', 'lhs', 'start', 'end'];
var notok_classes = ['a', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
var classes = rhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'd', 'rhs', 'start'];
- var notok_classes = ['a', 'c', 'bg', 'end'];
+ var notok_classes = ['a', 'c', 'end'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
var classes = lhs_info.bgClass.split(' ');
- for (var clazz in ['mergely', 'a', 'rhs', 'start', 'bg', 'end']) {
+ for (var clazz in ['mergely', 'a', 'rhs', 'start', 'end']) {
JsUnit.okay($.inArray(clazz, classes), 'Expected lhs row to have class, "' + clazz + '"');
}
@@ -624,28 +623,28 @@ $(document).ready(function(){
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(1);
var classes = lhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'd', 'lhs', 'start', 'end'];
- var notok_classes = ['a', 'c', 'bg'];
+ var notok_classes = ['a', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'rhs', 'start', 'bg', 'end'];
+ var ok_classes = ['mergely', 'd', 'rhs', 'start', 'end'];
var notok_classes = ['a', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var extents = mergely._get_extents();
@@ -710,15 +709,15 @@ $(document).ready(function(){
// test lhs classes
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'start', 'end', 'bg'];
+ var ok_classes = ['mergely', 'd', 'lhs', 'start', 'end'];
var notok_classes = ['a', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
@@ -731,8 +730,8 @@ $(document).ready(function(){
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var extents = mergely._get_extents();
@@ -797,29 +796,29 @@ $(document).ready(function(){
// test lhs classes
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(1);
var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'start', 'bg', 'end'];
+ var ok_classes = ['mergely', 'd', 'lhs', 'start', 'end'];
var notok_classes = ['a', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'rhs', 'start', 'bg', 'end'];
+ var ok_classes = ['mergely', 'd', 'rhs', 'start', 'end'];
var notok_classes = ['a', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var extents = mergely._get_extents();
@@ -855,8 +854,7 @@ $(document).ready(function(){
//
// This tests inserting three lines in the rhs only in the middle of text. The visual markup
// change for the lhs starts at the end of the lhs change (normal case), and the rhs
- // markup starts on line one of the first change, the next line of the change has 'bg' markup
- // and the final line has 'end' markup
+ // markup starts on line one of the first change, and the final line has 'end' markup.
// example:
// one one
// two five
@@ -892,52 +890,52 @@ $(document).ready(function(){
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(1);
var classes = lhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'd', 'lhs', 'start'];
- var notok_classes = ['a', 'c', 'bg', 'end'];
+ var notok_classes = ['a', 'c', 'end'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(2);
var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'bg'];
+ var ok_classes = ['mergely', 'd', 'lhs'];
var notok_classes = ['a', 'c', 'start', 'end'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
var lhs_info = mergely.editor['mergely-lhs'].lineInfo(3);
var classes = lhs_info.bgClass.split(' ');
var ok_classes = ['mergely', 'd', 'lhs', 'end'];
- var notok_classes = ['a', 'c', 'bg', 'start'];
+ var notok_classes = ['a', 'c', 'start'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
}
// test rhs classes
var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'rhs', 'start', 'bg', 'end'];
+ var ok_classes = ['mergely', 'd', 'rhs', 'start', 'end'];
var notok_classes = ['a', 'c'];
for (var i in ok_classes) {
var clazz = ok_classes[i];
JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
}
for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
+ var clazz = notok_classes[i];
+ JsUnit.okay($.inArray(clazz, classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
}
var extents = mergely._get_extents();
@@ -974,117 +972,18 @@ $(document).ready(function(){
var t1 = new Date().getTime();
console.log('diff', diff, 'time: ' + (t1 - t0));
});
-
- JsUnit.test('case-11-diff-file-100k-50-changes', function() {
- var data = macbeth.join('\n');
-
- // array swap 50 lines
- var mcopy = [];
- for (var i = 0; i < macbeth.length; ++i) {
- mcopy[i] = macbeth[i];
- }
- for (var i = 0; i < 50; ++i) {
- var x1 = Math.floor((Math.random()*macbeth.length));
- var x2 = Math.floor((Math.random()*macbeth.length));
- var t = mcopy[x1];
- mcopy[x1] = mcopy[x2];
- mcopy[x2] = t;
- }
- var data2 = mcopy.join('\n');
- console.log('size', data.length);
-
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.test('case-11-diff-file-1000k-same', function() {
+
+ JsUnit.test('case-11-diff-file-500k-many-changes', function() {
var data = '';
- for (var i = 0; i < 10; ++i) {
+ for (var i = 0; i < 5; ++i) {
data += macbeth.join('\n');
}
+ // replace ',' with '$' in all lines
+ var data2 = data.replace(/,/g, '$');
console.log('size', data.length);
+ console.log('size', data2.length);
var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.test('case-11-diff-file-1000k-500-changes', function() {
- var data = '';
- for (var i = 0; i < 10; ++i) {
- data += macbeth.join('\n');
- }
- var mcopy = [];
- for (var i = 0; i < macbeth.length; ++i) {
- mcopy[i] = macbeth[i];
- }
- // array swap 50 lines
- for (var i = 0; i < 500; ++i) {
- var x1 = Math.floor((Math.random()*macbeth.length));
- var x2 = Math.floor((Math.random()*macbeth.length));
- var t = mcopy[x1];
- mcopy[x1] = mcopy[x2];
- mcopy[x2] = t;
- }
- var data2 = mcopy.join('\n');
- console.log('size', data.length);
-
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.test('case-11-diff-file-10MB-500-changes', function() {
- var data = '';
- for (var i = 0; i < 100; ++i) {
- data += macbeth.join('\n');
- }
- var mcopy = [];
- for (var i = 0; i < macbeth.length; ++i) {
- mcopy[i] = macbeth[i];
- }
- // array swap 50 lines
- for (var i = 0; i < 500; ++i) {
- var x1 = Math.floor((Math.random()*macbeth.length));
- var x2 = Math.floor((Math.random()*macbeth.length));
- var t = mcopy[x1];
- mcopy[x1] = mcopy[x2];
- mcopy[x2] = t;
- }
- var data2 = mcopy.join('\n');
- console.log('size', data.length);
-
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.test('case-11-diff-file-20MB-500-changes', function() {
- var data = '';
- for (var i = 0; i < 200; ++i) {
- data += macbeth.join('\n');
- }
- var mcopy = [];
- for (var i = 0; i < macbeth.length; ++i) {
- mcopy[i] = macbeth[i];
- }
- // array swap 50 lines
- for (var i = 0; i < 500; ++i) {
- var x1 = Math.floor((Math.random()*macbeth.length));
- var x2 = Math.floor((Math.random()*macbeth.length));
- var t = mcopy[x1];
- mcopy[x1] = mcopy[x2];
- mcopy[x2] = t;
- }
- var data2 = mcopy.join('\n');
- console.log('size', data.length);
-
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
+ var diff = new Mgly.diff(data, data2);
var t1 = new Date().getTime();
console.log('diff', diff, 'time: ' + (t1 - t0));
});
@@ -1092,3 +991,5 @@ $(document).ready(function(){
JsUnit.start();
}(JsUnit));
});
+
+
diff --git a/test/tests2.js b/test/tests2.js
deleted file mode 100755
index 88e255e..0000000
--- a/test/tests2.js
+++ /dev/null
@@ -1,1094 +0,0 @@
-Object.equals = function( x, y ) {
- if ( x === y ) return true;
- if ( ! ( x instanceof Object ) || ! ( y instanceof Object ) ) return false;
- if ( x.constructor !== y.constructor ) return false;
- for ( var p in x ) {
- if ( ! x.hasOwnProperty( p ) ) continue;
- if ( ! y.hasOwnProperty( p ) ) return false;
- if ( x[ p ] === y[ p ] ) continue;
- if ( typeof( x[ p ] ) !== "object" ) return false;
- if ( ! Object.equals( x[ p ], y[ p ] ) ) return false;
- }
- for ( p in y ) {
- if ( y.hasOwnProperty( p ) && ! x.hasOwnProperty( p ) ) return false;
- }
- return true;
-}
-
-$(document).ready(function(){
- var DMERGELY = $('\
-
');
-
- var init = function() {
- $('body').append(DMERGELY);
- console.log($('#test-mergely').length);
- var mergely = new Mgly.mergely();
- mergely.init($('#mergely'), {
- height: function(h) { return 400; }
- });
- return mergely;
- };
-
- (function (JsUnit) {
- JsUnit.module('Tests');
-
-
- // Summary:
- // Add one line to the rhs where the lhs is empty.
- // Description:
- // This tests inserting one line in the rhs only. The visual markup change for the
- // lhs usually starts at the end of the change which, when drawing the border, is
- // the bottom, but in this case, there are no lines, so there is no bottom. In this
- // case, the border must be drawn on the top. The margin markup must also take this
- // into account, and visually, it starts from the top of the line, rather than the
- // bottom. The rhs markup starts and ends on the same line.
- // Example:
- // one
- JsUnit.test('case-1-rhs-add-one-line', function() {
- mergely = init();
- mergely.lhs('');
- mergely.rhs('one');
-
- JsUnit.okay(mergely.get('lhs') == '', 'Expected ""');
- JsUnit.okay(mergely.get('rhs') == 'one', 'Expected "one"');
- var diff = '0a1\n'+
- '> one\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'lhs', 'start'];
- var notok_classes = ['d', 'c', 'bg', 'end'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'start', 'bg', 'end'];
- var notok_classes = ['d', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
- var classes = lhs_info.bgClass.split(' ');
- for (var clazz in ['mergely', 'a', 'rhs', 'start', 'bg', 'end']) {
- JsUnit.okay($.inArray(clazz, classes), 'Expected lhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 0, 'Expected lhs change to be start from 0');
- JsUnit.okay(change['lhs-line-to'] == 0, 'Expected lhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-from'] == 0, 'Expected rhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-to'] == 0, 'Expected rhs change to be finish at 0');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] < change['rhs-y-end'], 'Expected lhs/rhs end to be different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['lhs-y-end'] == change['lhs-y-start'] - valign, 'Expected lhs start/end to be the same');
- JsUnit.okay(change['rhs-y-end'] == (change['rhs-y-start'] + extents['em-height'] * 1 - valign), 'Expected rhs end to be 1 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- // Summary:
- // Add one line to the rhs at the end of text.
- // Description:
- // This tests inserting one line in the rhs only at the end of text. The visual markup
- // change for the lhs starts at the end of the lhs change (normal case), and the rhs
- // markup starts and ends on the same line. This is normal insertion.
- // Example:
- // one one
- // two
- JsUnit.test('case-2-rhs-add-one-line-after', function() {
- mergely = init();
- mergely.lhs('one');
- mergely.rhs('one\ntwo');
- JsUnit.okay(mergely.get('lhs') == 'one', 'Expected "one"');
- JsUnit.okay(mergely.get('rhs') == 'one\ntwo', 'Expected "one two"');
- var diff = '1a2\n'+
- '> two\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'lhs', 'start', 'end'];
- var notok_classes = ['d', 'c', 'bg'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(1);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'start', 'bg', 'end'];
- var notok_classes = ['d', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 0, 'Expected lhs change to be start from 0');
- JsUnit.okay(change['lhs-line-to'] == 0, 'Expected lhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-from'] == 1, 'Expected rhs change to be finish at 1');
- JsUnit.okay(change['rhs-line-to'] == 1, 'Expected rhs change to be finish at 1');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] < change['rhs-y-end'], 'Expected lhs/rhs end to be different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['lhs-y-end'] == change['lhs-y-start'] - valign, 'Expected lhs start/end to be the same');
- JsUnit.okay(change['rhs-y-end'] == (change['rhs-y-start'] + extents['em-height'] * 1 - valign), 'Expected rhs end to be 1 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- // summary:
- // Add one line to the rhs before the start of text.
- // description:
- // This tests inserting one line in the rhs only before the start of text. The
- // The visual markup change for the lhs starts at the end of the lhs change
- // (normal case), and the rhs markup starts and ends on the same line. This is
- // normal insertion.
- // example:
- // one 1
- // one
- JsUnit.test('case-3-rhs-add-one-line-before', function() {
- mergely = init();
- mergely.lhs('one');
- mergely.rhs('1\none');
- JsUnit.okay(mergely.get('lhs') == 'one', 'Expected "one"');
- JsUnit.okay(mergely.get('rhs') == '1\none', 'Expected "1 one"');
- var diff = '0a1\n'+
- '> 1\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'lhs', 'start'];
- var notok_classes = ['d', 'c', 'bg', 'end'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'start', 'bg', 'end'];
- var notok_classes = ['d', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 0, 'Expected lhs change to be start from 0');
- JsUnit.okay(change['lhs-line-to'] == 0, 'Expected lhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-from'] == 0, 'Expected rhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-to'] == 0, 'Expected rhs change to be finish at 0');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] < change['rhs-y-end'], 'Expected lhs/rhs end to be different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['lhs-y-end'] == change['lhs-y-start'] - valign, 'Expected lhs start/end to be the same');
- JsUnit.okay(change['rhs-y-end'] == (change['rhs-y-start'] + extents['em-height'] * 1 - valign), 'Expected rhs end to be 1 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- // summary:
- // Add one line to the rhs in the middle of text.
- // description:
- // This tests inserting one line in the rhs only in the middle of text. The visual markup
- // change for the lhs starts at the end of the lhs change (normal case), and the rhs
- // markup starts and ends on the same line. This is normal insertion.
- // example:
- // one one
- // three two
- // three
- JsUnit.test('case-4-rhs-add-one-line-inbetween', function() {
- $('body').append($(''));
- var mergely = new Mgly.mergely;
- mergely.init($('#mergely'), {
- height: function(h) { return 400; }
- });
- mergely.lhs('one\nthree');
- mergely.rhs('one\ntwo\nthree');
- JsUnit.okay(mergely.get('lhs') == 'one\nthree', 'Expected "one three"');
- JsUnit.okay(mergely.get('rhs') == 'one\ntwo\nthree', 'Expected "one two three"');
- var diff = '1a2\n'+
- '> two\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'lhs', 'start', 'end'];
- var notok_classes = ['d', 'c', 'bg'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(1);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'start', 'bg', 'end'];
- var notok_classes = ['d', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 0, 'Expected lhs change to be start from 0');
- JsUnit.okay(change['lhs-line-to'] == 0, 'Expected lhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-from'] == 1, 'Expected rhs change to be finish at 1');
- JsUnit.okay(change['rhs-line-to'] == 1, 'Expected rhs change to be finish at 1');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] < change['rhs-y-end'], 'Expected lhs/rhs end to be different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['lhs-y-end'] == change['lhs-y-start'] - valign, 'Expected lhs start/end to be the same');
- JsUnit.okay(change['rhs-y-end'] == (change['rhs-y-start'] + extents['em-height'] * 1 - valign), 'Expected rhs end to be 1 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- // summary:
- // Add three lines to the rhs in the middle of text.
- // description:
- // This tests inserting three lines in the rhs only in the middle of text. The visual markup
- // change for the lhs starts at the end of the lhs change (normal case), and the rhs
- // markup starts on line one of the first change, the next line of the change has 'bg' markup
- // and the final line has 'end' markup
- // example:
- // one one
- // five two
- // three
- // four
- // five
- JsUnit.test('case-5-rhs-add-three-lines-inbetween', function() {
- $('body').append($(''));
- var mergely = new Mgly.mergely;
- mergely.init($('#mergely'), {
- height: function(h) { return 400; }
- });
- mergely.lhs('one\nfive');
- mergely.rhs('one\ntwo\nthree\nfour\nfive');
- JsUnit.okay(mergely.get('lhs') == 'one\nfive', 'Expected "one five"');
- JsUnit.okay(mergely.get('rhs') == 'one\ntwo\nthree\nfour\nfive', 'Expected "one two three four five"');
- var diff = '1a2,4\n'+
- '> two\n' +
- '> three\n' +
- '> four\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'lhs', 'start', 'end'];
- var notok_classes = ['d', 'c', 'bg'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(1);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'start'];
- var notok_classes = ['d', 'c', 'bg', 'end'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(2);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'bg'];
- var notok_classes = ['d', 'c', 'start', 'end'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(3);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'a', 'rhs', 'end'];
- var notok_classes = ['d', 'c', 'start', 'bg'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 0, 'Expected lhs change to be start from 0');
- JsUnit.okay(change['lhs-line-to'] == 0, 'Expected lhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-from'] == 1, 'Expected rhs change to be finish at 1');
- JsUnit.okay(change['rhs-line-to'] == 3, 'Expected rhs change to be finish at 3');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] < change['rhs-y-end'], 'Expected lhs/rhs end to be different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['lhs-y-end'] == change['lhs-y-start'] - valign, 'Expected lhs start/end to be the same');
- JsUnit.okay(change['rhs-y-end'] == (change['rhs-y-start'] + extents['em-height'] * 3 - valign), 'Expected rhs end to be 3 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- // summary:
- // Remove one line from the lhs where the rhs is empty.
- // description:
- // This tests removing one line from the lhs only. The visual markup change for the
- // rhs usually starts at the end of the change which, when drawing the border, is
- // the bottom, but in this case, there are no lines, so there is no bottom. In this
- // case, the border must be drawn on the top. The margin markup must also take this
- // into account, and visually, it starts from the top of the line, rather than the
- // bottom. The rhs markup starts and ends on the same line.
- // example:
- // one
- JsUnit.test('case-6-lhs-remove-one-line', function() {
- $('body').append($(''));
- var mergely = new Mgly.mergely;
- mergely.init($('#mergely'), {
- height: function(h) { return 400; }
- });
- mergely.lhs('one');
- mergely.rhs('');
- JsUnit.okay(mergely.get('rhs') == '', 'Expected ""');
- JsUnit.okay(mergely.get('lhs') == 'one', 'Expected "one"');
- var diff = '1d0\n'+
- '< one\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'start', 'end', 'bg'];
- var notok_classes = ['a', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'rhs', 'start'];
- var notok_classes = ['a', 'c', 'bg', 'end'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
- var classes = lhs_info.bgClass.split(' ');
- for (var clazz in ['mergely', 'a', 'rhs', 'start', 'bg', 'end']) {
- JsUnit.okay($.inArray(clazz, classes), 'Expected lhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 0, 'Expected lhs change to be start from 0');
- JsUnit.okay(change['lhs-line-to'] == 0, 'Expected lhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-from'] == 0, 'Expected rhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-to'] == 0, 'Expected rhs change to be finish at 0');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] != change['rhs-y-end'], 'Expected lhs/rhs end to be the different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['rhs-y-end'] == change['rhs-y-start'] - valign, 'Expected rhs start/end to be the same');
- JsUnit.okay(change['lhs-y-end'] == (change['lhs-y-start'] + extents['em-height'] * 1 - valign), 'Expected lhs end to be 1 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- // summary:
- // Remove one line from the lhs at the end of text.
- // description:
- // This tests inserting one line in the rhs only at the end of text. The visual markup
- // change for the lhs starts at the end of the lhs change (normal case), and the rhs
- // markup starts and ends on the same line. This is normal insertion.
- // example:
- // one one
- // two
- JsUnit.test('case-7-lhs-remove-one-line-at-end', function() {
- $('body').append($(''));
- var mergely = new Mgly.mergely;
- mergely.init($('#mergely'), {
- height: function(h) { return 400; }
- });
- mergely.lhs('one\ntwo');
- mergely.rhs('one');
- JsUnit.okay(mergely.get('lhs') == 'one\ntwo', 'Expected "one two"');
- JsUnit.okay(mergely.get('rhs') == 'one', 'Expected "one"');
- var diff = '2d1\n'+
- '< two\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(1);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'start', 'end'];
- var notok_classes = ['a', 'c', 'bg'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'rhs', 'start', 'bg', 'end'];
- var notok_classes = ['a', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 1, 'Expected lhs change to be start from 1');
- JsUnit.okay(change['lhs-line-to'] == 1, 'Expected lhs change to be finish at 1');
- JsUnit.okay(change['rhs-line-from'] == 0, 'Expected rhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-to'] == 0, 'Expected rhs change to be finish at 0');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] != change['rhs-y-end'], 'Expected lhs/rhs end to be different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['rhs-y-end'] == change['rhs-y-start'] - valign, 'Expected rhs start/end to be the same');
- JsUnit.okay(change['lhs-y-end'] == (change['rhs-y-start'] + extents['em-height'] * 1 - valign), 'Expected rhs end to be 1 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- // summary:
- // Remove one line from the lhs before the start of text.
- // description:
- // This tests removing one line from the lhs before the start of text. The
- // The visual markup change for the lhs starts at the end of the lhs change
- // (normal case), and the rhs markup starts and ends on the same line. This is
- // normal insertion.
- // example:
- // 1 one
- // one
- JsUnit.test('case-8-lhs-remove-one-line-before', function() {
- $('body').append($(''));
- var mergely = new Mgly.mergely;
- mergely.init($('#mergely'), {
- height: function(h) { return 400; }
- });
- mergely.lhs('1\none');
- mergely.rhs('one');
- JsUnit.okay(mergely.get('lhs') == '1\none', 'Expected "1 one"');
- JsUnit.okay(mergely.get('rhs') == 'one', 'Expected "one"');
- var diff = '1d0\n'+
- '< 1\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(0);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'start', 'end', 'bg'];
- var notok_classes = ['a', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'rhs', 'start'];
- var notok_classes = ['a', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 0, 'Expected lhs change to be start from 0');
- JsUnit.okay(change['lhs-line-to'] == 0, 'Expected lhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-from'] == 0, 'Expected rhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-to'] == 0, 'Expected rhs change to be finish at 0');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] != change['rhs-y-end'], 'Expected lhs/rhs end to be different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['rhs-y-end'] == change['rhs-y-start'] - valign, 'Expected rhs start/end to be the same');
- JsUnit.okay(change['lhs-y-end'] == (change['lhs-y-start'] + extents['em-height'] * 1 - valign), 'Expected lhs end to be 1 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- // summary:
- // Remove one line from the lhs in the middle of text.
- // description:
- // This tests removing one line from the lhs in the middle of text. The visual markup
- // change for the rhs start at the end of the rhs change (normal case), and the lhs
- // markup starts and ends on the same line. This is normal delete.
- // example:
- // one one
- // two three
- // three
- JsUnit.test('case-9-rhs-remove-one-line-inbetween', function() {
- $('body').append($(''));
- var mergely = new Mgly.mergely;
- mergely.init($('#mergely'), {
- height: function(h) { return 400; }
- });
- mergely.lhs('one\ntwo\nthree');
- mergely.rhs('one\nthree');
- JsUnit.okay(mergely.get('lhs') == 'one\ntwo\nthree', 'Expected "one two three"');
- JsUnit.okay(mergely.get('rhs') == 'one\nthree', 'Expected "one three"');
- var diff = '2d1\n'+
- '< two\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(1);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'start', 'bg', 'end'];
- var notok_classes = ['a', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'rhs', 'start', 'bg', 'end'];
- var notok_classes = ['a', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 1, 'Expected lhs change to be start from 1');
- JsUnit.okay(change['lhs-line-to'] == 1, 'Expected lhs change to be finish at 1');
- JsUnit.okay(change['rhs-line-from'] == 0, 'Expected rhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-to'] == 0, 'Expected rhs change to be finish at 0');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] != change['rhs-y-end'], 'Expected lhs/rhs end to be different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['rhs-y-end'] == change['rhs-y-start'] - valign, 'Expected rhs start/end to be the same');
- JsUnit.okay(change['lhs-y-end'] == (change['lhs-y-start'] + extents['em-height'] * 1 - valign), 'Expected lhs end to be 1 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- // summary:
- // Remove three lines from the lhs in the middle of text.
- // description:
- // This tests the removal of three lines from the lhs in the middle of text.
- //
- // This tests inserting three lines in the rhs only in the middle of text. The visual markup
- // change for the lhs starts at the end of the lhs change (normal case), and the rhs
- // markup starts on line one of the first change, the next line of the change has 'bg' markup
- // and the final line has 'end' markup
- // example:
- // one one
- // two five
- // three
- // four
- // five
- JsUnit.test('case-10-lhs-remove-three-lines-inbetween', function() {
- $('body').append($(''));
- var mergely = new Mgly.mergely;
- mergely.init($('#mergely'), {
- height: function(h) { return 400; }
- });
- mergely.lhs('one\ntwo\nthree\nfour\nfive');
- mergely.rhs('one\nfive');
- JsUnit.okay(mergely.get('lhs') == 'one\ntwo\nthree\nfour\nfive', 'Expected "one two three four five"');
- JsUnit.okay(mergely.get('rhs') == 'one\nfive', 'Expected "one five"');
- var diff = '2,4d1\n'+
- '< two\n' +
- '< three\n' +
- '< four\n';
- JsUnit.okay(mergely.diff() == diff, 'Unexpected change diff');
- console.log('diff', mergely.diff());
-
- var d = new Mgly.diff(mergely.get('lhs'), mergely.get('rhs'));
- var changes = mergely._parse_diff('#mergely-lhs', '#mergely-rhs', d.normal_form());
- console.log('changes', changes);
- changes = mergely._calculate_offsets('mergely-lhs', 'mergely-rhs', changes);
- mergely._markup_changes('mergely-lhs', 'mergely-rhs', changes);
- console.log('changes', changes);
- JsUnit.okay(changes.length == 1, 'Expected 1 change');
-
- // test lhs classes
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(1);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'start'];
- var notok_classes = ['a', 'c', 'bg', 'end'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(2);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'bg'];
- var notok_classes = ['a', 'c', 'start', 'end'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
- var lhs_info = mergely.editor['mergely-lhs'].lineInfo(3);
- var classes = lhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'lhs', 'end'];
- var notok_classes = ['a', 'c', 'bg', 'start'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected lhs row to have class, "' + clazz + '", classes: ' + lhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect lhs row to have class, "' + clazz + '"');
- }
-
- // test rhs classes
- var rhs_info = mergely.editor['mergely-rhs'].lineInfo(0);
- var classes = rhs_info.bgClass.split(' ');
- var ok_classes = ['mergely', 'd', 'rhs', 'start', 'bg', 'end'];
- var notok_classes = ['a', 'c'];
- for (var i in ok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, classes) >= 0, 'Expected rhs row to have class, "' + clazz + '", classes: ' + rhs_info.bgClass);
- }
- for (var i in notok_classes) {
- var clazz = ok_classes[i];
- JsUnit.okay($.inArray(clazz, notok_classes) < 0, 'Did not expect rhs row to have class, "' + clazz + '"');
- }
-
- var extents = mergely._get_extents();
- console.log('extents', extents);
- var valign = 2.0;//vertical, esthetic alignment
- var change = changes[0];
- // diff
- JsUnit.okay(change['lhs-line-from'] == 1, 'Expected lhs change to be start from 1');
- JsUnit.okay(change['lhs-line-to'] == 3, 'Expected lhs change to be finish at 3');
- JsUnit.okay(change['rhs-line-from'] == 0, 'Expected rhs change to be finish at 0');
- JsUnit.okay(change['rhs-line-to'] == 0, 'Expected rhs change to be finish at 0');
- // markup
- JsUnit.okay(change['lhs-y-start'] == change['rhs-y-start'], 'Expected lhs/rhs start to be the same');
- JsUnit.okay(change['lhs-y-end'] != change['rhs-y-end'], 'Expected lhs/rhs end to be different');
- JsUnit.okay(change['lhs-y-start'] > 0.0, 'Expected lhs start to be more than 0');
- JsUnit.okay(change['lhs-y-end'] > 0.0, 'Expected lhs end to be more than 0');
- JsUnit.okay(change['rhs-y-start'] > 0.0, 'Expected rhs start to be more than 0');
- JsUnit.okay(change['rhs-y-end'] > 0.0, 'Expected rhs end to be more than 0');
- JsUnit.okay(change['rhs-y-end'] == change['rhs-y-start'] - valign, 'Expected rhs start/end to be the same');
- JsUnit.okay(change['lhs-y-end'] == (change['lhs-y-start'] + extents['em-height'] * 3 - valign), 'Expected rhs end to be 3 line more');
-
- if (window[this.name] != true) {
- mergely.unbind();
- $('#test-mergely').remove();
- }
- window[this.name] = true;
- });
-
- JsUnit.test('case-11-diff-file-100k-same', function() {
- var data = macbeth.join('\n');
- console.log('size', data.length);
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.test('case-11-diff-file-100k-50-changes', function() {
- var data = macbeth.join('\n');
-
- // array swap 50 lines
- var mcopy = [];
- for (var i = 0; i < macbeth.length; ++i) {
- mcopy[i] = macbeth[i];
- }
- for (var i = 0; i < 50; ++i) {
- var x1 = Math.floor((Math.random()*macbeth.length));
- var x2 = Math.floor((Math.random()*macbeth.length));
- var t = mcopy[x1];
- mcopy[x1] = mcopy[x2];
- mcopy[x2] = t;
- }
- var data2 = mcopy.join('\n');
- console.log('size', data.length);
-
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.test('case-11-diff-file-1000k-same', function() {
- var data = '';
- for (var i = 0; i < 10; ++i) {
- data += macbeth.join('\n');
- }
- console.log('size', data.length);
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.test('case-11-diff-file-1000k-500-changes', function() {
- var data = '';
- for (var i = 0; i < 10; ++i) {
- data += macbeth.join('\n');
- }
- var mcopy = [];
- for (var i = 0; i < macbeth.length; ++i) {
- mcopy[i] = macbeth[i];
- }
- // array swap 50 lines
- for (var i = 0; i < 500; ++i) {
- var x1 = Math.floor((Math.random()*macbeth.length));
- var x2 = Math.floor((Math.random()*macbeth.length));
- var t = mcopy[x1];
- mcopy[x1] = mcopy[x2];
- mcopy[x2] = t;
- }
- var data2 = mcopy.join('\n');
- console.log('size', data.length);
-
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.test('case-11-diff-file-10MB-500-changes', function() {
- var data = '';
- for (var i = 0; i < 100; ++i) {
- data += macbeth.join('\n');
- }
- var mcopy = [];
- for (var i = 0; i < macbeth.length; ++i) {
- mcopy[i] = macbeth[i];
- }
- // array swap 50 lines
- for (var i = 0; i < 500; ++i) {
- var x1 = Math.floor((Math.random()*macbeth.length));
- var x2 = Math.floor((Math.random()*macbeth.length));
- var t = mcopy[x1];
- mcopy[x1] = mcopy[x2];
- mcopy[x2] = t;
- }
- var data2 = mcopy.join('\n');
- console.log('size', data.length);
-
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.test('case-11-diff-file-100MB-500-changes', function() {
- var data = '';
- for (var i = 0; i < 1000; ++i) {
- data += macbeth.join('\n');
- }
- var mcopy = [];
- for (var i = 0; i < macbeth.length; ++i) {
- mcopy[i] = macbeth[i];
- }
- // array swap 50 lines
- for (var i = 0; i < 500; ++i) {
- var x1 = Math.floor((Math.random()*macbeth.length));
- var x2 = Math.floor((Math.random()*macbeth.length));
- var t = mcopy[x1];
- mcopy[x1] = mcopy[x2];
- mcopy[x2] = t;
- }
- var data2 = mcopy.join('\n');
- console.log('size', data.length);
-
- var t0 = new Date().getTime();
- var diff = new Mgly.diff(data, data);
- var t1 = new Date().getTime();
- console.log('diff', diff, 'time: ' + (t1 - t0));
- });
-
- JsUnit.start();
- }(JsUnit));
-});