# HG changeset patch # User Artem Tikhomirov # Date 1376657649 -7200 # Node ID cd5c87d96315ba9dde036bd9a032cb0dd2b9bf63 # Parent b4242b7e7dfe72eb6cc68886f3022985cc2f1df9 Merge: tests for mediator notifications diff -r b4242b7e7dfe -r cd5c87d96315 build.xml --- a/build.xml Thu Aug 15 18:43:50 2013 +0200 +++ b/build.xml Fri Aug 16 14:54:09 2013 +0200 @@ -27,7 +27,7 @@ - + @@ -87,6 +87,8 @@ + + @@ -110,12 +112,11 @@ + - - diff -r b4242b7e7dfe -r cd5c87d96315 cmdline/org/tmatesoft/hg/console/Merge.java --- a/cmdline/org/tmatesoft/hg/console/Merge.java Thu Aug 15 18:43:50 2013 +0200 +++ b/cmdline/org/tmatesoft/hg/console/Merge.java Fri Aug 16 14:54:09 2013 +0200 @@ -57,12 +57,11 @@ static class Dump implements HgMergeCommand.Mediator { public void same(HgFileRevision rev, Resolver resolver) throws HgCallbackTargetException { - System.out.printf("Unchanged %s:%s", rev.getPath(), rev.getRevision().shortNotation()); + System.out.printf("Unchanged %s:%s\n", rev.getPath(), rev.getRevision().shortNotation()); } public void onlyA(HgFileRevision base, HgFileRevision rev, Resolver resolver) throws HgCallbackTargetException { - System.out.printf("Left in first trunk only %s:%s", rev.getPath(), rev.getRevision().shortNotation()); - + System.out.printf("Left in first trunk only %s:%s\n", rev.getPath(), rev.getRevision().shortNotation()); } public void onlyB(HgFileRevision base, HgFileRevision rev, Resolver resolver) throws HgCallbackTargetException { diff -r b4242b7e7dfe -r cd5c87d96315 src/org/tmatesoft/hg/core/HgMergeCommand.java --- a/src/org/tmatesoft/hg/core/HgMergeCommand.java Thu Aug 15 18:43:50 2013 +0200 +++ b/src/org/tmatesoft/hg/core/HgMergeCommand.java Fri Aug 16 14:54:09 2013 +0200 @@ -362,9 +362,7 @@ } else { dirstateBuilder.recordMerged(file, fw.fmode(), fw.mtime(), fw.bytesWritten()); } - } else { - assert false; - } + } // else no resolution was chosen, fine with that } public void use(HgFileRevision rev) { diff -r b4242b7e7dfe -r cd5c87d96315 test-data/test-repos.jar Binary file test-data/test-repos.jar has changed diff -r b4242b7e7dfe -r cd5c87d96315 test/org/tmatesoft/hg/test/TestMerge.java --- /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 same = new ArrayList(); + public final List onlyA = new ArrayList(); + public final List onlyB = new ArrayList(); + public final List newInA = new ArrayList(); + public final List newInB = new ArrayList(); + public final List fastForwardA = new ArrayList(); + public final List fastForwardB = new ArrayList(); + public final List conflict = new ArrayList(); + + + 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()); + } + } +}