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