@@ -88,6 +88,13 @@ class MacrosSpec extends FlatSpec with Matchers {
8888 case class UnsupportedTuple (value : (String , String ))
8989 case class UnsupportedMap (value : Map [Int , Int ])
9090
91+ type SimpleTypeAlias = Map [String , String ]
92+ case class ContainsSimpleTypeAlias (a : String , b : SimpleTypeAlias = Map .empty)
93+ type CaseClassTypeAlias = Person
94+ case class ContainsCaseClassTypeAlias (a : String , b : CaseClassTypeAlias )
95+ type ADTCaseClassTypeAlias = ContainsADT
96+ case class ContainsADTCaseClassTypeAlias (a : String , b : ADTCaseClassTypeAlias )
97+
9198 " Macros" should " be able to round trip simple case classes" in {
9299 roundTrip(Empty (), " {}" , classOf [Empty ])
93100 roundTrip(Person (" Bob" , " Jones" ), """ {firstName: "Bob", lastName: "Jones"}""" , classOf [Person ])
@@ -174,16 +181,8 @@ class MacrosSpec extends FlatSpec with Matchers {
174181 it should " support ADT sealed case classes" in {
175182 val leaf = Leaf (1 )
176183 val branch = Branch (Branch (Leaf (1 ), Leaf (2 ), 3 ), Branch (Leaf (4 ), Leaf (5 ), 6 ), 3 ) // scalastyle:ignore
177-
178- def createJson (tree : Tree ): String = {
179- tree match {
180- case l : Leaf => s """ {_t: "Leaf", value: ${l.value}} """
181- case b : Branch => s """ {_t: "Branch", b1: ${createJson(b.b1)}, b2: ${createJson(b.b2)}, value: ${b.value}} """
182- case _ => " {}"
183- }
184- }
185- val leafJson = createJson(leaf)
186- val branchJson = createJson(branch)
184+ val leafJson = createTreeJson(leaf)
185+ val branchJson = createTreeJson(branch)
187186
188187 roundTrip(leaf, leafJson, classOf [Tree ])
189188 roundTrip(branch, branchJson, classOf [Tree ])
@@ -207,6 +206,17 @@ class MacrosSpec extends FlatSpec with Matchers {
207206 roundTrip(nodeB, nodeBJson, classOf [Graph ])
208207 }
209208
209+ it should " support type aliases in case classes" in {
210+ roundTrip(ContainsSimpleTypeAlias (" c" , Map (" d" -> " c" )), """ {a: "c", b: {d: "c"}}""" , classOf [ContainsSimpleTypeAlias ])
211+ roundTrip(ContainsCaseClassTypeAlias (" c" , Person (" Tom" , " Jones" )), """ {a: "c", b: {firstName: "Tom", lastName: "Jones"}}""" ,
212+ classOf [ContainsCaseClassTypeAlias ], classOf [CaseClassTypeAlias ])
213+
214+ val branch = Branch (Branch (Leaf (1 ), Leaf (2 ), 3 ), Branch (Leaf (4 ), Leaf (5 ), 6 ), 3 ) // scalastyle:ignore
215+ val branchJson = createTreeJson(branch)
216+ roundTrip(ContainsADTCaseClassTypeAlias (" c" , ContainsADT (" Tom" , branch)), s """ {a: "c", b: {name: "Tom", tree: $branchJson}} """ ,
217+ classOf [ContainsADTCaseClassTypeAlias ], classOf [ADTCaseClassTypeAlias ], classOf [Tree ])
218+ }
219+
210220 it should " support throw a CodecConfigurationException missing _t field" in {
211221 val missing_t = """ {name: "nodeA", value: null}"""
212222 val registry = CodecRegistries .fromRegistries(CodecRegistries .fromProviders(classOf [Graph ]), DEFAULT_CODEC_REGISTRY )
@@ -278,4 +288,12 @@ class MacrosSpec extends FlatSpec with Matchers {
278288
279289 val documentCodec : Codec [Document ] = DEFAULT_CODEC_REGISTRY .get(classOf [Document ])
280290
291+ def createTreeJson (tree : Tree ): String = {
292+ tree match {
293+ case l : Leaf => s """ {_t: "Leaf", value: ${l.value}} """
294+ case b : Branch => s """ {_t: "Branch", b1: ${createTreeJson(b.b1)}, b2: ${createTreeJson(b.b2)}, value: ${b.value}} """
295+ case _ => " {}"
296+ }
297+ }
298+
281299}
0 commit comments