Browse Source

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
master
Steve Loughran 22 years ago
parent
commit
7d5a81af57
8 changed files with 373 additions and 7 deletions
  1. +153
    -0
      src/etc/testcases/types/assertions.xml
  2. +66
    -0
      src/etc/testcases/types/assertions/AssertionTest.java
  3. +8
    -1
      src/main/org/apache/tools/ant/taskdefs/Java.java
  4. +1
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/jsp/Jasper41Mangler.java
  5. +4
    -1
      src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
  6. +8
    -3
      src/main/org/apache/tools/ant/types/Assertions.java
  7. +1
    -1
      src/main/org/apache/tools/ant/types/defaults.properties
  8. +132
    -0
      src/testcases/org/apache/tools/ant/types/AssertionsTest.java

+ 153
- 0
src/etc/testcases/types/assertions.xml View File

@@ -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>

+ 66
- 0
src/etc/testcases/types/assertions/AssertionTest.java View File

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

+ 8
- 1
src/main/org/apache/tools/ant/taskdefs/Java.java View File

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



+ 1
- 1
src/main/org/apache/tools/ant/taskdefs/optional/jsp/Jasper41Mangler.java View File

@@ -97,7 +97,7 @@ public class Jasper41Mangler implements JspMangler {
modifiedClassName.append(mangleChar(ch));
}
}
return modifiedClassName.toString();
return modifiedClassName.toString()+".java";
}

/**


+ 4
- 1
src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java View File

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



+ 8
- 3
src/main/org/apache/tools/ant/types/Assertions.java View File

@@ -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 &lt;java&gt; task and derivatives.
* The assertion datatype. This type describes
* assertion settings for the &lt;java&gt; 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);
}
}


+ 1
- 1
src/main/org/apache/tools/ant/types/defaults.properties View File

@@ -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

+ 132
- 0
src/testcases/org/apache/tools/ant/types/AssertionsTest.java View File

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


}



Loading…
Cancel
Save