- 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-ffa450edef68master
@@ -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(); | ||||
} | } | ||||
@@ -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}); | ||||
@@ -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); | ||||
@@ -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); | ||||
@@ -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> | ||||
@@ -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; | ||||
} | } | ||||
} | } |
@@ -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. | ||||
@@ -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 ./ ? | ||||
@@ -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(); | |||||
} | } | ||||
} | } | ||||
} | } |
@@ -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) { | ||||
@@ -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; | ||||
} | } | ||||
@@ -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; | ||||
@@ -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); | |||||
} | } |
@@ -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); | ||||
@@ -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, ""}; | |||||
} | } | ||||
} | } |
@@ -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); | |||||
} | } | ||||
} | } | ||||
@@ -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(); | ||||
} | } | ||||
@@ -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) { | |||||
} | } | ||||
} | } | ||||
@@ -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(); | |||||
} | |||||
} |
@@ -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(); | ||||
} | } | ||||
} | } | ||||