From 7146a4af52a888f0cdf1a806cf640ef243e82a6c Mon Sep 17 00:00:00 2001 From: Mathias Date: Mon, 9 May 2011 09:57:13 +0200 Subject: Squash sub package 'formats' --- src/test/scala/cc/spray/json/ReadmeSpec.scala | 66 ++++++++++++++++++++++ .../cc/spray/json/formats/GenericFormatsSpec.scala | 2 +- 2 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/test/scala/cc/spray/json/ReadmeSpec.scala (limited to 'src/test/scala/cc/spray') diff --git a/src/test/scala/cc/spray/json/ReadmeSpec.scala b/src/test/scala/cc/spray/json/ReadmeSpec.scala new file mode 100644 index 0000000..8669c0d --- /dev/null +++ b/src/test/scala/cc/spray/json/ReadmeSpec.scala @@ -0,0 +1,66 @@ +package cc.spray.json + +import org.specs.Specification + +class ReadmeSpec extends Specification { + + "The Usage snippets" should { + "behave as expected" in { + import DefaultJsonProtocol._ + + val json = """{ "some": "JSON source" }""" + val jsonAst = JsonParser(json) + jsonAst mustEqual JsObject(JsField("some", "JSON source")) + + val json2 = PrettyPrinter(jsonAst) + json2 mustEqual + """{ + | "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) + + "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.fromJson[Color] + + color mustEqual Color("CadetBlue", 95, 158, 160) + } + } + + "The non case class example" should { + "behave as expected" in { + object MyJsonProtocol extends DefaultJsonProtocol { + implicit object ColorJsonFormat extends JsonFormat[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) => { + new Color(name, red.toInt, green.toInt, blue.toInt) + } + case _ => throw new DeserializationException("Color expected") + } + } + } + import MyJsonProtocol._ + + val json = Color("CadetBlue", 95, 158, 160).toJson + val color = json.fromJson[Color] + + color mustEqual Color("CadetBlue", 95, 158, 160) + } + } + +} \ No newline at end of file diff --git a/src/test/scala/cc/spray/json/formats/GenericFormatsSpec.scala b/src/test/scala/cc/spray/json/formats/GenericFormatsSpec.scala index adc6fcb..60f4494 100644 --- a/src/test/scala/cc/spray/json/formats/GenericFormatsSpec.scala +++ b/src/test/scala/cc/spray/json/formats/GenericFormatsSpec.scala @@ -6,7 +6,7 @@ import org.specs.Specification class GenericFormatsSpec extends Specification with GenericFormats with BasicFormats { case class Test2(a: Int, b: Double) - implicit val test2Format = format(Test2, "a", "b") + implicit val test2Format = jsonFormat(Test2, "a", "b") "A JsonFormat created with format, for a case class with 2 elements," should { val obj = Test2(42, 4.2) -- cgit v1.2.3