org.scalatest.FailureOf.scala Maven / Gradle / Ivy
Show all versions of scalatest_2.8.1 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 Errors 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 Errors 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 Errors 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 =>
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