diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClasspathTestCollector.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClasspathTestCollector.java
index 4292c8287..8862d1571 100644
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClasspathTestCollector.java
+++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClasspathTestCollector.java
@@ -54,9 +54,9 @@
package org.apache.tools.ant.taskdefs.optional.rjunit;
import java.io.File;
+import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
-import java.util.Vector;
import junit.runner.TestCollector;
@@ -90,7 +90,7 @@ public final class ClasspathTestCollector extends ProjectComponent
String[] paths = path.list();
for (int i = paths.length - 1; i >= 0; i--) {
File f = new File(paths[i]);
- Vector included = null;
+ ArrayList included = null;
if (f.isDirectory()) {
included = gatherFromDirectory(f);
} else if (f.getName().endsWith(".zip")
@@ -103,16 +103,22 @@ public final class ClasspathTestCollector extends ProjectComponent
final int includedCount = included.size();
log("Adding " + includedCount + " testcases from " + f, Project.MSG_VERBOSE);
for (int j = 0; j < includedCount; j++) {
- String testname = (String) included.elementAt(j);
+ String testname = (String) included.get(j);
collected.put(testname, "");
}
}
- log("Collected " + collected.size() + " testcases from " + paths.length + " paths.");
+ log("Collected " + collected.size() + " testcases from " + paths.length + " path(s).", Project.MSG_VERBOSE);
return collected.keys();
}
- protected Vector gatherFromDirectory(File dir) {
+ /**
+ * Return the list of classnames from a directory that match
+ * the specified patterns.
+ * @param dir the base directory (must also be the base package)
+ * @return the list of classnames matching the pattern.
+ */
+ protected ArrayList gatherFromDirectory(File dir) {
Project project = getProject();
DirectoryScanner ds = new DirectoryScanner();
ds.setBasedir(dir);
@@ -123,7 +129,13 @@ public final class ClasspathTestCollector extends ProjectComponent
return testClassNameFromFile(included);
}
- protected Vector gatherFromArchive(File zip) {
+ /**
+ * Return the list of classnames from a zipfile that match
+ * the specified patterns.
+ * @param zip the zipfile (must also be the base package)
+ * @return the list of classnames matching the pattern.
+ */
+ protected ArrayList gatherFromArchive(File zip) {
ZipScanner zs = new ZipScanner();
zs.setBasedir(zip);
zs.setIncludes(patterns.getIncludePatterns(project));
@@ -133,13 +145,17 @@ public final class ClasspathTestCollector extends ProjectComponent
return testClassNameFromFile(included);
}
- protected Vector testClassNameFromFile(String[] classFileNames) {
- Vector tests = new Vector(classFileNames.length);
+ /**
+ * transform a set of file into their matching classname
+ * @todo what about using a mapper for this ?
+ */
+ protected ArrayList testClassNameFromFile(String[] classFileNames) {
+ ArrayList tests = new ArrayList(classFileNames.length);
for (int i = 0; i < classFileNames.length; i++) {
String file = classFileNames[i];
if (isTestClass(file)) {
String classname = classNameFromFile(file);
- tests.addElement(classname);
+ tests.add(classname);
}
}
return tests;
@@ -165,7 +181,7 @@ public final class ClasspathTestCollector extends ProjectComponent
this.path = path;
}
- public Path getPath(){
+ public Path getPath() {
return this.path;
}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClientElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClientElement.java
index f89a154df..132a6de8c 100644
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClientElement.java
+++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClientElement.java
@@ -54,14 +54,14 @@
package org.apache.tools.ant.taskdefs.optional.rjunit;
import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
-import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Properties;
-import java.util.Vector;
import junit.runner.TestCollector;
@@ -100,7 +100,7 @@ public final class ClientElement extends ProjectComponent {
private String host = "127.0.0.1";
/** test collector elements */
- private Vector testCollectors = new Vector();
+ private ArrayList testCollectors = new ArrayList();
/** the command line to launch the TestRunner */
private CommandlineJava cmd = new CommandlineJava();
@@ -108,6 +108,9 @@ public final class ClientElement extends ProjectComponent {
/** the parent task */
private RJUnitTask parent;
+ /** help debug the TestRunner */
+ private boolean debug = false;
+
/** create a new client */
public ClientElement(RJUnitTask value) {
parent = value;
@@ -133,7 +136,7 @@ public final class ClientElement extends ProjectComponent {
protected void doExecute() throws BuildException {
File tmp = configureTestRunner();
- Execute execute = new Execute(new LogStreamHandler(parent, Project.MSG_INFO, Project.MSG_WARN));
+ Execute execute = new Execute(new LogStreamHandler(parent, Project.MSG_VERBOSE, Project.MSG_VERBOSE));
execute.setCommandline(cmd.getCommandline());
execute.setAntRun(project);
@@ -141,7 +144,7 @@ public final class ClientElement extends ProjectComponent {
int retVal = 0;
try {
retVal = execute.execute();
- if (retVal != 0){
+ if (retVal != 0) {
throw new BuildException("task.process-failed.error");
}
} catch (IOException e) {
@@ -162,14 +165,7 @@ public final class ClientElement extends ProjectComponent {
protected Enumeration collectTests() {
Enumeration[] tests = new Enumeration[testCollectors.size()];
for (int i = 0; i < testCollectors.size(); i++) {
- TestCollector te = (TestCollector) testCollectors.elementAt(i);
- //@fixme I'm forced to append the classpath from batchtests
- // here to make sure it will be included as part of the
- // testrunner classpath. Need a better design ?
- if (te instanceof BatchTestElement){
- Path path = ((BatchTestElement)te).getPath();
- cmd.getClasspath().append(path);
- }
+ TestCollector te = (TestCollector) testCollectors.get(i);
tests[i] = te.collectTests();
}
return new CompoundEnumeration(tests);
@@ -182,8 +178,8 @@ public final class ClientElement extends ProjectComponent {
*/
protected File configureTestRunner() throws BuildException {
Properties props = new Properties();
- props.setProperty("debug", "true");
- props.setProperty("host", "127.0.0.1");
+ props.setProperty("debug", String.valueOf(debug));
+ props.setProperty("host", host);
props.setProperty("port", String.valueOf(port));
// get all test classes to run...
StringBuffer buf = new StringBuffer(10240);
@@ -233,6 +229,11 @@ public final class ClientElement extends ProjectComponent {
host = value;
}
+ /** set debug mode for the runner. it will log a file to working dir */
+ public void setDebug(boolean flag) {
+ debug = flag;
+ }
+
/** Create a new JVM argument. */
public Commandline.Argument createJvmarg() {
return cmd.createVmArgument();
@@ -244,14 +245,16 @@ public final class ClientElement extends ProjectComponent {
}
/** add a single test element */
- public void addTest(TestElement value) {
- testCollectors.addElement(value);
+ public void addConfiguredTest(TestElement value) {
+ testCollectors.add(value);
}
/** add a batch test element */
- public void addBatchTest(BatchTestElement value) {
- testCollectors.addElement(value);
+ public void addConfiguredBatchTest(BatchTestElement value) {
+ // add the classpath of batchtest to cmd classpath
+ Path path = value.getPath();
+ cmd.getClasspath().append(path);
+ testCollectors.add(value);
}
-
}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/CompoundEnumeration.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/CompoundEnumeration.java
index 85fd68740..f8515e9a0 100644
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/CompoundEnumeration.java
+++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/CompoundEnumeration.java
@@ -89,44 +89,44 @@ import java.util.NoSuchElementException;
*/
public class CompoundEnumeration implements Enumeration {
- /** enumeration array */
- private Enumeration[] enumArray;
+ /** enumeration array */
+ private Enumeration[] enumArray;
- /** index in the enums array */
- private int index = 0;
+ /** index in the enums array */
+ private int index = 0;
public CompoundEnumeration(Enumeration[] enumarray) {
- this.enumArray = enumarray;
+ this.enumArray = enumarray;
}
- /**
- * Tests if this enumeration contains more elements.
- *
- * @return true
if and only if this enumeration object
- * contains at least one more element to provide;
- * false
otherwise.
- */
+ /**
+ * Tests if this enumeration contains more elements.
+ *
+ * @return true
if and only if this enumeration object
+ * contains at least one more element to provide;
+ * false
otherwise.
+ */
public boolean hasMoreElements() {
- while (index < enumArray.length) {
- if (enumArray[index] != null && enumArray[index].hasMoreElements()) {
- return true;
- }
- index++;
- }
- return false;
+ while (index < enumArray.length) {
+ if (enumArray[index] != null && enumArray[index].hasMoreElements()) {
+ return true;
+ }
+ index++;
+ }
+ return false;
}
- /**
- * Returns the next element of this enumeration if this enumeration
- * object has at least one more element to provide.
- *
- * @return the next element of this enumeration.
- * @throws NoSuchElementException if no more elements exist.
- */
+ /**
+ * Returns the next element of this enumeration if this enumeration
+ * object has at least one more element to provide.
+ *
+ * @return the next element of this enumeration.
+ * @throws NoSuchElementException if no more elements exist.
+ */
public Object nextElement() throws NoSuchElementException {
- if ( hasMoreElements() ) {
- return enumArray[index].nextElement();
- }
- throw new NoSuchElementException();
+ if (hasMoreElements()) {
+ return enumArray[index].nextElement();
+ }
+ throw new NoSuchElementException();
}
}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/JUnitHelper.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/JUnitHelper.java
index 8b4f3f93a..75e57001d 100644
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/JUnitHelper.java
+++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/JUnitHelper.java
@@ -55,10 +55,12 @@ package org.apache.tools.ant.taskdefs.optional.rjunit;
import java.io.File;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.net.URL;
import junit.framework.Test;
import junit.framework.TestSuite;
+import junit.framework.TestCase;
import org.apache.tools.ant.types.Path;
@@ -75,14 +77,24 @@ public final class JUnitHelper {
* This method parse the output of the method toString()
* from the TestCase class. The format returned is:
* name(classname)
- * @return an array with the elements in the order name, classname.
+ * @return the string corresponding to name.
*/
- public static String[] parseTestString(String testname) {
- int p1 = testname.indexOf('(');
- int p2 = testname.indexOf(')', p1);
- return new String[]{
- testname.substring(0, p1),
- testname.substring(p1 + 1, p2)};
+ public static String getTestName(String text){
+ int p1 = text.indexOf('(');
+ int p2 = text.indexOf(')', p1);
+ return text.substring(0, p1);
+ }
+
+ /**
+ * This method parse the output of the method toString()
+ * from the TestCase class. The format returned is:
+ * name(classname)
+ * @return the string corresponding to classname.
+ */
+ public static String getSuiteName(String text){
+ int p1 = text.indexOf('(');
+ int p2 = text.indexOf(')', p1);
+ return text.substring(p1 + 1, p2);
}
/**
@@ -122,6 +134,14 @@ public final class JUnitHelper {
return (Test) suiteMethod.invoke(null, new Class[0]);
} catch (Exception e) {
}
+
+ // check if it is really a valid testcase
+ int modifiers = clazz.getModifiers();
+ if ( !Modifier.isPublic(modifiers) ||
+ Modifier.isAbstract(modifiers) ||
+ !TestCase.class.isAssignableFrom(clazz)) {
+ return null;
+ }
// try to extract a test suite automatically
// this will generate warnings if the class is no suitable Test
try {
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTask.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTask.java
index 1b8e50b07..a4fd1da61 100644
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTask.java
+++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTask.java
@@ -158,9 +158,9 @@ public class RJUnitTask extends Task {
public void run() {
try {
server.execute();
- System.out.println("PANIC !!!!!!");
} catch (Exception e) {
caught = e;
+ e.printStackTrace();
}
}
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ServerElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ServerElement.java
index 59b4092fe..eaa40d4c7 100644
--- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ServerElement.java
+++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ServerElement.java
@@ -53,8 +53,8 @@
*/
package org.apache.tools.ant.taskdefs.optional.rjunit;
-import java.util.Enumeration;
-import java.util.Vector;
+import java.io.IOException;
+import java.util.ArrayList;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.ProjectComponent;
@@ -76,7 +76,7 @@ import org.apache.tools.ant.taskdefs.optional.rjunit.remote.Server;
public final class ServerElement extends ProjectComponent {
/** formatters that write the tests results */
- private Vector formatterElements = new Vector();
+ private ArrayList formatters = new ArrayList();
/** port to run the server on. Default to 6666 */
private int port = 6666;
@@ -101,17 +101,17 @@ public final class ServerElement extends ProjectComponent {
public void execute() throws BuildException {
// configure the server...
server = new Server(port);
- Enumeration listeners = formatterElements.elements();
- while (listeners.hasMoreElements()) {
- ResultFormatterElement fe = (ResultFormatterElement)listeners.nextElement();
- Formatter formatter = fe.createFormatter();
- server.addListener( formatter );
+ final int formatterCount = formatters.size();
+ for (int i = 0; i < formatterCount; i++) {
+ final Formatter f = (Formatter) formatters.get(i);
+ server.addListener(f);
}
+
// and run it. It will stop once a client has finished.
try {
- server.start(true);
+ server.start(false); // do not loop
server.shutdown();
- } catch (InterruptedException e){
+ } catch (IOException e) {
throw new BuildException(e);
}
}
@@ -133,7 +133,8 @@ public final class ServerElement extends ProjectComponent {
}
/** add a new formatter element */
- public void addFormatter(ResultFormatterElement fe) {
- formatterElements.addElement(fe);
+ public void addConfiguredFormatter(ResultFormatterElement fe) {
+ Formatter formatter = fe.createFormatter();
+ formatters.add(formatter);
}
}