tikhomirov@526: /* tikhomirov@526: * Copyright (c) 2013 TMate Software Ltd tikhomirov@526: * tikhomirov@526: * This program is free software; you can redistribute it and/or modify tikhomirov@526: * it under the terms of the GNU General Public License as published by tikhomirov@526: * the Free Software Foundation; version 2 of the License. tikhomirov@526: * tikhomirov@526: * This program is distributed in the hope that it will be useful, tikhomirov@526: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@526: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@526: * GNU General Public License for more details. tikhomirov@526: * tikhomirov@526: * For information on how to redistribute this software under tikhomirov@526: * the terms of a license other than GNU General Public License tikhomirov@526: * contact TMate Software at support@hg4j.com tikhomirov@526: */ tikhomirov@526: package org.tmatesoft.hg.test; tikhomirov@526: tikhomirov@527: import static org.junit.Assert.assertEquals; tikhomirov@536: import static org.tmatesoft.hg.test.RepoUtils.cloneRepoToTempLocation; tikhomirov@527: tikhomirov@527: import java.io.File; tikhomirov@527: import java.io.FileFilter; tikhomirov@527: tikhomirov@526: import org.junit.Assert; tikhomirov@527: import org.junit.Rule; tikhomirov@526: import org.junit.Test; tikhomirov@527: import org.tmatesoft.hg.core.HgCheckoutCommand; tikhomirov@527: import org.tmatesoft.hg.core.Nodeid; tikhomirov@527: import org.tmatesoft.hg.repo.HgLookup; tikhomirov@527: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@527: import org.tmatesoft.hg.util.Pair; tikhomirov@527: import org.tmatesoft.hg.util.Path; tikhomirov@526: tikhomirov@526: /** tikhomirov@526: * tikhomirov@526: * @author Artem Tikhomirov tikhomirov@526: * @author TMate Software Ltd. tikhomirov@526: */ tikhomirov@526: public class TestCheckout { tikhomirov@526: tikhomirov@527: @Rule tikhomirov@527: public ErrorCollectorExt errorCollector = new ErrorCollectorExt(); tikhomirov@527: tikhomirov@527: private HgRepository repo; tikhomirov@527: private ExecHelper eh; tikhomirov@527: tikhomirov@526: tikhomirov@526: @Test tikhomirov@527: public void testCleanCheckoutInEmptyDir() throws Exception { tikhomirov@536: File testRepoLoc = cloneRepoToTempLocation("log-1", "test-checkoutClean", true); tikhomirov@527: repo = new HgLookup().detect(testRepoLoc); tikhomirov@527: // nothing but .hg dir tikhomirov@527: assertEquals("[sanity]", 0, testRepoLoc.listFiles(new FilesOnlyFilter()).length); tikhomirov@527: tikhomirov@527: new HgCheckoutCommand(repo).changeset(1).execute(); tikhomirov@527: errorCollector.assertEquals(2, testRepoLoc.listFiles(new FilesOnlyFilter()).length); tikhomirov@527: tikhomirov@527: Pair workingCopyParents = repo.getWorkingCopyParents(); tikhomirov@527: errorCollector.assertEquals("da3461cd828dae8eb5fd11189d40e9df1961f191", workingCopyParents.first().toString()); tikhomirov@527: errorCollector.assertEquals(Nodeid.NULL, workingCopyParents.second()); tikhomirov@527: errorCollector.assertEquals(HgRepository.DEFAULT_BRANCH_NAME, repo.getWorkingCopyBranchName()); tikhomirov@527: tikhomirov@527: StatusOutputParser statusOutputParser = new StatusOutputParser(); tikhomirov@527: eh = new ExecHelper(statusOutputParser, testRepoLoc); tikhomirov@527: eh.run("hg", "status", "-A"); tikhomirov@527: errorCollector.assertEquals(2, statusOutputParser.getClean().size()); tikhomirov@527: errorCollector.assertTrue(statusOutputParser.getClean().contains(Path.create("a"))); tikhomirov@527: errorCollector.assertTrue(statusOutputParser.getClean().contains(Path.create("b"))); tikhomirov@527: tikhomirov@527: new HgCheckoutCommand(repo).changeset(3).execute(); tikhomirov@527: statusOutputParser.reset(); tikhomirov@527: eh.run("hg", "status", "-A"); tikhomirov@527: errorCollector.assertEquals(3, statusOutputParser.getClean().size()); tikhomirov@527: errorCollector.assertTrue(statusOutputParser.getClean().contains(Path.create("b"))); tikhomirov@527: errorCollector.assertTrue(statusOutputParser.getClean().contains(Path.create("d"))); tikhomirov@527: errorCollector.assertTrue(statusOutputParser.getClean().contains(Path.create("dir/b"))); tikhomirov@526: } tikhomirov@526: tikhomirov@526: @Test tikhomirov@526: public void testCleanCheckoutInDirtyDir() { tikhomirov@526: Assert.fail("Make sure WC is cleared prior to clean checkout"); tikhomirov@526: } tikhomirov@526: tikhomirov@526: @Test tikhomirov@527: public void testBranchCheckout() throws Exception { tikhomirov@536: File testRepoLoc = cloneRepoToTempLocation("log-branches", "test-checkoutBranch", true); tikhomirov@527: repo = new HgLookup().detect(testRepoLoc); tikhomirov@527: tikhomirov@527: new HgCheckoutCommand(repo).changeset(3 /*branch test*/).execute(); tikhomirov@527: tikhomirov@527: StatusOutputParser statusOutputParser = new StatusOutputParser(); tikhomirov@527: eh = new ExecHelper(statusOutputParser, testRepoLoc); tikhomirov@527: eh.run("hg", "status", "-A"); tikhomirov@527: errorCollector.assertEquals(3, statusOutputParser.getClean().size()); tikhomirov@527: errorCollector.assertTrue(statusOutputParser.getClean().contains(Path.create("a"))); tikhomirov@527: errorCollector.assertTrue(statusOutputParser.getClean().contains(Path.create("b"))); tikhomirov@527: errorCollector.assertTrue(statusOutputParser.getClean().contains(Path.create("c"))); tikhomirov@527: tikhomirov@527: errorCollector.assertEquals("test", repo.getWorkingCopyBranchName()); tikhomirov@527: } tikhomirov@527: tikhomirov@527: private static final class FilesOnlyFilter implements FileFilter { tikhomirov@527: public boolean accept(File f) { tikhomirov@527: return f.isFile(); tikhomirov@527: } tikhomirov@526: } tikhomirov@526: }