diff --git a/test/build-test.xml b/test/build-test.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d6301f6b7c001e254c1967f819ba581bd87b1a13
--- /dev/null
+++ b/test/build-test.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0"?>
+
+<!--
+
+  Ant build file for Artemis Test Suite
+
+-->
+
+<project default="test" basedir=".">
+
+  <target name="init">
+    <tstamp />
+    <property name="name" value="artemis test suite" />
+    <property name="version" value="live" />
+    <property name="build.compiler" value="modern" />
+    <property name="classpath" value="." />
+    <property name="src.tests.dir" value="." />
+  	<property name="src.lib.dir" value="lib" />
+
+    <property name="build.dir" value="./ant-build" />
+
+    <!-- Subdirectories for tests source and classes -->
+    <property name="build.src.tests" value="${build.dir}/src/tests" />
+    <property name="build.dest.tests" value="${build.dir}/classes/tests" />
+  	
+    <!-- Compile classpath -->
+    <path id="compile.classpath">
+        <!-- Main classes from build -->
+    	<pathelement path="${classpath}" />
+    	<pathelement path="../ant-build/classes/main/" />
+        <pathelement path="${build.dest.tests}" />
+        <!-- Dependency classes -->
+        <fileset dir="${src.lib.dir}">
+        	 <include name="**/*.jar" />
+        </fileset>
+    </path>
+  </target>
+
+  <!-- Prepares the build directory -->
+  <target name="prepare" depends="init">
+    <mkdir dir="${build.dir}" />
+  </target>
+
+  <!-- Prepares the source code -->
+  <target name="prepare-core" depends="init,prepare">
+    <!-- Creates directories -->
+    <mkdir dir="${build.src.tests}" />
+	<mkdir dir="${build.dest.tests}" />
+
+    <!-- Copies src files -->
+    <copy todir="${build.src.tests}">
+	  <fileset dir="${src.tests.dir}">
+	   	<exclude name="**/CVS/**" />
+	  	<exclude name="**/data/**" />
+	  	<exclude name="**/lib/**" />
+	  </fileset>
+    </copy>
+
+	<!-- Copies jars -->
+	<copy todir="${build.dir}">
+	  <fileset dir="${src.lib.dir}">
+	    <include name="*.jar" />
+      </fileset>
+	</copy>
+  </target>
+	
+  <!-- Compiles the source directory -->
+  <target name="compile" depends="init,prepare-core">
+	 <javac
+	  fork="true"
+	  srcdir="${build.src.tests}"
+	  destdir="${build.dest.tests}"
+	  deprecation="false"
+	  depend="no"
+	  debug="true">
+	  <classpath refid="compile.classpath"/>
+	</javac>
+  </target>	
+	
+  <target name="test" depends="compile">
+  	<junit description="alltests" fork="yes">
+  	 <jvmarg value="-DEMBOSS_ROOT=/Users/tjc/EMBOSS/emboss/"/>
+  	 <batchtest todir="${build.dest.tests}">
+  	 	<fileset dir="${build.src.tests}">
+  	 		<include name="uk/ac/sanger/artemis/circular/digest/**Test.java"/>
+  	 	</fileset>
+  	 </batchtest>
+  	 <formatter type="plain" usefile="false"/>
+  	 <classpath refid="compile.classpath"/> 
+  	</junit>
+  </target>
+	
+  <!-- Cleans everything -->
+  <target name="clean" depends="init">
+    <delete dir="${build.dir}" />
+  </target>
+</project>
diff --git a/test/data/foo.restrict b/test/data/foo.restrict
new file mode 100644
index 0000000000000000000000000000000000000000..e34c84216a680590925e1730b2bd8707a4dcbab0
--- /dev/null
+++ b/test/data/foo.restrict
@@ -0,0 +1,41 @@
+########################################
+# Program: restrict
+# Rundate: Wed 18 Feb 2009 11:01:39
+# Commandline: restrict
+#    [-sequence] /Users/tjc/foo.embl
+#    -auto
+#    -limit y
+#    -enzymes HincII,hinfI,ppiI,hindiii
+#    -outfile /private/tmp/circular_genome57650.txt
+# Report_format: table
+# Report_file: /private/tmp/circular_genome57650.txt
+########################################
+
+#=======================================
+#
+# Sequence:      from: 1   to: 41243
+# HitCount: 158
+#
+# Minimum cuts per enzyme: 1
+# Maximum cuts per enzyme: 2000000000
+# Minimum length of recognition site: 4
+# Blunt ends allowed
+# Sticky ends allowed
+# DNA is linear
+# Ambiguities allowed
+#
+#=======================================
+
+  Start     End  Strand Enzyme_name Restriction_site 5prime 3prime 5primerev 3primerev
+     81      86       + HindIII     AAGCTT               81     85         .         .
+    140     144       + HinfI       GANTC               140    143         .         .
+  40956   40960       + HinfI       GANTC             40956  40959         .         .
+  41036   41041       + HindII      GTYRAC            41038  41038         .         .
+
+#---------------------------------------
+#---------------------------------------
+
+#---------------------------------------
+# Total_sequences: 1
+# Total_hitcount: 158
+#---------------------------------------
diff --git a/test/lib/junit-4.5.jar b/test/lib/junit-4.5.jar
new file mode 100644
index 0000000000000000000000000000000000000000..733921623d4a71ae2ae1432228e6eba5e508ae4c
Binary files /dev/null and b/test/lib/junit-4.5.jar differ
diff --git a/test/uk/ac/sanger/artemis/circular/digest/CircularGenomeControllerTest.java b/test/uk/ac/sanger/artemis/circular/digest/CircularGenomeControllerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e31985198a10db730c28f67a7c19e736feff2c93
--- /dev/null
+++ b/test/uk/ac/sanger/artemis/circular/digest/CircularGenomeControllerTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009  Genome Research Limited
+ *
+ * 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; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+package uk.ac.sanger.artemis.circular.digest;
+
+import static org.junit.Assert.*;
+
+import java.io.File;
+import org.junit.Test;
+
+public class CircularGenomeControllerTest
+{
+	/**
+	 * Test that EMBOSS_ROOT is set
+	 */
+	@Test
+	public void testEmbossRoot()
+	{
+		assertNotNull("EMBOSS_ROOT not set", System.getProperty("EMBOSS_ROOT"));
+	}
+
+	/**
+	 * Test that restrict can be found
+	 */
+	@Test
+	public void testEmbossInstalled()
+	{
+		String restrictPath = System.getProperty("EMBOSS_ROOT") + "/bin/restrict";
+		File restrict = new File(restrictPath);
+		assertTrue("restrict not found at: " + restrictPath, restrict.exists());
+	}
+}
\ No newline at end of file
diff --git a/test/uk/ac/sanger/artemis/circular/digest/EmbossTableParserTest.java b/test/uk/ac/sanger/artemis/circular/digest/EmbossTableParserTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..791afb9cfd74ad347341695d5d0639a4f5a1c451
--- /dev/null
+++ b/test/uk/ac/sanger/artemis/circular/digest/EmbossTableParserTest.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2009  Genome Research Limited
+ *
+ * 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; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+package uk.ac.sanger.artemis.circular.digest;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.util.List;
+
+import org.junit.Test;
+
+import uk.ac.sanger.artemis.circular.digest.CutSite;
+import uk.ac.sanger.artemis.circular.digest.EmbossTableParser;
+
+public class EmbossTableParserTest
+{
+	/**
+	 * Test that restrict output is parsed
+	 */
+	@Test
+	public void testParser() throws IOException
+	{
+    final InputStream inputStream =
+    	EmbossTableParserTest.class.getResourceAsStream("/data/foo.restrict");
+
+    InputStreamReader reader = new InputStreamReader(inputStream);
+    EmbossTableParser etp = new EmbossTableParser();
+    
+    etp.parse(new BufferedReader(reader));
+	}
+}
diff --git a/test/uk/ac/sanger/artemis/circular/digest/UtilsTest.java b/test/uk/ac/sanger/artemis/circular/digest/UtilsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..33be3fdc4265c16068bd50f6fc2758046e82c2af
--- /dev/null
+++ b/test/uk/ac/sanger/artemis/circular/digest/UtilsTest.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2009  Genome Research Limited
+ *
+ * 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; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ *
+ */
+package uk.ac.sanger.artemis.circular.digest;
+
+import static org.junit.Assert.*;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.List;
+import org.junit.Test;
+
+import uk.ac.sanger.artemis.circular.digest.CutSite;
+
+public class UtilsTest
+{
+	/**
+	 * Test that restrict output is parsed
+	 */
+	@Test
+	public void testFindCutSitesFromEmbossReport()
+	{
+    final InputStream inputStream =
+      UtilsTest.class.getResourceAsStream("/data/foo.restrict");
+
+    InputStreamReader reader = new InputStreamReader(inputStream);
+    ReportDetails report = Utils.findCutSitesFromEmbossReport(reader);
+    
+		assertNotNull("ReportDetails null",report);
+		assertEquals("Sequence length",report.length, 41243);
+		
+		List<CutSite> cutSites = report.cutSites;
+		CutSite firstCutSite = cutSites.get(0);
+		
+		assertEquals("Number of cut sites", cutSites.size(), 4);
+		assertEquals("Enzyme name", firstCutSite.getEnzymeName(), "HindIII");
+		assertEquals("3prime", firstCutSite.getThreePrime(), 85);
+		assertEquals("5prime", firstCutSite.getFivePrime(), 81);
+		assertEquals("3prime-rev", firstCutSite.getThreePrimeRev(), 0);
+		assertEquals("5prime-rev", firstCutSite.getFivePrimeRev(), 0);
+		assertTrue("Cut site strand", firstCutSite.isForward());
+	}
+	
+}