org.sventon.diff.DiffProducerTest.java Source code

Java tutorial

Introduction

Here is the source code for org.sventon.diff.DiffProducerTest.java

Source

/*
 * ====================================================================
 * Copyright (c) 2005-2012 sventon project. All rights reserved.
 *
 * This software is licensed as described in the file LICENSE, which
 * you should have received as part of this distribution. The terms
 * are also available at http://www.sventon.org.
 * If newer versions of this license are posted there, you may use a
 * newer version instead, at your option.
 * ====================================================================
 */
package org.sventon.diff;

import de.regnis.q.sequence.line.diff.QDiffGeneratorFactory;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.sventon.model.DiffAction;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertSame;
import static org.sventon.diff.DiffSegment.Side.LEFT;
import static org.sventon.diff.DiffSegment.Side.RIGHT;

public class DiffProducerTest {

    public static final String NL = System.getProperty("line.separator");

    @Test
    public void testDoNormalDiff() throws Exception {
        final String leftString = "[.ShellClassInfo]" + NL + "IconIndex=-238" + NL + "[DeleteOnCopy]" + NL
                + "Owner=Jesper" + NL + "Owner=Patrik&Jesper" + NL + "Personalized=14" + NL
                + "PersonalizedName=Mina videoklipp" + NL;

        final String rightString = "[.ShellClassInfo]" + NL + "IconIndex=-2388" + NL + "[DeleteOnCopy]" + NL
                + "Owner=Jesper" + NL + "Owner=Patrik&Jesper" + NL + "Personalized=14" + NL
                + "PersonalizedName=Mina videoklipp" + NL + "OneMore=true" + NL + "OneMore=1" + NL + "OneMore=2"
                + NL + "OneMore=3" + NL + NL;

        final String result = "2c2" + NL + "<IconIndex=-2388" + NL + "---" + NL + ">IconIndex=-238" + NL + "8a8,12"
                + NL + ">OneMore=true" + NL + ">OneMore=1" + NL + ">OneMore=2" + NL + ">OneMore=3" + NL + ">" + NL;

        final InputStream left = IOUtils.toInputStream(leftString);
        final InputStream right = IOUtils.toInputStream(rightString);

        final DiffProducer diffProducer = new DiffProducer(left, right, null);
        final OutputStream output = new ByteArrayOutputStream();
        diffProducer.doNormalDiff(output);
        assertEquals(result, output.toString());

        final Iterator<DiffSegment> actions = DiffResultParser.parseNormalDiffResult(result).iterator();

        DiffSegment action = actions.next();
        assertSame(DiffAction.CHANGED, action.getAction());
        assertEquals(2, action.getLineIntervalStart(LEFT));
        assertEquals(2, action.getLineIntervalEnd(LEFT));
        assertEquals(2, action.getLineIntervalStart(RIGHT));
        assertEquals(2, action.getLineIntervalEnd(RIGHT));
        assertEquals("DiffSegment: CHANGED, left: 2-2, right: 2-2", action.toString());
        action = actions.next();
        assertSame(DiffAction.ADDED, action.getAction());
        assertEquals(8, action.getLineIntervalStart(LEFT));
        assertEquals(8, action.getLineIntervalEnd(LEFT));
        assertEquals(8, action.getLineIntervalStart(RIGHT));
        assertEquals(12, action.getLineIntervalEnd(RIGHT));
        assertEquals("DiffSegment: ADDED, left: 8-8, right: 8-12", action.toString());
    }

