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());
+		}
+	}
+}