java-diff-utils icon indicating copy to clipboard operation
java-diff-utils copied to clipboard

Change line has wrong diff indicators

Open GoogleCodeExporter opened this issue 9 years ago • 1 comments

What steps will reproduce the problem?

This JUnit test fails on the 2nd assert:

    public final void testGenerateDiffRowsListOfStringListOfStringChange1() {

        DiffRowGenerator generator = new DiffRowGenerator.Builder().showInlineDiffs(true).ignoreWhiteSpaces(true)
                .columnWidth(100).build();

        List<String> revised = new ArrayList<String>();
        List<String> original = new ArrayList<String>();

        original.add("aaaaa");
        revised.add("aabaa");

        List<DiffRow> result = generator.generateDiffRows(original, revised);

        assertEquals("wrong size", 1, result.size());

        assertEquals("wrong tag", DiffRow.Tag.CHANGE, result.get(0).getTag());
        assertEquals("wrong new value", "aa<span class=\"editNewInline\">b</span>aa", result.get(0).getNewLine());
        assertEquals("wrong old value", "aa<span class=\"editOldInline\">a</span>aa", result.get(0).getOldLine());
    }

What is the expected output? What do you see instead?

junit.framework.ComparisonFailure: wrong old value expected:<aa[<span 
class="editOldInline">a</span>aa]> but was:<aa[aa<span 
class="editOldInline">a</span>]>
    at junit.framework.Assert.assertEquals(Assert.java:81)

Note that the difference for the "old" line indicates the changed part is the 
last "a" and not the middle "a" where it should be.

What version of the product are you using? On what operating system?

Downloaded this file: java-diff-utils-1.2src.zip
Windows XP

Please provide any additional information below.


Original issue reported on code.google.com by [email protected] on 2 May 2011 at 2:31

Attachments:

GoogleCodeExporter avatar Feb 28 '16 10:02 GoogleCodeExporter

if you use "abcde" and "ab*de" it will show a single change from 'c' to '*' but 
this shows what the algorighm is doing "wrong". If it is thinking in terms of 
inserts and deletes only for "aaaaa" -> "aa*aa", there is no difference between 
the steps a, a, delete-a, insert-*, a, a and the steps a, a, insert-*, a, a, 
delete-a and it only happens when there are repeated characters (in this case 
'a' characters) after the change point. I'm guessing the delete-insert when 
together turn into a change but the delete and insert separated by two 'a' 
characters wouldn't. So ... if you decide it is a bug, the problem is in the 
way the diff algorithm weighs the cost of inserts and deletes when optimizing. 
Deletes and inserts that are next to each other can turn into a change and 
should weigh, together, the same as a single delete or insert.

Original comment by [email protected] on 4 May 2011 at 11:19

GoogleCodeExporter avatar Feb 28 '16 10:02 GoogleCodeExporter