Outcome

object Outcome

Companion object for trait Outcome that contains an implicit method that enables collections of Outcomes to be flattened into a collections of contained exceptions.

Companion:
class
trait Sum
trait Mirror
class Object
trait Matchable
class Any
Outcome.type

Type members

Inherited types

type MirroredElemLabels <: Tuple

The names of the product elements

The names of the product elements

Inherited from:
Mirror
type MirroredLabel <: String

The name of the type

The name of the type

Inherited from:
Mirror

Implicits

Implicits

implicit def convertOutcomeToIterator(outcome: Outcome): Iterator[Throwable]

Enables collections of Outcomes to be flattened into a collections of contained exceptions.

Enables collections of Outcomes to be flattened into a collections of contained exceptions.

Here's an example:

scala> import org.scalatest._
import org.scalatest._

scala> import prop.TableDrivenPropertyChecks._
import prop.TableDrivenPropertyChecks._

scala> val squares = // (includes errors)
    |   Table(
    |     ("x", "square"),
    |     ( 0 ,     0   ),
    |     ( 1 ,     1   ),
    |     ( 2 ,     4   ),
    |     ( 3 ,     8   ),
    |     ( 4 ,    16   ),
    |     ( 5 ,    26   ),
    |     ( 6 ,    36   )
    |   )
squares: org.scalatest.prop.TableFor2[Int,Int] =
 TableFor2((x,square), (0,0), (1,1), (2,4), (3,8), (4,16), (5,26), (6,36))

Given the above table, which includes some errors, you can obtain an IndexedSeq of the Outcomes of executing an assertion on each row of the table with outcomeOf, like this:

scala> import OutcomeOf._
import OutcomeOf._

scala> import Matchers._
import Matchers._

scala> val outcomes = for ((x, square) <- squares) yield outcomeOf { square shouldEqual x * x }
outcomes: IndexedSeq[org.scalatest.Outcome] =
 Vector(Succeeded, Succeeded, Succeeded,
 Failed(org.scalatest.exceptions.TestFailedException: 8 did not equal 9), Succeeded,
 Failed(org.scalatest.exceptions.TestFailedException: 26 did not equal 25), Succeeded)

Now you have a collection of all the outcomes, including successful ones. If you just want the Failed and Canceled outcomes, which contain exceptions, you can filter out anything that isn't "exceptional," like this:

scala> outcomes.filter(_.isExceptional)
res1: IndexedSeq[org.scalatest.Outcome] =
 Vector(Failed(org.scalatest.exceptions.TestFailedException: 8 did not equal 9),
 Failed(org.scalatest.exceptions.TestFailedException: 26 did not equal 25))

But if you just wanted the contained exceptions, you can (thanks to this implicit method) invoke flatten on your collection:

scala> outcomes.flatten
res2: IndexedSeq[Throwable] =
 Vector(org.scalatest.exceptions.TestFailedException: 8 did not equal 9,
 org.scalatest.exceptions.TestFailedException: 26 did not equal 25)