This micro-library lets you use a more concise ZIO assertion syntax for class fields:
import com.timushev.zio.test.macros.Assertion._
assert(book)(hasPath(_.author.name, isNonEmptyString))
Comparing to the default hasField
combinator, hasPath
does not make you duplicate the field name:
assert(book)(hasField("author.name", _.author.name, isNonEmptyString))
A compiler macro captures the field names for you, so in case of a failure the error message is still informative:
// com.timushev.zio.test.macros.Assertion.hasPath
Book(Writer()) did not satisfy hasPath(_.author.name, isNonEmptyString())
// zio.test.Assertion.hasField
Book(Writer()) did not satisfy hasField("author.name", _.author.name, isNonEmptyString())
The library is cross-built for Scala 2.12 and 2.13, both JVM and Scala.js 1.0 platforms. It is published to Maven Central, so you just need to add the following to your build.sbt
:
libraryDependencies += "com.timushev" %% "zio-test-macros" % "0.1.0"
Macro implementation is inspired by Monocle.