blob: 9b7a4f2fb2a68b92bc4a06e17f73d7eab86c9d19 [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.ioc.internal.services.PropertyAccessImpl
import org.apache.tapestry5.ioc.internal.util.TapestryException
import org.apache.tapestry5.ioc.util.ExceptionUtils
import org.apache.tapestry5.ioc.util.ExceptionWrapper
import spock.lang.Shared
import spock.lang.Specification
class ExceptionUtilsSpec extends Specification {
@Shared
def access = new PropertyAccessImpl()
def "find cause with match"() {
when:
def inner = new TapestryException("foo", null)
def outer = new RuntimeException(inner)
then:
ExceptionUtils.findCause(outer, TapestryException).is(inner)
ExceptionUtils.findCause(outer, TapestryException, access).is(inner)
}
def "find cause with no match"() {
when:
def re = new RuntimeException("No cause for you.")
then:
ExceptionUtils.findCause(re, TapestryException) == null
ExceptionUtils.findCause(re, TapestryException, access) == null
}
def "find a hidden exception"() {
when:
def inner = new RuntimeException()
def outer = new ExceptionWrapper(inner)
then:
// TAP5-1639: The old code can't find inner
ExceptionUtils.findCause(outer, RuntimeException) == null
// The new reflection-based on can:
ExceptionUtils.findCause(outer, RuntimeException, access).is(inner)
}
def "toMessage(#exceptionToString) should be '#expected'"() {
expect:
ExceptionUtils.toMessage(ex) == expected
where:
ex | expected
new NullPointerException() | NullPointerException.name
new IllegalArgumentException("Message provided") | "Message provided"
exceptionToString = ex.toString()
}
}