diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ClasspathTestCollector.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ClasspathTestCollector.java index 547c2faa7..e2855293b 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ClasspathTestCollector.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ClasspathTestCollector.java @@ -53,20 +53,18 @@ */ package org.apache.tools.ant.taskdefs.optional.junit; +import java.io.File; import java.util.Enumeration; -import java.util.Vector; 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 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.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 @@ -78,7 +76,7 @@ import org.apache.tools.ant.Project; public class ClasspathTestCollector extends ProjectComponent implements TestCollector { - private final static int SUFFIX_LENGTH= ".class".length(); + private final static int SUFFIX_LENGTH = ".class".length(); private PatternSet patterns = new PatternSet(); @@ -90,21 +88,21 @@ public class ClasspathTestCollector extends ProjectComponent // override last one in case there are duplicates. // ie mimic classpath behavior. 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]); Vector included = null; - if ( f.isDirectory() ){ + if (f.isDirectory()) { 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); } else { continue; } // add tests to the already collected one 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, ""); } } @@ -112,7 +110,7 @@ public class ClasspathTestCollector extends ProjectComponent } - protected Vector gatherFromDirectory(File dir){ + protected Vector gatherFromDirectory(File dir) { Project project = getProject(); DirectoryScanner ds = new DirectoryScanner(); ds.setBasedir(dir); @@ -123,7 +121,7 @@ public class ClasspathTestCollector extends ProjectComponent return testClassNameFromFile(included); } - protected Vector gatherFromArchive(File zip){ + protected Vector gatherFromArchive(File zip) { ZipScanner zs = new ZipScanner(); zs.setBasedir(zip); zs.setIncludes(patterns.getIncludePatterns(project)); @@ -133,11 +131,11 @@ public class ClasspathTestCollector extends ProjectComponent return testClassNameFromFile(included); } - protected Vector testClassNameFromFile(String[] classFileNames){ + protected Vector testClassNameFromFile(String[] classFileNames) { 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]; - if ( isTestClass(file) ){ + if (isTestClass(file)) { String classname = classNameFromFile(file); tests.addElement(classname); } @@ -146,30 +144,30 @@ public class ClasspathTestCollector extends ProjectComponent } 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 - public void setPath(Path path){ + public void setPath(Path path) { this.path = path; } - public PatternSet.NameEntry createInclude(){ + public PatternSet.NameEntry createInclude() { return patterns.createInclude(); } - public PatternSet.NameEntry createExclude(){ + public PatternSet.NameEntry createExclude() { return patterns.createExclude(); } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/FilterElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/FilterElement.java index 770013836..7074f437e 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/FilterElement.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/FilterElement.java @@ -105,7 +105,7 @@ public class FilterElement { try { Class clazz = Class.forName(classname); 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}); return (Formatter) ctor.newInstance(new Object[]{f}); diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitHelper.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitHelper.java index c68ed32fe..3d3a5fc56 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitHelper.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitHelper.java @@ -53,14 +53,13 @@ */ package org.apache.tools.ant.taskdefs.optional.junit; -import java.lang.reflect.Method; import java.io.File; +import java.lang.reflect.Method; import java.net.URL; import junit.framework.Test; import junit.framework.TestSuite; -import org.apache.tools.ant.Project; import org.apache.tools.ant.types.Path; /** @@ -78,12 +77,12 @@ public final class JUnitHelper { * 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 p2 = testname.indexOf(')', p1); return new String[]{ 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) { try { 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 { // 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 try { return new TestSuite(clazz); - } catch (Exception e){ + } catch (Exception e) { } return null; } @@ -141,7 +140,7 @@ public final class JUnitHelper { * @return the file or directory containing the resource or * null 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); if (url != null) { // can't find the resource... @@ -169,7 +168,7 @@ public final class JUnitHelper { * @param resource the resource to look for. * @see #getResourceEntry(String) */ - public static void addClasspathEntry(Path path, String resource){ + public static void addClasspathEntry(Path path, String resource) { File f = getResourceEntry(resource); if (f != null) { path.createPathElement().setLocation(f); diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java index ccf7d16ff..6fd0ffe9a 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java @@ -58,18 +58,18 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.Enumeration; import java.util.Properties; import java.util.Vector; -import java.util.Enumeration; import junit.runner.TestCollector; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Project; 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.LogStreamHandler; +import org.apache.tools.ant.taskdefs.optional.junit.formatter.Formatter; import org.apache.tools.ant.types.Commandline; import org.apache.tools.ant.types.CommandlineJava; import org.apache.tools.ant.types.Path; @@ -136,8 +136,8 @@ public class JUnitTask extends Task { // get all test classes to run... StringBuffer buf = new StringBuffer(10240); Enumeration classnames = collectTests(); - while ( classnames.hasMoreElements() ){ - String classname = (String)classnames.nextElement(); + while (classnames.hasMoreElements()) { + String classname = (String) classnames.nextElement(); buf.append(classname).append(" "); } props.setProperty("classnames", buf.toString()); @@ -170,10 +170,10 @@ public class JUnitTask extends Task { /** * @return all collected tests specified with test elements. */ - protected Enumeration collectTests(){ + protected Enumeration collectTests() { 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(); } return Enumerations.fromCompound(tests); diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/KeepAliveOutputStream.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/KeepAliveOutputStream.java index 185f62674..5776931eb 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/KeepAliveOutputStream.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/KeepAliveOutputStream.java @@ -54,8 +54,8 @@ package org.apache.tools.ant.taskdefs.optional.junit; import java.io.FilterOutputStream; -import java.io.OutputStream; import java.io.IOException; +import java.io.OutputStream; /** * Class that can be used to wrap System.out and System.err diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java index 178c5e490..9b37ade6f 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/TestElement.java @@ -70,12 +70,12 @@ public class TestElement implements TestCollector { //@fixme, a path is needed for a test. public Enumeration collectTests() { - return Enumerations.fromArray( new String[]{ name } ); + return Enumerations.fromArray(new String[]{name}); } // Ant bean setters - public String setName(String value){ + public void setName(String value) { this.name = value; } } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/WatchdogTest.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/WatchdogTest.java index e3a19ef91..7ae0666a3 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/WatchdogTest.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/WatchdogTest.java @@ -69,7 +69,7 @@ import junit.framework.TestResult; public class WatchdogTest extends TestDecorator { /** the time out delay in msecs */ - protected long timeOut; + private long timeOut; /** * Create a new watchdog. diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ZipScanner.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ZipScanner.java index 8d1836b18..c7fc98067 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ZipScanner.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/ZipScanner.java @@ -55,14 +55,12 @@ package org.apache.tools.ant.taskdefs.optional.junit; import java.io.File; import java.io.IOException; -import java.util.Vector; import java.util.Enumeration; -import java.util.zip.ZipFile; +import java.util.Vector; import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; 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 @@ -93,10 +91,10 @@ public class ZipScanner extends DirectoryScanner { * normalize a set of paths so that it uses / otherwise matching will * 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()) { throw new IllegalStateException("zipfile " + basedir - + " does not exist"); + + " does not exist"); } if (basedir.isDirectory()) { throw new IllegalStateException("zipfile " + basedir - + " is not a file"); + + " is not a file"); } if (includes == null) { @@ -129,12 +127,12 @@ public class ZipScanner extends DirectoryScanner { excludes = new String[0]; } - filesIncluded = new Vector(); + filesIncluded = 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 (!isExcluded("")) { @@ -152,13 +150,13 @@ public class ZipScanner extends DirectoryScanner { ZipFile zip = null; try { zip = new ZipFile(file); - } catch (IOException e){ + } catch (IOException e) { throw new IllegalStateException(e.getMessage()); } Enumeration entries = zip.entries(); - while ( entries.hasMoreElements() ) { - ZipEntry entry = (ZipEntry)entries.nextElement(); + while (entries.hasMoreElements()) { + ZipEntry entry = (ZipEntry) entries.nextElement(); String name = entry.getName(); // @fixme do we need to strip out entries that starts // with . or ./ ? diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BaseFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BaseFormatter.java index 8498a9bff..2b1b4c889 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BaseFormatter.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BaseFormatter.java @@ -67,23 +67,22 @@ import java.util.Properties; */ 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) { - out = value; 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 throw new IllegalStateException(e.getMessage()); } @@ -139,22 +138,33 @@ public abstract class BaseFormatter implements Formatter { 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() { - 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(); } } } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BriefFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BriefFormatter.java index 054c6e6f9..a7e69ae49 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BriefFormatter.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/BriefFormatter.java @@ -53,6 +53,8 @@ */ package org.apache.tools.ant.taskdefs.optional.junit.formatter; +import java.io.PrintWriter; + /** * Display additional messages from a SummaryFormatter @@ -63,6 +65,7 @@ package org.apache.tools.ant.taskdefs.optional.junit.formatter; public class BriefFormatter extends SummaryFormatter { public void onTestFailed(int status, String testname, String trace) { + PrintWriter writer = getWriter(); writer.print("TestCase: "); writer.print(testname); if (status == STATUS_ERROR) { diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterFormatter.java index eb4a6913a..ce1ecb331 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterFormatter.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterFormatter.java @@ -65,7 +65,7 @@ public abstract class FilterFormatter implements Formatter { protected Formatter formatter; - protected FilterFormatter(Formatter value){ + protected FilterFormatter(Formatter value) { formatter = value; } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterStackFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterStackFormatter.java index 66ee79f31..729d6dbe2 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterStackFormatter.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/FilterStackFormatter.java @@ -53,10 +53,6 @@ */ 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 org.apache.tools.ant.util.StringUtils; @@ -83,32 +79,32 @@ import org.apache.tools.ant.util.StringUtils; public class FilterStackFormatter extends FilterFormatter { /** 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 FilterStackFormatter * @param formatter the formatter to be filtered. */ - public FilterStackFormatter(Formatter formatter){ + public FilterStackFormatter(Formatter formatter) { super(formatter); } 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()); - while ( st.hasMoreTokens() ){ + while (st.hasMoreTokens()) { String line = st.nextToken(); - if ( accept(line) ){ + if (accept(line)) { buf.append(line).append(StringUtils.LINE_SEP); } } @@ -120,7 +116,7 @@ public class FilterStackFormatter extends FilterFormatter { * @param the line to be check for acceptance. * @return true if the line is accepted, false if not. */ - protected boolean accept(String line){ + protected boolean accept(String line) { for (int i = 0; i < DEFAULT_TRACE_FILTERS.length; i++) { if (line.indexOf(DEFAULT_TRACE_FILTERS[i]) > 0) { return false; diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/Formatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/Formatter.java index 1a62dbfe1..5a86a7eaa 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/Formatter.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/Formatter.java @@ -65,16 +65,16 @@ public interface Formatter extends TestRunListener { /** * 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 */ - public void setSystemOutput( String out ); + public void setSystemOutput(String out); /** * This is what the test has written to System.err */ - public void setSystemError( String err ); + public void setSystemError(String err); } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/SummaryFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/SummaryFormatter.java index 3bf26e8e6..872013f0f 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/SummaryFormatter.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/SummaryFormatter.java @@ -53,8 +53,8 @@ */ package org.apache.tools.ant.taskdefs.optional.junit.formatter; +import java.io.PrintWriter; import java.text.MessageFormat; -import java.util.ResourceBundle; /** * Display a summary message at the end of a testsuite stating @@ -64,19 +64,20 @@ import java.util.ResourceBundle; */ public class SummaryFormatter extends BaseFormatter { - protected MessageFormat mf = new MessageFormat( + protected final MessageFormat mf = new MessageFormat( "Tests run: {0, number, integer}" + ", Failures: {1, number, integer}" + ", Errors: {2, number, integer}" + ", Time elapsed: {3, number, integer} sec"); protected void finished(long elapsedtime) { + PrintWriter writer = getWriter(); writer.print("Testsuite: "); writer.println(); 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) }); writer.print(line); diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/XMLFormatter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/XMLFormatter.java index 4d508d7fa..992f0e6be 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/XMLFormatter.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/formatter/XMLFormatter.java @@ -61,8 +61,6 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Text; -import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener; - /** * * @author Stephane Bailliez @@ -148,12 +146,12 @@ public class XMLFormatter extends BaseFormatter { public void onTestEnded(String testname) { Element currentTest = (Element) testElements.get(testname); // with a TestSetup, startTest and endTest are not called. - if (currentTest == null){ + if (currentTest == null) { onTestStarted(testname); currentTest = (Element) testElements.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)); super.onTestEnded(testname); // remove the test objects @@ -201,23 +199,23 @@ public class XMLFormatter extends BaseFormatter { private static DocumentBuilder getDocumentBuilder() { try { return DocumentBuilderFactory.newInstance().newDocumentBuilder(); - } catch(Exception exc) { + } catch (Exception exc) { throw new ExceptionInInitializerError(exc); } } - protected static String[] parseFirstLine(String trace){ + protected static String[] parseFirstLine(String trace) { 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); pos = line.indexOf(':'); - if (pos != -1){ + if (pos != -1) { String classname = line.substring(0, pos).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, ""}; } } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java index 1f5991894..167a90cd9 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageReader.java @@ -57,10 +57,8 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.ObjectInputStream; -import java.io.ByteArrayInputStream; -import java.util.Vector; import java.util.Properties; +import java.util.Vector; import org.apache.tools.ant.taskdefs.optional.junit.TestRunListener; @@ -128,7 +126,7 @@ public class MessageReader { * appropriate message to the listeners. */ protected void processMessage(String message) { - if (message == null){ + if (message == null) { return; } @@ -173,17 +171,16 @@ public class MessageReader { notifyTestSuiteStopped(elapsedTime); return; } - if (message.startsWith(MessageIds.PROPS_START)){ + if (message.startsWith(MessageIds.PROPS_START)) { try { byte[] bytes = arg.substring(0, arg.indexOf(MessageIds.PROPS_END)).getBytes(); 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 e.printStackTrace(); } - notifyTestSystemProperties(sysprops); } } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageWriter.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageWriter.java index ee75bf985..2f1a77c46 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageWriter.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/MessageWriter.java @@ -55,9 +55,6 @@ package org.apache.tools.ant.taskdefs.optional.junit.remote; import java.io.OutputStream; 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; @@ -80,12 +77,12 @@ public class MessageWriter implements MessageIds { this.pw = new PrintWriter(out, true); } - protected void finalize(){ + protected void finalize() { close(); } public void close() { - if (pw != null){ + if (pw != null) { pw.close(); pw = null; } @@ -140,13 +137,13 @@ public class MessageWriter implements MessageIds { public void notifySystemProperties() { 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 e.printStackTrace(); } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java index 3307161fc..12a89a44d 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/Server.java @@ -54,7 +54,6 @@ package org.apache.tools.ant.taskdefs.optional.junit.remote; import java.io.IOException; -import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; @@ -134,11 +133,11 @@ public class Server { /** shutdown the server and any running client */ public void shutdown() { - if (writer != null){ + if (writer != null) { writer.close(); writer = null; } - if (reader != null){ + if (reader != null) { //@fixme what about the stream ? reader = null; } @@ -152,11 +151,11 @@ public class Server { } catch (IOException e) { } try { - if (server != null){ + if (server != null) { server.close(); server = null; } - } catch (IOException e){ + } catch (IOException e) { } } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/SocketUtil.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/SocketUtil.java new file mode 100644 index 000000000..c98e33a5d --- /dev/null +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/SocketUtil.java @@ -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 + * . + */ +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 Stephane Bailliez + */ +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(); + } +} diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunner.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunner.java index ac33a12b8..b36f73117 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunner.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/remote/TestRunner.java @@ -54,13 +54,13 @@ package org.apache.tools.ant.taskdefs.optional.junit.remote; import java.io.BufferedReader; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; -import java.io.FileInputStream; import java.net.Socket; -import java.util.Vector; import java.util.Properties; import java.util.StringTokenizer; +import java.util.Vector; import junit.framework.AssertionFailedError; import junit.framework.Test; @@ -69,9 +69,9 @@ import junit.framework.TestListener; import junit.framework.TestResult; 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.TestRunListener; +import org.apache.tools.ant.util.StringUtils; /** * TestRunner for running tests and send results to a remote server. @@ -110,7 +110,7 @@ public class TestRunner implements TestListener { private BufferedReader reader; /** bean constructor */ - public TestRunner(){ + public TestRunner() { } /** @@ -216,28 +216,29 @@ public class TestRunner implements TestListener { } } } + /** * Initialize the TestRunner from properties. * @param the properties containing configuration data. * @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); } String port = props.getProperty("port"); - if (port != null){ + if (port != null) { setPort(Integer.parseInt(port)); } String host = props.getProperty("host"); - if (host != null){ + if (host != null) { setHost(host); } String classnames = props.getProperty("classnames"); - if (classnames != null){ + if (classnames != null) { 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); try { Test test = JUnitHelper.getTest(null, classname); - if (test != null){ + if (test != null) { suites.addElement(test); } - } catch (Exception e){ + } catch (Exception e) { // notify log error instead ? log("Could not get Test instance from " + classname); log(e); @@ -304,7 +305,7 @@ public class TestRunner implements TestListener { long startTime = System.currentTimeMillis(); 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].run(testResult); @@ -413,14 +414,14 @@ public class TestRunner implements TestListener { writer.notifyTestEnded(testName); } - public void log(String msg){ - if (debug){ + public void log(String msg) { + if (debug) { System.out.println(msg); } } - public void log(Throwable t){ - if (debug){ + public void log(Throwable t) { + if (debug) { t.printStackTrace(); } }