From 3c25256bc0575893f8ce707ff783269f75a855c8 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 23 Jul 2024 10:15:05 +0100 Subject: [PATCH] update anyval tests (#684) --- .../scala/deser/AnyValDeserializerTest.scala | 41 +++++++++++++++++++ .../scala/ser/AnyValSerializerTest.scala | 38 +++++++++++++++++ .../scala/deser/AnyValDeserializerTest.scala | 5 ++- .../scala/ser/AnyValSerializerTest.scala | 3 ++ 4 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 src/test/scala-2.+/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala create mode 100644 src/test/scala-2.+/tools/jackson/module/scala/ser/AnyValSerializerTest.scala rename src/test/{scala => scala-3}/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala (84%) rename src/test/{scala => scala-3}/tools/jackson/module/scala/ser/AnyValSerializerTest.scala (80%) diff --git a/src/test/scala-2.+/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala b/src/test/scala-2.+/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala new file mode 100644 index 00000000..9358af9a --- /dev/null +++ b/src/test/scala-2.+/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala @@ -0,0 +1,41 @@ +package tools.jackson.module.scala.deser + +import tools.jackson.module.scala.{DefaultScalaModule, JacksonModule} + +import scala.util.Properties.versionNumberString + +object AnyValDeserializerTest { + case class DoubleAnyVal(underlying: Double) extends AnyVal + case class DoubleAnyValHolder(value: DoubleAnyVal) + + case class BigIntAnyVal(underlying: BigInt) extends AnyVal + case class BigIntAnyValHolder(value: BigIntAnyVal) + case class BigIntOptionAnyValHolder(value: Option[BigIntAnyVal]) +} + +class AnyValDeserializerTest extends DeserializerTest { + import AnyValDeserializerTest._ + + lazy val module: JacksonModule = DefaultScalaModule + + behavior of "AnyVal" + + it should "deserialize an Double AnyVal" in { + val mapper = newMapper + val expected = DoubleAnyVal(42) + mapper.readValue("""{"underlying":42.0}""", classOf[DoubleAnyVal]) shouldEqual expected + mapper.readValue("""{"value":42.0}""", classOf[DoubleAnyValHolder]) shouldEqual DoubleAnyValHolder(expected) + } + + it should "deserialize an BigInt AnyVal" in { + val mapper = newMapper + val expected = BigIntAnyVal(42) + mapper.readValue("""{"underlying":42}""", classOf[BigIntAnyVal]) shouldEqual expected + mapper.readValue("""{"value":42}""", classOf[BigIntAnyValHolder]) shouldEqual BigIntAnyValHolder(expected) + if (!versionNumberString.startsWith("2.11")) { + // see https://github.com/FasterXML/jackson-module-scala/pull/675 + mapper.readValue("""{"value":{"underlying":42}}""", classOf[BigIntOptionAnyValHolder]) shouldEqual + BigIntOptionAnyValHolder(Some(expected)) + } + } +} diff --git a/src/test/scala-2.+/tools/jackson/module/scala/ser/AnyValSerializerTest.scala b/src/test/scala-2.+/tools/jackson/module/scala/ser/AnyValSerializerTest.scala new file mode 100644 index 00000000..de15668d --- /dev/null +++ b/src/test/scala-2.+/tools/jackson/module/scala/ser/AnyValSerializerTest.scala @@ -0,0 +1,38 @@ +package tools.jackson.module.scala.ser + +import tools.jackson.module.scala.BaseFixture + +import scala.util.Properties.versionNumberString + +object AnyValSerializerTest { + case class DoubleAnyVal(underlying: Double) extends AnyVal + case class DoubleAnyValHolder(value: DoubleAnyVal) + + case class BigIntAnyVal(underlying: BigInt) extends AnyVal + case class BigIntAnyValHolder(value: BigIntAnyVal) + case class BigIntOptionAnyValHolder(value: Option[BigIntAnyVal]) +} + +//see AnyVal2SerializerTest for cases that only work with Scala2 and Scala3.3 but not earlier versions of Scala3 +class AnyValSerializerTest extends BaseFixture { + import AnyValSerializerTest._ + + behavior of "AnyVal" + + it should "serialize an Double AnyVal" in { mapper => + val value = DoubleAnyVal(42) + mapper.writeValueAsString(value) shouldBe """{"underlying":42.0}""" + mapper.writeValueAsString(DoubleAnyValHolder(value)) shouldBe """{"value":42.0}""" + } + + it should "serialize an BigInt AnyVal" in { mapper => + val value = BigIntAnyVal(42) + mapper.writeValueAsString(value) shouldBe """{"underlying":42}""" + mapper.writeValueAsString(BigIntAnyValHolder(value)) shouldBe """{"value":42}""" + if (!versionNumberString.startsWith("2.11")) { + // see https://github.com/FasterXML/jackson-module-scala/pull/675 + mapper.writeValueAsString(BigIntOptionAnyValHolder(Some(value))) shouldBe """{"value":{"underlying":42}}""" + } + } + +} diff --git a/src/test/scala/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala b/src/test/scala-3/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala similarity index 84% rename from src/test/scala/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala rename to src/test/scala-3/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala index ba4357c9..0f3f1cd3 100644 --- a/src/test/scala/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala +++ b/src/test/scala-3/tools/jackson/module/scala/deser/AnyValDeserializerTest.scala @@ -30,7 +30,8 @@ class AnyValDeserializerTest extends DeserializerTest { val expected = BigIntAnyVal(42) mapper.readValue("""{"underlying":42}""", classOf[BigIntAnyVal]) shouldEqual expected mapper.readValue("""{"value":42}""", classOf[BigIntAnyValHolder]) shouldEqual BigIntAnyValHolder(expected) - //mapper.readValue("""{"value":{"underlying":42}}""", classOf[BigIntOptionAnyValHolder]) shouldEqual - //BigIntOptionAnyValHolder(Some(expected)) + // see https://github.com/FasterXML/jackson-module-scala/pull/675 + // mapper.readValue("""{"value":{"underlying":42}}""", classOf[BigIntOptionAnyValHolder]) shouldEqual + // BigIntOptionAnyValHolder(Some(expected)) } } diff --git a/src/test/scala/tools/jackson/module/scala/ser/AnyValSerializerTest.scala b/src/test/scala-3/tools/jackson/module/scala/ser/AnyValSerializerTest.scala similarity index 80% rename from src/test/scala/tools/jackson/module/scala/ser/AnyValSerializerTest.scala rename to src/test/scala-3/tools/jackson/module/scala/ser/AnyValSerializerTest.scala index 2968848a..964c2460 100644 --- a/src/test/scala/tools/jackson/module/scala/ser/AnyValSerializerTest.scala +++ b/src/test/scala-3/tools/jackson/module/scala/ser/AnyValSerializerTest.scala @@ -8,6 +8,7 @@ object AnyValSerializerTest { case class BigIntAnyVal(underlying: BigInt) extends AnyVal case class BigIntAnyValHolder(value: BigIntAnyVal) + case class BigIntOptionAnyValHolder(value: Option[BigIntAnyVal]) } //see AnyVal2SerializerTest for cases that only work with Scala2 and Scala3.3 but not earlier versions of Scala3 @@ -26,6 +27,8 @@ class AnyValSerializerTest extends BaseFixture { val value = BigIntAnyVal(42) mapper.writeValueAsString(value) shouldBe """{"underlying":42}""" mapper.writeValueAsString(BigIntAnyValHolder(value)) shouldBe """{"value":42}""" + // see https://github.com/FasterXML/jackson-module-scala/pull/675 + // mapper.writeValueAsString(BigIntOptionAnyValHolder(Some(value))) shouldBe """{"value":{"underlying":42}}""" } }