diff test/org/tmatesoft/hg/test/TestRevisionSet.java @ 651:6e98d34eaca8

Push: tests (push to empty, push changes, respect secret)
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Mon, 01 Jul 2013 21:19:53 +0200
parents 690e71d29bf6
children 629a7370554c
line wrap: on
line diff
--- a/test/org/tmatesoft/hg/test/TestRevisionSet.java	Fri Jun 28 19:27:26 2013 +0200
+++ b/test/org/tmatesoft/hg/test/TestRevisionSet.java	Mon Jul 01 21:19:53 2013 +0200
@@ -22,6 +22,9 @@
 import org.junit.Test;
 import org.tmatesoft.hg.core.Nodeid;
 import org.tmatesoft.hg.internal.RevisionSet;
+import org.tmatesoft.hg.repo.HgChangelog;
+import org.tmatesoft.hg.repo.HgParentChildMap;
+import org.tmatesoft.hg.repo.HgRepository;
 
 /**
  * 
@@ -39,13 +42,13 @@
 		Nodeid n2 = Nodeid.fromAscii("3b7d51ed4c65082f9235e3459e282d7ff723aa97");
 		Nodeid n3 = Nodeid.fromAscii("14dac192aa262feb8ff6645a102648498483a188");
 		Nodeid n4 = Nodeid.fromAscii("1deea2f332183c947937f6df988c2c6417efc217");
-		RevisionSet a = f(n1, n2, n3);
-		RevisionSet b = f(n3, n4);
-		RevisionSet union_ab = f(n1, n2, n3, n4);
-		RevisionSet intersect_ab = f(n3);
-		RevisionSet subtract_ab = f(n1, n2);
-		RevisionSet subtract_ba = f(n4);
-		RevisionSet symDiff_ab = f(n1, n2, n4);
+		RevisionSet a = rs(n1, n2, n3);
+		RevisionSet b = rs(n3, n4);
+		RevisionSet union_ab = rs(n1, n2, n3, n4);
+		RevisionSet intersect_ab = rs(n3);
+		RevisionSet subtract_ab = rs(n1, n2);
+		RevisionSet subtract_ba = rs(n4);
+		RevisionSet symDiff_ab = rs(n1, n2, n4);
 		
 		errorCollector.assertEquals(union_ab, a.union(b));
 		errorCollector.assertEquals(union_ab, b.union(a));
@@ -55,10 +58,67 @@
 		errorCollector.assertEquals(subtract_ba, b.subtract(a));
 		errorCollector.assertEquals(symDiff_ab, a.symmetricDifference(b));
 		errorCollector.assertEquals(symDiff_ab, b.symmetricDifference(a));
+		errorCollector.assertTrue(rs(n1, n2, n4).equals(rs(n4, n1, n2)));
+		errorCollector.assertTrue(rs().equals(rs()));
+		errorCollector.assertFalse(rs(n1).equals(rs(n2)));
+	}
+	
+	@Test
+	public void testRootsAndHeads() throws Exception {
+		final HgRepository repo = Configuration.get().find("test-annotate");
+		Nodeid[] allRevs = allRevisions(repo);
+		HgParentChildMap<HgChangelog> parentHelper = new HgParentChildMap<HgChangelog>(repo.getChangelog());
+		parentHelper.init();
+		final RevisionSet complete = rs(allRevs);
+		// roots
+		errorCollector.assertEquals(rs(allRevs[0]), complete.roots(parentHelper));
+		RevisionSet fromR2 = complete.subtract(rs(allRevs[0], allRevs[1]));
+		RevisionSet fromR3 = complete.subtract(rs(allRevs[0], allRevs[1], allRevs[2]));
+		errorCollector.assertEquals(rs(allRevs[2], allRevs[3]), fromR2.roots(parentHelper));
+		errorCollector.assertEquals(rs(allRevs[3], allRevs[4], allRevs[5]), fromR3.roots(parentHelper));
+		// heads
+		errorCollector.assertEquals(rs(allRevs[9], allRevs[7]), complete.heads(parentHelper));
+		RevisionSet toR7 = complete.subtract(rs(allRevs[9], allRevs[8]));
+		errorCollector.assertEquals(rs(allRevs[7], allRevs[6], allRevs[4]), toR7.heads(parentHelper));
+		RevisionSet withoutNoMergeBranch = toR7.subtract(rs(allRevs[5], allRevs[7]));
+		errorCollector.assertEquals(rs(allRevs[6], allRevs[4]), withoutNoMergeBranch.heads(parentHelper));
+		errorCollector.assertEquals(complete.heads(parentHelper), complete.heads(parentHelper).heads(parentHelper));
+	}
+	
+	@Test
+	public void testAncestorsAndChildren() throws Exception {
+		final HgRepository repo = Configuration.get().find("test-annotate");
+		Nodeid[] allRevs = allRevisions(repo);
+		HgParentChildMap<HgChangelog> parentHelper = new HgParentChildMap<HgChangelog>(repo.getChangelog());
+		parentHelper.init();
+		final RevisionSet complete = rs(allRevs);
+		// children
+		errorCollector.assertTrue(rs().children(parentHelper).isEmpty());
+		errorCollector.assertEquals(rs(allRevs[8], allRevs[9]), rs(allRevs[4]).children(parentHelper));
+		// default branch and no-merge branch both from r2 
+		RevisionSet s1 = rs(allRevs[8], allRevs[9], allRevs[4], allRevs[5], allRevs[7]);
+		errorCollector.assertEquals(s1, rs(allRevs[2]).children(parentHelper));
+		// ancestors
+		RevisionSet fromR2 = complete.subtract(rs(allRevs[0], allRevs[1]));
+		// no-merge branch and r9 are not in ancestors of r8 (as well as r8 itself)
+		RevisionSet s3 = fromR2.subtract(rs(allRevs[9], allRevs[5], allRevs[7], allRevs[8]));
+		errorCollector.assertEquals(s3, fromR2.ancestors(rs(allRevs[8]), parentHelper));
+		// ancestors of no-merge branch
+		RevisionSet branchNoMerge = rs(allRevs[5], allRevs[7]);
+		errorCollector.assertEquals(rs(allRevs[0], allRevs[1], allRevs[2]), complete.ancestors(branchNoMerge, parentHelper));
+		errorCollector.assertEquals(rs(allRevs[2]), fromR2.ancestors(branchNoMerge, parentHelper));
+	}
+	
+	private static Nodeid[] allRevisions(HgRepository repo) {
+		Nodeid[] allRevs = new Nodeid[repo.getChangelog().getRevisionCount()];
+		for (int i = 0; i < allRevs.length; i++) {
+			allRevs[i] = repo.getChangelog().getRevision(i);
+		}
+		return allRevs;
 	}
 
 	
-	private static RevisionSet f(Nodeid... nodes) {
+	private static RevisionSet rs(Nodeid... nodes) {
 		return new RevisionSet(Arrays.asList(nodes));
 	}
 }