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.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); | |||
| } | |||
| /** | |||
| @@ -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> | |||