diff --git a/play-json/shared/src/test/scala/play/api/libs/json/JsonExtensionSpec.scala b/play-json/shared/src/test/scala/play/api/libs/json/JsonExtensionSpec.scala index 759ea7df7..fd0c66dd7 100644 --- a/play-json/shared/src/test/scala/play/api/libs/json/JsonExtensionSpec.scala +++ b/play-json/shared/src/test/scala/play/api/libs/json/JsonExtensionSpec.scala @@ -115,6 +115,8 @@ object CustomApply { case class Optional(props: Option[String]) +case class UserId(id: Long) extends AnyVal + class JsonExtensionSpec extends AnyWordSpec with Matchers { "JsonExtension" should { "create a reads[User]" in { @@ -749,5 +751,19 @@ class JsonExtensionSpec extends AnyWordSpec with Matchers { formatter.reads(Json.obj("props" -> JsNull)).mustEqual(JsSuccess(Optional(None))) formatter.reads(Json.obj("props" -> Some("foo"))).mustEqual(JsSuccess(Optional(Some("foo")))) } + "format value classes" in { + implicit val userIdFmt: Format[UserId] = Json.format[UserId] + val userId = UserId(12345) + val serialized = Json.stringify(Json.toJson(userId)) + serialized.mustEqual("""{"id":12345}""") + Json.fromJson[UserId](Json.parse(serialized)).mustEqual(JsSuccess(userId)) + } + "format value classes with value format" in { + implicit val userIdFmt: Format[UserId] = Json.valueFormat[UserId] + val userId = UserId(12345) + val serialized = Json.stringify(Json.toJson(userId)) + serialized.mustEqual("""12345""") + Json.fromJson[UserId](Json.parse(serialized)).mustEqual(JsSuccess(userId)) + } } }