Add a fail task that makes a test case fail if no condition is provided or if the provided one is evaluated to false
git-svn-id: https://svn.apache.org/repos/asf/ant/antlibs/antunit/trunk@829913 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/changes.xml b/changes.xml
index 45cb0cd..7381cc7 100644
--- a/changes.xml
+++ b/changes.xml
@@ -52,6 +52,10 @@
assertPropertyContains was not checking the value of the property but
the name of the property.
</action>
+ <action type="add">
+ Add a fail task that makes a test case fail if no condition is provided or
+ if the provided one is evaluated to false.
+ </action>
</release>
<release version="1.1" date="2008-09-26">
diff --git a/src/etc/testcases/assert.xml b/src/etc/testcases/assert.xml
index 60075cf..99aaff9 100644
--- a/src/etc/testcases/assert.xml
+++ b/src/etc/testcases/assert.xml
@@ -29,6 +29,14 @@
</au:antunit>
</target>
+ <target name="fail">
+ <au:fail />
+ </target>
+
+ <target name="failWithMessage">
+ <au:fail message="This test is expecting to fail" />
+ </target>
+
<target name="assertTruePass">
<au:assertTrue>
<istrue value="true"/>
diff --git a/src/main/org/apache/ant/antunit/AssertTask.java b/src/main/org/apache/ant/antunit/AssertTask.java
index ecbb3d3..45ca462 100644
--- a/src/main/org/apache/ant/antunit/AssertTask.java
+++ b/src/main/org/apache/ant/antunit/AssertTask.java
@@ -26,7 +26,7 @@
/**
* Exits the active build, giving an additional message if the single
- * nested condition fails.
+ * nested condition fails or if there is no condition at all.
*
* <p>This one could as well be implemented as
*
@@ -68,11 +68,7 @@
throw new BuildException("You must not specify more than one "
+ "condition", getLocation());
}
- if (count < 1) {
- throw new BuildException("You must specify a condition",
- getLocation());
- }
- if (!((Condition) getConditions().nextElement()).eval()) {
+ if (count < 1 || !((Condition) getConditions().nextElement()).eval()) {
throw new AssertionFailedException(message, getLocation());
}
}
diff --git a/src/main/org/apache/ant/antunit/AssertionFailedException.java b/src/main/org/apache/ant/antunit/AssertionFailedException.java
index 3929c98..f5f10a9 100644
--- a/src/main/org/apache/ant/antunit/AssertionFailedException.java
+++ b/src/main/org/apache/ant/antunit/AssertionFailedException.java
@@ -29,7 +29,7 @@
public class AssertionFailedException extends BuildException {
private static final long serialVersionUID = -1193299712860263327L;
- public static final String DEFAULT_MESSAGE = "Assertion failed";
+ public static final String DEFAULT_MESSAGE = "Test failed";
public AssertionFailedException(String message) {
super(message);
diff --git a/src/main/org/apache/ant/antunit/antlib.xml b/src/main/org/apache/ant/antunit/antlib.xml
index c8edb02..c9beab2 100644
--- a/src/main/org/apache/ant/antunit/antlib.xml
+++ b/src/main/org/apache/ant/antunit/antlib.xml
@@ -21,7 +21,7 @@
<taskdef name="antunit"
classname="org.apache.ant.antunit.AntUnit"/>
- <taskdef name="assertTrue"
+ <taskdef name="fail"
classname="org.apache.ant.antunit.AssertTask"/>
<taskdef name="expectfailure"
@@ -45,15 +45,26 @@
<typedef name="logcontent"
classname="org.apache.ant.antunit.LogContent" />
+ <!-- Actually just an alias of fail that expects a condition -->
+ <macrodef name="assertTrue" backtrace="false">
+ <attribute name="message" default="Assertion failed"/>
+ <element name="assertion" implicit="true"/>
+ <sequential>
+ <au:fail message="@{message}">
+ <assertion/>
+ </au:fail>
+ </sequential>
+ </macrodef>
+
<macrodef name="assertFalse" backtrace="false">
<attribute name="message" default="Assertion failed"/>
<element name="assertion" implicit="true"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<not>
<assertion/>
</not>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -64,10 +75,10 @@
<attribute name="message"
default="Expected '@{expected}' but was '@{actual}'"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<equals arg1="@{expected}" arg2="@{actual}"
casesensitive="@{casesensitive}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -76,9 +87,9 @@
<attribute name="message"
default="Expected property '@{name}'"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<isset property="@{name}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -103,10 +114,10 @@
default="Expected property '@{name}' to contain value '@{value}' but was '${@{name}}'"/>
<sequential>
<au:assertPropertySet message="@{message}" name="@{name}"/>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<contains string="${@{name}}" substring="@{value}"
casesensitive="@{casesensitive}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -115,9 +126,9 @@
<attribute name="message"
default="Expected file '@{file}' to exist"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<available file="@{file}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -139,10 +150,10 @@
<attribute name="message"
default="Expected resource '@{resource}' to contain value '@{value}' but was '${@{resource}}'"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<resourcecontains resource="@{resource}" substring="@{value}"
casesensitive="@{casesensitive}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -166,9 +177,9 @@
<attribute name="message"
default="Expected '@{dest}' to be more recent than '@{src}'"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<uptodate srcfile="@{src}" targetfile="@{dest}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -190,9 +201,9 @@
<attribute name="message"
default="Expected files '@{expected}' and '@{actual}' to match"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<filesmatch file1="@{expected}" file2="@{actual}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -213,9 +224,9 @@
<attribute name="message"
default="Expected reference '@{refid}'"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<isreference refid="@{refid}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -226,9 +237,9 @@
default="Expected reference '@{refid}' to be a '@{type}'"/>
<sequential>
<au:assertReferenceSet refid="@{refid}"/>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<isreference refid="@{refid}" type="@{type}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -238,9 +249,9 @@
<attribute name="message"
default="Expected log to contain '@{text}' at level @{level}"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<au:logcontains text="@{text}" level="@{level}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -265,12 +276,12 @@
<attribute name="message"
default="Expected '@{string}' to match pattern '@{pattern}'"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<matches string="@{string}" pattern="@{pattern}"
casesensitive="@{casesensitive}"
singleline="@{singleline}"
multiline="@{multiline}"/>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
@@ -283,14 +294,14 @@
<attribute name="message"
default="Expected '@{string}' to not match pattern '@{pattern}'"/>
<sequential>
- <au:assertTrue message="@{message}">
+ <au:fail message="@{message}">
<not>
<matches string="@{string}" pattern="@{pattern}"
casesensitive="@{casesensitive}"
singleline="@{singleline}"
multiline="@{multiline}"/>
</not>
- </au:assertTrue>
+ </au:fail>
</sequential>
</macrodef>
diff --git a/src/tests/junit/org/apache/ant/antunit/AssertTest.java b/src/tests/junit/org/apache/ant/antunit/AssertTest.java
index 5494cdd..d278f15 100644
--- a/src/tests/junit/org/apache/ant/antunit/AssertTest.java
+++ b/src/tests/junit/org/apache/ant/antunit/AssertTest.java
@@ -31,6 +31,12 @@
configureProject("src/etc/testcases/assert.xml");
}
+ public void testFail() {
+ testFail("fail", "Test failed");
+ }
+ public void testFailWithMessage() {
+ testFail("failWithMessage", "This test is expecting to fail");
+ }
public void testTruePass() {
testPass("assertTruePass");
}