From b7ce4a792c62dec167fedd8dc263c925f7638241 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Mon, 22 Jul 2024 23:09:33 +0100 Subject: [PATCH 1/3] Update AnyValDeserializerTest.scala --- .../module/scala/deser/AnyValDeserializerTest.scala | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala b/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala index 70616812..835577c3 100644 --- a/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala +++ b/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala @@ -2,6 +2,8 @@ package com.fasterxml.jackson.module.scala.deser import com.fasterxml.jackson.module.scala.{DefaultScalaModule, JacksonModule} +import scala.util.Properties.versionString + object AnyValDeserializerTest { case class DoubleAnyVal(underlying: Double) extends AnyVal case class DoubleAnyValHolder(value: DoubleAnyVal) @@ -30,7 +32,9 @@ 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)) + if (!versionString.startsWith("2.11")) { + mapper.readValue("""{"value":{"underlying":42}}""", classOf[BigIntOptionAnyValHolder]) shouldEqual + BigIntOptionAnyValHolder(Some(expected)) + } } } From f8196c5823e02d2ce0884e408839ea6872cf09b2 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 23 Jul 2024 00:13:11 +0100 Subject: [PATCH 2/3] update tests --- .../module/scala/deser/AnyValDeserializerTest.scala | 5 +++-- .../jackson/module/scala/ser/AnyValSerializerTest.scala | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala b/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala index 835577c3..f057c335 100644 --- a/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala +++ b/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala @@ -2,7 +2,7 @@ package com.fasterxml.jackson.module.scala.deser import com.fasterxml.jackson.module.scala.{DefaultScalaModule, JacksonModule} -import scala.util.Properties.versionString +import scala.util.Properties.versionNumberString object AnyValDeserializerTest { case class DoubleAnyVal(underlying: Double) extends AnyVal @@ -32,7 +32,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) - if (!versionString.startsWith("2.11")) { + if (!versionNumberString.startsWith("2.11") && !versionNumberString.startsWith("3")) { + // 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/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala b/src/test/scala/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala index f87a5833..4c360dbe 100644 --- a/src/test/scala/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala +++ b/src/test/scala/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala @@ -2,12 +2,15 @@ package com.fasterxml.jackson.module.scala.ser import com.fasterxml.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 @@ -26,6 +29,10 @@ class AnyValSerializerTest extends BaseFixture { val value = BigIntAnyVal(42) mapper.writeValueAsString(value) shouldBe """{"underlying":42}""" mapper.writeValueAsString(BigIntAnyValHolder(value)) shouldBe """{"value":42}""" + if (!versionNumberString.startsWith("2.11") && !versionNumberString.startsWith("3")) { + // see https://github.com/FasterXML/jackson-module-scala/pull/675 + mapper.writeValueAsString(BigIntOptionAnyValHolder(Some(value))) shouldBe """{"value":{"underlying":42}}""" + } } } From 88e686ef33df9c1beeef7ba1fcb7b7562afc186c Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Tue, 23 Jul 2024 08:28:57 +0100 Subject: [PATCH 3/3] refactor --- .../scala/deser/AnyValDeserializerTest.scala | 2 +- .../scala/ser/AnyValSerializerTest.scala | 2 +- .../scala/deser/AnyValDeserializerTest.scala | 37 +++++++++++++++++++ .../scala/ser/AnyValSerializerTest.scala | 34 +++++++++++++++++ 4 files changed, 73 insertions(+), 2 deletions(-) rename src/test/{scala => scala-2.+}/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala (94%) rename src/test/{scala => scala-2.+}/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala (93%) create mode 100644 src/test/scala-3/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala create mode 100644 src/test/scala-3/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala diff --git a/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala b/src/test/scala-2.+/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala similarity index 94% rename from src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala rename to src/test/scala-2.+/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala index f057c335..7edd6541 100644 --- a/src/test/scala/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala +++ b/src/test/scala-2.+/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala @@ -32,7 +32,7 @@ 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) - if (!versionNumberString.startsWith("2.11") && !versionNumberString.startsWith("3")) { + 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/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala b/src/test/scala-2.+/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala similarity index 93% rename from src/test/scala/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala rename to src/test/scala-2.+/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala index 4c360dbe..2c6aaedd 100644 --- a/src/test/scala/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala +++ b/src/test/scala-2.+/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala @@ -29,7 +29,7 @@ class AnyValSerializerTest extends BaseFixture { val value = BigIntAnyVal(42) mapper.writeValueAsString(value) shouldBe """{"underlying":42}""" mapper.writeValueAsString(BigIntAnyValHolder(value)) shouldBe """{"value":42}""" - if (!versionNumberString.startsWith("2.11") && !versionNumberString.startsWith("3")) { + 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-3/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala b/src/test/scala-3/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala new file mode 100644 index 00000000..5ac335df --- /dev/null +++ b/src/test/scala-3/com/fasterxml/jackson/module/scala/deser/AnyValDeserializerTest.scala @@ -0,0 +1,37 @@ +package com.fasterxml.jackson.module.scala.deser + +import com.fasterxml.jackson.module.scala.{DefaultScalaModule, JacksonModule} + +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) + // 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-3/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala b/src/test/scala-3/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala new file mode 100644 index 00000000..f12ec159 --- /dev/null +++ b/src/test/scala-3/com/fasterxml/jackson/module/scala/ser/AnyValSerializerTest.scala @@ -0,0 +1,34 @@ +package com.fasterxml.jackson.module.scala.ser + +import com.fasterxml.jackson.module.scala.BaseFixture + +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}""" + // see https://github.com/FasterXML/jackson-module-scala/pull/675 + // mapper.writeValueAsString(BigIntOptionAnyValHolder(Some(value))) shouldBe """{"value":{"underlying":42}}""" + } + +}