Skip to content

Instantly share code, notes, and snippets.

@ittaiz
Last active July 28, 2016 12:56
Show Gist options
  • Save ittaiz/c775c382d6b53f74b6e3cd53d9169127 to your computer and use it in GitHub Desktop.
Save ittaiz/c775c382d6b53f74b6e3cd53d9169127 to your computer and use it in GitHub Desktop.
Polymorphic matching
class FruitTest extends SpecificationWithJUnit {
trait Fruit
case class Apple(color: String) extends Fruit
case class Peach(ripeness: Double) extends Fruit
def aColorfulApple(color: String): Matcher[Fruit] = {
val appleMatcher: Matcher[Apple] = be_===(color) ^^ { a: Apple =>
a.color aka "apple color"
}
val fruitMatcher: Matcher[Fruit] = (_: Fruit) match {
case apple: Apple => appleMatcher.apply(MustExpectable[Apple](apple))
case _ => ko("something which is not an apple")
}
fruitMatcher
}
"match an apple from a set of fruits" in {
Set(Apple("red"), Apple("green"), Peach(0.3)) must contain(aColorfulApple("green"))
}
}
@povilas
Copy link

povilas commented Jul 28, 2016

yup, this really looks nice in tests

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment