changeset 201:a736f42ed75b

Primitive test for clone command
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 21 Apr 2011 19:16:45 +0200
parents 114c9fe7b643
children 706bcc7cfee4
files test/org/tmatesoft/hg/test/Configuration.java test/org/tmatesoft/hg/test/ExecHelper.java test/org/tmatesoft/hg/test/TestClone.java
diffstat 3 files changed, 110 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/test/org/tmatesoft/hg/test/Configuration.java	Wed Apr 20 21:14:51 2011 +0200
+++ b/test/org/tmatesoft/hg/test/Configuration.java	Thu Apr 21 19:16:45 2011 +0200
@@ -19,8 +19,11 @@
 import static org.junit.Assert.*;
 
 import java.io.File;
+import java.util.Collections;
+import java.util.List;
 
 import org.tmatesoft.hg.repo.HgLookup;
+import org.tmatesoft.hg.repo.HgRemoteRepository;
 import org.tmatesoft.hg.repo.HgRepository;
 
 /**
@@ -61,4 +64,8 @@
 		assertFalse(rv.isInvalid());
 		return rv;
 	}
+
+	public List<HgRemoteRepository> allRemote() throws Exception {
+		return Collections.singletonList(lookup.detectRemote("hg4j-gc", null));
+	}
 }
--- a/test/org/tmatesoft/hg/test/ExecHelper.java	Wed Apr 20 21:14:51 2011 +0200
+++ b/test/org/tmatesoft/hg/test/ExecHelper.java	Thu Apr 21 19:16:45 2011 +0200
@@ -34,6 +34,7 @@
 
 	private final OutputParser parser;
 	private final File dir;
+	private int exitValue;
 
 	public ExecHelper(OutputParser outParser, File workingDir) {
 		parser = outParser;
@@ -86,6 +87,11 @@
 		}
 		res.flip();
 		p.waitFor();
+		exitValue = p.exitValue();
 		parser.parse(res);
 	}
+	
+	public int getExitValue() {
+		return exitValue;
+	}
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/org/tmatesoft/hg/test/TestClone.java	Thu Apr 21 19:16:45 2011 +0200
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2011 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.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.junit.Rule;
+import org.tmatesoft.hg.core.HgCloneCommand;
+import org.tmatesoft.hg.repo.HgRemoteRepository;
+
+/**
+ *
+ * @author Artem Tikhomirov
+ * @author TMate Software Ltd.
+ */
+public class TestClone {
+
+	@Rule
+	public ErrorCollectorExt errorCollector = new ErrorCollectorExt();
+
+	public static void main(String[] args) throws Exception {
+		TestClone t = new TestClone();
+		t.testSimpleClone();
+	}
+
+	public TestClone() {
+	}
+	
+	public void testSimpleClone() throws Exception {
+		int x = 0;
+		final File tempDir = new File(System.getProperty("java.io.tmpdir"));
+		for (HgRemoteRepository hgRemote : Configuration.get().allRemote()) {
+			HgCloneCommand cmd = new HgCloneCommand();
+			cmd.source(hgRemote);
+			File dest = new File(tempDir, "test-clone-" + x++);
+			if (dest.exists()) {
+				rmdir(dest);
+			}
+			cmd.destination(dest);
+			cmd.execute();
+			verify(hgRemote, dest);
+		}
+	}
+
+	private void verify(HgRemoteRepository hgRemote, File dest) throws Exception {
+		OutputParser noop = new OutputParser() {
+			public void parse(CharSequence seq) {
+				// no-op
+			}
+		};
+		ExecHelper eh = new ExecHelper(noop, dest);
+		eh.run("hg", "verify");
+		Assert.assertEquals(0, eh.getExitValue());
+		eh.run("hg", "out", hgRemote.getLocation());
+		Assert.assertEquals(1, eh.getExitValue());
+		eh.run("hg", "in", hgRemote.getLocation());
+		Assert.assertEquals(1, eh.getExitValue());
+	}
+
+	private static void rmdir(File dest) throws IOException {
+		LinkedList<File> queue = new LinkedList<File>();
+		queue.addAll(Arrays.asList(dest.listFiles()));
+		while (!queue.isEmpty()) {
+			File next = queue.removeFirst();
+			if (next.isDirectory()) {
+				List<File> files = Arrays.asList(next.listFiles());
+				if (!files.isEmpty()) {
+					queue.addAll(files);
+					queue.add(next);
+				}
+				// fall through
+			} 
+			next.delete();
+		}
+		dest.delete();
+	}
+}