git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@823158 13f79535-47bb-0310-9956-ffa450edef68master
@@ -27,6 +27,7 @@ import java.lang.reflect.Method; | |||||
import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
import org.apache.tools.ant.PropertyHelper; | |||||
import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
import org.apache.tools.ant.types.EnumeratedAttribute; | import org.apache.tools.ant.types.EnumeratedAttribute; | ||||
import org.apache.tools.ant.util.KeepAliveOutputStream; | import org.apache.tools.ant.util.KeepAliveOutputStream; | ||||
@@ -61,8 +62,8 @@ public class FormatterElement { | |||||
private OutputStream out = new KeepAliveOutputStream(System.out); | private OutputStream out = new KeepAliveOutputStream(System.out); | ||||
private File outFile; | private File outFile; | ||||
private boolean useFile = true; | 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. | * 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. | * @return true if the formatter should be used. | ||||
*/ | */ | ||||
public boolean shouldUse(Task t) { | 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); | |||||
} | } | ||||
/** | /** | ||||
@@ -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> |