tikhomirov@475: /* tikhomirov@475: * Copyright (c) 2012 TMate Software Ltd tikhomirov@475: * tikhomirov@475: * This program is free software; you can redistribute it and/or modify tikhomirov@475: * it under the terms of the GNU General Public License as published by tikhomirov@475: * the Free Software Foundation; version 2 of the License. tikhomirov@475: * tikhomirov@475: * This program is distributed in the hope that it will be useful, tikhomirov@475: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@475: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@475: * GNU General Public License for more details. tikhomirov@475: * tikhomirov@475: * For information on how to redistribute this software under tikhomirov@475: * the terms of a license other than GNU General Public License tikhomirov@475: * contact TMate Software at support@hg4j.com tikhomirov@475: */ tikhomirov@475: package org.tmatesoft.hg.test; tikhomirov@475: tikhomirov@475: import static org.junit.Assert.*; tikhomirov@475: tikhomirov@475: import java.util.Iterator; tikhomirov@475: import java.util.LinkedList; tikhomirov@475: tikhomirov@475: import org.junit.Test; tikhomirov@475: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@501: import org.tmatesoft.hg.repo.ext.HgExtensionsManager; tikhomirov@475: import org.tmatesoft.hg.repo.ext.MqManager; tikhomirov@501: import org.tmatesoft.hg.repo.ext.HgExtensionsManager.HgExt; tikhomirov@475: import org.tmatesoft.hg.repo.ext.MqManager.PatchRecord; tikhomirov@475: tikhomirov@475: /** tikhomirov@475: * {junit-test-repos}/test-mq/ tikhomirov@475: * tikhomirov@475: * @author Artem Tikhomirov tikhomirov@475: * @author TMate Software Ltd. tikhomirov@475: */ tikhomirov@475: public class TestMqExtension { tikhomirov@475: tikhomirov@475: @Test tikhomirov@475: public void testMqManager() throws Exception { tikhomirov@475: HgRepository repo = Configuration.get().find("test-mq"); tikhomirov@501: HgExtensionsManager extManager = repo.getExtensions(); tikhomirov@501: assertTrue(extManager.isEnabled(HgExt.MQ)); tikhomirov@501: MqManager mqManager = extManager.getMQ(); tikhomirov@475: mqManager.refresh(); tikhomirov@475: OutputParser.Stub output = new OutputParser.Stub(); tikhomirov@475: ExecHelper eh = new ExecHelper(output, repo.getWorkingDir()); tikhomirov@475: // `hg qseries` tikhomirov@475: eh.run("hg", "qseries"); tikhomirov@475: LinkedList allKnownPatches = new LinkedList(mqManager.getAllKnownPatches()); tikhomirov@475: assertTrue("[sanity]", allKnownPatches.size() > 0); tikhomirov@475: for (CharSequence l : output.lines()) { tikhomirov@475: for (Iterator it = allKnownPatches.listIterator(); it.hasNext(); ) { tikhomirov@475: if (it.next().getName().equals(l)) { tikhomirov@475: it.remove(); tikhomirov@475: } tikhomirov@475: } tikhomirov@475: } tikhomirov@475: assertTrue("Known patches shall match those from `hg qseries`", allKnownPatches.isEmpty()); tikhomirov@475: // tikhomirov@475: // `hg qapplied`, patches from the queue already applied to the repo tikhomirov@475: eh.run("hg", "qapplied"); tikhomirov@475: LinkedList appliedPatches = new LinkedList(mqManager.getAppliedPatches()); tikhomirov@475: assertTrue("[sanity]", appliedPatches.size() > 0); tikhomirov@475: for (CharSequence l : output.lines()) { tikhomirov@475: for (Iterator it = appliedPatches.listIterator(); it.hasNext(); ) { tikhomirov@475: if (it.next().getName().equals(l)) { tikhomirov@475: it.remove(); tikhomirov@475: } tikhomirov@475: } tikhomirov@475: } tikhomirov@475: assertTrue("Each patch reported as applied shall match thos from `hg qapplied`", appliedPatches.isEmpty()); tikhomirov@475: tikhomirov@475: assertTrue("[sanity] ",mqManager.getQueueSize() > 0); tikhomirov@475: boolean allAppliedAreKnown = mqManager.getAllKnownPatches().containsAll(mqManager.getAppliedPatches()); tikhomirov@475: assertTrue(allAppliedAreKnown); // ensure instances are the same, == tikhomirov@475: tikhomirov@475: // `hg qqueue` tikhomirov@475: assertTrue("[sanity]",mqManager.getQueueNames().size() > 1); tikhomirov@475: assertTrue(mqManager.getActiveQueueName().length() > 0); tikhomirov@475: eh.run("hg", "qqueue"); tikhomirov@475: boolean activeQueueFound = false; tikhomirov@475: LinkedList queueNames = new LinkedList(mqManager.getQueueNames()); tikhomirov@475: for (String l : output.lines()) { tikhomirov@475: if (l.endsWith("(active)")) { tikhomirov@475: l = l.substring(0, l.length() - 8).trim(); tikhomirov@475: assertEquals(l, mqManager.getActiveQueueName()); tikhomirov@475: assertFalse("only single active queue", activeQueueFound); tikhomirov@475: activeQueueFound = true; tikhomirov@475: } tikhomirov@475: assertTrue(queueNames.remove(l)); tikhomirov@475: } tikhomirov@475: assertTrue(activeQueueFound); tikhomirov@475: assertTrue(queueNames.isEmpty()); // every queue name we found matches `hg qqueue` output tikhomirov@475: } tikhomirov@475: }