/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.diff;
import com.liferay.portal.kernel.diff.Diff;
import com.liferay.portal.kernel.diff.DiffResult;
import com.liferay.portal.kernel.io.unsync.UnsyncStringReader;
import com.liferay.portal.kernel.util.FileUtil;
import com.liferay.portal.util.FileImpl;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* @author Bruno Farache
*/
public class DiffImplTest {
@BeforeClass
public static void setUpClass() {
FileUtil fileUtil = new FileUtil();
fileUtil.setFile(new FileImpl());
}
@Test
public void testEight() {
Reader reader1 = new UnsyncStringReader("add\nbbb\nccc");
Reader reader2 = new UnsyncStringReader("bbb\nccc\naee");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
expectedSource.add(
new DiffResult(0, Diff.OPEN_DEL + "add" + Diff.CLOSE_DEL));
expectedTarget.add(new DiffResult(0, Diff.CONTEXT_LINE));
List<String> changedLines = new ArrayList<>();
changedLines.add("bbb");
changedLines.add("ccc");
changedLines.add(Diff.CONTEXT_LINE);
expectedSource.add(new DiffResult(2, changedLines));
changedLines = new ArrayList<>();
changedLines.add("bbb");
changedLines.add("ccc");
changedLines.add(Diff.OPEN_INS + "aee" + Diff.CLOSE_INS);
expectedTarget.add(new DiffResult(2, changedLines));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testEleven() {
Reader reader1 = new UnsyncStringReader("aaa\nbbb\nfff");
Reader reader2 = new UnsyncStringReader("ccc\nada\nbeb");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
expectedSource.add(new DiffResult(0, Diff.CONTEXT_LINE));
expectedTarget.add(
new DiffResult(0, Diff.OPEN_INS + "ccc" + Diff.CLOSE_INS));
expectedSource.add(
new DiffResult(
0, "a" + Diff.OPEN_DEL + "a" + Diff.CLOSE_DEL + "a"));
expectedTarget.add(
new DiffResult(
1, "a" + Diff.OPEN_INS + "d" + Diff.CLOSE_INS + "a"));
expectedSource.add(
new DiffResult(
1, "b" + Diff.OPEN_DEL + "b" + Diff.CLOSE_DEL + "b"));
expectedTarget.add(
new DiffResult(
2, "b" + Diff.OPEN_INS + "e" + Diff.CLOSE_INS + "b"));
expectedSource.add(
new DiffResult(2, Diff.OPEN_DEL + "fff" + Diff.CLOSE_DEL));
expectedTarget.add(new DiffResult(2, Diff.CONTEXT_LINE));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testFive() {
Reader reader1 = new UnsyncStringReader("aaa\nbbb");
Reader reader2 = new UnsyncStringReader("ccc\naaa");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
expectedSource.add(new DiffResult(0, Diff.CONTEXT_LINE));
expectedTarget.add(
new DiffResult(0, Diff.OPEN_INS + "ccc" + Diff.CLOSE_INS));
List<String> changedLines = new ArrayList<>();
changedLines.add("aaa");
changedLines.add(Diff.OPEN_DEL + "bbb" + Diff.CLOSE_DEL);
expectedSource.add(new DiffResult(1, changedLines));
changedLines = new ArrayList<>();
changedLines.add("aaa");
changedLines.add(Diff.CONTEXT_LINE);
expectedTarget.add(new DiffResult(1, changedLines));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testFour() {
Reader reader1 = new UnsyncStringReader("rahab");
Reader reader2 = new UnsyncStringReader("boaz");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
expectedSource.add(new DiffResult(0, Diff.CONTEXT_LINE));
expectedTarget.add(
new DiffResult(0, Diff.OPEN_INS + "boaz" + Diff.CLOSE_INS));
expectedSource.add(
new DiffResult(0, Diff.OPEN_DEL + "rahab" + Diff.CLOSE_DEL));
expectedTarget.add(new DiffResult(0, Diff.CONTEXT_LINE));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testNine() {
Reader reader1 = new UnsyncStringReader("abcd");
Reader reader2 = new UnsyncStringReader("abcdee");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
expectedSource.add(new DiffResult(0, "abcd"));
expectedTarget.add(
new DiffResult(0, "abcd" + Diff.OPEN_INS + "ee" + Diff.CLOSE_INS));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testOne() {
Reader reader1 = new UnsyncStringReader("liferay");
Reader reader2 = new UnsyncStringReader("liferay");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testSeven() {
Reader reader1 = new UnsyncStringReader("ccc\naaa\nbbe");
Reader reader2 = new UnsyncStringReader("aaa\nbbb");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
List<String> changedLines = new ArrayList<>();
expectedSource.add(
new DiffResult(0, Diff.OPEN_DEL + "ccc" + Diff.CLOSE_DEL));
expectedTarget.add(new DiffResult(0, Diff.CONTEXT_LINE));
changedLines = new ArrayList<>();
changedLines.add("bb" + Diff.OPEN_DEL + "e" + Diff.CLOSE_DEL);
expectedSource.add(new DiffResult(2, changedLines));
changedLines = new ArrayList<>();
changedLines.add("bb" + Diff.OPEN_INS + "b" + Diff.CLOSE_INS);
expectedTarget.add(new DiffResult(1, changedLines));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testSix() {
Reader reader1 = new UnsyncStringReader("ccc\naaa");
Reader reader2 = new UnsyncStringReader("aaa\nbbb");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
expectedSource.add(
new DiffResult(0, Diff.OPEN_DEL + "ccc" + Diff.CLOSE_DEL));
expectedTarget.add(new DiffResult(0, Diff.CONTEXT_LINE));
List<String> changedLines = new ArrayList<>();
changedLines.add("aaa");
changedLines.add(Diff.CONTEXT_LINE);
expectedSource.add(new DiffResult(1, changedLines));
changedLines = new ArrayList<>();
changedLines.add("aaa");
changedLines.add(Diff.OPEN_INS + "bbb" + Diff.CLOSE_INS);
expectedTarget.add(new DiffResult(1, changedLines));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testTen() {
Reader reader1 = new UnsyncStringReader("abcd");
Reader reader2 = new UnsyncStringReader("abcdeee");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
expectedSource.add(new DiffResult(0, Diff.CONTEXT_LINE));
expectedTarget.add(
new DiffResult(0, Diff.OPEN_INS + "abcdeee" + Diff.CLOSE_INS));
expectedSource.add(
new DiffResult(0, Diff.OPEN_DEL + "abcd" + Diff.CLOSE_DEL));
expectedTarget.add(new DiffResult(0, Diff.CONTEXT_LINE));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testThree() {
Reader reader1 = new UnsyncStringReader("aaa");
Reader reader2 = new UnsyncStringReader("bbb");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
expectedSource.add(new DiffResult(0, Diff.CONTEXT_LINE));
expectedTarget.add(
new DiffResult(0, Diff.OPEN_INS + "bbb" + Diff.CLOSE_INS));
expectedSource.add(
new DiffResult(0, Diff.OPEN_DEL + "aaa" + Diff.CLOSE_DEL));
expectedTarget.add(new DiffResult(0, Diff.CONTEXT_LINE));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testTwelve() {
Reader reader1 = new UnsyncStringReader("ada");
Reader reader2 = new UnsyncStringReader("aaa\nccc");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
expectedSource.add(
new DiffResult(
0, "a" + Diff.OPEN_DEL + "d" + Diff.CLOSE_DEL + "a"));
expectedTarget.add(
new DiffResult(
0, "a" + Diff.OPEN_INS + "a" + Diff.CLOSE_INS + "a"));
expectedSource.add(new DiffResult(1, Diff.CONTEXT_LINE));
expectedTarget.add(
new DiffResult(1, Diff.OPEN_INS + "ccc" + Diff.CLOSE_INS));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
@Test
public void testTwo() {
Reader reader1 = new UnsyncStringReader("liferay");
Reader reader2 = new UnsyncStringReader("LifeRay");
List<DiffResult> expectedSource = new ArrayList<>();
List<DiffResult> expectedTarget = new ArrayList<>();
List<String> changedLines = new ArrayList<>();
changedLines.add(
Diff.OPEN_DEL + "l" + Diff.CLOSE_DEL + "ife" + Diff.OPEN_DEL + "r" +
Diff.CLOSE_DEL + "ay");
expectedSource.add(new DiffResult(0, changedLines));
changedLines = new ArrayList<>();
changedLines.add(
Diff.OPEN_INS + "L" + Diff.CLOSE_INS + "ife" + Diff.OPEN_INS + "R" +
Diff.CLOSE_INS + "ay");
expectedTarget.add(new DiffResult(0, changedLines));
List<DiffResult>[] actual = _diffImpl.diff(reader1, reader2);
Assert.assertEquals(expectedSource, actual[0]);
Assert.assertEquals(expectedTarget, actual[1]);
}
private final DiffImpl _diffImpl = new DiffImpl();
}