Browse Source

Make junit's formatter if/unless behave like target's if/unless

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@823158 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 15 years ago
parent
commit
163f90f6bc
2 changed files with 133 additions and 20 deletions
  1. +40
    -20
      src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
  2. +93
    -0
      src/tests/antunit/taskdefs/optional/junit/junit-formatter-test.xml

+ 40
- 20
src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java View File

@@ -27,6 +27,7 @@ import java.lang.reflect.Method;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.PropertyHelper;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.EnumeratedAttribute;
import org.apache.tools.ant.util.KeepAliveOutputStream;
@@ -61,8 +62,8 @@ public class FormatterElement {
private OutputStream out = new KeepAliveOutputStream(System.out);
private File outFile;
private boolean useFile = true;
private String ifProperty;
private String unlessProperty;
private Object ifCond;
private Object unlessCond;

/**
* Store the project reference for passing it to nested components.
@@ -194,22 +195,45 @@ public class FormatterElement {
}

/**
* Set whether this formatter should be used. It will be
* used if the property has been set, otherwise it won't.
* @param ifProperty name of property
* Set whether this formatter should be used. It will be used if
* the expression evaluates to true or the name of a property
* which has been set, otherwise it won't.
* @param ifCond name of property
* @since Ant 1.8.0
*/
public void setIf(String ifProperty) {
this.ifProperty = ifProperty;
public void setIf(Object ifCond) {
this.ifCond = ifCond;
}

/**
* Set whether this formatter should NOT be used. It
* will not be used if the property has been set, orthwise it
* will be used.
* @param unlessProperty name of property
* Set whether this formatter should be used. It will be used if
* the expression evaluates to true or the name of a property
* which has been set, otherwise it won't.
* @param ifCond name of property
*/
public void setUnless(String unlessProperty) {
this.unlessProperty = unlessProperty;
public void setIf(String ifCond) {
setIf((Object) ifCond);
}

/**
* Set whether this formatter should NOT be used. It will be used
* if the expression evaluates to false or the name of a property
* which has not been set, orthwise it will not be used.
* @param unlessCond name of property
* @since Ant 1.8.0
*/
public void setUnless(Object unlessCond) {
this.unlessCond = unlessCond;
}

/**
* Set whether this formatter should NOT be used. It will be used
* if the expression evaluates to false or the name of a property
* which has not been set, orthwise it will not be used.
* @param unlessCond name of property
*/
public void setUnless(String unlessCond) {
setUnless((Object) unlessCond);
}

/**
@@ -219,13 +243,9 @@ public class FormatterElement {
* @return true if the formatter should be used.
*/
public boolean shouldUse(Task t) {
if (ifProperty != null && t.getProject().getProperty(ifProperty) == null) {
return false;
}
if (unlessProperty != null && t.getProject().getProperty(unlessProperty) != null) {
return false;
}
return true;
PropertyHelper ph = PropertyHelper.getPropertyHelper(t.getProject());
return ph.testIfCondition(ifCond)
&& ph.testUnlessCondition(unlessCond);
}

/**


+ 93
- 0
src/tests/antunit/taskdefs/optional/junit/junit-formatter-test.xml View File

@@ -0,0 +1,93 @@
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<project default="antunit" xmlns:au="antlib:org.apache.ant.antunit">
<import file="../../../antunit-base.xml" />

<path id="junit">
<fileset dir="../../../../../../lib/optional" includes="junit*"/>
</path>

<target name="setUp">
<mkdir dir="${input}"/>
<mkdir dir="${output}"/>
<echo file="${input}/ATest.java"><![CDATA[
package test;
import junit.framework.TestCase;

public class ATest extends TestCase {
public void testEmpty() {}
}
]]></echo>
<javac srcdir="${input}" destdir="${output}">
<classpath refid="junit"/>
</javac>
<macrodef name="j">
<sequential>
<junit fork="true" forkMode="perBatch">
<classpath refid="junit"/>
<classpath location="${output}"/>
<batchtest todir="${output}">
<fileset dir="${output}">
<include name="**/*Test.class" />
</fileset>
</batchtest>
<formatter type="plain" if="${if}" extension=".dollar_if"/>
<formatter type="plain" if="if" extension=".if"/>
<formatter type="plain" unless="${if}" extension=".dollar_unless"/>
<formatter type="plain" unless="if" extension=".unless"/>
</junit>
</sequential>
</macrodef>
</target>

<target name="testPropertyNotSet" depends="setUp">
<j/>
<au:assertFileDoesntExist file="${output}/TEST-test.ATest.dollar_if"/>
<au:assertFileDoesntExist file="${output}/TEST-test.ATest.if"/>
<au:assertFileExists file="${output}/TEST-test.ATest.dollar_unless"/>
<au:assertFileExists file="${output}/TEST-test.ATest.unless"/>
</target>

<target name="testPropertySet" depends="setUp">
<property name="if" value="whatever"/>
<j/>
<au:assertFileDoesntExist file="${output}/TEST-test.ATest.dollar_if"/>
<au:assertFileExists file="${output}/TEST-test.ATest.if"/>
<au:assertFileExists file="${output}/TEST-test.ATest.dollar_unless"/>
<au:assertFileDoesntExist file="${output}/TEST-test.ATest.unless"/>
</target>

<target name="testPropertyTrue" depends="setUp">
<property name="if" value="true"/>
<j/>
<au:assertFileExists file="${output}/TEST-test.ATest.dollar_if"/>
<au:assertFileExists file="${output}/TEST-test.ATest.if"/>
<au:assertFileDoesntExist file="${output}/TEST-test.ATest.dollar_unless"/>
<au:assertFileDoesntExist file="${output}/TEST-test.ATest.unless"/>
</target>

<target name="testPropertyFalse" depends="setUp">
<property name="if" value="false"/>
<j/>
<au:assertFileDoesntExist file="${output}/TEST-test.ATest.dollar_if"/>
<au:assertFileExists file="${output}/TEST-test.ATest.if"/>
<au:assertFileExists file="${output}/TEST-test.ATest.dollar_unless"/>
<au:assertFileDoesntExist file="${output}/TEST-test.ATest.unless"/>
</target>

</project>

Loading…
Cancel
Save