diff options
Diffstat (limited to 'src/test/scala/spray/json')
-rw-r--r-- | src/test/scala/spray/json/BasicFormatsSpec.scala | 4 | ||||
-rw-r--r-- | src/test/scala/spray/json/ProductFormatsSpec.scala | 52 |
2 files changed, 54 insertions, 2 deletions
diff --git a/src/test/scala/spray/json/BasicFormatsSpec.scala b/src/test/scala/spray/json/BasicFormatsSpec.scala index 82fb127..629c223 100644 --- a/src/test/scala/spray/json/BasicFormatsSpec.scala +++ b/src/test/scala/spray/json/BasicFormatsSpec.scala @@ -31,10 +31,10 @@ class BasicFormatsSpec extends Specification with DefaultJsonProtocol { "The LongJsonFormat" should { "convert a Long to a JsNumber" in { - 42L.toJson mustEqual JsNumber(42L) + 7563661897011259335L.toJson mustEqual JsNumber(7563661897011259335L) } "convert a JsNumber to a Long" in { - JsNumber(42L).convertTo[Long] mustEqual 42L + JsNumber(7563661897011259335L).convertTo[Long] mustEqual 7563661897011259335L } } diff --git a/src/test/scala/spray/json/ProductFormatsSpec.scala b/src/test/scala/spray/json/ProductFormatsSpec.scala index ec9d65f..af04505 100644 --- a/src/test/scala/spray/json/ProductFormatsSpec.scala +++ b/src/test/scala/spray/json/ProductFormatsSpec.scala @@ -22,11 +22,15 @@ class ProductFormatsSpec extends Specification { case class Test2(a: Int, b: Option[Double]) case class Test3[A, B](as: List[A], bs: List[B]) + case class TestTransient(a: Int, b: Option[Double]) { + @transient var c = false + } trait TestProtocol { this: DefaultJsonProtocol => implicit val test2Format = jsonFormat2(Test2) implicit def test3Format[A: JsonFormat, B: JsonFormat] = jsonFormat2(Test3.apply[A, B]) + implicit def testTransientFormat = jsonFormat2(TestTransient) } object TestProtocol1 extends DefaultJsonProtocol with TestProtocol object TestProtocol2 extends DefaultJsonProtocol with TestProtocol with NullOptions @@ -83,6 +87,42 @@ class ProductFormatsSpec extends Specification { json.convertTo[Test3[Int, String]] mustEqual obj } } + "A JsonFormat for a case class with 18 parameters and created with `jsonFormat`" should { + object Test18Protocol extends DefaultJsonProtocol { + implicit val test18Format = jsonFormat18(Test18) + } + case class Test18( + a1: String, + a2: String, + a3: String, + a4: String, + a5: Int, + a6: String, + a7: String, + a8: String, + a9: String, + a10: String, + a11: String, + a12: Double, + a13: String, + a14: String, + a15: String, + a16: String, + a17: String, + a18: String) + + import Test18Protocol._ + val obj = Test18("a1", "a2", "a3", "a4", 5, "a6", "a7", "a8", "a9", + "a10", "a11", 12d, "a13", "a14", "a15", "a16", "a17", "a18") + + val json = JsonParser("""{"a1":"a1","a2":"a2","a3":"a3","a4":"a4","a5":5,"a6":"a6","a7":"a7","a8":"a8","a9":"a9","a10":"a10","a11":"a11","a12":12.0,"a13":"a13","a14":"a14","a15":"a15","a16":"a16","a17":"a17","a18":"a18"}""") + "convert to a respective JsObject" in { + obj.toJson mustEqual json + } + "convert a JsObject to the respective case class instance" in { + json.convertTo[Test18] mustEqual obj + } + } "A JsonFormat for a generic case class with an explicitly provided type parameter" should { "support the jsonFormat1 syntax" in { @@ -95,4 +135,16 @@ class ProductFormatsSpec extends Specification { } } + "A JsonFormat for a case class with transient fields and created with `jsonFormat`" should { + import TestProtocol1._ + val obj = TestTransient(42, Some(4.2)) + val json = JsObject("a" -> JsNumber(42), "b" -> JsNumber(4.2)) + "convert to a respective JsObject" in { + obj.toJson mustEqual json + } + "convert a JsObject to the respective case class instance" in { + json.convertTo[TestTransient] mustEqual obj + } + } + } |