Skip to content

Commit 6c690d1

Browse files
committed
Create OptionWithBooleanDeserializerTest.scala
1 parent 6ded915 commit 6c690d1

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.fasterxml.jackson.module.scala.deser
2+
3+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
4+
import com.fasterxml.jackson.module.scala.DefaultScalaModule
5+
import com.fasterxml.jackson.module.scala.introspect.ScalaAnnotationIntrospector
6+
import org.scalatest.BeforeAndAfterEach
7+
8+
object OptionWithBooleanDeserializerTest {
9+
case class AnnotatedOptionBoolean(@JsonDeserialize(contentAs = classOf[java.lang.Boolean]) valueBoolean: Option[Boolean])
10+
case class AnnotatedOptionPrimitiveBoolean(@JsonDeserialize(contentAs = classOf[Boolean]) valueBoolean: Option[Boolean])
11+
case class OptionBoolean(valueBoolean: Option[Boolean])
12+
case class OptionJavaBoolean(valueBoolean: Option[java.lang.Boolean])
13+
}
14+
15+
class OptionWithBooleanDeserializerTest extends DeserializerTest with BeforeAndAfterEach {
16+
lazy val module: DefaultScalaModule.type = DefaultScalaModule
17+
import OptionWithBooleanDeserializerTest._
18+
19+
private def useOptionBoolean(v: Option[Boolean]): String = v.map(_.toString).getOrElse("null")
20+
private def useOptionJavaBoolean(v: Option[java.lang.Boolean]): String = v.map(_.toString).getOrElse("null")
21+
22+
override def afterEach(): Unit = {
23+
super.afterEach()
24+
ScalaAnnotationIntrospector.clearRegisteredReferencedTypes()
25+
}
26+
27+
"JacksonModuleScala" should "support AnnotatedOptionBoolean" in {
28+
val v1 = deserialize("""{"valueBoolean":false}""", classOf[AnnotatedOptionBoolean])
29+
v1 shouldBe AnnotatedOptionBoolean(Some(false))
30+
v1.valueBoolean.get shouldBe false
31+
useOptionBoolean(v1.valueBoolean) shouldBe "false"
32+
}
33+
34+
it should "support AnnotatedOptionPrimitiveBoolean" in {
35+
val v1 = deserialize("""{"valueBoolean":false}""", classOf[AnnotatedOptionPrimitiveBoolean])
36+
v1 shouldBe AnnotatedOptionPrimitiveBoolean(Some(false))
37+
v1.valueBoolean.get shouldBe false
38+
useOptionBoolean(v1.valueBoolean) shouldBe "false"
39+
}
40+
41+
it should "support OptionBoolean" in {
42+
ScalaAnnotationIntrospector.registerReferencedType(classOf[OptionBoolean], "valueBoolean", classOf[Boolean])
43+
val v1 = deserialize("""{"valueBoolean":false}""", classOf[OptionBoolean])
44+
v1 shouldBe OptionBoolean(Some(false))
45+
v1.valueBoolean.get shouldBe false
46+
//this will next call will fail with a Scala unboxing exception unless you ScalaAnnotationIntrospector.registerReferencedType
47+
//or use one of the equivalent classes in OptionWithBooleanDeserializerTest
48+
useOptionBoolean(v1.valueBoolean) shouldBe "false"
49+
}
50+
51+
it should "support OptionJavaBoolean" in {
52+
val v1 = deserialize("""{"valueBoolean":false}""", classOf[OptionJavaBoolean])
53+
v1 shouldBe OptionJavaBoolean(Some(false))
54+
v1.valueBoolean.get shouldBe false
55+
useOptionJavaBoolean(v1.valueBoolean) shouldBe "false"
56+
}
57+
}

0 commit comments

Comments
 (0)