summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorMathias <mathias@spray.cc>2012-02-01 10:56:57 +0100
committerMathias <mathias@spray.cc>2012-02-01 10:56:57 +0100
commit8e6d79cfc3080c276890a2653c545dade6387cf8 (patch)
tree553676c1f072b4fec81874df653830165b46b4e6 /src/test
parentcfbc301ecaaac325d3a1ad87305107d2cc785b7d (diff)
downloadspray-json-8e6d79cfc3080c276890a2653c545dade6387cf8.tar.gz
spray-json-8e6d79cfc3080c276890a2653c545dade6387cf8.tar.bz2
spray-json-8e6d79cfc3080c276890a2653c545dade6387cf8.zip
Improve ReadmeSpec
Diffstat (limited to 'src/test')
-rw-r--r--src/test/scala/cc/spray/json/ReadmeSpec.scala58
1 files changed, 37 insertions, 21 deletions
diff --git a/src/test/scala/cc/spray/json/ReadmeSpec.scala b/src/test/scala/cc/spray/json/ReadmeSpec.scala
index d60aa69..e67312d 100644
--- a/src/test/scala/cc/spray/json/ReadmeSpec.scala
+++ b/src/test/scala/cc/spray/json/ReadmeSpec.scala
@@ -33,49 +33,65 @@ class ReadmeSpec extends Specification {
"""{
| "some": "JSON source"
|}""".stripMargin
-
+
val jsonAst2 = List(1, 2, 3).toJson
jsonAst2 mustEqual JsArray(JsNumber(1), JsNumber(2), JsNumber(3))
}
}
-
+
case class Color(name: String, red: Int, green: Int, blue: Int)
-
+ val color = Color("CadetBlue", 95, 158, 160)
+
"The case class example" should {
"behave as expected" in {
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val colorFormat = jsonFormat(Color, "name", "red", "green", "blue")
- }
+ }
import MyJsonProtocol._
-
- val json = Color("CadetBlue", 95, 158, 160).toJson
- val color = json.convertTo[Color]
-
- color mustEqual Color("CadetBlue", 95, 158, 160)
+ color.toJson.convertTo[Color] mustEqual color
}
}
-
- "The non case class example" should {
+
+ "The non case class (array) example" should {
"behave as expected" in {
object MyJsonProtocol extends DefaultJsonProtocol {
implicit object ColorJsonFormat extends JsonFormat[Color] {
- def write(c: Color) = {
+ def write(c: Color) =
JsArray(JsString(c.name), JsNumber(c.red), JsNumber(c.green), JsNumber(c.blue))
- }
+
def read(value: JsValue) = value match {
- case JsArray(JsString(name) :: JsNumber(red) :: JsNumber(green) :: JsNumber(blue) :: Nil) => {
+ case JsArray(Seq(JsString(name), JsNumber(red), JsNumber(green), JsNumber(blue))) =>
new Color(name, red.toInt, green.toInt, blue.toInt)
- }
case _ => deserializationError("Color expected")
}
}
- }
+ }
import MyJsonProtocol._
-
- val json = Color("CadetBlue", 95, 158, 160).toJson
- val color = json.convertTo[Color]
-
- color mustEqual Color("CadetBlue", 95, 158, 160)
+ color.toJson.convertTo[Color] mustEqual color
+ }
+ }
+
+ "The non case class (object) example" should {
+ "behave as expected" in {
+ object MyJsonProtocol extends DefaultJsonProtocol {
+ implicit object ColorJsonFormat extends JsonFormat[Color] {
+ def write(c: Color) = JsObject(
+ "name" -> JsString(c.name),
+ "red" -> JsNumber(c.red),
+ "green" -> JsNumber(c.green),
+ "blue" -> JsNumber(c.blue)
+ )
+ def read(value: JsValue) = {
+ value.asJsObject.getFields("name", "red", "green", "blue") match {
+ case Seq(JsString(name), JsNumber(red), JsNumber(green), JsNumber(blue)) =>
+ new Color(name, red.toInt, green.toInt, blue.toInt)
+ case _ => throw new DeserializationException("Color expected")
+ }
+ }
+ }
+ }
+ import MyJsonProtocol._
+ color.toJson.convertTo[Color] mustEqual color
}
}