blob: 65246b6fedd7fadfc6114749a9c0597211a03371 [file] [log] [blame]
<test:suite
xmlns:j="jelly:core"
xmlns:test="jelly:junit">
<!--
@author Marc Dexet marc.dexet#dsi.cnrs.fr
@date 2004.11.18
Test use org.apache.commons.jelly.core.ModularExceptionBean bean
Set an expection and this bean will throw it with 'public void throwIt(String message) throws Throwable;'
Improvements :
1. Set a list of expected exceptions as java try catch usual block
2. Dissect Exception stack to get the real exception throughout the JellyTagException wrapping with 'cause' var
-->
<!--
Check regression with former tag
-->
<test:case name="testCompatibilityWithFormerCatch">
<j:new var="guiltyBean" className="org.apache.commons.jelly.core.ModularExceptionBean"/>
<j:setProperties object="${guiltyBean}" exception="java.lang.NullPointerException"/>
<j:catch var="e">
<j:invoke on="${guiltyBean}" method="throwIt">
<j:arg value="always catched"/>
</j:invoke>
<test:fail>Exception not catched </test:fail>
</j:catch>
<test:assert test="${! empty(e)}"/>
</test:case>
<!--
Test with expected exception is catched by catchTag.
Note the cause using
-->
<test:case name="testExpectedException_1">
<j:new var="guiltyBean" className="org.apache.commons.jelly.core.ModularExceptionBean"/>
<j:setProperties object="${guiltyBean}" exception="java.lang.NullPointerException"/>
<j:catch var="e"
exceptions="java.lang.NoClassDefFoundError;java.lang.NullPointerException"
cause="cause">
<j:invoke on="${guiltyBean}" method="throwIt">
<j:arg value="always catched"/>
</j:invoke>
<test:fail>Exception not catched </test:fail>
</j:catch>
<test:assert test="${! empty(e)}"/>
<test:assert test="${cause.class.name == 'java.lang.NullPointerException'}">${cause}</test:assert>
</test:case>
<!--
Test with exception class parenthood.
In this example, expected exception is "java.lang.IndexOutOfBoundsException";
thrown exception is "java.lang.ArrayIndexOutOfBoundsException" that's is a first exception extension.
in java, "java.lang.ArrayIndexOutOfBoundsException" will be catched in tryCatch block
try {
// throw "ArrayIndexOutOfBoundsException"
} catch ( IndexOutOfBoundsException e } {
// catch "ArrayIndexOutOfBoundsException"
}
-->
<test:case name="testExpectedExceptionParenthood">
<j:new var="guiltyBean" className="org.apache.commons.jelly.core.ModularExceptionBean"/>
<j:setProperties object="${guiltyBean}" exception="java.lang.ArrayIndexOutOfBoundsException"/>
<j:catch var="e"
exceptions="java.lang.IndexOutOfBoundsException"
cause="cause">
<j:invoke on="${guiltyBean}" method="throwIt">
<j:arg value="parent hood"/>
</j:invoke>
<test:fail>Exception not catched </test:fail>
</j:catch>
<test:assert test="${! empty(e)}"/>
<test:assert test="${cause.class.name == 'java.lang.ArrayIndexOutOfBoundsException'}">${cause}</test:assert>
</test:case>
<!--
Test unexpected exception it thrown to upper catch
-->
<test:case name="testExpectedException_throw_upper">
<j:new var="guiltyBean" className="org.apache.commons.jelly.core.ModularExceptionBean"/>
<j:setProperties object="${guiltyBean}" exception="java.io.FileNotFoundException"/>
<j:catch var="upper">
<j:catch var="e"
exceptionList="java.lang.NoClassDefFoundError;java.lang.NullPointerException">
<j:invoke on="${guiltyBean}" method="throwIt">
<j:arg value="always catched"/>
</j:invoke>
<test:fail>Exception not catched </test:fail>
</j:catch>
<test:fail>Upper has not catched exception</test:fail>
</j:catch>
</test:case>
<!--
Test nested catch tag
-->
<test:case name="testNestedExpectedException">
<j:new var="guiltyBean" className="org.apache.commons.jelly.core.ModularExceptionBean"/>
<j:setProperties object="${guiltyBean}" exception="java.lang.ArithmeticException"/>
<!-- top catch -->
<j:catch var="e" exceptions="java.lang.ArithmeticException">
<!-- upper catch -->
<j:catch var="e" exceptions="java.io.FileNotFoundException;java.lang.NoSuchFieldException" >
<!-- lower catch -->
<j:catch var="e" exceptions="java.lang.NoClassDefFoundError;java.lang.NullPointerException">
<j:invoke on="${guiltyBean}" method="throwIt">
<j:arg value="always catched"/>
</j:invoke>
<test:fail>Exception not catched ${e}</test:fail>
</j:catch>
<test:fail>Upper has not catched exception ${e}</test:fail>
</j:catch>
<test:fail>top has not catched exception? ${e}</test:fail>
</j:catch>
</test:case>
</test:suite>