Browse Source

- Clean up

- Refactored some code and moved protected fields to private


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270745 13f79535-47bb-0310-9956-ffa450edef68
master
Stephane Bailliez 23 years ago
parent
commit
626c685b1d
20 changed files with 275 additions and 183 deletions
  1. +31
    -33
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ClasspathTestCollector.java
  2. +1
    -1
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/FilterElement.java
  3. +9
    -10
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitHelper.java
  4. +7
    -7
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
  5. +1
    -1
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/KeepAliveOutputStream.java
  6. +2
    -2
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java
  7. +1
    -1
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/WatchdogTest.java
  8. +16
    -18
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ZipScanner.java
  9. +36
    -26
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BaseFormatter.java
  10. +3
    -0
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BriefFormatter.java
  11. +1
    -1
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterFormatter.java
  12. +16
    -20
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterStackFormatter.java
  13. +3
    -3
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/Formatter.java
  14. +6
    -5
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/SummaryFormatter.java
  15. +9
    -11
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/XMLFormatter.java
  16. +6
    -9
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java
  17. +9
    -12
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageWriter.java
  18. +4
    -5
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java
  19. +95
    -0
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/SocketUtil.java
  20. +19
    -18
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunner.java

+ 31
- 33
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ClasspathTestCollector.java View File

@@ -53,20 +53,18 @@
*/ */
package org.apache.tools.ant.taskdefs.optional.junit; package org.apache.tools.ant.taskdefs.optional.junit;


import java.io.File;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Vector;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.zip.ZipFile;
import java.util.zip.ZipEntry;
import java.io.File;
import java.util.Vector;


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


import org.apache.tools.ant.types.PatternSet;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.ProjectComponent;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.PatternSet;


/** /**
* A rough implementation of a test collector that will collect tests * A rough implementation of a test collector that will collect tests
@@ -78,7 +76,7 @@ import org.apache.tools.ant.Project;
public class ClasspathTestCollector extends ProjectComponent public class ClasspathTestCollector extends ProjectComponent
implements TestCollector { implements TestCollector {


private final static int SUFFIX_LENGTH= ".class".length();
private final static int SUFFIX_LENGTH = ".class".length();


private PatternSet patterns = new PatternSet(); private PatternSet patterns = new PatternSet();


@@ -90,21 +88,21 @@ public class ClasspathTestCollector extends ProjectComponent
// override last one in case there are duplicates. // override last one in case there are duplicates.
// ie mimic classpath behavior. // ie mimic classpath behavior.
String[] paths = path.list(); String[] paths = path.list();
for (int i = paths.length; i >= 0; i--){
for (int i = paths.length; i >= 0; i--) {
File f = new File(paths[i]); File f = new File(paths[i]);
Vector included = null; Vector included = null;
if ( f.isDirectory() ){
if (f.isDirectory()) {
included = gatherFromDirectory(f); included = gatherFromDirectory(f);
} else if ( f.getName().endsWith(".zip")
|| f.getName().endsWith(".jar") ) {
} else if (f.getName().endsWith(".zip")
|| f.getName().endsWith(".jar")) {
included = gatherFromArchive(f); included = gatherFromArchive(f);
} else { } else {
continue; continue;
} }
// add tests to the already collected one // add tests to the already collected one
final int includedCount = included.size(); final int includedCount = included.size();
for (int j = 0; j < includedCount; j++){
String testname = (String)included.elementAt(i);
for (int j = 0; j < includedCount; j++) {
String testname = (String) included.elementAt(i);
collected.put(testname, ""); collected.put(testname, "");
} }
} }
@@ -112,7 +110,7 @@ public class ClasspathTestCollector extends ProjectComponent
} }




protected Vector gatherFromDirectory(File dir){
protected Vector 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 +121,7 @@ public class ClasspathTestCollector extends ProjectComponent
return testClassNameFromFile(included); return testClassNameFromFile(included);
} }


protected Vector gatherFromArchive(File zip){
protected Vector 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,11 +131,11 @@ public class ClasspathTestCollector extends ProjectComponent
return testClassNameFromFile(included); return testClassNameFromFile(included);
} }


protected Vector testClassNameFromFile(String[] classFileNames){
protected Vector testClassNameFromFile(String[] classFileNames) {
Vector tests = new Vector(classFileNames.length); Vector tests = new Vector(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.addElement(classname);
} }
@@ -146,30 +144,30 @@ public class ClasspathTestCollector extends ProjectComponent
} }


protected boolean isTestClass(String classFileName) { protected boolean isTestClass(String classFileName) {
return classFileName.endsWith(".class");
}
protected String classNameFromFile(String classFileName) {
// convert /a/b.class to a.b
String s= classFileName.substring(0, classFileName.length()-SUFFIX_LENGTH);
String s2= s.replace(File.separatorChar, '.');
if ( s2.startsWith(".") ){
s2 = s2.substring(1);
return classFileName.endsWith(".class");
}
protected String classNameFromFile(String classFileName) {
// convert /a/b.class to a.b
String s = classFileName.substring(0, classFileName.length() - SUFFIX_LENGTH);
String s2 = s.replace(File.separatorChar, '.');
if (s2.startsWith(".")) {
s2 = s2.substring(1);
} }
return s2;
}
return s2;
}


// Ant bean accessors // Ant bean accessors


public void setPath(Path path){
public void setPath(Path path) {
this.path = path; this.path = path;
} }


public PatternSet.NameEntry createInclude(){
public PatternSet.NameEntry createInclude() {
return patterns.createInclude(); return patterns.createInclude();
} }


public PatternSet.NameEntry createExclude(){
public PatternSet.NameEntry createExclude() {
return patterns.createExclude(); return patterns.createExclude();
} }




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

@@ -105,7 +105,7 @@ public class FilterElement {
try { try {
Class clazz = Class.forName(classname); Class clazz = Class.forName(classname);
if (!FilterFormatter.class.isAssignableFrom(clazz)) { if (!FilterFormatter.class.isAssignableFrom(clazz)) {
throw new BuildException( clazz + " must be a FilterFormatter.");
throw new BuildException(clazz + " must be a FilterFormatter.");
} }
Constructor ctor = clazz.getConstructor(new Class[]{Formatter.class}); Constructor ctor = clazz.getConstructor(new Class[]{Formatter.class});
return (Formatter) ctor.newInstance(new Object[]{f}); return (Formatter) ctor.newInstance(new Object[]{f});


+ 9
- 10
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitHelper.java View File

@@ -53,14 +53,13 @@
*/ */
package org.apache.tools.ant.taskdefs.optional.junit; package org.apache.tools.ant.taskdefs.optional.junit;


