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)); -});