blob: 8c675875030e4cdcc687426a5217a305eecc5ea9 [file] [log] [blame]
package com.intellij.vcs.log.graph.mutable;
import com.intellij.vcs.log.Hash;
import com.intellij.vcs.log.VcsCommit;
import com.intellij.vcs.log.VcsRef;
import com.intellij.vcs.log.graph.GraphTestUtils;
import com.intellij.vcs.log.graph.elements.Branch;
import com.intellij.vcs.log.graph.mutable.elements.MutableNode;
import com.intellij.vcs.log.graph.mutable.elements.MutableNodeRow;
import com.intellij.vcs.log.parser.SimpleCommitListParser;
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static com.intellij.vcs.log.graph.GraphStrUtils.toStr;
import static junit.framework.Assert.assertEquals;
/**
* @author erokhins
*/
public class GraphAppendBuildTest {
public void runTest(String firstPart, String firstPartStr, String secondPart, String secondPartStr) {
List<VcsCommit> vcsCommitParentses = SimpleCommitListParser.parseCommitList(firstPart);
final MutableGraph graph = GraphTestUtils.buildGraph(vcsCommitParentses, Collections.<VcsRef>emptyList());
assertEquals(firstPartStr, toStr(graph));
vcsCommitParentses = SimpleCommitListParser.parseCommitList(secondPart);
new GraphAppendBuilder(graph, makeRefs(firstPart)) {
@NotNull
@Override
protected GraphBuilder createGraphBuilder(List<? extends VcsCommit> commitParentses, MutableNodeRow nextRow,
Map<Hash, MutableNode> underdoneNodes, int startIndex,
Map<Hash, Integer> commitLogIndexes) {
return new GraphBuilder(commitParentses.size() + startIndex - 1, commitLogIndexes, graph, underdoneNodes, nextRow,
Collections.<VcsRef>emptyList()) {
@NotNull
@Override
protected Branch createBranch(@NotNull Hash commitHash, @NotNull Collection<VcsRef> refs) {
return GraphTestUtils.createBranchWithFakeRoot(commitHash, refs);
}
};
}
}.appendToGraph(vcsCommitParentses);
assertEquals(secondPartStr, toStr(graph));
}
private static Collection<VcsRef> makeRefs(String log) {
return null;
}
@Test
public void simpleEnd() {
runTest("a0|-",
"a0|-|-|-COMMIT_NODE|-a0|-0",
"a1|-",
"a0|-|-|-COMMIT_NODE|-a0|-0\n" + "a1|-|-|-COMMIT_NODE|-a1|-1");
}
@Test
public void oneEndNode() {
runTest("a0|-a2",
"a0|-|-a0:a2:USUAL:a0|-COMMIT_NODE|-a0|-0\n" + "a2|-a0:a2:USUAL:a0|-|-END_COMMIT_NODE|-a0|-1",
"a1|-a2\n" + "a2|-",
"a0|-|-a0:a2:USUAL:a0|-COMMIT_NODE|-a0|-0\n" +
"a1|-|-a1:a2:USUAL:a1|-COMMIT_NODE|-a1|-1\n" +
"a2|-a0:a2:USUAL:a0 a1:a2:USUAL:a1|-|-COMMIT_NODE|-a0|-2");
}
@Test
public void oneEndAfterNotAddNode() {
runTest("a0|-a2",
"a0|-|-a0:a2:USUAL:a0|-COMMIT_NODE|-a0|-0\n" + "a2|-a0:a2:USUAL:a0|-|-END_COMMIT_NODE|-a0|-1",
"a1|-a2", "a0|-|-a0:a2:USUAL:a0|-COMMIT_NODE|-a0|-0\n" +
"a1|-|-a1:a2:USUAL:a1|-COMMIT_NODE|-a1|-1\n" +
"a2|-a0:a2:USUAL:a0 a1:a2:USUAL:a1|-|-END_COMMIT_NODE|-a0|-2");
}
@Test
public void oneEndImmediatelyAddNode() {
runTest("a0|-a1",
"a0|-|-a0:a1:USUAL:a0|-COMMIT_NODE|-a0|-0\n" + "a1|-a0:a1:USUAL:a0|-|-END_COMMIT_NODE|-a0|-1",
"a1|-",
"a0|-|-a0:a1:USUAL:a0|-COMMIT_NODE|-a0|-0\n" + "a1|-a0:a1:USUAL:a0|-|-COMMIT_NODE|-a0|-1"
);
}
@Test
public void oneEndImmediatelyAddNode2() {
runTest("a0|-a1",
"a0|-|-a0:a1:USUAL:a0|-COMMIT_NODE|-a0|-0\n" + "a1|-a0:a1:USUAL:a0|-|-END_COMMIT_NODE|-a0|-1",
"a1|-a2\n" + "a2|-",
"a0|-|-a0:a1:USUAL:a0|-COMMIT_NODE|-a0|-0\n" +
"a1|-a0:a1:USUAL:a0|-a1:a2:USUAL:a0|-COMMIT_NODE|-a0|-1\n" +
"a2|-a1:a2:USUAL:a0|-|-COMMIT_NODE|-a0|-2"
);
}
@Test
public void edgeNodeInEndImmediately() {
runTest("a0|-a2\n" + "a1|-a2",
"a0|-|-a0:a2:USUAL:a0|-COMMIT_NODE|-a0|-0\n" +
"a1|-|-a1:a2:USUAL:a1|-COMMIT_NODE|-a1|-1\n" +
"a2|-a0:a2:USUAL:a0 a1:a2:USUAL:a1|-|-END_COMMIT_NODE|-a0|-2",
"a2|-",
"a0|-|-a0:a2:USUAL:a0|-COMMIT_NODE|-a0|-0\n" +
"a1|-|-a1:a2:USUAL:a1|-COMMIT_NODE|-a1|-1\n" +
"a2|-a0:a2:USUAL:a0 a1:a2:USUAL:a1|-|-COMMIT_NODE|-a0|-2");
}
@Test
public void edgeNodeInEnd() {
runTest("a0|-a3\n" + "a1|-a3",
"a0|-|-a0:a3:USUAL:a0|-COMMIT_NODE|-a0|-0\n" +
"a1|-|-a1:a3:USUAL:a1|-COMMIT_NODE|-a1|-1\n" +
"a3|-a0:a3:USUAL:a0 a1:a3:USUAL:a1|-|-END_COMMIT_NODE|-a0|-2",
"a2|-a3",
"a0|-|-a0:a3:USUAL:a0|-COMMIT_NODE|-a0|-0\n" +
"a1|-|-a1:a3:USUAL:a1|-COMMIT_NODE|-a1|-1\n" +
"a2|-|-a2:a3:USUAL:a2|-COMMIT_NODE|-a2|-2\n" +
" a3|-a0:a3:USUAL:a0 a1:a3:USUAL:a1|-a3:a3:USUAL:a0|-EDGE_NODE|-a0|-2\n" +
"a3|-a2:a3:USUAL:a2 a3:a3:USUAL:a0|-|-END_COMMIT_NODE|-a0|-3");
}
}