Mercurial > hg4j
diff test/org/tmatesoft/hg/test/ComplexTest.java @ 708:4ffc17c0b534
Merge: tests for resolver and complex scenario. Enable commit for merged revisions. Reuse file revisions if nothing changed
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 20 Aug 2013 18:41:34 +0200 |
parents | 4a0bab2c6da1 |
children |
line wrap: on
line diff
--- a/test/org/tmatesoft/hg/test/ComplexTest.java Fri Aug 16 19:22:59 2013 +0200 +++ b/test/org/tmatesoft/hg/test/ComplexTest.java Tue Aug 20 18:41:34 2013 +0200 @@ -26,9 +26,12 @@ import org.tmatesoft.hg.core.HgCheckoutCommand; import org.tmatesoft.hg.core.HgCommitCommand; import org.tmatesoft.hg.core.HgInitCommand; +import org.tmatesoft.hg.core.HgMergeCommand; import org.tmatesoft.hg.core.HgRevertCommand; import org.tmatesoft.hg.repo.HgManifest; +import org.tmatesoft.hg.repo.HgMergeState; import org.tmatesoft.hg.repo.HgRepository; +import org.tmatesoft.hg.util.Outcome; import org.tmatesoft.hg.util.Path; /** @@ -97,4 +100,54 @@ final HgManifest mf = hgRepo.getManifest(); errorCollector.assertEquals(mf.getFileRevision(0, fa), mf.getFileRevision(3, fa)); // "A2" was reverted } + + @Test + public void testMergeAndCommit() throws Exception { + File repoLoc = RepoUtils.createEmptyDir("composite-scenario-2"); + HgRepository hgRepo = new HgInitCommand().location(repoLoc).revlogV1().execute(); + Path fa = Path.create("file1"), fb = Path.create("file2"), fc = Path.create("file3"); + final File fileA = new File(repoLoc, fa.toString()); + final File fileB = new File(repoLoc, fb.toString()); + // rev0: +file1, +file2 + RepoUtils.createFile(fileA, "first file"); + RepoUtils.createFile(fileB, "second file"); + new HgAddRemoveCommand(hgRepo).add(fa, fb).execute(); + final HgCommitCommand commitCmd = new HgCommitCommand(hgRepo); + commitCmd.message("FIRST").execute(); + // rev1: *file1, *file2 + RepoUtils.modifyFileAppend(fileA, "A1"); + RepoUtils.modifyFileAppend(fileB, "B1"); + commitCmd.message("SECOND").execute(); + // rev2: *file1, -file2 + RepoUtils.modifyFileAppend(fileA, "A2"); + fileB.delete(); + new HgAddRemoveCommand(hgRepo).remove(fb).execute(); + commitCmd.message("THIRD").execute(); + // rev3: fork rev0, +file3, *file2 + new HgCheckoutCommand(hgRepo).changeset(0).clean(true).execute(); + final File fileC = new File(repoLoc, fc.toString()); + RepoUtils.createFile(fileC, "third file"); + RepoUtils.modifyFileAppend(fileB, "B2"); + new HgAddRemoveCommand(hgRepo).add(fc).execute(); + commitCmd.message("FOURTH").execute(); + // rev4: *file3 + RepoUtils.modifyFileAppend(fileC, "C1"); + commitCmd.message("FIFTH").execute(); + // rev5: merge rev2 with rev3 + new HgCheckoutCommand(hgRepo).changeset(2).clean(true).execute(); + new HgMergeCommand(hgRepo).changeset(3).execute(new HgMergeCommand.MediatorBase()); + commitCmd.message("SIXTH: merge rev2 and rev3"); + errorCollector.assertTrue(commitCmd.isMergeCommit()); + HgMergeState ms = hgRepo.getMergeState(); + ms.refresh(); + errorCollector.assertTrue(ms.isMerging()); + errorCollector.assertFalse(ms.isStale()); + errorCollector.assertEquals(0, ms.getConflicts().size()); + Outcome o = commitCmd.execute(); + errorCollector.assertTrue(o.getMessage(), o.isOk()); + ms.refresh(); + errorCollector.assertFalse(ms.isMerging()); + errorCollector.assertEquals(0, ms.getConflicts().size()); + RepoUtils.assertHgVerifyOk(errorCollector, repoLoc); + } }