Skip to content
This repository was archived by the owner on Nov 12, 2019. It is now read-only.

Commit a37fca2

Browse files
committed
Fix unit test, that gives array out of bounds
1 parent 3525f0b commit a37fca2

File tree

2 files changed

+115
-7
lines changed

2 files changed

+115
-7
lines changed

Diff for: src/main/java/difflib/DiffRowGenerator.java

+13-2
Original file line numberDiff line numberDiff line change
@@ -457,8 +457,19 @@ private void addInlineDiffs(Delta<String> delta) {
457457
}
458458
}
459459

460-
delta.getOriginal().setLines(Arrays.asList(Utils.join(origList, "").split(NEW_LINE)));
461-
delta.getRevised().setLines(Arrays.asList(Utils.join(revList, "").split(NEW_LINE)));
460+
delta.getOriginal().setLines(addMissingLines(origList, orig.size()));
461+
delta.getRevised().setLines(addMissingLines(revList, rev.size()));
462+
}
463+
464+
private List<String> addMissingLines(final List<String> lines, final int targetSize) {
465+
List<String> tempList = Arrays.asList(Utils.join(lines, "").split(NEW_LINE));
466+
if (tempList.size() < targetSize) {
467+
tempList = new ArrayList<>(tempList);
468+
while (tempList.size() < targetSize) {
469+
tempList.add("");
470+
}
471+
}
472+
return tempList;
462473
}
463474

