Inside

trait Inside

Trait containing the inside construct, which allows you to make statements about nested object graphs using pattern matching.

For example, given the following case classes:

case class Address(street: String, city: String, state: String, zip: String)
case class Name(first: String, middle: String, last: String)
case class Record(name: Name, address: Address, age: Int)

You could write:

inside (rec) { case Record(name, address, age) =>
 inside (name) { case Name(first, middle, last) =>
   first should be ("Sally")
   middle should be ("Ann")
   last should be ("Jones")
 }
 inside (address) { case Address(street, city, state, zip) =>
   street should startWith ("25")
   city should endWith ("Angeles")
   state should equal ("CA")
   zip should be ("12345")
 }
 age should be < 99
}

If an assertion fails, the error message will include the toString of each value passed to inside clauses enclosing the failed assertion. For example, if rec in the previous expression was defined like this:

val rec = Record(
 Name("Sally", "Anna", "Jones"),
 Address("25 Main St", "Los Angeles", "CA", "12345"),
 38
)

The error message will read:

"Ann[a]" was not equal to "Ann[]", inside Name(Sally,Anna,Jones),
inside Record(Name(Sally,Anna,Jones),Address(25 Main St,Los Angeles,CA,12345),38)
Companion:
object
class Object
trait Matchable
class Any
object Inside.type

Value members

Concrete methods

inline def inside[T, U](value: T)(pf: PartialFunction[T, U]): U

Inspects inside the passed value using the passed partial function.

Inspects inside the passed value using the passed partial function.

The inside method checks to see whether the partial function passed as the second curried parameter is defined at the value passed as the first parameter, and if so, passes that value to the partial function.

If the partial function is not defined at the passed value, inside will throw a TestFailedException with a detail message describing the problem. Otherwise, if the partial function returns normally, inside will return normally. If the partial function completes abruptly with an exception that mixes in ModifiableMessage (such as TestFailedException), inside will append the value's toString of to the exception's detail message, and rethrow it. If the exception thrown by the partial function does not mix in ModifiableMessage, inside completes abruptly with that same exception.

Value parameters:
pf

the partial function to use to inspect inside the passed value

value

the value inside of which to inspect

Throws:
TestFailedException

if the passed partial function is not defined at the passed value