tikhomirov@653: /* tikhomirov@653: * Copyright (c) 2013 TMate Software Ltd tikhomirov@653: * tikhomirov@653: * This program is free software; you can redistribute it and/or modify tikhomirov@653: * it under the terms of the GNU General Public License as published by tikhomirov@653: * the Free Software Foundation; version 2 of the License. tikhomirov@653: * tikhomirov@653: * This program is distributed in the hope that it will be useful, tikhomirov@653: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@653: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@653: * GNU General Public License for more details. tikhomirov@653: * tikhomirov@653: * For information on how to redistribute this software under tikhomirov@653: * the terms of a license other than GNU General Public License tikhomirov@653: * contact TMate Software at support@hg4j.com tikhomirov@653: */ tikhomirov@653: package org.tmatesoft.hg.test; tikhomirov@653: tikhomirov@656: import java.util.ArrayList; tikhomirov@653: import java.util.Arrays; tikhomirov@653: import java.util.Collections; tikhomirov@653: import java.util.HashSet; tikhomirov@653: tikhomirov@653: import org.junit.Rule; tikhomirov@653: import org.junit.Test; tikhomirov@653: import org.tmatesoft.hg.core.HgException; tikhomirov@653: import org.tmatesoft.hg.core.Nodeid; tikhomirov@653: import org.tmatesoft.hg.repo.HgChangelog; tikhomirov@653: import org.tmatesoft.hg.repo.HgParentChildMap; tikhomirov@653: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@653: tikhomirov@653: /** tikhomirov@653: * tikhomirov@653: * @author Artem Tikhomirov tikhomirov@653: * @author TMate Software Ltd. tikhomirov@653: */ tikhomirov@653: public class TestRevisionMaps { tikhomirov@653: tikhomirov@653: @Rule tikhomirov@653: public ErrorCollectorExt errorCollector = new ErrorCollectorExt(); tikhomirov@653: tikhomirov@653: @Test tikhomirov@653: public void testParentChildMap() throws HgException { tikhomirov@653: final HgRepository repo = Configuration.get().find("test-annotate"); tikhomirov@653: Nodeid[] allRevs = RepoUtils.allRevisions(repo); tikhomirov@653: HgParentChildMap parentHelper = new HgParentChildMap(repo.getChangelog()); tikhomirov@653: parentHelper.init(); tikhomirov@653: errorCollector.assertEquals(Arrays.asList(allRevs), parentHelper.all()); tikhomirov@653: for (Nodeid n : allRevs) { tikhomirov@653: errorCollector.assertTrue(parentHelper.knownNode(n)); tikhomirov@653: // parents tikhomirov@653: final Nodeid p1 = parentHelper.safeFirstParent(n); tikhomirov@653: final Nodeid p2 = parentHelper.safeSecondParent(n); tikhomirov@653: errorCollector.assertFalse(p1 == null); tikhomirov@653: errorCollector.assertFalse(p2 == null); tikhomirov@653: errorCollector.assertEquals(p1.isNull() ? null : p1, parentHelper.firstParent(n)); tikhomirov@653: errorCollector.assertEquals(p2.isNull() ? null : p2, parentHelper.secondParent(n)); tikhomirov@653: HashSet parents = new HashSet(); tikhomirov@653: boolean modified = parentHelper.appendParentsOf(n, parents); tikhomirov@653: errorCollector.assertEquals(p1.isNull() && p2.isNull(), !modified); tikhomirov@653: HashSet cp = new HashSet(); tikhomirov@653: cp.add(parentHelper.firstParent(n)); tikhomirov@653: cp.add(parentHelper.secondParent(n)); tikhomirov@653: cp.remove(null); tikhomirov@653: errorCollector.assertEquals(cp, parents); tikhomirov@653: modified = parentHelper.appendParentsOf(n, parents); tikhomirov@653: errorCollector.assertFalse(modified); tikhomirov@653: // tikhomirov@653: // isChild, hasChildren, childrenOf, directChildren tikhomirov@653: if (!p1.isNull()) { tikhomirov@653: errorCollector.assertTrue(parentHelper.isChild(p1, n)); tikhomirov@653: errorCollector.assertTrue(parentHelper.hasChildren(p1)); tikhomirov@653: errorCollector.assertTrue(parentHelper.childrenOf(Collections.singleton(p1)).contains(n)); tikhomirov@653: errorCollector.assertTrue(parentHelper.directChildren(p1).contains(n)); tikhomirov@653: } tikhomirov@653: if (!p2.isNull()) { tikhomirov@653: errorCollector.assertTrue(parentHelper.isChild(p2, n)); tikhomirov@653: errorCollector.assertTrue(parentHelper.hasChildren(p2)); tikhomirov@653: errorCollector.assertTrue(parentHelper.childrenOf(Collections.singleton(p2)).contains(n)); tikhomirov@653: errorCollector.assertTrue(parentHelper.directChildren(p2).contains(n)); tikhomirov@653: } tikhomirov@653: errorCollector.assertFalse(parentHelper.isChild(n, p1)); tikhomirov@653: errorCollector.assertFalse(parentHelper.isChild(n, p2)); tikhomirov@653: // tikhomirov@653: tikhomirov@653: } tikhomirov@653: // heads tikhomirov@656: errorCollector.assertEquals(Arrays.asList(allRevs[7], allRevs[9]), new ArrayList(parentHelper.heads())); tikhomirov@653: // isChild tikhomirov@653: errorCollector.assertTrue(parentHelper.isChild(allRevs[1], allRevs[9])); tikhomirov@653: errorCollector.assertTrue(parentHelper.isChild(allRevs[0], allRevs[7])); tikhomirov@653: errorCollector.assertFalse(parentHelper.isChild(allRevs[4], allRevs[7])); tikhomirov@653: errorCollector.assertFalse(parentHelper.isChild(allRevs[2], allRevs[6])); tikhomirov@653: // childrenOf tikhomirov@653: errorCollector.assertEquals(Arrays.asList(allRevs[7]), parentHelper.childrenOf(Collections.singleton(allRevs[5]))); tikhomirov@653: errorCollector.assertEquals(Arrays.asList(allRevs[8], allRevs[9]), parentHelper.childrenOf(Arrays.asList(allRevs[4], allRevs[6]))); tikhomirov@653: errorCollector.assertEquals(Arrays.asList(allRevs[6], allRevs[8], allRevs[9]), parentHelper.childrenOf(Collections.singleton(allRevs[3]))); tikhomirov@653: // directChildren tikhomirov@653: errorCollector.assertEquals(Arrays.asList(allRevs[2], allRevs[3]), parentHelper.directChildren(allRevs[1])); tikhomirov@653: errorCollector.assertEquals(Arrays.asList(allRevs[8]), parentHelper.directChildren(allRevs[6])); tikhomirov@653: errorCollector.assertEquals(Collections.emptyList(), parentHelper.directChildren(allRevs[7])); tikhomirov@653: } tikhomirov@653: tikhomirov@653: }