diff --git a/common.ant.xml b/common.ant.xml
index 71b3e1c..5c56c39 100755
--- a/common.ant.xml
+++ b/common.ant.xml
@@ -125,6 +125,7 @@
 	</presetdef>
 
 	<macrodef name="gwt.junit">
+		<!-- TODO: make this more generic / refactor so it can be used from dev/core -->
 		<attribute name="test.args" default="" />
 		<attribute name="test.out" default="" />
 		<attribute name="test.reports" default="@{test.out}/reports" />
diff --git a/dev/core/build.xml b/dev/core/build.xml
index 3c2cc93..d0ce9ac 100755
--- a/dev/core/build.xml
+++ b/dev/core/build.xml
@@ -5,6 +5,21 @@
 
 	<property name="alldeps.jar" location="${project.build}/alldeps.jar" />
 
+	<fileset id="default.tests" dir="${javac.junit.out}">
+		<include name="**/*Test.class" />
+	</fileset>
+
+	<target name="compile.tests" depends="build" description="Compiles the test code for this project">
+		<mkdir dir="${javac.junit.out}" />
+		<gwt.javac srcdir="test" destdir="${javac.junit.out}">
+			<classpath>
+				<pathelement location="${javac.out}" />
+				<pathelement location="${alldeps.jar}" />
+				<pathelement location="${gwt.tools.lib}/junit/junit-3.8.1.jar" />
+			</classpath>
+		</gwt.javac>
+	</target>
+
 	<target name="build.alldeps.jar" description="Merges all dependency jars into a single jar">
 		<mkdir dir="${project.build}" />
 		<gwt.jar destfile="${alldeps.jar}">
@@ -107,6 +122,36 @@
 		</gwt.checkstyle>
 	</target>
 
+	<target name="test" depends="build, compile.tests" description="Run unit tests for this project.">
+		<!-- TODO: refactor gwt.junit so it can be reused here -->
+		<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask">
+			<classpath>
+				<pathelement location="${gwt.tools.lib}/junit/junit-3.8.1.jar" />
+				<pathelement location="${gwt.tools.antlib}/ant-junit-1.6.5.jar" />
+			</classpath>
+		</taskdef>
+	
+		<echo message="Writing test results to @{test.reports} for @{test.cases}" />
+		<mkdir dir="${junit.out}/reports" />
+	
+		<echo message="${javac.out} ${javac.junit.out}" />
+		<junit dir="${junit.out}" fork="yes" printsummary="yes" haltonfailure="true">
+			<classpath>
+				<pathelement location="${javac.junit.out}" />
+				<pathelement location="${javac.out}" />
+				<pathelement location="${alldeps.jar}" />
+				<pathelement location="${gwt.tools.lib}/junit/junit-3.8.1.jar" />
+			</classpath>
+	
+			<formatter type="plain" />
+			<formatter type="xml" />
+	
+			<batchtest todir="${junit.out}/reports">
+				<fileset refid="default.tests" />
+			</batchtest>
+		</junit>
+	</target>
+
 	<target name="clean" description="Cleans this project's intermediate and output files">
 		<delete dir="${project.build}" />
 		<delete file="${project.lib}" />
diff --git a/dev/core/test/com/google/gwt/dev/typeinfo/test/InteractiveTypeOracle.java b/dev/core/test/com/google/gwt/dev/typeinfo/test/InteractiveTypeOracle.java
index bda64cb..0e639e7 100644
--- a/dev/core/test/com/google/gwt/dev/typeinfo/test/InteractiveTypeOracle.java
+++ b/dev/core/test/com/google/gwt/dev/typeinfo/test/InteractiveTypeOracle.java
@@ -50,11 +50,12 @@
     // See if we should create a gui logger.
     //
     for (int i = 0; i < args.length; i++) {
-      if ("-gui".equals(args[i])) {
-        logger = TreeLoggerWidget.getAsDetachedWindow(
-          "Interactive Type Oracle Log", 700, 600, true);
-        break;
-      }
+      // TODO: this was removed to avoid making an SWT dependency from test code
+      // if ("-gui".equals(args[i])) {
+      // logger = TreeLoggerWidget.getAsDetachedWindow(
+      // "Interactive Type Oracle Log", 700, 600, true);
+      // break;
+      // }
     }
 
     if (logger == null) {
@@ -132,7 +133,7 @@
 
     if (currType == null && handler.requiresCurrentType()) {
       logger.log(TreeLogger.WARN,
-        "This command requires a current type to be selected", null);
+          "This command requires a current type to be selected", null);
       return false;
     }
 
@@ -198,8 +199,7 @@
       for (int i = 0; i < cmdTokens.length; i++) {
         String cmdToken = cmdTokens[i];
         if (sublogger == null) {
-          sublogger = logger
-            .branch(TreeLogger.INFO, "Available commands", null);
+          sublogger = logger.branch(TreeLogger.INFO, "Available commands", null);
         }
         sublogger.log(TreeLogger.INFO, cmdToken, null);
       }
@@ -233,7 +233,7 @@
 
       currType = type;
       logger.log(TreeLogger.INFO, "Current type is now "
-        + type.getQualifiedSourceName(), null);
+          + type.getQualifiedSourceName(), null);
       return true;
     }
 
@@ -253,7 +253,7 @@
         logger.log(TreeLogger.WARN, "No arguments expected", null);
         logger.log(TreeLogger.INFO, "Usage: subtypes", null);
         logger.log(TreeLogger.INFO, "Prints all subtypes of the current type",
-          null);
+            null);
         return false;
       }
 
