Skip to content

Commit e13e1a7

Browse files
committed
Clean up tests, add tests for yaml compare
(re: #46)
1 parent 4dc318a commit e13e1a7

4 files changed

Lines changed: 170 additions & 110 deletions

File tree

test/diff3Merge.test.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ test('diff3Merge', t => {
135135

136136

137137
t.test('avoids improper hunk sorting - see openstreetmap/iD#3058', t => {
138-
const a = ['n4100522632', 'n4100697091', 'n4100697136', 'n-10000', 'n4102671583', 'n4102671584', 'n4102671585', 'n4102671586', 'n4102671587', 'n4102671588', 'n4102677889', 'n4102677890', 'n4094374176'];
139138
const o = ['n4100522632', 'n4100697091', 'n4100697136', 'n4102671583', 'n4102671584', 'n4102671585', 'n4102671586', 'n4102671587', 'n4102671588', 'n4102677889', 'n4102677890', 'n4094374176'];
139+
const a = ['n4100522632', 'n4100697091', 'n4100697136', 'n-10000', 'n4102671583', 'n4102671584', 'n4102671585', 'n4102671586', 'n4102671587', 'n4102671588', 'n4102677889', 'n4102677890', 'n4094374176'];
140140
const b = ['n4100522632', 'n4100697091', 'n4100697136', 'n4102671583', 'n4102671584', 'n4102671585', 'n4102671586', 'n4102671587', 'n4102671588', 'n4102677889', 'n4105613618', 'n4102677890', 'n4105613617', 'n4094374176'];
141141
const expected = ['n4100522632', 'n4100697091', 'n4100697136', 'n-10000', 'n4102671583', 'n4102671584', 'n4102671585', 'n4102671586', 'n4102671587', 'n4102671588', 'n4102677889', 'n4105613618', 'n4102677890', 'n4105613617', 'n4094374176'];
142142
const result = Diff3.diff3Merge(a, o, b);
@@ -145,5 +145,22 @@ test('diff3Merge', t => {
145145
t.end();
146146
});
147147

148+
149+
t.test('yaml comparison - issue #46', t => {
150+
const o = `title: "title"
151+
description: "description"`;
152+
const a = `title: "title"
153+
description: "description changed"`;
154+
const b = `title: "title changed"
155+
description: "description"`;
156+
const result = Diff3.diff3Merge(a, o, b, { stringSeparator: /[\r\n]+/ });
157+
158+
t.same(result[0].ok, undefined);
159+
t.same(result[0].conflict.o, ['title: "title"', 'description: "description"']);
160+
t.same(result[0].conflict.a, ['title: "title"', 'description: "description changed"']);
161+
t.same(result[0].conflict.b, ['title: "title changed"', 'description: "description"']);
162+
t.end();
163+
});
164+
148165
t.end();
149166
});

test/merge.test.js

Lines changed: 53 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,45 +7,72 @@ test('merge', t => {
77
const o = ['AA'];
88
const a = ['AA'];
99
const b = ['AA'];
10+
const expected = ['AA'];
11+
1012
const r = Diff3.merge(a, o, b);
1113
t.notOk(r.conflict);
12-
const result = r.result;
13-
t.same(result[0], 'AA');
14+
t.same(r.result, expected);
1415
t.end();
1516
});
1617

18+
1719
t.test('returns a diff3-style merge result', t => {
1820
const o = ['AA', 'ZZ', '00', 'M', '99'];
1921
const a = ['AA', 'a', 'b', 'c', 'ZZ', 'new', '00', 'a', 'a', 'M', '99'];
2022
const b = ['AA', 'a', 'd', 'c', 'ZZ', '11', 'M', 'z', 'z', '99'];
23+
const expected = [
24+
'AA',
25+
'\n<<<<<<<<<\n',
26+
'a',
27+
'b',
28+
'c',
29+
'\n=========\n',
30+
'a',
31+
'd',
32+
'c',
33+
'\n>>>>>>>>>\n',
34+
'ZZ',
35+
'\n<<<<<<<<<\n',
36+
'new',
37+
'00',
38+
'a',
39+
'a',
40+
'\n=========\n',
41+
'11',
42+
'\n>>>>>>>>>\n',
43+
'M',
44+
'z',
45+
'z',
46+
'99'
47+
];
48+
2149
const r = Diff3.merge(a, o, b);
2250
t.ok(r.conflict);
51+
t.same(r.result, expected);
52+
t.end();
53+
});
54+
2355

24-
const result = r.result;
25-
t.same(result[0], 'AA');
26-
t.same(result[1], '\n<<<<<<<<<\n');
27-
t.same(result[2], 'a');
28-
t.same(result[3], 'b');
29-
t.same(result[4], 'c');
30-
t.same(result[5], '\n=========\n');
31-
t.same(result[6], 'a');
32-
t.same(result[7], 'd');
33-
t.same(result[8], 'c');
34-
t.same(result[9], '\n>>>>>>>>>\n');
35-
t.same(result[10], 'ZZ');
36-
t.same(result[11], '\n<<<<<<<<<\n');
37-
t.same(result[12], 'new');
38-
t.same(result[13], '00');
39-
t.same(result[14], 'a');
40-
t.same(result[15], 'a');
41-
t.same(result[16], '\n=========\n');
42-
t.same(result[17], '11');
43-
t.same(result[18], '\n>>>>>>>>>\n');
44-
t.same(result[19], 'M');
45-
t.same(result[20], 'z');
46-
t.same(result[21], 'z');
47-
t.same(result[22], '99');
56+
t.test('yaml comparison - issue #46', t => {
57+
const o = `title: "title"
58+
description: "description"`;
59+
const a = `title: "title"
60+
description: "description changed"`;
61+
const b = `title: "title changed"
62+
description: "description"`;
63+
const expected = [
64+
'\n<<<<<<<<<\n',
65+
'title: "title"',
66+
'description: "description changed"',
67+
'\n=========\n',
68+
'title: "title changed"',
69+
'description: "description"',
70+
'\n>>>>>>>>>\n'
71+
];
4872

73+
const r = Diff3.merge(a, o, b, { stringSeparator: /[\r\n]+/ });
74+
t.ok(r.conflict);
75+
t.same(r.result, expected);
4976
t.end();
5077
});
5178

test/mergeDiff3.test.js

Lines changed: 69 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -3,69 +3,82 @@ import * as Diff3 from '../index.mjs';
33

44
test('mergeDiff3', t => {
55

6+
t.test('returns conflict: false if no conflicts', t => {
7+
const o = ['AA'];
8+
const a = ['AA'];
9+
const b = ['AA'];
10+
const expected = ['AA'];
11+
12+
const r = Diff3.mergeDiff3(a, o, b);
13+
t.notOk(r.conflict);
14+
t.same(r.result, expected);
15+
t.end();
16+
});
17+
18+
619
t.test('performs merge diff3 on arrays', t => {
720
const o = ['AA', 'ZZ', '00', 'M', '99'];
821
const a = ['AA', 'a', 'b', 'c', 'ZZ', 'new', '00', 'a', 'a', 'M', '99'];
922
const b = ['AA', 'a', 'd', 'c', 'ZZ', '11', 'M', 'z', 'z', '99'];
10-
const result = Diff3.mergeDiff3(a, o, b, { label: { a: 'a', o: 'o', b: 'b' } });
23+
const expected = [
24+
'AA',
25+
'<<<<<<< a',
26+
'a',
27+
'b',
28+
'c',
29+
'||||||| o',
30+
'=======',
31+
'a',
32+
'd',
33+
'c',
34+
'>>>>>>> b',
35+
'ZZ',
36+
'<<<<<<< a',
37+
'new',
38+
'00',
39+
'a',
40+
'a',
41+
'||||||| o',
42+
'00',
43+
'=======',
44+
'11',
45+
'>>>>>>> b',
46+
'M',
47+
'z',
48+
'z',
49+
'99'
50+
];
51+
52+
const r = Diff3.mergeDiff3(a, o, b, { label: { a: 'a', o: 'o', b: 'b' } });
53+
t.ok(r.conflict);
54+
t.same(r.result, expected);
55+
t.end();
56+
});
1157

12-
/*
13-
AA
14-
<<<<<<< a
15-
a
16-
b
17-
c
18-
||||||| o
19-
=======
20-
a
21-
d
22-
c
23-
>>>>>>> b
24-
ZZ
25-
<<<<<<< a
26-
new
27-
00
28-
a
29-
a
30-
||||||| o
31-
00
32-
=======
33-
11
34-
>>>>>>> b
35-
M
36-
z
37-
z
38-
99
39-
*/
4058

41-
t.same(result.conflict, true);
42-
t.same(result.result[0], 'AA');
43-
t.same(result.result[1], '<<<<<<< a');
44-
t.same(result.result[2], 'a');
45-
t.same(result.result[3], 'b');
46-
t.same(result.result[4], 'c');
47-
t.same(result.result[5], '||||||| o');
48-
t.same(result.result[6], '=======');
49-
t.same(result.result[7], 'a');
50-
t.same(result.result[8], 'd');
51-
t.same(result.result[9], 'c');
52-
t.same(result.result[10], '>>>>>>> b');
53-
t.same(result.result[11], 'ZZ');
54-
t.same(result.result[12], '<<<<<<< a');
55-
t.same(result.result[13], 'new');
56-
t.same(result.result[14], '00');
57-
t.same(result.result[15], 'a');
58-
t.same(result.result[16], 'a');
59-
t.same(result.result[17], '||||||| o');
60-
t.same(result.result[18], '00');
61-
t.same(result.result[19], '=======');
62-
t.same(result.result[20], '11');
63-
t.same(result.result[21], '>>>>>>> b');
64-
t.same(result.result[22], 'M');
65-
t.same(result.result[23], 'z');
66-
t.same(result.result[24], 'z');
67-
t.same(result.result[25], '99');
59+
t.test('yaml comparison - issue #46', t => {
60+
const o = `title: "title"
61+
description: "description"`;
62+
const a = `title: "title"
63+
description: "description changed"`;
64+
const b = `title: "title changed"
65+
description: "description"`;
66+
const expected = [
67+
'<<<<<<< a',
68+
'title: "title"',
69+
'description: "description changed"',
70+
'||||||| o',
71+
'title: "title"',
72+
'description: "description"',
73+
'=======',
74+
'title: "title changed"',
75+
'description: "description"',
76+
'>>>>>>> b'
77+
];
6878

79+
const r = Diff3.mergeDiff3(a, o, b, { label: { a: 'a', o: 'o', b: 'b' }, stringSeparator: /[\r\n]+/ });
80+
t.ok(r.conflict);
81+
t.same(r.result, expected);
6982
t.end();
7083
});
7184

test/mergeDigIn.test.js

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,43 +7,46 @@ test('mergeDigIn', t => {
77
const o = ['AA'];
88
const a = ['AA'];
99
const b = ['AA'];
10-
const r = Diff3.merge(a, o, b);
10+
const expected = ['AA'];
11+
12+
const r = Diff3.mergeDigIn(a, o, b);
1113
t.notOk(r.conflict);
12-
const result = r.result;
13-
t.same(result[0], 'AA');
14+
t.same(r.result, expected);
1415
t.end();
1516
});
1617

18+
1719
t.test('returns a digin-style merge result', t => {
1820
const o = ['AA', 'ZZ', '00', 'M', '99'];
1921
const a = ['AA', 'a', 'b', 'c', 'ZZ', 'new', '00', 'a', 'a', 'M', '99'];
2022
const b = ['AA', 'a', 'd', 'c', 'ZZ', '11', 'M', 'z', 'z', '99'];
23+
const expected = [
24+
'AA',
25+
'a',
26+
'\n<<<<<<<<<\n',
27+
'b',
28+
'\n=========\n',
29+
'd',
30+
'\n>>>>>>>>>\n',
31+
'c',
32+
'ZZ',
33+
'\n<<<<<<<<<\n',
34+
'new',
35+
'00',
36+
'a',
37+
'a',
38+
'\n=========\n',
39+
'11',
40+
'\n>>>>>>>>>\n',
41+
'M',
42+
'z',
43+
'z',
44+
'99'
45+
];
46+
2147
const r = Diff3.mergeDigIn(a, o, b);
2248
t.ok(r.conflict);
23-
24-
const result = r.result;
25-
t.same(result[0], 'AA');
26-
t.same(result[1], 'a');
27-
t.same(result[2], '\n<<<<<<<<<\n');
28-
t.same(result[3], 'b');
29-
t.same(result[4], '\n=========\n');
30-
t.same(result[5], 'd');
31-
t.same(result[6], '\n>>>>>>>>>\n');
32-
t.same(result[7], 'c');
33-
t.same(result[8], 'ZZ');
34-
t.same(result[9], '\n<<<<<<<<<\n');
35-
t.same(result[10], 'new');
36-
t.same(result[11], '00');
37-
t.same(result[12], 'a');
38-
t.same(result[13], 'a');
39-
t.same(result[14], '\n=========\n');
40-
t.same(result[15], '11');
41-
t.same(result[16], '\n>>>>>>>>>\n');
42-
t.same(result[17], 'M');
43-
t.same(result[18], 'z');
44-
t.same(result[19], 'z');
45-
t.same(result[20], '99');
46-
49+
t.same(r.result, expected);
4750
t.end();
4851
});
4952

0 commit comments

Comments
 (0)