git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275293 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -0,0 +1,153 @@ | |||||
| <?xml version="1.0"?> | |||||
| <project name="assertions" basedir="." default="init"> | |||||
| <property name="build.dir" location="assertions/build"/> | |||||
| <property name="src.dir" location="assertions"/> | |||||
| <property name="classname" value="AssertionTest"/> | |||||
| <path id="assert.classpath"> | |||||
| <pathelement location="${build.dir}"/> | |||||
| </path> | |||||
| <target name="setup" > | |||||
| <mkdir dir="${build.dir}"/> | |||||
| <javac srcdir="${src.dir}" | |||||
| includes="*.java" | |||||
| source="1.4" | |||||
| debug="true" | |||||
| destdir="${build.dir}" | |||||
| /> | |||||
| </target> | |||||
| <target name="teardown" > | |||||
| <delete dir="${build.dir}"/> | |||||
| </target> | |||||
| <!-- if per-class assertions work, this run asserts --> | |||||
| <target name="test-classname" depends="setup"> | |||||
| <java fork="true" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions enablesystemassertions="true"> | |||||
| <enable class="${classname}" /> | |||||
| </assertions> | |||||
| </java> | |||||
| </target> | |||||
| <!-- if package works, this run asserts --> | |||||
| <target name="test-package" depends="setup"> | |||||
| <java fork="true" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions enableSystemAssertions="false" > | |||||
| <enable package="..." /> | |||||
| </assertions> | |||||
| </java> | |||||
| </target> | |||||
| <!-- this test should run the app successfully --> | |||||
| <target name="test-empty-assertions" depends="setup"> | |||||
| <java fork="true" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions/> | |||||
| </java> | |||||
| </target> | |||||
| <!-- this test should run the app successfully --> | |||||
| <target name="test-disable" depends="setup"> | |||||
| <java fork="true" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions enableSystemAssertions="false" > | |||||
| <enable package="..." /> | |||||
| <disable class="${classname}" /> | |||||
| </assertions> | |||||
| </java> | |||||
| </target> | |||||
| <!-- repeated settigns result in the last declaration winning | |||||
| except that the rule 'classes win over packages takes priority | |||||
| this run will assert --> | |||||
| <target name="test-override" depends="setup"> | |||||
| <java fork="true" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions enableSystemAssertions="false" > | |||||
| <enable package="..." /> | |||||
| <disable class="${classname}" /> | |||||
| <enable class="${classname}" /> | |||||
| <disable package="..." /> | |||||
| </assertions> | |||||
| </java> | |||||
| </target> | |||||
| <!-- repeated settigns result in the last declaration winning; | |||||
| this run will not assert --> | |||||
| <target name="test-override2" depends="setup"> | |||||
| <java fork="true" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions enableSystemAssertions="false" > | |||||
| <enable package="..." /> | |||||
| <enable class="${classname}" /> | |||||
| <disable class="${classname}" /> | |||||
| </assertions> | |||||
| </java> | |||||
| </target> | |||||
| <!-- if references work, this run asserts --> | |||||
| <target name="test-references"> | |||||
| <assertions id="project.assertions" > | |||||
| <enable package="org.apache.test" /> | |||||
| <disable package="org.apache.log4j"/> | |||||
| <enable package="..."/> | |||||
| </assertions> | |||||
| <java fork="true" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions refid="project.assertions"/> | |||||
| </java> | |||||
| </target> | |||||
| <!-- when fork=false; we need to reject the construct --> | |||||
| <target name="test-nofork" depends="setup"> | |||||
| <java fork="false" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions enablesystemassertions="true"> | |||||
| <enable class="${classname}" /> | |||||
| </assertions> | |||||
| </java> | |||||
| </target> | |||||
| <!-- this throws a build error --> | |||||
| <target name="test-multiple-assertions" depends="setup"> | |||||
| <java fork="true" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions enablesystemassertions="true"> | |||||
| <enable class="${classname}" /> | |||||
| </assertions> | |||||
| <assertions/> | |||||
| </java> | |||||
| </target> | |||||
| <!-- should throw a build exception --> | |||||
| <target name="test-reference-abuse" depends="setup"> | |||||
| <assertions id="project.assertions2" > | |||||
| <enable package="org.apache.test" /> | |||||
| <disable package="org.apache.log4j"/> | |||||
| <enable package="..."/> | |||||
| </assertions> | |||||
| <java fork="true" failonerror="true" | |||||
| classname="${classname}" | |||||
| classpathref="assert.classpath"> | |||||
| <assertions refid="project.assertions2"> | |||||
| <disable class="${classname}" /> | |||||
| </assertions> | |||||
| </java> | |||||
| </target> | |||||
| </project> | |||||
| @@ -0,0 +1,66 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2003 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 "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/>. | |||||
| */ | |||||
| /** | |||||
| * this is an assertion tester | |||||
| */ | |||||
| public class AssertionTest { | |||||
| public static void main(String args[]) { | |||||
| assert true == false : "there exist no facts that are both true and false"; | |||||
| System.out.println("Assertions are disabled"); | |||||
| } | |||||
| } | |||||
| @@ -156,6 +156,10 @@ public class Java extends Task { | |||||
| throw new BuildException("You have used an attribute which is " | throw new BuildException("You have used an attribute which is " | ||||
| + "not compatible with spawn"); | + "not compatible with spawn"); | ||||
| } | } | ||||
| if (cmdl.getAssertions() != null && !fork) { | |||||
| log("Assertion statements are currently ignored in non-forked mode"); | |||||
| } | |||||
| if (fork) { | if (fork) { | ||||
| if (perm != null) { | if (perm != null) { | ||||
| log("Permissions can not be set this way in forked mode.", Project.MSG_WARN); | log("Permissions can not be set this way in forked mode.", Project.MSG_WARN); | ||||
| @@ -591,7 +595,10 @@ public class Java extends Task { | |||||
| * @since Ant 1.6 | * @since Ant 1.6 | ||||
| * @param asserts assertion set | * @param asserts assertion set | ||||
| */ | */ | ||||
| public void setAssertions(Assertions asserts) { | |||||
| public void addAssertions(Assertions asserts) { | |||||
| if(cmdl.getAssertions() != null) { | |||||
| throw new BuildException("Only one assertion declaration is allowed"); | |||||
| } | |||||
| cmdl.setAssertions(asserts); | cmdl.setAssertions(asserts); | ||||
| } | } | ||||
| @@ -97,7 +97,7 @@ public class Jasper41Mangler implements JspMangler { | |||||
| modifiedClassName.append(mangleChar(ch)); | modifiedClassName.append(mangleChar(ch)); | ||||
| } | } | ||||
| } | } | ||||
| return modifiedClassName.toString(); | |||||
| return modifiedClassName.toString()+".java"; | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -568,7 +568,10 @@ public class JUnitTask extends Task { | |||||
| * @since Ant 1.6 | * @since Ant 1.6 | ||||
| * @param asserts assertion set | * @param asserts assertion set | ||||
| */ | */ | ||||
| public void setAssertions(Assertions asserts) { | |||||
| public void addAssertions(Assertions asserts) { | |||||
| if (commandline.getAssertions() != null) { | |||||
| throw new BuildException("Only one assertion declaration is allowed"); | |||||
| } | |||||
| commandline.setAssertions(asserts); | commandline.setAssertions(asserts); | ||||
| } | } | ||||
| @@ -55,14 +55,15 @@ | |||||
| package org.apache.tools.ant.types; | package org.apache.tools.ant.types; | ||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Project; | |||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.Iterator; | import java.util.Iterator; | ||||
| /** | /** | ||||
| * implement the assertion datatype. This type describes | |||||
| * assertion settings for the <java> task and derivatives. | |||||
| * The assertion datatype. This type describes | |||||
| * assertion settings for the <java> task and others. | |||||
| * One can set the system assertions, and enable/disable those in | * One can set the system assertions, and enable/disable those in | ||||
| * packages & classes. | * packages & classes. | ||||
| * Assertions can only be enabled or disabled when forking Java. | * Assertions can only be enabled or disabled when forking Java. | ||||
| @@ -127,7 +128,7 @@ public class Assertions extends DataType { | |||||
| * disable assertions | * disable assertions | ||||
| * @param assertion | * @param assertion | ||||
| */ | */ | ||||
| public void addDisable(EnabledAssertion assertion) { | |||||
| public void addDisable(DisabledAssertion assertion) { | |||||
| checkChildrenAllowed(); | checkChildrenAllowed(); | ||||
| assertionList.add(assertion); | assertionList.add(assertion); | ||||
| } | } | ||||
| @@ -196,11 +197,14 @@ public class Assertions extends DataType { | |||||
| * @param commandList | * @param commandList | ||||
| */ | */ | ||||
| public void applyAssertions(List commandList) { | public void applyAssertions(List commandList) { | ||||
| getProject().log("Applying assertions",Project.MSG_DEBUG); | |||||
| Assertions clause = getFinalReference(); | Assertions clause = getFinalReference(); | ||||
| //do the system assertions | //do the system assertions | ||||
| if (Boolean.TRUE.equals(clause.enableSystemAssertions)) { | if (Boolean.TRUE.equals(clause.enableSystemAssertions)) { | ||||
| getProject().log("Enabling system assertions", Project.MSG_DEBUG); | |||||
| commandList.add("-enablesystemassertions"); | commandList.add("-enablesystemassertions"); | ||||
| } else if (Boolean.FALSE.equals(clause.enableSystemAssertions)) { | } else if (Boolean.FALSE.equals(clause.enableSystemAssertions)) { | ||||
| getProject().log("disabling system assertions", Project.MSG_DEBUG); | |||||
| commandList.add("-disablesystemassertions"); | commandList.add("-disablesystemassertions"); | ||||
| } | } | ||||
| @@ -209,6 +213,7 @@ public class Assertions extends DataType { | |||||
| while (it.hasNext()) { | while (it.hasNext()) { | ||||
| BaseAssertion assertion = (BaseAssertion) it.next(); | BaseAssertion assertion = (BaseAssertion) it.next(); | ||||
| String arg = assertion.toCommand(); | String arg = assertion.toCommand(); | ||||
| getProject().log("adding assertion "+arg, Project.MSG_DEBUG); | |||||
| commandList.add(arg); | commandList.add(arg); | ||||
| } | } | ||||
| } | } | ||||
| @@ -19,4 +19,4 @@ selector=org.apache.tools.ant.types.selectors.SelectSelector | |||||
| zipfileset=org.apache.tools.ant.types.ZipFileSet | zipfileset=org.apache.tools.ant.types.ZipFileSet | ||||
| scriptfilter=org.apache.tools.ant.types.optional.ScriptFilter | scriptfilter=org.apache.tools.ant.types.optional.ScriptFilter | ||||
| propertyset=org.apache.tools.ant.types.PropertySet | propertyset=org.apache.tools.ant.types.PropertySet | ||||
| assertion=org.apache.tools.ant.types.Assertion | |||||
| assertions=org.apache.tools.ant.types.Assertions | |||||
| @@ -0,0 +1,132 @@ | |||||
| /* | |||||
| * The Apache Software License, Version 1.1 | |||||
| * | |||||
| * Copyright (c) 2003 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 "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.types; | |||||
| import org.apache.tools.ant.BuildFileTest; | |||||
| /** | |||||
| * test assertion handling | |||||
| */ | |||||
| public class AssertionsTest extends BuildFileTest { | |||||
| public AssertionsTest(String name) { | |||||
| super(name); | |||||
| } | |||||
| protected void setUp() throws Exception { | |||||
| configureProject("src/etc/testcases/types/assertions.xml"); | |||||
| } | |||||
| protected void tearDown() throws Exception { | |||||
| executeTarget("teardown"); | |||||
| } | |||||
| /** | |||||
| * runs a test and expects an assertion thrown in forked code | |||||
| * @param target | |||||
| */ | |||||
| protected void expectAssertion(String target) { | |||||
| expectBuildExceptionContaining(target, | |||||
| "assertion not thrown in "+target, | |||||
| "Java returned: 1"); | |||||
| } | |||||
| public void testClassname() { | |||||
| expectAssertion("test-classname"); | |||||
| } | |||||
| public void testPackage() { | |||||
| expectAssertion("test-package"); | |||||
| } | |||||
| public void testEmptyAssertions() { | |||||
| executeTarget("test-empty-assertions"); | |||||
| } | |||||
| public void testDisable() { | |||||
| executeTarget("test-disable"); | |||||
| } | |||||
| public void testOverride() { | |||||
| expectAssertion("test-override"); | |||||
| } | |||||
| public void testOverride2() { | |||||
| executeTarget("test-override2"); | |||||
| } | |||||
| public void testReferences() { | |||||
| expectAssertion("test-references"); | |||||
| } | |||||
| public void testMultipleAssertions() { | |||||
| expectBuildExceptionContaining("test-multiple-assertions", | |||||
| "multiple assertions rejected", | |||||
| "Only one assertion declaration is allowed"); | |||||
| } | |||||
| public void testReferenceAbuse() { | |||||
| expectBuildExceptionContaining("test-reference-abuse", | |||||
| "reference abuse rejected", | |||||
| "You must not specify more than one attribute when using refid"); | |||||
| } | |||||
| public void testNofork() { | |||||
| expectLogContaining("test-nofork", | |||||
| "Assertion statements are currently ignored in non-forked mode"); | |||||
| } | |||||
| } | |||||