1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
import scala.util.control.NonFatal
trait NonFatalTests {
//NonFatals
val nonFatals: Seq[Throwable] =
Seq(new RuntimeException,
new Exception,
new Throwable,
new NotImplementedError)
//Fatals
val fatals: Seq[Throwable] =
Seq(new InterruptedException,
new StackOverflowError,
new OutOfMemoryError,
new LinkageError,
new VirtualMachineError {},
new Throwable with scala.util.control.ControlThrowable)
def testFatalsUsingApply(): Unit = {
fatals foreach { t => assert(NonFatal(t) == false) }
}
def testNonFatalsUsingApply(): Unit = {
nonFatals foreach { t => assert(NonFatal(t) == true) }
}
def testFatalsUsingUnapply(): Unit = {
fatals foreach { t => assert(NonFatal.unapply(t).isEmpty) }
}
def testNonFatalsUsingUnapply(): Unit = {
nonFatals foreach { t => assert(NonFatal.unapply(t).isDefined) }
}
testFatalsUsingApply()
testNonFatalsUsingApply()
testFatalsUsingUnapply()
testNonFatalsUsingUnapply()
}
object Test
extends App
with NonFatalTests {
System.exit(0)
}
|