Mercurial > hg4j
diff test/org/tmatesoft/hg/test/TestMerge.java @ 706:cd5c87d96315
Merge: tests for mediator notifications
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 16 Aug 2013 14:54:09 +0200 |
parents | |
children | 42b88709e41d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/org/tmatesoft/hg/test/TestMerge.java Fri Aug 16 14:54:09 2013 +0200 @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2013 TMate Software Ltd + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For information on how to redistribute this software under + * the terms of a license other than GNU General Public License + * contact TMate Software at support@hg4j.com + */ +package org.tmatesoft.hg.test; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Rule; +import org.junit.Test; +import org.tmatesoft.hg.core.HgCallbackTargetException; +import org.tmatesoft.hg.core.HgFileRevision; +import org.tmatesoft.hg.core.HgMergeCommand; +import org.tmatesoft.hg.core.HgMergeCommand.Resolver; +import org.tmatesoft.hg.repo.HgRepository; + +/** + * + * @author Artem Tikhomirov + * @author TMate Software Ltd. + */ +public class TestMerge { + + @Rule + public ErrorCollectorExt errorCollector = new ErrorCollectorExt(); + + @Test + public void testMediator() throws Exception { + HgRepository repo = Configuration.get().find("merge-1"); + HgMergeCommand cmd = new HgMergeCommand(repo); + + MergeNotificationCollector c; + // (fastForward(file1, file2, file3) changes, newInB(file5), same(file4)) + cmd.changeset(2).execute(c = new MergeNotificationCollector()); + errorCollector.assertTrue("file1", c.fastForwardA.contains("file1")); + errorCollector.assertTrue("file2", c.fastForwardB.contains("file2")); + errorCollector.assertTrue("file3", c.fastForwardA.contains("file3")); + errorCollector.assertTrue("file4", c.same.contains("file4")); + errorCollector.assertTrue("file5", c.newInB.contains("file5")); + // (conflict(file1), onlyInA(file3), same(file4)) + cmd.changeset(3).execute(c = new MergeNotificationCollector()); + errorCollector.assertTrue("file1", c.conflict.contains("file1")); + errorCollector.assertTrue("file2", c.same.contains("file2")); + errorCollector.assertTrue("file3", c.onlyA.contains("file3")); + errorCollector.assertTrue("file4", c.same.contains("file4")); + } + + private static class MergeNotificationCollector implements HgMergeCommand.Mediator { + public final List<String> same = new ArrayList<String>(); + public final List<String> onlyA = new ArrayList<String>(); + public final List<String> onlyB = new ArrayList<String>(); + public final List<String> newInA = new ArrayList<String>(); + public final List<String> newInB = new ArrayList<String>(); + public final List<String> fastForwardA = new ArrayList<String>(); + public final List<String> fastForwardB = new ArrayList<String>(); + public final List<String> conflict = new ArrayList<String>(); + + + public void same(HgFileRevision rev, Resolver resolver) throws HgCallbackTargetException { + assert resolver != null; + same.add(rev.getPath().toString()); + } + public void onlyA(HgFileRevision base, HgFileRevision rev, Resolver resolver) throws HgCallbackTargetException { + assert resolver != null; + onlyA.add(rev.getPath().toString()); + } + public void onlyB(HgFileRevision base, HgFileRevision rev, Resolver resolver) throws HgCallbackTargetException { + assert resolver != null; + onlyB.add(rev.getPath().toString()); + } + public void newInA(HgFileRevision rev, Resolver resolver) throws HgCallbackTargetException { + assert resolver != null; + newInA.add(rev.getPath().toString()); + } + public void newInB(HgFileRevision rev, Resolver resolver) throws HgCallbackTargetException { + assert resolver != null; + newInB.add(rev.getPath().toString()); + } + public void fastForwardA(HgFileRevision base, HgFileRevision first, Resolver resolver) throws HgCallbackTargetException { + assert resolver != null; + fastForwardA.add(first.getPath().toString()); + } + public void fastForwardB(HgFileRevision base, HgFileRevision second, Resolver resolver) throws HgCallbackTargetException { + assert resolver != null; + fastForwardB.add(second.getPath().toString()); + } + public void resolve(HgFileRevision base, HgFileRevision first, HgFileRevision second, Resolver resolver) throws HgCallbackTargetException { + assert resolver != null; + conflict.add(first.getPath().toString()); + } + } +}