Browse Source

Implement if/unless into (Batch)TestElement

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271274 13f79535-47bb-0310-9956-ffa450edef68
master
Stephane Bailliez 23 years ago
parent
commit
b67ae6c688
4 changed files with 163 additions and 52 deletions
  1. +41
    -36
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ArrayEnumeration.java
  2. +114
    -0
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BaseTestElement.java
  3. +6
    -12
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BatchTestElement.java
  4. +2
    -4
      proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/TestElement.java

+ 41
- 36
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/ArrayEnumeration.java View File

@@ -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 <code>true</code> if and only if this enumeration object
* contains at least one more element to provide;
* <code>false</code> 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 <code>true</code> if and only if this enumeration object
* contains at least one more element to provide;
* <code>false</code> 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();
}
}


+ 114
- 0
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BaseTestElement.java View File

@@ -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
* <http://www.apache.org/>.
*/
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 <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
*/
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 <tt>if</tt> and <tt>unless</tt> 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;
}
}

+ 6
- 12
proposal/sandbox/junit/src/main/org/apache/tools/ant/taskdefs/optional/rjunit/BatchTestElement.java View File

@@ -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 <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
*/
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();
}



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

@@ -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 <a href="mailto:sbailliez@apache.org">Stephane Bailliez</a>
*/
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});
}



Loading…
Cancel
Save