import java.lang.reflect.Method;
import java.io.File; import java.io.File;
import java.lang.reflect.Method;
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 org.apache.tools.ant.Project;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;


/** /**
@@ -78,12 +77,12 @@ public final class JUnitHelper {
* <tt>name(classname)</tt> * <tt>name(classname)</tt>
* @return an array with the elements in the order name, classname. * @return an array with the elements in the order name, classname.
*/ */
public static String[] parseTestString(String testname){
public static String[] parseTestString(String testname) {
int p1 = testname.indexOf('('); int p1 = testname.indexOf('(');
int p2 = testname.indexOf(')', p1); int p2 = testname.indexOf(')', p1);
return new String[]{ return new String[]{
testname.substring(0, p1), testname.substring(0, p1),
testname.substring(p1 + 1, p2) };
testname.substring(p1 + 1, p2)};
} }


/** /**
@@ -110,10 +109,10 @@ public final class JUnitHelper {
public static Test getTest(Class clazz) { public static Test getTest(Class clazz) {
try { try {
Object obj = clazz.newInstance(); Object obj = clazz.newInstance();
if (obj instanceof TestSuite){
return (TestSuite) obj;
if (obj instanceof TestSuite) {
return (TestSuite) obj;
} }
} catch (Exception e){
} catch (Exception e) {
} }
try { try {
// check if there is a suite method // check if there is a suite method
@@ -125,7 +124,7 @@ public final class JUnitHelper {
// this will generate warnings if the class is no suitable Test // this will generate warnings if the class is no suitable Test
try { try {
return new TestSuite(clazz); return new TestSuite(clazz);
} catch (Exception e){
} catch (Exception e) {
} }
return null; return null;
} }
@@ -141,7 +140,7 @@ public final class JUnitHelper {
* @return the file or directory containing the resource or * @return the file or directory containing the resource or
* <tt>null</tt> if it does not know how to handle it. * <tt>null</tt> if it does not know how to handle it.
*/ */
public static File getResourceEntry(String resource){
public static File getResourceEntry(String resource) {
URL url = JUnitHelper.class.getResource(resource); URL url = JUnitHelper.class.getResource(resource);
if (url != null) { if (url != null) {
// can't find the resource... // can't find the resource...
@@ -169,7 +168,7 @@ public final class JUnitHelper {
* @param resource the resource to look for. * @param resource the resource to look for.
* @see #getResourceEntry(String) * @see #getResourceEntry(String)
*/ */
public static void addClasspathEntry(Path path, String resource){
public static void addClasspathEntry(Path path, String resource) {
File f = getResourceEntry(resource); File f = getResourceEntry(resource);
if (f != null) { if (f != null) {
path.createPathElement().setLocation(f); path.createPathElement().setLocation(f);


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

@@ -58,18 +58,18 @@ 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.util.Enumeration;
import java.util.Properties; import java.util.Properties;
import java.util.Vector; import java.util.Vector;
import java.util.Enumeration;


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


import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;
import org.apache.tools.ant.taskdefs.optional.junit.formatter.Formatter;
import org.apache.tools.ant.taskdefs.Execute; import org.apache.tools.ant.taskdefs.Execute;
import org.apache.tools.ant.taskdefs.LogStreamHandler; import org.apache.tools.ant.taskdefs.LogStreamHandler;
import org.apache.tools.ant.taskdefs.optional.junit.formatter.Formatter;
import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.Commandline;
import org.apache.tools.ant.types.CommandlineJava; import org.apache.tools.ant.types.CommandlineJava;
import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Path;
@@ -136,8 +136,8 @@ public class JUnitTask extends Task {
// get all test classes to run... // get all test classes to run...
StringBuffer buf = new StringBuffer(10240); StringBuffer buf = new StringBuffer(10240);
Enumeration classnames = collectTests(); Enumeration classnames = collectTests();
while ( classnames.hasMoreElements() ){
String classname = (String)classnames.nextElement();
while (classnames.hasMoreElements()) {
String classname = (String) classnames.nextElement();
buf.append(classname).append(" "); buf.append(classname).append(" ");
} }
props.setProperty("classnames", buf.toString()); props.setProperty("classnames", buf.toString());
@@ -170,10 +170,10 @@ public class JUnitTask extends Task {
/** /**
* @return all collected tests specified with test elements. * @return all collected tests specified with test elements.
*/ */
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++){
TestCollector te = (TestCollector)testCollectors.elementAt(i);
for (int i = 0; i < testCollectors.size(); i++) {
TestCollector te = (TestCollector) testCollectors.elementAt(i);
tests[i] = te.collectTests(); tests[i] = te.collectTests();
} }
return Enumerations.fromCompound(tests); return Enumerations.fromCompound(tests);


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

@@ -54,8 +54,8 @@
package org.apache.tools.ant.taskdefs.optional.junit; package org.apache.tools.ant.taskdefs.optional.junit;


import java.io.FilterOutputStream; import java.io.FilterOutputStream;
import java.io.OutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream;


/** /**
* Class that can be used to wrap <tt>System.out</tt> and <tt>System.err</tt> * Class that can be used to wrap <tt>System.out</tt> and <tt>System.err</tt>


+ 2
- 2
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java View File

@@ -70,12 +70,12 @@ public class TestElement implements TestCollector {
//@fixme, a path is needed for a test. //@fixme, a path is needed for a test.


public Enumeration collectTests() { public Enumeration collectTests() {
return Enumerations.fromArray( new String[]{ name } );
return Enumerations.fromArray(new String[]{name});
} }


// Ant bean setters // Ant bean setters


public String setName(String value){
public void setName(String value) {
this.name = value; this.name = value;
} }
} }

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

@@ -69,7 +69,7 @@ import junit.framework.TestResult;
public class WatchdogTest extends TestDecorator { public class WatchdogTest extends TestDecorator {


/** the time out delay in msecs */ /** the time out delay in msecs */
protected long timeOut;
private long timeOut;


/** /**
* Create a new watchdog. * Create a new watchdog.


+ 16
- 18
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ZipScanner.java View File

@@ -55,14 +55,12 @@ package org.apache.tools.ant.taskdefs.optional.junit;


import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Vector;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.zip.ZipFile;
import java.util.Vector;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;


import org.apache.tools.ant.DirectoryScanner; import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.FileScanner;
import org.apache.tools.ant.BuildException;


/** /**
* Provide a way to scan entries in a zip file. Note that it extends * Provide a way to scan entries in a zip file. Note that it extends
@@ -93,10 +91,10 @@ public class ZipScanner extends DirectoryScanner {
* normalize a set of paths so that it uses / otherwise matching will * normalize a set of paths so that it uses / otherwise matching will
* fail beautifully since archives use / to denote a path. * fail beautifully since archives use / to denote a path.
*/ */
protected void normalize(String[] files){
if (files != null){
for (int i = 0; i < files.length; i++){
files[i] = files[i].replace('\\','/');
protected void normalize(String[] files) {
if (files != null) {
for (int i = 0; i < files.length; i++) {
files[i] = files[i].replace('\\', '/');
} }
} }
} }
@@ -113,11 +111,11 @@ public class ZipScanner extends DirectoryScanner {
} }
if (!basedir.exists()) { if (!basedir.exists()) {
throw new IllegalStateException("zipfile " + basedir throw new IllegalStateException("zipfile " + basedir
+ " does not exist");
+ " does not exist");
} }
if (basedir.isDirectory()) { if (basedir.isDirectory()) {
throw new IllegalStateException("zipfile " + basedir throw new IllegalStateException("zipfile " + basedir
+ " is not a file");
+ " is not a file");
} }


if (includes == null) { if (includes == null) {
@@ -129,12 +127,12 @@ public class ZipScanner extends DirectoryScanner {
excludes = new String[0]; excludes = new String[0];
} }


filesIncluded = new Vector();
filesIncluded = new Vector();
filesNotIncluded = new Vector(); filesNotIncluded = new Vector();
filesExcluded = new Vector();
dirsIncluded = new Vector();
dirsNotIncluded = new Vector();
dirsExcluded = new Vector();
filesExcluded = new Vector();
dirsIncluded = new Vector();
dirsNotIncluded = new Vector();
dirsExcluded = new Vector();


if (isIncluded("")) { if (isIncluded("")) {
if (!isExcluded("")) { if (!isExcluded("")) {
@@ -152,13 +150,13 @@ public class ZipScanner extends DirectoryScanner {
ZipFile zip = null; ZipFile zip = null;
try { try {
zip = new ZipFile(file); zip = new ZipFile(file);
} catch (IOException e){
} catch (IOException e) {
throw new IllegalStateException(e.getMessage()); throw new IllegalStateException(e.getMessage());
} }


Enumeration entries = zip.entries(); Enumeration entries = zip.entries();
while ( entries.hasMoreElements() ) {
ZipEntry entry = (ZipEntry)entries.nextElement();
while (entries.hasMoreElements()) {
ZipEntry entry = (ZipEntry) entries.nextElement();
String name = entry.getName(); String name = entry.getName();
// @fixme do we need to strip out entries that starts // @fixme do we need to strip out entries that starts
// with . or ./ ? // with . or ./ ?


+ 36
- 26
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BaseFormatter.java View File

@@ -67,23 +67,22 @@ import java.util.Properties;
*/ */
public abstract class BaseFormatter implements Formatter { public abstract class BaseFormatter implements Formatter {


protected OutputStream out;
/** writer to output the data to */
private PrintWriter writer;


protected PrintWriter writer;
/** number of errors */
private int errorCount;


protected int errorCount;
/** number of failures */
private int failureCount;


protected int failureCount;

protected int runCount;

protected Properties props;
/** number of runs (success + failure + error) */
private int runCount;


public void setOutput(OutputStream value) { public void setOutput(OutputStream value) {
out = value;
try { try {
writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(out, "UTF8")), true);
} catch (IOException e){
writer = new PrintWriter(new BufferedWriter(new OutputStreamWriter(value, "UTF8")), true);
} catch (IOException e) {
// should not happen // should not happen
throw new IllegalStateException(e.getMessage()); throw new IllegalStateException(e.getMessage());
} }
@@ -139,22 +138,33 @@ public abstract class BaseFormatter implements Formatter {
close(); close();
} }


/** helper method to flush and close all streams */
/**
* @return the writer used to print data.
*/
protected final PrintWriter getWriter() {
return writer;
}

/** @return the number of errors */
protected final int getErrorCount() {
return errorCount;
}

/** @return the number of failures */
protected final int getFailureCount() {
return failureCount;
}

/** @return the number of runs */
protected final int getRunCount() {
return runCount;
}

/** helper method to flush and close the stream */
protected void close() { protected void close() {
try {
if (writer != null) {
writer.flush();
writer = null;
}
} finally {
// make sure we're not closing System.out or System.err...
if (out != null && out != System.err && out != System.out) {
try {
out.close();
out = null;
} catch (IOException e) {
}
}
if (writer != null) {
writer.flush();
writer.close();
} }
} }
} }

+ 3
- 0
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BriefFormatter.java View File

@@ -53,6 +53,8 @@
*/ */
package org.apache.tools.ant.taskdefs.optional.junit.formatter; package org.apache.tools.ant.taskdefs.optional.junit.formatter;


import java.io.PrintWriter;



/** /**
* Display additional messages from a <tt>SummaryFormatter</tt> * Display additional messages from a <tt>SummaryFormatter</tt>
@@ -63,6 +65,7 @@ package org.apache.tools.ant.taskdefs.optional.junit.formatter;
public class BriefFormatter extends SummaryFormatter { public class BriefFormatter extends SummaryFormatter {


public void onTestFailed(int status, String testname, String trace) { public void onTestFailed(int status, String testname, String trace) {
PrintWriter writer = getWriter();
writer.print("TestCase: "); writer.print("TestCase: ");
writer.print(testname); writer.print(testname);
if (status == STATUS_ERROR) { if (status == STATUS_ERROR) {


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

@@ -65,7 +65,7 @@ public abstract class FilterFormatter implements Formatter {


protected Formatter formatter; protected Formatter formatter;


protected FilterFormatter(Formatter value){
protected FilterFormatter(Formatter value) {
formatter = value; formatter = value;
} }




+ 16
- 20
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterStackFormatter.java View File

@@ -53,10 +53,6 @@
*/ */
package org.apache.tools.ant.taskdefs.optional.junit.formatter; package org.apache.tools.ant.taskdefs.optional.junit.formatter;


import java.io.StringWriter;
import java.io.PrintWriter;
import java.io.StringReader;
import java.io.BufferedReader;
import java.util.StringTokenizer; import java.util.StringTokenizer;


import org.apache.tools.ant.util.StringUtils; import org.apache.tools.ant.util.StringUtils;
@@ -83,32 +79,32 @@ import org.apache.tools.ant.util.StringUtils;
public class FilterStackFormatter extends FilterFormatter { public class FilterStackFormatter extends FilterFormatter {


/** the set of matches to look for in a stack trace */ /** the set of matches to look for in a stack trace */
private final static String[] DEFAULT_TRACE_FILTERS = new String[] {
"junit.framework.TestCase",
"junit.framework.TestResult",
"junit.framework.TestSuite",
"junit.framework.Assert.", // don't filter AssertionFailure
"junit.swingui.TestRunner",
"junit.awtui.TestRunner",
"junit.textui.TestRunner",
"java.lang.reflect.Method.invoke(",
"org.apache.tools.ant."
};
private final static String[] DEFAULT_TRACE_FILTERS = new String[]{
"junit.framework.TestCase",
"junit.framework.TestResult",
"junit.framework.TestSuite",
"junit.framework.Assert.", // don't filter AssertionFailure
"junit.swingui.TestRunner",
"junit.awtui.TestRunner",
"junit.textui.TestRunner",
"java.lang.reflect.Method.invoke(",
"org.apache.tools.ant."
};


/** /**
* Creates a new <tt>FilterStackFormatter</tt> * Creates a new <tt>FilterStackFormatter</tt>
* @param formatter the formatter to be filtered. * @param formatter the formatter to be filtered.
*/ */
public FilterStackFormatter(Formatter formatter){
public FilterStackFormatter(Formatter formatter) {
super(formatter); super(formatter);
} }


public void onTestFailed(int status, String testname, String trace) { public void onTestFailed(int status, String testname, String trace) {
StringTokenizer st = new StringTokenizer(trace,"\r\n");
StringTokenizer st = new StringTokenizer(trace, "\r\n");
StringBuffer buf = new StringBuffer(trace.length()); StringBuffer buf = new StringBuffer(trace.length());
while ( st.hasMoreTokens() ){
while (st.hasMoreTokens()) {
String line = st.nextToken(); String line = st.nextToken();
if ( accept(line) ){
if (accept(line)) {
buf.append(line).append(StringUtils.LINE_SEP); buf.append(line).append(StringUtils.LINE_SEP);
} }
} }
@@ -120,7 +116,7 @@ public class FilterStackFormatter extends FilterFormatter {
* @param the line to be check for acceptance. * @param the line to be check for acceptance.
* @return <tt>true</tt> if the line is accepted, <tt>false</tt> if not. * @return <tt>true</tt> if the line is accepted, <tt>false</tt> if not.
*/ */
protected boolean accept(String line){
protected boolean accept(String line) {
for (int i = 0; i < DEFAULT_TRACE_FILTERS.length; i++) { for (int i = 0; i < DEFAULT_TRACE_FILTERS.length; i++) {
if (line.indexOf(DEFAULT_TRACE_FILTERS[i]) > 0) { if (line.indexOf(DEFAULT_TRACE_FILTERS[i]) > 0) {
return false; return false;


+ 3
- 3
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/Formatter.java View File

@@ -65,16 +65,16 @@ public interface Formatter extends TestRunListener {
/** /**
* Sets the stream the formatter is supposed to write its results to. * Sets the stream the formatter is supposed to write its results to.
*/ */
public void setOutput( OutputStream out );
public void setOutput(OutputStream out);


/** /**
* This is what the test has written to System.out * This is what the test has written to System.out
*/ */
public void setSystemOutput( String out );
public void setSystemOutput(String out);


/** /**
* This is what the test has written to System.err * This is what the test has written to System.err
*/ */
public void setSystemError( String err );
public void setSystemError(String err);


} }

+ 6
- 5
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/SummaryFormatter.java View File

@@ -53,8 +53,8 @@
*/ */
package org.apache.tools.ant.taskdefs.optional.junit.formatter; package org.apache.tools.ant.taskdefs.optional.junit.formatter;


import java.io.PrintWriter;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ResourceBundle;


/** /**
* Display a summary message at the end of a testsuite stating * Display a summary message at the end of a testsuite stating
@@ -64,19 +64,20 @@ import java.util.ResourceBundle;
*/ */
public class SummaryFormatter extends BaseFormatter { public class SummaryFormatter extends BaseFormatter {


protected MessageFormat mf = new MessageFormat(
protected final MessageFormat mf = new MessageFormat(
"Tests run: {0, number, integer}" + "Tests run: {0, number, integer}" +
", Failures: {1, number, integer}" + ", Failures: {1, number, integer}" +
", Errors: {2, number, integer}" + ", Errors: {2, number, integer}" +
", Time elapsed: {3, number, integer} sec"); ", Time elapsed: {3, number, integer} sec");


protected void finished(long elapsedtime) { protected void finished(long elapsedtime) {
PrintWriter writer = getWriter();
writer.print("Testsuite: "); writer.print("Testsuite: ");
writer.println(); writer.println();
String line = mf.format(new Object[]{ String line = mf.format(new Object[]{
new Integer(runCount),
new Integer(failureCount),
new Integer(errorCount),
new Integer(getRunCount()),
new Integer(getFailureCount()),
new Integer(getErrorCount()),
new Long(elapsedtime / 1000) new Long(elapsedtime / 1000)
}); });
writer.print(line); writer.print(line);


+ 9
- 11
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/XMLFormatter.java View File

@@ -61,8 +61,6 @@ import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.Text; import org.w3c.dom.Text;


import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener;

/** /**
* *
* @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a> * @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
@@ -148,12 +146,12 @@ public class XMLFormatter extends BaseFormatter {
public void onTestEnded(String testname) { public void onTestEnded(String testname) {
Element currentTest = (Element) testElements.get(testname); Element currentTest = (Element) testElements.get(testname);
// with a TestSetup, startTest and endTest are not called. // with a TestSetup, startTest and endTest are not called.
if (currentTest == null){
if (currentTest == null) {
onTestStarted(testname); onTestStarted(testname);
currentTest = (Element) testElements.get(testname); currentTest = (Element) testElements.get(testname);
} }
Long l = (Long) testStarts.get(testname); Long l = (Long) testStarts.get(testname);
float time = ((System.currentTimeMillis()-l.longValue()) / 1000.0f);
float time = ((System.currentTimeMillis() - l.longValue()) / 1000.0f);
currentTest.setAttribute(ATTR_TIME, Float.toString(time)); currentTest.setAttribute(ATTR_TIME, Float.toString(time));
super.onTestEnded(testname); super.onTestEnded(testname);
// remove the test objects // remove the test objects
@@ -201,23 +199,23 @@ public class XMLFormatter extends BaseFormatter {
private static DocumentBuilder getDocumentBuilder() { private static DocumentBuilder getDocumentBuilder() {
try { try {
return DocumentBuilderFactory.newInstance().newDocumentBuilder(); return DocumentBuilderFactory.newInstance().newDocumentBuilder();
} catch(Exception exc) {
} catch (Exception exc) {
throw new ExceptionInInitializerError(exc); throw new ExceptionInInitializerError(exc);
} }
} }


protected static String[] parseFirstLine(String trace){
protected static String[] parseFirstLine(String trace) {
int pos = trace.indexOf('\n'); int pos = trace.indexOf('\n');
if (pos == -1){
return new String[]{ trace, ""};
if (pos == -1) {
return new String[]{trace, ""};
} }
String line = trace.substring(0, pos); String line = trace.substring(0, pos);
pos = line.indexOf(':'); pos = line.indexOf(':');
if (pos != -1){
if (pos != -1) {
String classname = line.substring(0, pos).trim(); String classname = line.substring(0, pos).trim();
String message = line.substring(pos + 1).trim(); String message = line.substring(pos + 1).trim();
return new String[]{ classname, message };
return new String[]{classname, message};
} }
return new String[]{ trace, ""};
return new String[]{trace, ""};
} }
} }

+ 6
- 9
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java View File

@@ -57,10 +57,8 @@ import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ByteArrayInputStream;
import java.util.Vector;
import java.util.Properties; import java.util.Properties;
import java.util.Vector;


import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener; import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener;


@@ -128,7 +126,7 @@ public class MessageReader {
* appropriate message to the listeners. * appropriate message to the listeners.
*/ */
protected void processMessage(String message) { protected void processMessage(String message) {
if (message == null){
if (message == null) {
return; return;
} }


@@ -173,17 +171,16 @@ public class MessageReader {
notifyTestSuiteStopped(elapsedTime); notifyTestSuiteStopped(elapsedTime);
return; return;
} }
if (message.startsWith(MessageIds.PROPS_START)){
if (message.startsWith(MessageIds.PROPS_START)) {
try { try {
byte[] bytes = arg.substring(0, arg.indexOf(MessageIds.PROPS_END)).getBytes(); byte[] bytes = arg.substring(0, arg.indexOf(MessageIds.PROPS_END)).getBytes();
bytes = Base64.decode(bytes); bytes = Base64.decode(bytes);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
sysprops = (Properties)ois.readObject();
} catch (Exception e){
sysprops = (Properties) SocketUtil.deserialize(bytes);
notifyTestSystemProperties(sysprops);
} catch (Exception e) {
// ignore now // ignore now
e.printStackTrace(); e.printStackTrace();
} }
notifyTestSystemProperties(sysprops);
} }
} }




+ 9
- 12
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageWriter.java View File

@@ -55,9 +55,6 @@ package org.apache.tools.ant.taskdefs.optional.junit.remote;


import java.io.OutputStream; import java.io.OutputStream;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.ObjectOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;


import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener; import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener;


@@ -80,12 +77,12 @@ public class MessageWriter implements MessageIds {
this.pw = new PrintWriter(out, true); this.pw = new PrintWriter(out, true);
} }


protected void finalize(){
protected void finalize() {
close(); close();
} }


public void close() { public void close() {
if (pw != null){
if (pw != null) {
pw.close(); pw.close();
pw = null; pw = null;
} }
@@ -140,13 +137,13 @@ public class MessageWriter implements MessageIds {


public void notifySystemProperties() { public void notifySystemProperties() {
try { try {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(System.getProperties());
oos.close();
String msg = new String(Base64.encode(out.toByteArray()));
sendMessage(MessageIds.PROPS_START + msg + MessageIds.PROPS_END);
} catch (IOException e){
StringBuffer msg = new StringBuffer(512);
msg.append(MessageIds.PROPS_START);
byte[] data = SocketUtil.serialize(System.getProperties());
msg.append(Base64.encode(data));
msg.append(MessageIds.PROPS_END);
sendMessage(msg.toString());
} catch (Exception e) {
// ignore // ignore
e.printStackTrace(); e.printStackTrace();
} }


+ 4
- 5
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java View File

@@ -54,7 +54,6 @@
package org.apache.tools.ant.taskdefs.optional.junit.remote; package org.apache.tools.ant.taskdefs.optional.junit.remote;


import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket; import java.net.ServerSocket;
import java.net.Socket; import java.net.Socket;


@@ -134,11 +133,11 @@ public class Server {


/** shutdown the server and any running client */ /** shutdown the server and any running client */
public void shutdown() { public void shutdown() {
if (writer != null){
if (writer != null) {
writer.close(); writer.close();
writer = null; writer = null;
} }
if (reader != null){
if (reader != null) {
//@fixme what about the stream ? //@fixme what about the stream ?
reader = null; reader = null;
} }
@@ -152,11 +151,11 @@ public class Server {
} catch (IOException e) { } catch (IOException e) {
} }
try { try {
if (server != null){
if (server != null) {
server.close(); server.close();
server = null; server = null;
} }
} catch (IOException e){
} catch (IOException e) {
} }
} }




+ 95
- 0
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/SocketUtil.java View File

@@ -0,0 +1,95 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.taskdefs.optional.junit.remote;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

/**
* A set of helper methods related to sockets.
*
* @author <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
*/
public class SocketUtil {


/**
* Helper method to deserialize an object
* @param bytes the binary data representing the serialized object.
* @return the deserialized object.
* @throws Exception a generic exception if an error occurs when
* deserializing the object.
*/
public static Object deserialize(byte[] bytes) throws Exception {
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes));
return ois.readObject();
}

/**
* Helper method to serialize an object
* @param o the object to serialize.
* @return the binary data representing the serialized object.
* @throws Exception a generic exception if an error occurs when
* serializing the object.
*/
public static byte[] serialize(Object o) throws Exception {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(out);
oos.writeObject(o);
oos.close();
return out.toByteArray();
}
}

+ 19
- 18
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunner.java View File

@@ -54,13 +54,13 @@
package org.apache.tools.ant.taskdefs.optional.junit.remote; package org.apache.tools.ant.taskdefs.optional.junit.remote;


import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.net.Socket; import java.net.Socket;
import java.util.Vector;
import java.util.Properties; import java.util.Properties;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.Vector;


import junit.framework.AssertionFailedError; import junit.framework.AssertionFailedError;
import junit.framework.Test; import junit.framework.Test;
@@ -69,9 +69,9 @@ import junit.framework.TestListener;
import junit.framework.TestResult; import junit.framework.TestResult;
import junit.framework.TestSuite; import junit.framework.TestSuite;


import org.apache.tools.ant.util.StringUtils;
import org.apache.tools.ant.taskdefs.optional.junit.JUnitHelper; import org.apache.tools.ant.taskdefs.optional.junit.JUnitHelper;
import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener; import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener;
import org.apache.tools.ant.util.StringUtils;


/** /**
* TestRunner for running tests and send results to a remote server. * TestRunner for running tests and send results to a remote server.
@@ -110,7 +110,7 @@ public class TestRunner implements TestListener {
private BufferedReader reader; private BufferedReader reader;


/** bean constructor */ /** bean constructor */
public TestRunner(){
public TestRunner() {
} }


/** /**
@@ -216,28 +216,29 @@ public class TestRunner implements TestListener {
} }
} }
} }

/** /**
* Initialize the TestRunner from properties. * Initialize the TestRunner from properties.
* @param the properties containing configuration data. * @param the properties containing configuration data.
* @see #init(String[]) * @see #init(String[])
*/ */
protected void init(Properties props){
if ( props.getProperty("debug") != null ){
protected void init(Properties props) {
if (props.getProperty("debug") != null) {
setDebug(true); setDebug(true);
} }
String port = props.getProperty("port"); String port = props.getProperty("port");
if (port != null){
if (port != null) {
setPort(Integer.parseInt(port)); setPort(Integer.parseInt(port));
} }
String host = props.getProperty("host"); String host = props.getProperty("host");
if (host != null){
if (host != null) {
setHost(host); setHost(host);
} }
String classnames = props.getProperty("classnames"); String classnames = props.getProperty("classnames");
if (classnames != null){
if (classnames != null) {
StringTokenizer st = new StringTokenizer(classnames); StringTokenizer st = new StringTokenizer(classnames);
while (st.hasMoreTokens()){
addTestClassName( st.nextToken() );
while (st.hasMoreTokens()) {
addTestClassName(st.nextToken());
} }
} }
} }
@@ -272,10 +273,10 @@ public class TestRunner implements TestListener {
String classname = (String) testClassNames.elementAt(i); String classname = (String) testClassNames.elementAt(i);
try { try {
Test test = JUnitHelper.getTest(null, classname); Test test = JUnitHelper.getTest(null, classname);
if (test != null){
if (test != null) {
suites.addElement(test); suites.addElement(test);
} }
} catch (Exception e){
} catch (Exception e) {
// notify log error instead ? // notify log error instead ?
log("Could not get Test instance from " + classname); log("Could not get Test instance from " + classname);
log(e); log(e);
@@ -304,7 +305,7 @@ public class TestRunner implements TestListener {


long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
for (int i = 0; i < suites.length; i++) { for (int i = 0; i < suites.length; i++) {
if (suites[i] instanceof TestCase){
if (suites[i] instanceof TestCase) {
suites[i] = new TestSuite(suites[i].getClass().getName()); suites[i] = new TestSuite(suites[i].getClass().getName());
} }
suites[i].run(testResult); suites[i].run(testResult);
@@ -413,14 +414,14 @@ public class TestRunner implements TestListener {
writer.notifyTestEnded(testName); writer.notifyTestEnded(testName);
} }


public void log(String msg){
if (debug){
public void log(String msg) {
if (debug) {
System.out.println(msg); System.out.println(msg);
} }
} }


public void log(Throwable t){
if (debug){
public void log(Throwable t) {
if (debug) {
t.printStackTrace(); t.printStackTrace();
} }
} }


Loading…
Cancel
Save