    @Test
    public void testDoNormalDiffII() throws Exception {
        final String leftString = "/**" + NL + " * $Author$" + NL + " * $Revision$" + NL + " * $Date:$" + NL + " */"
                + NL + "Test1" + NL + "Another test!" + NL + "More!" + NL + "Even more!" + NL;

        final String rightString = "/**" + NL + " * $Id$" + NL + " * $LastChangedDate$" + NL + " * $Date$" + NL
                + " * $LastChangedRevision$" + NL + " * $Revision$" + NL + " * $Rev$" + NL + " * $LastChangedBy$"
                + NL + " * $Author$" + NL + " * $HeadURL$" + NL + " * $URL$" + NL + " * $Id$" + NL + " */" + NL
                + "Test1" + NL + "Another test!" + NL + "More!" + NL + "Even more!" + NL + NL
                + "public String getRev {" + NL + " return \"$Rev$\";" + NL + NL + "}" + NL;

        final String result = "2,8d2" + NL + "< * $Id$" + NL + "< * $LastChangedDate$" + NL + "< * $Date$" + NL
                + "< * $LastChangedRevision$" + NL + "< * $Revision$" + NL + "< * $Rev$" + NL
                + "< * $LastChangedBy$" + NL + "3,4c10,12" + NL + "< * $Revision$" + NL + "< * $Date:$" + NL + "---"
                + NL + "> * $HeadURL$" + NL + "> * $URL$" + NL + "> * $Id$" + NL + "18,22d10" + NL + "<" + NL
                + "<public String getRev {" + NL + "< return \"$Rev$\";" + NL + "<" + NL + "<}" + NL;

        final InputStream left = IOUtils.toInputStream(leftString);
        final InputStream right = IOUtils.toInputStream(rightString);

        final DiffProducer diffProducer = new DiffProducer(right, left, null);
        final OutputStream output = new ByteArrayOutputStream();
        diffProducer.doNormalDiff(output);
        assertEquals(result, output.toString());

        final Iterator<DiffSegment> actions = DiffResultParser.parseNormalDiffResult(result).iterator();

        DiffSegment action = actions.next();
        assertSame(DiffAction.DELETED, action.getAction());
        assertEquals(2, action.getLineIntervalStart(LEFT));
        assertEquals(8, action.getLineIntervalEnd(LEFT));
        assertEquals(2, action.getLineIntervalStart(RIGHT));
        assertEquals(2, action.getLineIntervalEnd(RIGHT));
        assertEquals("DiffSegment: DELETED, left: 2-8, right: 2-2", action.toString());
        action = actions.next();
        assertSame(DiffAction.CHANGED, action.getAction());
        assertEquals(3, action.getLineIntervalStart(LEFT));
        assertEquals(4, action.getLineIntervalEnd(LEFT));
        assertEquals(10, action.getLineIntervalStart(RIGHT));
        assertEquals(12, action.getLineIntervalEnd(RIGHT));
        assertEquals("DiffSegment: CHANGED, left: 3-4, right: 10-12", action.toString());
        action = actions.next();
        assertSame(DiffAction.DELETED, action.getAction());
        assertEquals(18, action.getLineIntervalStart(LEFT));
        assertEquals(22, action.getLineIntervalEnd(LEFT));
        assertEquals(10, action.getLineIntervalStart(RIGHT));
        assertEquals(10, action.getLineIntervalEnd(RIGHT));
        assertEquals("DiffSegment: DELETED, left: 18-22, right: 10-10", action.toString());
    }

    @Test
    public void testDoNormalDiffIII() throws Exception {
        final String leftString = NL + "test" + NL;
        final String rightString = "test" + NL;
        final String result = "1d1" + NL + "<" + NL;

        final InputStream left = new ByteArrayInputStream(leftString.getBytes());
        final InputStream right = new ByteArrayInputStream(rightString.getBytes());

        final DiffProducer diffProducer = new DiffProducer(left, right, null);
        final OutputStream output = new ByteArrayOutputStream();
        diffProducer.doNormalDiff(output);
        assertEquals(result, output.toString());
    }

    @Test
    public void testDoNormalDiffNoDiff() throws Exception {
        final String leftString = "More!" + NL + "Even more!" + NL;

        final String rightString = "More!" + NL + "Even more!" + NL;

        final InputStream left = IOUtils.toInputStream(leftString);
        final InputStream right = IOUtils.toInputStream(rightString);

        final DiffProducer diffProducer = new DiffProducer(left, right, null);
        final OutputStream output = new ByteArrayOutputStream();
        diffProducer.doNormalDiff(output);
        assertEquals("", output.toString());
    }

    @Test
    public void testDoUnifiedDiffNoGutter() throws Exception {
        final String leftString = "[.ShellClassInfo]" + NL + "IconIndex=-238" + NL + "[DeleteOnCopy]" + NL
                + "Owner=Jesper" + NL + "Owner=Patrik&Jesper" + NL + "Personalized=14" + NL
                + "PersonalizedName=Mina videoklipp" + NL;

        final String rightString = "[.ShellClassInfo]" + NL + "IconIndex=-2388" + NL + "[DeleteOnCopy]" + NL
                + "Owner=Jesper" + NL + "Owner=Patrik&Jesper" + NL + "Personalized=14" + NL
                + "PersonalizedName=Mina videoklipp" + NL + "OneMore=true" + NL + "OneMore=1" + NL + "OneMore=2"
                + NL + "OneMore=3" + NL + NL;

        final String result = "@@ -2 +2 @@" + NL + "-IconIndex=-238" + NL + "+IconIndex=-2388" + NL
                + "@@ -8 +8,5 @@" + NL + "+OneMore=true" + NL + "+OneMore=1" + NL + "+OneMore=2" + NL + "+OneMore=3"
                + NL + "+" + NL;

        final InputStream left = IOUtils.toInputStream(leftString);
        final InputStream right = IOUtils.toInputStream(rightString);

        final Map props = new HashMap();
        //noinspection unchecked
        props.put(QDiffGeneratorFactory.GUTTER_PROPERTY, 0);
        final DiffProducer diffProducer = new DiffProducer(left, right, null, props);
        final OutputStream output = new ByteArrayOutputStream();
        diffProducer.doUnifiedDiff(output);
        assertEquals(result, output.toString());
    }
}