Skip to content

Commit

Permalink
Add test for generics
Browse files Browse the repository at this point in the history
  • Loading branch information
GiGurra committed May 21, 2016
1 parent 2980c2f commit 576da79
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
18 changes: 18 additions & 0 deletions src/test/scala/se/gigurra/heisenberg/HeisenbergSpec.scala
Expand Up @@ -115,6 +115,24 @@ class HeisenbergSpec
instance.flatten shouldBe MapData(req_str -> "Hello", req_str_w_def -> "mydefault").source
}

"Handle generic types" in {
import GenericsTest._
{
val schema = MyType.schema[Int]
import schema._
val source = MapData(t -> 42).source
val o = MyType[Int](source)
o.t shouldBe 42
}
{
val schema = MyType.schema[String]
import schema._
val source = MapData(t -> "s").source
val o = MyType[String](source)
o.t shouldBe "s"
}
}

"flatten with default values recursively" in {
import NestedTestType._
import SimpleTestType._
Expand Down
22 changes: 22 additions & 0 deletions src/test/scala/se/gigurra/heisenberg/TestTypes.scala
Expand Up @@ -3,6 +3,9 @@ package se.gigurra.heisenberg
import se.gigurra.heisenberg.MapData._
import se.gigurra.heisenberg.Migration._

import scala.collection.concurrent.TrieMap
import scala.reflect.runtime.universe.WeakTypeTag

/**
* Created by kjolh on 12/27/2015.
*/
Expand Down Expand Up @@ -102,6 +105,25 @@ object TestTypes {

}

object GenericsTest {

case class MyType[T : WeakTypeTag : MapDataParser : MapDataProducer](source: SourceData = Map.empty) extends Parsed[MyTypeSchema[T]] {
val t = parse(schema.t)
}

object MyType {
private val schemas = new TrieMap[WeakTypeTag[_], MyTypeSchema[_]]()
implicit def schema[T: WeakTypeTag : MapDataParser : MapDataProducer]: MyTypeSchema[T] = {
schemas.getOrElseUpdate(implicitly[WeakTypeTag[T]], MyTypeSchema()).asInstanceOf[MyTypeSchema[T]]
}
}

case class MyTypeSchema[T : WeakTypeTag : MapDataParser : MapDataProducer]() extends Schema[MyType[T]] {
def apply(objectData: SourceData) = MyType.apply(objectData)
val t = required[T]("t")
}
}

object ParseFieldMoreThanOnceTest {

object SomeTestType extends Schema[SomeTestType] {
Expand Down

0 comments on commit 576da79

Please sign in to comment.