@@ -265,10 +265,10 @@
       for (int i = 0; i < subtypes.length; i++) {
         if (sublogger == null) {
           sublogger = logger.branch(TreeLogger.INFO, "Subtypes of " + typename,
-            null);
+              null);
         }
         sublogger.log(TreeLogger.INFO, subtypes[i].getQualifiedSourceName(),
-          null);
+            null);
       }
 
       return true;
@@ -290,7 +290,7 @@
         logger.log(TreeLogger.WARN, "No arguments expected", null);
         logger.log(TreeLogger.INFO, "Usage: fields", null);
         logger.log(TreeLogger.INFO, "Prints the fields of the current type",
-          null);
+            null);
         return false;
       }
 
@@ -301,7 +301,7 @@
       for (int i = 0; i < fields.length; i++) {
         if (sublogger == null) {
           sublogger = logger.branch(TreeLogger.INFO, "Fields of " + typename,
-            null);
+              null);
         }
         sublogger.log(TreeLogger.INFO, fields[i].toString(), null);
       }
@@ -325,7 +325,7 @@
         logger.log(TreeLogger.WARN, "No arguments expected", null);
         logger.log(TreeLogger.INFO, "Usage: methods", null);
         logger.log(TreeLogger.INFO, "Prints the methods of the current type",
-          null);
+            null);
         return false;
       }
 
@@ -336,7 +336,7 @@
       for (int i = 0; i < methods.length; i++) {
         if (sublogger == null) {
           sublogger = logger.branch(TreeLogger.INFO, "Methods of " + typename,
-            null);
+              null);
         }
         sublogger.log(TreeLogger.INFO, methods[i].toString(), null);
       }
@@ -360,7 +360,7 @@
         logger.log(TreeLogger.WARN, "No arguments expected", null);
         logger.log(TreeLogger.INFO, "Usage: nested", null);
         logger.log(TreeLogger.INFO,
-          "Prints the nested types of the current type", null);
+            "Prints the nested types of the current type", null);
         return false;
       }
 
@@ -371,7 +371,7 @@
       for (int i = 0; i < nestedTypes.length; i++) {
         if (sublogger == null) {
           sublogger = logger.branch(TreeLogger.INFO, "Types nested inside "
-            + typename, null);
+              + typename, null);
         }
         sublogger.log(TreeLogger.INFO, nestedTypes[i].toString(), null);
       }
@@ -414,7 +414,7 @@
         logger.log(TreeLogger.WARN, "Bad arguments " + mushed, e);
       } catch (TypeOracleException e) {
         logger.log(TreeLogger.WARN,
-          "Some other type oracle exception while parsing " + mushed, e);
+            "Some other type oracle exception while parsing " + mushed, e);
       }
 
       return true;
@@ -436,14 +436,14 @@
         logger.log(TreeLogger.WARN, "No arguments", null);
         logger.log(TreeLogger.INFO, "Usage: enclosing", null);
         logger.log(TreeLogger.INFO,
-          "Prints the enclosing type of the current type", null);
+            "Prints the enclosing type of the current type", null);
         return false;
       }
 
       JClassType enclosingType = currType.getEnclosingType();
       if (enclosingType != null) {
         logger.log(TreeLogger.INFO, enclosingType.getQualifiedSourceName(),
-          null);
+            null);
       }
 
       return true;
@@ -465,7 +465,7 @@
         logger.log(TreeLogger.WARN, "No arguments", null);
         logger.log(TreeLogger.INFO, "Usage: ctors", null);
         logger.log(TreeLogger.INFO,
-          "Prints the constructors of the current type", null);
+            "Prints the constructors of the current type", null);
         return false;
       }
 
@@ -476,7 +476,7 @@
       for (int i = 0; i < ctors.length; i++) {
         if (sublogger == null) {
           sublogger = logger.branch(TreeLogger.INFO, "Constructors of "
-            + typename, null);
+              + typename, null);
         }
         sublogger.log(TreeLogger.INFO, ctors[i].toString(), null);
       }
@@ -500,8 +500,8 @@
         logger.log(TreeLogger.WARN, "One argument is expected", null);
         logger.log(TreeLogger.INFO, "Usage: overloads <method-name>", null);
         logger.log(TreeLogger.INFO,
-          "Prints the overloads of a particular method in the current type",
-          null);
+            "Prints the overloads of a particular method in the current type",
+            null);
         return false;
       }
 
@@ -512,7 +512,7 @@
       for (int i = 0; i < overloads.length; i++) {
         if (sublogger == null) {
           sublogger = logger.branch(TreeLogger.INFO, "Overloads in " + typename
-            + " of " + args[0], null);
+              + " of " + args[0], null);
         }
         sublogger.log(TreeLogger.INFO, overloads[i].toString(), null);
       }
@@ -535,13 +535,12 @@
         logger.log(TreeLogger.WARN, "No arguments", null);
         logger.log(TreeLogger.INFO, "Usage: supertypes", null);
         logger.log(TreeLogger.INFO,
-          "Prints the hierarchy of supertypes of the current type", null);
+            "Prints the hierarchy of supertypes of the current type", null);
         return false;
       }
 
       String typename = currType.getQualifiedSourceName();
-      logger = logger
-        .branch(TreeLogger.INFO, "Supertypes of " + typename, null);
+      logger = logger.branch(TreeLogger.INFO, "Supertypes of " + typename, null);
       printSupertypesImpl(logger, currType);
       return true;
     }
