org.scalatest.FailureOf.scala Maven / Gradle / Ivy
Show all versions of scalatest_2.9.0 Show documentation
/*
* Copyright 2001-2008 Artima, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.scalatest
/**
* Trait that contains the failureOf
method, which captures an exception thrown by a passed code block and
* returns it wrapped in a Some
, or returns None
if no exception is thrown.
*
* @author Bill Venners
*/
trait FailureOf {
/**
* Executes the supplied code (a by-name parameter) and returns in an optional throwable indicating whether the passed
* expression failed (threw an exception that would normally cause a test to fail) or succeeded (did not throw any exception).
*
*
* Because Error
s are used to denote serious errors, trait Suite
and its subtypes in the
* ScalaTest API do not always treat a test that completes abruptly with an Error
as a test failure, but sometimes as
* an indication that serious problems have arisen that should cause the run to abort. For example, if a test completes abruptly
* with an OutOfMemoryError
, it will not be reported as a test failure, but will instead cause the run to abort.
* Because not everyone uses Error
s only to represent serious problems, however, ScalaTest only behaves this way
* for the following exception types (and their subclasses):
*
*
*
* java.lang.annotation.AnnotationFormatError
* java.awt.AWTError
* java.nio.charset.CoderMalfunctionError
* javax.xml.parsers.FactoryConfigurationError
* java.lang.LinkageError
* java.lang.ThreadDeath
* javax.xml.transform.TransformerFactoryConfigurationError
* java.lang.VirtualMachineError
*
*
*
* The previous list includes all Error
s that exist as part of Java 1.5 API, excluding java.lang.AssertionError
. ScalaTest
* does treat a thrown AssertionError
as an indication of a test failure. In addition, any other Error
that is not an instance of a
* type mentioned in the previous list will be caught by the Suite
traits in the ScalaTest API and reported as the cause of a test failure.
*
*
*
* If the code supplied to failureOf
completes abruptly in one of the errors in the previous list, failureOf
* will not return it wrapped in an option, but rather will complete abruptly with the same exception. The failureOf
method
* will wrap any other exception thrown by the supplied code in a Some
and return it.
*
*/
def failureOf(f: => Unit): Option[Throwable] = {
try {
f
None
}
catch {
case e: Throwable =>
if (!Suite.anErrorThatShouldCauseAnAbort(e))
Some(e)
else
throw e
}
}
}
/**
* Companion object that facilitates the importing of FailureOf
's method as
* an alternative to mixing it in. One use case is to import FailureOf
's method so you can use
* it in the Scala interpreter:
*
*
* $scala -classpath scalatest.jar
* Welcome to Scala version 2.8.0.final (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22).
* Type in expressions to have them evaluated.
* Type :help for more information.
*
* scala> import org.scalatest.Assertions._
* import org.scalatest.Assertions._
*
* scala> import org.scalatest.FailureOf._
* import org.scalatest.FailureOf._
*
* scala> failureOf { assert(1 + 1 === 2) }
* res0: Option[Throwable] = None
*
* scala> failureOf { assert(1 + 1 === 3) }
* res1: Option[Throwable] = Some(org.scalatest.TestFailedException: 2 did not equal 3)
*
*
* @author Bill Venners
*/
object FailureOf extends FailureOf