From 5fe902d78b8ba74492a37b9bf3ac7b4328e140dd Mon Sep 17 00:00:00 2001 From: Stephane Bailliez Date: Sun, 6 Jan 2002 20:03:14 +0000 Subject: [PATCH] - Introduce a specific OutputAttribute to deal with output. - Cleaning git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@270600 13f79535-47bb-0310-9956-ffa450edef68 --- .../optional/junit/FilterElement.java | 2 +- .../optional/junit/FormatterElement.java | 89 ++------------ .../taskdefs/optional/junit/JUnitHelper.java | 2 +- .../optional/junit/OutputAttribute.java | 112 ++++++++++++++++++ 4 files changed, 125 insertions(+), 80 deletions(-) create mode 100644 proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/OutputAttribute.java 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 51e79d156..84329028a 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 @@ -68,7 +68,7 @@ import org.apache.tools.ant.types.EnumeratedAttribute; * being the bottom filter. * *
- * 
+ * 
  * 
  * 
  * 
diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java index 7a5c14fe5..7754d9149 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java @@ -53,8 +53,6 @@ */ package org.apache.tools.ant.taskdefs.optional.junit; -import java.io.File; -import java.io.FileOutputStream; import java.io.OutputStream; import java.util.StringTokenizer; import java.util.Vector; @@ -79,42 +77,27 @@ import org.apache.tools.ant.types.EnumeratedAttribute; * * @author Stephane Bailliez * - * @see JUnitTask, + * @see JUnitTask * @see Formatter */ public class FormatterElement { + /** output stream for the formatter */ private OutputStream out = new KeepAliveOutputStream(System.out); - private String classname; - /** - * @fixme we can remove this and use a specific attribute - * to denote a filepathname and stdout as a reserved word. - */ - private String extension; - - /** are we using a file ? */ - private File outFile; - private boolean useFile = true; + /** formatter classname */ + private String classname; /** the filters to apply to this formatter */ private Vector filters = new Vector(); /** - *

Quick way to use a standard formatter. - * - *

At the moment, there are three supported standard formatters. - *

- * - *

Sets classname attribute - so you can't use that attribute if you use this one. + * set an existing type of formatter. + * @see TypeAttribute + * @see #setClassname(String) */ public void setType(TypeAttribute type) { setClassname(type.getClassName()); - setExtension(type.getExtension()); } /** @@ -126,21 +109,6 @@ public class FormatterElement { this.classname = classname; } - /** - * Get name of class to be used as the formatter. - */ - public String getClassname() { - return classname; - } - - public void setExtension(String ext) { - this.extension = ext; - } - - public String getExtension() { - return extension; - } - /** * Setting a comma separated list of filters in the specified order. * @see #addFilter(FilterAttribute) @@ -164,36 +132,11 @@ public class FormatterElement { filters.addElement(fe); } - /** - *

Set the file which the formatte should log to. - * - *

Note that logging to file must be enabled . - */ - void setOutfile(File out) { - this.outFile = out; - } - - /** - *

Set output stream for formatter to use. - * - *

Defaults to standard out. - */ - public void setOutput(OutputStream out) { - this.out = out; - } - /** * Set whether the formatter should log to file. */ - public void setUseFile(boolean useFile) { - this.useFile = useFile; - } - - /** - * Get whether the formatter should log to file. - */ - boolean getUseFile() { - return useFile; + public void setOutput(OutputAttribute output) { + this.out = output.getOutputStream(); } /** @@ -207,14 +150,9 @@ public class FormatterElement { try { Class clazz = Class.forName(classname); if (!Formatter.class.isAssignableFrom(clazz)) { - throw new BuildException(clazz + " is not a JUnitResultFormatter"); + throw new BuildException(clazz + " is not a Formatter"); } f = (Formatter) clazz.newInstance(); - - // create the stream if necessary - if (useFile && outFile != null) { - out = new FileOutputStream(outFile); - } } catch (BuildException e) { throw e; } catch (Exception e) { @@ -234,12 +172,11 @@ public class FormatterElement { /** *

Enumerated attribute with the values "plain", "xml" and "brief". - *

Use to enumerate options for type attribute. + *

Use to enumerate options for type attribute. */ public static class TypeAttribute extends EnumeratedAttribute { private final static String[] VALUES = {"plain", "xml", "brief"}; private final static String[] CLASSNAMES = {"xxx", XMLFormatter.class.getName(), BriefFormatter.class.getName()}; - private final static String[] EXTENSIONS = {".txt", ".xml", ".txt"}; public String[] getValues() { return VALUES; @@ -248,10 +185,6 @@ public class FormatterElement { public String getClassName() { return CLASSNAMES[index]; } - - public String getExtension() { - return EXTENSIONS[index]; - } } } 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 588bafc53..b9984cc2e 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 @@ -65,7 +65,7 @@ import junit.framework.TestSuite; */ public final class JUnitHelper { - private static final String SUITE_METHODNAME = "suite"; + private final static String SUITE_METHODNAME = "suite"; /** * This method parse the output of the method toString() diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/OutputAttribute.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/OutputAttribute.java new file mode 100644 index 000000000..620ca6417 --- /dev/null +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/junit/OutputAttribute.java @@ -0,0 +1,112 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 2001 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; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.ProjectComponent; +import org.apache.tools.ant.taskdefs.optional.junit.formatter.KeepAliveOutputStream; + +/** + * Attempt to create an output specific attribute. + *

+ * The possible output values are 'stdout' and 'stderr', otherwise + * it is assumed that the value represent a file. + *

+ * Note that stdout and stderr are wrapped by a KeepAliveOutputStream + * so that the stream cannot be closed. + * + * @author Stephane Bailliez + * @see KeepAliveOutputStream + */ +public class OutputAttribute extends ProjectComponent { + + /** keyword to represent stdout output */ + public final static String STDOUT = "stdout"; + + /** keyword to represent stderr output */ + public final static String STDERR = "stderr"; + + /** the selected value for output, either stdout,stderr or filepath */ + protected String value; + + /** + * Create a new output attribute from a value. + */ + public OutputAttribute(String value) { + this.value = value; + } + + /** + * @return the outputstream corresponding to the selected attribute. + */ + public OutputStream getOutputStream() { + if (STDOUT.equals(value)) { + return new KeepAliveOutputStream(System.out); + } else if (STDERR.equals(value)) { + return new KeepAliveOutputStream(System.err); + } + File f = project.resolveFile(value); + try { + return new FileOutputStream(f); + } catch (IOException e) { + throw new BuildException(e); + } + } + +}