package com.intellij.vcs.log.data;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.vcs.log.Hash;
import com.intellij.vcs.log.TimedCommitParser;
import com.intellij.vcs.log.TimedVcsCommit;
import com.intellij.vcs.log.impl.HashImpl;
import org.junit.Test;
import java.util.Collection;
import java.util.List;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
/**
* @author Kirill Likhodedov
*/
public class VcsLogJoinerTest {
public void runTest(List<String> initial, List<String> updateBlock, List<String> oldRefs, List<String> newRefs, String expected) {
List<TimedVcsCommit> savedLog = TimedCommitParser.log(ArrayUtil.toStringArray(initial));
List<? extends TimedVcsCommit> firstBlock = TimedCommitParser.log(ArrayUtil.toStringArray(updateBlock));
Collection<Hash> vcsOldRefs = ContainerUtil.map(oldRefs, new Function<String, Hash>() {
@Override
public Hash fun(String s) {
return HashImpl.build(s);
}
});
Collection<Hash> vcsNewRefs = ContainerUtil.map(newRefs, new Function<String, Hash>() {
@Override
public Hash fun(String s) {
return HashImpl.build(s);
}
});
List<? extends TimedVcsCommit> result = new VcsLogJoiner<Hash, TimedVcsCommit>().addCommits(savedLog, vcsOldRefs, firstBlock, vcsNewRefs).getFirst();
assertEquals(expected, toStr(result));
}
@Test
public void simpleTest() {
runTest(
asList("4|-a2|-a1", "3|-b1|-a", "2|-a1|-a", "1|-a|-"),
asList("5|-f|-b1", "6|-e|-a2"),
asList("a2", "b1"),
asList("f", "e"),
"e, f, a2, b1, a1, a"
);
}
@Test
public void oneNodeTest() {
runTest(
asList("3|-a1|-"),
asList("3|-a1|-"),
asList("a1"),
asList("a1"),
"a1"
);
}
@Test
public void oneNodeResetTest() {
runTest(
asList("3|-a1|-a2", "2|-a2|-"),
asList("2|-a2|-"),
asList("a2", "a1"),
asList("a2"),
"a2"
);
}
@Test
public void oneNodeReset2Test() {
runTest(
asList("3|-a1|-a2", "2|-a2|-"),
asList("2|-a2|-"),
asList("a1"),
asList("a2"),
"a2"
);
}
@Test
public void simpleRemoveCommitsTest() {
runTest(
asList("4|-a2|-a1", "3|-b1|-a", "2|-a1|-a", "1|-a|-"),
asList("5|-f|-b1", "6|-e|-a1"),
asList("a2"),
asList("f", "e"),
"e, f, b1, a1, a"
);
}
@Test
public void removeCommitsTest() {
runTest(
asList("5|-a5|-a4", "4|-a4|-a2 a3", "3|-a3|-a1", "2|-a2|-a1", "1|-a1|-"),
asList("6|-a6|-a3"),
asList("a5"),
asList("a6"),
"a6, a3, a1"
);
}
@Test
public void removeCommitsTest2() {
runTest(
asList("2|-a2|-a1", "1|-a1|-"),
asList("5|-a5|-a4", "3|-a3|-a2", "4|-a4|-a3"),
asList("a2"),
asList("a5"),
"a5, a4, a3, a2, a1"
);
}
@Test
public void removeCommitsTest3() {
runTest(
asList("3|-a3|-a2", "2|-a2|-a1", "1|-a1|-"),
asList("2|-a2|-a1"),
asList("a3"),
asList("a2"),
"a2, a1"
);
}
private static String toStr(List<? extends TimedVcsCommit> commits) {
StringBuilder s = new StringBuilder();
for (TimedVcsCommit commit : commits) {
if (s.length() != 0) {
s.append(", ");
}
s.append(commit.getId().asString());
}
return StringUtil.join(commits, ",");
}
}