1919import java .util .List ;
2020import static java .util .stream .Collectors .toList ;
2121import java .util .zip .ZipFile ;
22+ import static org .assertj .core .api .Assertions .assertThat ;
2223import static org .junit .jupiter .api .Assertions .assertEquals ;
2324import static org .junit .jupiter .api .Assertions .assertNotNull ;
2425import static org .junit .jupiter .api .Assertions .assertTrue ;
@@ -160,11 +161,11 @@ public void testDiffMyersExample1() {
160161assertEquals (4 ,patch .getDeltas ().size ());
161162assertEquals ("Patch{deltas=[[DeleteDelta, position: 0, lines: [A, B]], [InsertDelta, position: 3, lines: [B]], [DeleteDelta, position: 5, lines: [B]], [InsertDelta, position: 7, lines: [C]]]}" ,patch .toString ());
162163 }
163-
164+
164165@ Test
165166public void testDiff_Equal () {
166167final Patch <String >patch =DiffUtils .diff (
167- Arrays .asList ("hhh" ,"jjj" ,"kkk" ),
168+ Arrays .asList ("hhh" ,"jjj" ,"kkk" ),
168169Arrays .asList ("hhh" ,"jjj" ,"kkk" ),true );
169170assertNotNull (patch );
170171assertEquals (1 ,patch .getDeltas ().size ());
@@ -173,22 +174,57 @@ public void testDiff_Equal() {
173174assertEquals (new Chunk <>(0 ,Arrays .asList ("hhh" ,"jjj" ,"kkk" )),delta .getSource ());
174175assertEquals (new Chunk <>(0 ,Arrays .asList ("hhh" ,"jjj" ,"kkk" )),delta .getTarget ());
175176 }
176-
177- @ Test
177+
178+ @ Test
178179public void testDiff_InsertWithEqual () {
179180final Patch <String >patch =DiffUtils .diff (Arrays .asList ("hhh" ),Arrays .
180181asList ("hhh" ,"jjj" ,"kkk" ),true );
181182assertNotNull (patch );
182183assertEquals (2 ,patch .getDeltas ().size ());
183-
184+
184185AbstractDelta <String >delta =patch .getDeltas ().get (0 );
185186assertTrue (delta instanceof EqualDelta );
186187assertEquals (new Chunk <>(0 ,Arrays .asList ("hhh" )),delta .getSource ());
187188assertEquals (new Chunk <>(0 ,Arrays .asList ("hhh" )),delta .getTarget ());
188-
189+
189190delta =patch .getDeltas ().get (1 );
190191assertTrue (delta instanceof InsertDelta );
191192assertEquals (new Chunk <>(1 ,Collections .<String >emptyList ()),delta .getSource ());
192193assertEquals (new Chunk <>(1 ,Arrays .asList ("jjj" ,"kkk" )),delta .getTarget ());
193194 }
195+
196+ @ Test
197+ public void testDiff_ProblemIssue42 () {
198+ final Patch <String >patch =DiffUtils .diff (
199+ Arrays .asList ("The" ,"dog" ,"is" ,"brown" ),
200+ Arrays .asList ("The" ,"fox" ,"is" ,"down" ),true );
201+
202+ System .out .println (patch );
203+ assertNotNull (patch );
204+ assertEquals (4 ,patch .getDeltas ().size ());
205+
206+
207+ assertThat (patch .getDeltas ()).extracting (d ->d .getType ().name ())
208+ .containsExactly ("EQUAL" ,"CHANGE" ,"EQUAL" ,"CHANGE" );
209+
210+ AbstractDelta <String >delta =patch .getDeltas ().get (0 );
211+ assertTrue (delta instanceof EqualDelta );
212+ assertEquals (new Chunk <>(0 ,Arrays .asList ("The" )),delta .getSource ());
213+ assertEquals (new Chunk <>(0 ,Arrays .asList ("The" )),delta .getTarget ());
214+
215+ delta =patch .getDeltas ().get (1 );
216+ assertTrue (delta instanceof ChangeDelta );
217+ assertEquals (new Chunk <>(1 ,Arrays .asList ("dog" )),delta .getSource ());
218+ assertEquals (new Chunk <>(1 ,Arrays .asList ("fox" )),delta .getTarget ());
219+
220+ delta =patch .getDeltas ().get (2 );
221+ assertTrue (delta instanceof EqualDelta );
222+ assertEquals (new Chunk <>(2 ,Arrays .asList ("is" )),delta .getSource ());
223+ assertEquals (new Chunk <>(2 ,Arrays .asList ("is" )),delta .getTarget ());
224+
225+ delta =patch .getDeltas ().get (3 );
226+ assertTrue (delta instanceof ChangeDelta );
227+ assertEquals (new Chunk <>(3 ,Arrays .asList ("brown" )),delta .getSource ());
228+ assertEquals (new Chunk <>(3 ,Arrays .asList ("down" )),delta .getTarget ());
229+ }
194230}