aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/CoproductTypeFormats.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/scala/CoproductTypeFormats.scala')
-rw-r--r--src/test/scala/CoproductTypeFormats.scala58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/test/scala/CoproductTypeFormats.scala b/src/test/scala/CoproductTypeFormats.scala
new file mode 100644
index 0000000..f16e4c7
--- /dev/null
+++ b/src/test/scala/CoproductTypeFormats.scala
@@ -0,0 +1,58 @@
+package xyz.driver.json
+
+import spray.json._
+
+import org.scalatest._
+
+class CoproductTypeFormats
+ extends FlatSpec
+ with FormatTests
+ with DefaultJsonProtocol
+ with DerivedFormats {
+
+ sealed trait Expr
+ case class Zero() extends Expr
+ case class Value(x: Int) extends Expr
+ case class Plus(lhs: Expr, rhs: Expr) extends Expr
+ case object One extends Expr
+
+ "No-parameter case class child" should behave like checkCoherence[Expr](
+ Zero(),
+ """{"type":"Zero"}"""
+ )
+
+ "Simple parameter case class child" should behave like checkCoherence[Expr](
+ Value(42),
+ """{"type":"Value","x":42}"""
+ )
+
+ "Nested parameter case class child" should behave like checkCoherence[Expr](
+ Plus(Value(42), Value(0)),
+ """{"type":"Plus","lhs":{"type":"Value","x":42},"rhs":{"type":"Value","x":0}}"""
+ )
+
+ // "Case object child" should behave like checkCoherence[Expr](
+ // One,
+ // """{"type":"One"}"""
+ // )
+
+ @gadt("kind")
+ sealed abstract class Keyword(`type`: String)
+ case class If(`type`: String) extends Keyword(`type`)
+
+ "GADT with type field alias" should behave like checkCoherence[Keyword](
+ If("class"),
+ """{"kind":"If","type":"class"}"""
+ )
+
+ @enum
+ sealed trait Enum
+ case object A extends Enum
+ case object B extends Enum
+
+ "Enum" should behave like checkCoherence[List[Enum]](
+ A :: B :: Nil,
+ """["A", "B"]"""
+ )
+
+}