464475
private static final LinkedList<String> charArrayToStringList(char[] cs) {

Diff for: src/test/java/diffutils/DiffRowGeneratorTest.java

+102-5
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package diffutils;
22

3-
import java.util.Arrays;
4-
import java.util.List;
5-
63
import difflib.DiffRow;
74
import difflib.DiffRowGenerator;
8-
95
import junit.framework.TestCase;
106

7+
import java.util.Arrays;
8+
import java.util.List;
9+
10+
import static org.hamcrest.core.Is.is;
11+
import static org.junit.Assert.assertThat;
12+
1113
public class DiffRowGeneratorTest extends TestCase {
1214

1315
public void testGenerator_Default() {
@@ -35,7 +37,7 @@ public void testGenerator_InlineDiff() {
3537
print(rows);
3638

3739
assertEquals(3, rows.size());
38-
assertTrue(rows.get(0).getOldLine().indexOf("<span") > 0);
40+
assertTrue(rows.get(0).getOldLine().indexOf("<del>") > 0);
3941
}
4042

4143
public void testGenerator_IgnoreWhitespaces() {
@@ -56,6 +58,101 @@ public void testGenerator_IgnoreWhitespaces() {
5658
assertEquals(rows.get(3).getTag(), DiffRow.Tag.CHANGE);
5759
}
5860

61+
public void testChangeToEmptyLine() {
62+
String first = "Test \n \no\n";
63+
String second ="Test\n\no\n";
64+
65+
DiffRowGenerator generator = new DiffRowGenerator.Builder()
66+
.showInlineDiffs(true)
67+
.columnWidth(Integer.MAX_VALUE) // do not wrap
68+
.build();
69+
List<DiffRow> rows = generator.generateDiffRows(split(first), split(second));
70+
print(rows);
71+
72+
assertEquals(3, rows.size());
73+
assertThat(rows.size(), is(3));
74+
assertThat(rows.get(0).getTag(), is(DiffRow.Tag.CHANGE));
75+
assertThat(rows.get(0).getOldLine().indexOf("<del>"), is(4));
76+
assertThat(rows.get(1).getTag(), is(DiffRow.Tag.CHANGE));
77+
assertThat(rows.get(1).getOldLine().indexOf("<del>"), is(0));
78+
assertThat(rows.get(2).getTag(), is(DiffRow.Tag.EQUAL));
79+
}
80+
81+
public void testChangeToTwoEmptyLine() {
82+
String first = "One\n \nTwo\n \nThree\n";
83+
String second ="One\n\nTwo\n\nThree\n";
84+
85+
DiffRowGenerator generator = new DiffRowGenerator.Builder()
86+
.showInlineDiffs(true)
87+
.columnWidth(Integer.MAX_VALUE) // do not wrap
88+
.build();
89+
List<DiffRow> rows = generator.generateDiffRows(split(first), split(second));
90+
print(rows);
91+
92+
assertEquals(5, rows.size());
93+
assertThat(rows.get(0).getTag(), is(DiffRow.Tag.EQUAL));
94+
95+
assertThat(rows.get(1).getTag(), is(DiffRow.Tag.CHANGE));
96+
assertThat(rows.get(1).getOldLine().indexOf("<del>"), is(0));
97+
98+
assertThat(rows.get(2).getTag(), is(DiffRow.Tag.EQUAL));
99+
100+
assertThat(rows.get(3).getTag(), is(DiffRow.Tag.CHANGE));
101+
assertThat(rows.get(3).getOldLine().indexOf("<del>"), is(0));
102+
103+
}
104+
105+
public void testDeleteLine() {
106+
String first ="Equal Line\nDeleted Line\nEqual Line 2\n";
107+
String second = "Equal Line\nEqual Line 2\n";
108+
109+
DiffRowGenerator generator = new DiffRowGenerator.Builder()
110+
.showInlineDiffs(true)
111+
.columnWidth(Integer.MAX_VALUE) // do not wrap
112+
.build();
113+
List<DiffRow> rows = generator.generateDiffRows(split(first), split(second));
114+
print(rows);
115+
116+
assertThat(rows.size(), is(3));
117+
assertThat(rows.get(0).getTag(), is(DiffRow.Tag.EQUAL));
118+
assertThat(rows.get(1).getTag(), is(DiffRow.Tag.DELETE));
119+
assertThat(rows.get(2).getTag(), is(DiffRow.Tag.EQUAL));
120+
}
121+
122+
public void testInsertedLine() {
123+
String first = "Equal Line\nEqual Line 2\n";
124+
String second = "Equal Line\nDeleted Line\nEqual Line 2\n";
125+
126+
DiffRowGenerator generator = new DiffRowGenerator.Builder()
127+
.showInlineDiffs(true)
128+
.columnWidth(Integer.MAX_VALUE) // do not wrap
129+
.build();
130+
List<DiffRow> rows = generator.generateDiffRows(split(first), split(second));
131+
print(rows);
132+
133+
assertThat(rows.size(), is(3));
134+
assertThat(rows.get(0).getTag(), is(DiffRow.Tag.EQUAL));
135+
assertThat(rows.get(1).getTag(), is(DiffRow.Tag.INSERT));
136+
assertThat(rows.get(2).getTag(), is(DiffRow.Tag.EQUAL));
137+
}
138+
139+
public void testChangedLine() {
140+
String first = "Equal Line\nLine to be changed\nEqual Line 2\n";
141+
String second = "Equal Line\nLine changed test\nEqual Line 2\n";
142+
143+
DiffRowGenerator generator = new DiffRowGenerator.Builder()
144+
.showInlineDiffs(true)
145+
.columnWidth(Integer.MAX_VALUE) // do not wrap
146+
.build();
147+
List<DiffRow> rows = generator.generateDiffRows(split(first), split(second));
148+
print(rows);
149+
150+
assertThat(rows.size(), is(3));
151+
assertThat(rows.get(0).getTag(), is(DiffRow.Tag.EQUAL));
152+
assertThat(rows.get(1).getTag(), is(DiffRow.Tag.CHANGE));
153+
assertThat(rows.get(2).getTag(), is(DiffRow.Tag.EQUAL));
154+
}
155+
59156
private List<String> split(String content) {
60157
return Arrays.asList(content.split("\n"));
61158
}

0 commit comments

Comments
 (0)