Skip to content

Instantly share code, notes, and snippets.

@Slakah
Created June 20, 2018 13:39
Show Gist options
  • Save Slakah/7d2df76cfb22ab993b65cce5cc77cd4a to your computer and use it in GitHub Desktop.
Save Slakah/7d2df76cfb22ab993b65cce5cc77cd4a to your computer and use it in GitHub Desktop.
Scalacheck arbitrary generators for play-json (https://github.com/playframework/play-json)
import org.scalacheck._
import play.api.libs.json._
val genJsArray: Gen[JsArray] =
for {
n <- Gen.chooseNum(0, 10)
arr <- Gen.containerOfN[IndexedSeq, JsValue](n, genJsValue).map(JsArray)
} yield arr
val genJsObject: Gen[JsObject] =
for {
n <- Gen.chooseNum(0, 10)
genKV = for {
k <- Arbitrary.arbitrary[String]
v <- genJsValue
} yield k -> v
obj <- Gen.buildableOfN[Map[String, JsValue], (String, JsValue)](n, genKV).map(JsObject.apply)
} yield obj
val genJsValue: Gen[JsValue] = Gen.lzy(Gen.oneOf[JsValue](
Arbitrary.arbitrary[String].map(JsString),
Arbitrary.arbitrary[BigDecimal].map(JsNumber),
Arbitrary.arbitrary[Boolean].map(JsBoolean),
Gen.const(JsNull),
genJsArray,
genJsObject
))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment