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"); | |||||
} | |||||
} | |||||