Trait that provides an implicit conversion that adds a valueAt
method
to PartialFunction
, which will return the value (result) of the function applied to the argument passed to valueAt
,
or throw TestFailedException
if the partial function is not defined at the argument.
This construct allows you to express in one statement that a partial function should be defined for a particular input, and that its result value should meet some expectation. Here's an example:
pf.valueAt("IV") should equal (4)
Or, using an assertion instead of a matcher expression:
assert(pf.valueAt("IV") === 4)
Were you to simply invoke apply
on the PartialFunction
, passing in an input value,
if the partial function wasn't defined at that input, it would throw some exception, but likely not one
that provides a stack depth:
// Note: a Map[K, V] is a PartialFunction[K, V] val pf: PartialFunction[String, Int] = Map("I" -> 1, "II" -> 2, "III" -> 3, "IV" -> 4) pf("V") should equal (5) // pf("V") throws NoSuchElementException
The NoSuchElementException
thrown in this situation would cause the test to fail, but without providing a stack depth pointing
to the failing line of test code. This stack depth, provided by TestFailedException
(and a
few other ScalaTest exceptions), makes it quicker for
users to navigate to the cause of the failure. Without PartialFunctionValues
, to get
a stack depth exception you would need to make two statements, like this:
val pf: PartialFunction[String, Int] = Map("I" -> 1, "II" -> 2, "III" -> 3, "IV" -> 4) pf.isDefinedAt("V") should be (true) // throws TestFailedException pf("V") should equal (5)
The PartialFunctionValues
trait allows you to state that more concisely:
val pf: PartialFunction[String, Int] = Map("I" -> 1, "II" -> 2, "III" -> 3, "IV" -> 4) pf.valueAt("V") should equal (5) // pf.valueAt("V") throws TestFailedException
- Companion:
- object
Type members
Classlikes
Wrapper class that adds a valueAt
method to PartialFunction
, allowing
you to make statements like:
Wrapper class that adds a valueAt
method to PartialFunction
, allowing
you to make statements like:
pf.valueAt("VI") should equal (6)
- Value parameters:
- pf
An
PartialFunction
to convert toValuable
, which provides thevalueAt
method.
Implicits
Implicits
Implicit conversion that adds a valueAt
method to PartialFunction
.
Implicit conversion that adds a valueAt
method to PartialFunction
.
- Value parameters:
- pf
the
PartialFunction
on which to add thevalueAt
method