Browse Source

- Fixed elements to make sure that we have configured elements

in the accessors.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271125 13f79535-47bb-0310-9956-ffa450edef68
master
Stephane Bailliez 23 years ago
parent
commit
283bade37c
6 changed files with 120 additions and 80 deletions
  1. +26
    -10
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClasspathTestCollector.java
  2. +23
    -20
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClientElement.java
  3. +30
    -30
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/CompoundEnumeration.java
  4. +27
    -7
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/JUnitHelper.java
  5. +1
    -1
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTask.java
  6. +13
    -12
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ServerElement.java

+ 26
- 10
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClasspathTestCollector.java View File

@@ -54,9 +54,9 @@
package org.apache.tools.ant.taskdefs.optional.rjunit; package org.apache.tools.ant.taskdefs.optional.rjunit;


import java.io.File; import java.io.File;
import java.util.ArrayList;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Vector;


import junit.runner.TestCollector; import junit.runner.TestCollector;


@@ -90,7 +90,7 @@ public final class ClasspathTestCollector extends ProjectComponent
String[] paths = path.list(); String[] paths = path.list();
for (int i = paths.length - 1; i >= 0; i--) { for (int i = paths.length - 1; i >= 0; i--) {
File f = new File(paths[i]); File f = new File(paths[i]);
Vector included = null;
ArrayList included = null;
if (f.isDirectory()) { if (f.isDirectory()) {
included = gatherFromDirectory(f); included = gatherFromDirectory(f);
} else if (f.getName().endsWith(".zip") } else if (f.getName().endsWith(".zip")
@@ -103,16 +103,22 @@ public final class ClasspathTestCollector extends ProjectComponent
final int includedCount = included.size(); final int includedCount = included.size();
log("Adding " + includedCount + " testcases from " + f, Project.MSG_VERBOSE); log("Adding " + includedCount + " testcases from " + f, Project.MSG_VERBOSE);
for (int j = 0; j < includedCount; j++) { for (int j = 0; j < includedCount; j++) {
String testname = (String) included.elementAt(j);
String testname = (String) included.get(j);
collected.put(testname, ""); 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(); 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(); Project project = getProject();
DirectoryScanner ds = new DirectoryScanner(); DirectoryScanner ds = new DirectoryScanner();
ds.setBasedir(dir); ds.setBasedir(dir);
@@ -123,7 +129,13 @@ public final class ClasspathTestCollector extends ProjectComponent
return testClassNameFromFile(included); 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(); ZipScanner zs = new ZipScanner();
zs.setBasedir(zip); zs.setBasedir(zip);
zs.setIncludes(patterns.getIncludePatterns(project)); zs.setIncludes(patterns.getIncludePatterns(project));
@@ -133,13 +145,17 @@ public final class ClasspathTestCollector extends ProjectComponent
return testClassNameFromFile(included); 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++) { for (int i = 0; i < classFileNames.length; i++) {
String file = classFileNames[i]; String file = classFileNames[i];
if (isTestClass(file)) { if (isTestClass(file)) {
String classname = classNameFromFile(file); String classname = classNameFromFile(file);
tests.addElement(classname);
tests.add(classname);
} }
} }
return tests; return tests;
@@ -165,7 +181,7 @@ public final class ClasspathTestCollector extends ProjectComponent
this.path = path; this.path = path;
} }


public Path getPath(){
public Path getPath() {
return this.path; return this.path;
} }




+ 23
- 20
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ClientElement.java View File

@@ -54,14 +54,14 @@
package org.apache.tools.ant.taskdefs.optional.rjunit; package org.apache.tools.ant.taskdefs.optional.rjunit;


import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Properties; import java.util.Properties;
import java.util.Vector;


import junit.runner.TestCollector; import junit.runner.TestCollector;


@@ -100,7 +100,7 @@ public final class ClientElement extends ProjectComponent {
private String host = "127.0.0.1"; private String host = "127.0.0.1";


/** test collector elements */ /** test collector elements */
private Vector testCollectors = new Vector();
private ArrayList testCollectors = new ArrayList();


/** the command line to launch the TestRunner */ /** the command line to launch the TestRunner */
private CommandlineJava cmd = new CommandlineJava(); private CommandlineJava cmd = new CommandlineJava();
@@ -108,6 +108,9 @@ public final class ClientElement extends ProjectComponent {
/** the parent task */ /** the parent task */
private RJUnitTask parent; private RJUnitTask parent;


/** help debug the TestRunner */
private boolean debug = false;

/** create a new client */ /** create a new client */
public ClientElement(RJUnitTask value) { public ClientElement(RJUnitTask value) {
parent = value; parent = value;
@@ -133,7 +136,7 @@ public final class ClientElement extends ProjectComponent {


protected void doExecute() throws BuildException { protected void doExecute() throws BuildException {
File tmp = configureTestRunner(); 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.setCommandline(cmd.getCommandline());
execute.setAntRun(project); execute.setAntRun(project);


@@ -141,7 +144,7 @@ public final class ClientElement extends ProjectComponent {
int retVal = 0; int retVal = 0;
try { try {
retVal = execute.execute(); retVal = execute.execute();
if (retVal != 0){
if (retVal != 0) {
throw new BuildException("task.process-failed.error"); throw new BuildException("task.process-failed.error");
} }
} catch (IOException e) { } catch (IOException e) {
@@ -162,14 +165,7 @@ public final class ClientElement extends ProjectComponent {
protected Enumeration collectTests() { protected Enumeration collectTests() {
Enumeration[] tests = new Enumeration[testCollectors.size()]; Enumeration[] tests = new Enumeration[testCollectors.size()];
for (int i = 0; i < testCollectors.size(); i++) { 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(); tests[i] = te.collectTests();
} }
return new CompoundEnumeration(tests); return new CompoundEnumeration(tests);
@@ -182,8 +178,8 @@ public final class ClientElement extends ProjectComponent {
*/ */
protected File configureTestRunner() throws BuildException { protected File configureTestRunner() throws BuildException {
Properties props = new Properties(); 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)); props.setProperty("port", String.valueOf(port));
// get all test classes to run... // get all test classes to run...
StringBuffer buf = new StringBuffer(10240); StringBuffer buf = new StringBuffer(10240);
@@ -233,6 +229,11 @@ public final class ClientElement extends ProjectComponent {
host = value; 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. */ /** Create a new JVM argument. */
public Commandline.Argument createJvmarg() { public Commandline.Argument createJvmarg() {
return cmd.createVmArgument(); return cmd.createVmArgument();
@@ -244,14 +245,16 @@ public final class ClientElement extends ProjectComponent {
} }


/** add a single test element */ /** 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 */ /** 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);
} }



} }

+ 30
- 30
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/CompoundEnumeration.java View File

@@ -89,44 +89,44 @@ import java.util.NoSuchElementException;
*/ */
public class CompoundEnumeration implements Enumeration { 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) { public CompoundEnumeration(Enumeration[] enumarray) {
this.enumArray = enumarray;
this.enumArray = enumarray;
} }


/**
* Tests if this enumeration contains more elements.
*
* @return <code>true</code> if and only if this enumeration object
* contains at least one more element to provide;
* <code>false</code> otherwise.
*/
/**
* Tests if this enumeration contains more elements.
*
* @return <code>true</code> if and only if this enumeration object
* contains at least one more element to provide;
* <code>false</code> otherwise.
*/
public boolean hasMoreElements() { 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 { public Object nextElement() throws NoSuchElementException {
if ( hasMoreElements() ) {
return enumArray[index].nextElement();
}
throw new NoSuchElementException();
if (hasMoreElements()) {
return enumArray[index].nextElement();
}
throw new NoSuchElementException();
} }
} }

+ 27
- 7
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/JUnitHelper.java View File

@@ -55,10 +55,12 @@ package org.apache.tools.ant.taskdefs.optional.rjunit;


import java.io.File; import java.io.File;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.URL; import java.net.URL;


import junit.framework.Test; import junit.framework.Test;
import junit.framework.TestSuite; import junit.framework.TestSuite;
import junit.framework.TestCase;


import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;


@@ -75,14 +77,24 @@ public final class JUnitHelper {
* This method parse the output of the method <tt>toString()</tt> * This method parse the output of the method <tt>toString()</tt>
* from the <tt>TestCase</tt> class. The format returned is: * from the <tt>TestCase</tt> class. The format returned is:
* <tt>name(classname)</tt> * <tt>name(classname)</tt>
* @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 <tt>toString()</tt>
* from the <tt>TestCase</tt> class. The format returned is:
* <tt>name(classname)</tt>
* @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]); return (Test) suiteMethod.invoke(null, new Class[0]);
} catch (Exception e) { } 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 // try to extract a test suite automatically
// this will generate warnings if the class is no suitable Test // this will generate warnings if the class is no suitable Test
try { try {


+ 1
- 1
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/RJUnitTask.java View File

@@ -158,9 +158,9 @@ public class RJUnitTask extends Task {
public void run() { public void run() {
try { try {
server.execute(); server.execute();
System.out.println("PANIC !!!!!!");
} catch (Exception e) { } catch (Exception e) {
caught = e; caught = e;
e.printStackTrace();
} }
} }




+ 13
- 12
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ServerElement.java View File

@@ -53,8 +53,8 @@
*/ */
package org.apache.tools.ant.taskdefs.optional.rjunit; 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.BuildException;
import org.apache.tools.ant.ProjectComponent; 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 { public final class ServerElement extends ProjectComponent {


/** formatters that write the tests results */ /** 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 */ /** port to run the server on. Default to 6666 */
private int port = 6666; private int port = 6666;
@@ -101,17 +101,17 @@ public final class ServerElement extends ProjectComponent {
public void execute() throws BuildException { public void execute() throws BuildException {
// configure the server... // configure the server...
server = new Server(port); 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. // and run it. It will stop once a client has finished.
try { try {
server.start(true);
server.start(false); // do not loop
server.shutdown(); server.shutdown();
} catch (InterruptedException e){
} catch (IOException e) {
throw new BuildException(e); throw new BuildException(e);
} }
} }
@@ -133,7 +133,8 @@ public final class ServerElement extends ProjectComponent {
} }


/** add a new formatter element */ /** 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);
} }
} }

Loading…
Cancel
Save