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 " | |||
+ "not compatible with spawn"); | |||
} | |||
if (cmdl.getAssertions() != null && !fork) { | |||
log("Assertion statements are currently ignored in non-forked mode"); | |||
} | |||
if (fork) { | |||
if (perm != null) { | |||
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 | |||
* @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); | |||
} | |||
@@ -97,7 +97,7 @@ public class Jasper41Mangler implements JspMangler { | |||
modifiedClassName.append(mangleChar(ch)); | |||
} | |||
} | |||
return modifiedClassName.toString(); | |||
return modifiedClassName.toString()+".java"; | |||
} | |||
/** | |||
@@ -568,7 +568,10 @@ public class JUnitTask extends Task { | |||
* @since Ant 1.6 | |||
* @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); | |||
} | |||
@@ -55,14 +55,15 @@ | |||
package org.apache.tools.ant.types; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.Project; | |||
import java.util.List; | |||
import java.util.ArrayList; | |||
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 | |||
* packages & classes. | |||
* Assertions can only be enabled or disabled when forking Java. | |||
@@ -127,7 +128,7 @@ public class Assertions extends DataType { | |||
* disable assertions | |||
* @param assertion | |||
*/ | |||
public void addDisable(EnabledAssertion assertion) { | |||
public void addDisable(DisabledAssertion assertion) { | |||
checkChildrenAllowed(); | |||
assertionList.add(assertion); | |||
} | |||
@@ -196,11 +197,14 @@ public class Assertions extends DataType { | |||
* @param commandList | |||
*/ | |||
public void applyAssertions(List commandList) { | |||
getProject().log("Applying assertions",Project.MSG_DEBUG); | |||
Assertions clause = getFinalReference(); | |||
//do the system assertions | |||
if (Boolean.TRUE.equals(clause.enableSystemAssertions)) { | |||
getProject().log("Enabling system assertions", Project.MSG_DEBUG); | |||
commandList.add("-enablesystemassertions"); | |||
} else if (Boolean.FALSE.equals(clause.enableSystemAssertions)) { | |||
getProject().log("disabling system assertions", Project.MSG_DEBUG); | |||
commandList.add("-disablesystemassertions"); | |||
} | |||
@@ -209,6 +213,7 @@ public class Assertions extends DataType { | |||
while (it.hasNext()) { | |||
BaseAssertion assertion = (BaseAssertion) it.next(); | |||
String arg = assertion.toCommand(); | |||
getProject().log("adding assertion "+arg, Project.MSG_DEBUG); | |||
commandList.add(arg); | |||
} | |||
} | |||
@@ -19,4 +19,4 @@ selector=org.apache.tools.ant.types.selectors.SelectSelector | |||
zipfileset=org.apache.tools.ant.types.ZipFileSet | |||
scriptfilter=org.apache.tools.ant.types.optional.ScriptFilter | |||
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"); | |||
} | |||
} | |||