From b67ae6c688226d321ac153e6a76b5283d190bb24 Mon Sep 17 00:00:00 2001 From: Stephane Bailliez Date: Sun, 10 Feb 2002 21:38:58 +0000 Subject: [PATCH] Implement if/unless into (Batch)TestElement git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271274 13f79535-47bb-0310-9956-ffa450edef68 --- .../optional/rjunit/ArrayEnumeration.java | 77 ++++++------ .../optional/rjunit/BaseTestElement.java | 114 ++++++++++++++++++ .../optional/rjunit/BatchTestElement.java | 18 +-- .../taskdefs/optional/rjunit/TestElement.java | 6 +- 4 files changed, 163 insertions(+), 52 deletions(-) create mode 100644 proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BaseTestElement.java diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ArrayEnumeration.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ArrayEnumeration.java index d3ce5a7cd..d8f89cd86 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ArrayEnumeration.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ArrayEnumeration.java @@ -62,45 +62,50 @@ import java.util.NoSuchElementException; */ class ArrayEnumeration implements Enumeration { - /** object array */ - private Object[] array; + /** convenient null enumeration */ + public final static Enumeration NULL_ENUMERATION = + new ArrayEnumeration(new Object[0]); - /** current index */ - private int pos; + /** object array */ + private Object[] array; - /** - * Initialize a new enumeration that wraps an array. - * @param array the array of object to enumerate. - */ - public ArrayEnumeration(Object[] array){ - this.array = array; - this.pos = 0; - } - /** - * Tests if this enumeration contains more elements. - * - * @return true if and only if this enumeration object - * contains at least one more element to provide; - * false otherwise. - */ - public boolean hasMoreElements() { - return (pos < array.length); - } + /** current index */ + private int pos; + + /** + * Initialize a new enumeration that wraps an array. + * @param array the array of object to enumerate. + */ + public ArrayEnumeration(Object[] array) { + this.array = array; + this.pos = 0; + } + + /** + * Tests if this enumeration contains more elements. + * + * @return true if and only if this enumeration object + * contains at least one more element to provide; + * false otherwise. + */ + public boolean hasMoreElements() { + return (pos < array.length); + } - /** - * Returns the next element of this enumeration if this enumeration - * object has at least one more element to provide. - * - * @return the next element of this enumeration. - * @throws NoSuchElementException if no more elements exist. - */ - public Object nextElement() throws NoSuchElementException { - if (hasMoreElements()) { - Object o = array[pos]; - pos++; - return o; - } - throw new NoSuchElementException(); + /** + * Returns the next element of this enumeration if this enumeration + * object has at least one more element to provide. + * + * @return the next element of this enumeration. + * @throws NoSuchElementException if no more elements exist. + */ + public Object nextElement() throws NoSuchElementException { + if (hasMoreElements()) { + Object o = array[pos]; + pos++; + return o; } + throw new NoSuchElementException(); + } } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BaseTestElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BaseTestElement.java new file mode 100644 index 000000000..42fd25e63 --- /dev/null +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BaseTestElement.java @@ -0,0 +1,114 @@ +/* + * 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.rjunit; + +import java.util.Enumeration; + +import junit.runner.TestCollector; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.ProjectComponent; + +/** + * Base test implementation that implements the if/unless logic. + * + * @author Stephane Bailliez + */ +public abstract class BaseTestElement + extends ProjectComponent implements TestCollector { + + /** run the test only if this property is present */ + private String ifProperty; + + /** run the test unless this property is present */ + private String unlessProperty; + + public final Enumeration collectTests() { + if (shouldRun()) { + return getTests(); + } + return ArrayEnumeration.NULL_ENUMERATION; + } + + public final void setIf(final String value) { + ifProperty = value; + } + + public final void setUnless(final String value) { + unlessProperty = value; + } + + /** + * Implementation of the test collection process + * @return the enumeration of fully qualified classname representing + * a JUnit Test. + */ + protected abstract Enumeration getTests(); + + /** + * check whether this test should be run or not. + * @return whether or not the test should run based on + * the presence of if and unless properties. + * @see #setIf(String) + * @see #setUnless(String) + */ + protected boolean shouldRun() { + final Project project = getProject(); + if ((project.getProperty(ifProperty) == null) || + (project.getProperty(unlessProperty) != null)) { + return false; + } + return true; + } +} diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BatchTestElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BatchTestElement.java index 2c81f1c04..a1c74162a 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BatchTestElement.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BatchTestElement.java @@ -55,12 +55,9 @@ package org.apache.tools.ant.taskdefs.optional.rjunit; import java.util.Enumeration; -import junit.runner.TestCollector; - +import org.apache.tools.ant.Project; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.PatternSet; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.ProjectComponent; /** * A test element where tests files are specified by include/exclude @@ -74,18 +71,15 @@ import org.apache.tools.ant.ProjectComponent; * * @author Stephane Bailliez */ -public class BatchTestElement extends ProjectComponent implements TestCollector { +public class BatchTestElement extends BaseTestElement { private ClasspathTestCollector collector = new ClasspathTestCollector(); - public void setProject(Project p){ - collector.setProject(p); - super.setProject(p); - } - // Test collector implementation - public Enumeration collectTests() { + public Enumeration getTests() { + final Project project = getProject(); + collector.setProject(project); return collector.collectTests(); } @@ -95,7 +89,7 @@ public class BatchTestElement extends ProjectComponent implements TestCollector collector.setPath(path); } - public Path getPath(){ + public Path getPath() { return collector.getPath(); } diff --git a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/TestElement.java b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/TestElement.java index 2a83ac20c..2c7057471 100644 --- a/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/TestElement.java +++ b/proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/TestElement.java @@ -55,21 +55,19 @@ package org.apache.tools.ant.taskdefs.optional.rjunit; import java.util.Enumeration; -import junit.runner.TestCollector; - /** * A simple test element. * * @author Stephane Bailliez */ -public class TestElement implements TestCollector { +public class TestElement extends BaseTestElement { /** classname of JUnit test */ private String name; //@fixme, a path is needed for a test. - public Enumeration collectTests() { + public Enumeration getTests() { return new ArrayEnumeration(new String[]{name}); }