From 7d5a81af5773b2756358827626cfa760d9c308af Mon Sep 17 00:00:00 2001 From: Steve Loughran Date: Tue, 23 Sep 2003 06:31:46 +0000 Subject: [PATCH] With these changes assertions now work, at least as far as the java tests are concerned...not tested junit git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275293 13f79535-47bb-0310-9956-ffa450edef68 --- src/etc/testcases/types/assertions.xml | 153 ++++++++++++++++++ .../types/assertions/AssertionTest.java | 66 ++++++++ .../org/apache/tools/ant/taskdefs/Java.java | 9 +- .../optional/jsp/Jasper41Mangler.java | 2 +- .../taskdefs/optional/junit/JUnitTask.java | 5 +- .../apache/tools/ant/types/Assertions.java | 11 +- .../tools/ant/types/defaults.properties | 2 +- .../tools/ant/types/AssertionsTest.java | 132 +++++++++++++++ 8 files changed, 373 insertions(+), 7 deletions(-) create mode 100644 src/etc/testcases/types/assertions.xml create mode 100644 src/etc/testcases/types/assertions/AssertionTest.java create mode 100644 src/testcases/org/apache/tools/ant/types/AssertionsTest.java diff --git a/src/etc/testcases/types/assertions.xml b/src/etc/testcases/types/assertions.xml new file mode 100644 index 000000000..d9d8a7894 --- /dev/null +++ b/src/etc/testcases/types/assertions.xml @@ -0,0 +1,153 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/etc/testcases/types/assertions/AssertionTest.java b/src/etc/testcases/types/assertions/AssertionTest.java new file mode 100644 index 000000000..60158ca42 --- /dev/null +++ b/src/etc/testcases/types/assertions/AssertionTest.java @@ -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 + * . + */ + + +/** + * 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"); + } + +} diff --git a/src/main/org/apache/tools/ant/taskdefs/Java.java b/src/main/org/apache/tools/ant/taskdefs/Java.java index 7875bf085..9f947c03a 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Java.java +++ b/src/main/org/apache/tools/ant/taskdefs/Java.java @@ -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); } diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/Jasper41Mangler.java b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/Jasper41Mangler.java index d14bb4f6f..3bafa6106 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/jsp/Jasper41Mangler.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/jsp/Jasper41Mangler.java @@ -97,7 +97,7 @@ public class Jasper41Mangler implements JspMangler { modifiedClassName.append(mangleChar(ch)); } } - return modifiedClassName.toString(); + return modifiedClassName.toString()+".java"; } /** diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java index 8ac01009c..674c9a210 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.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); } diff --git a/src/main/org/apache/tools/ant/types/Assertions.java b/src/main/org/apache/tools/ant/types/Assertions.java index f2b9e7c57..2d37ca926 100644 --- a/src/main/org/apache/tools/ant/types/Assertions.java +++ b/src/main/org/apache/tools/ant/types/Assertions.java @@ -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); } } diff --git a/src/main/org/apache/tools/ant/types/defaults.properties b/src/main/org/apache/tools/ant/types/defaults.properties index e2570882b..979474527 100644 --- a/src/main/org/apache/tools/ant/types/defaults.properties +++ b/src/main/org/apache/tools/ant/types/defaults.properties @@ -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 \ No newline at end of file +assertions=org.apache.tools.ant.types.Assertions diff --git a/src/testcases/org/apache/tools/ant/types/AssertionsTest.java b/src/testcases/org/apache/tools/ant/types/AssertionsTest.java new file mode 100644 index 000000000..0193f9a4f --- /dev/null +++ b/src/testcases/org/apache/tools/ant/types/AssertionsTest.java @@ -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 + * . + */ +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"); + } + + +} + +