add Diff3 library

This commit is contained in:
Bryan Housel
2014-12-12 23:56:00 -05:00
parent 977e29cfdb
commit 381142356b
7 changed files with 526 additions and 0 deletions
+2
View File
@@ -31,6 +31,7 @@
<script src='../js/lib/d3.value.js'></script>
<script src='../js/lib/d3-compat.js'></script>
<script src='../js/lib/bootstrap-tooltip.js'></script>
<script src='../js/lib/diff3.js'></script>
<script src='../js/lib/rbush.js'></script>
<script src='../js/lib/togeojson.js'></script>
<script src='../js/lib/osmauth.js'></script>
@@ -214,6 +215,7 @@
<!-- include spec files here... -->
<script src="spec/lib/d3.combobox.js"></script>
<script src="spec/lib/d3.keybinding.js"></script>
<script src="spec/lib/diff3.js"></script>
<script src="spec/lib/locale.js"></script>
<script src="spec/actions/add_member.js"></script>
+1
View File
@@ -25,6 +25,7 @@
<!-- include spec files here... -->
<script src="spec/lib/d3.keybinding.js"></script>
<script src="spec/lib/diff3.js"></script>
<script src="spec/lib/locale.js"></script>
<script src="spec/actions/add_entity.js"></script>
+89
View File
@@ -0,0 +1,89 @@
describe("diff3", function() {
function split(s) {
return s ? s.split(/ /) : [];
}
it('performs diff3 merge', function() {
var o = split('AA ZZ 00 M 99'),
a = split('AA a b c ZZ new 00 a a M 99'),
b = split('AA a d c ZZ 11 M z z 99'),
res = Diff3.diff3_merge(a, o, b);
/*
AA
<<<<<<< a
a
b
c
||||||| o
=======
a
d
c
>>>>>>> b
ZZ
<<<<<<< a
new
00
a
a
||||||| o
00
=======
11
>>>>>>> b
M
z
z
99
*/
expect(res[0].ok).to.eql(['AA']);
expect(res[0].conflict).to.be.undefined;
expect(res[1].ok).to.be.undefined;
expect(res[1].conflict.o).to.eql([]);
expect(res[1].conflict.a).to.eql(['a', 'b', 'c']);
expect(res[1].conflict.b).to.eql(['a', 'd', 'c']);
expect(res[2].ok).to.eql(['ZZ']);
expect(res[2].conflict).to.be.undefined;
expect(res[3].ok).to.be.undefined;
expect(res[3].conflict.o).to.eql(['00']);
expect(res[3].conflict.a).to.eql(['new', '00', 'a', 'a']);
expect(res[3].conflict.b).to.eql(['11']);
expect(res[4].ok).to.eql(['M', 'z', 'z', '99']);
expect(res[4].conflict).to.be.undefined;
});
it('can include false conflicts', function() {
var o = split('AA ZZ'),
a = split('AA a b c ZZ'),
b = split('AA a b c ZZ'),
res = Diff3.diff3_merge(a, o, b, false);
expect(res[0].ok).to.eql(['AA']);
expect(res[0].conflict).to.be.undefined;
expect(res[1].ok).to.be.undefined;
expect(res[1].conflict.o).to.eql([]);
expect(res[1].conflict.a).to.eql(['a', 'b', 'c']);
expect(res[1].conflict.b).to.eql(['a', 'b', 'c']);
expect(res[2].ok).to.eql(['ZZ']);
expect(res[2].conflict).to.be.undefined;
});
it('can exclude false conflicts', function() {
var o = split('AA ZZ'),
a = split('AA a b c ZZ'),
b = split('AA a b c ZZ'),
res = Diff3.diff3_merge(a, o, b, true);
expect(res[0].ok).to.eql(['AA', 'a', 'b', 'c', 'ZZ']);
expect(res[0].conflict).to.be.undefined;
});
});