All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.scalatest.FailureOf.scala Maven / Gradle / Ivy

There is a newer version: 2.0.M6-SNAP27
Show newest version
/*
 * 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: 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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy