From ac0d8a4ac893b06130bd438e6ea0579a5e3dc1b3 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Mon, 16 Jun 2025 22:13:08 +0100 Subject: [PATCH 1/2] Create NumberSerializerTest.scala --- .../scala/ser/NumberSerializerTest.scala | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/test/scala/tools/jackson/module/scala/ser/NumberSerializerTest.scala diff --git a/src/test/scala/tools/jackson/module/scala/ser/NumberSerializerTest.scala b/src/test/scala/tools/jackson/module/scala/ser/NumberSerializerTest.scala new file mode 100644 index 00000000..ead69962 --- /dev/null +++ b/src/test/scala/tools/jackson/module/scala/ser/NumberSerializerTest.scala @@ -0,0 +1,34 @@ +package tools.jackson.module.scala.ser + +import com.fasterxml.jackson.annotation.JsonFormat +import tools.jackson.databind.cfg.MutableConfigOverride +import tools.jackson.module.scala.{DefaultScalaModule, JacksonModule} + +class NumberSerializerTest extends SerializerTest { + + val module: JacksonModule = DefaultScalaModule + + "NumberSerializer" should "serialize BigDecimal as a number" in { + serialize(BigDecimal("123.456")) shouldBe "123.456" + } + + it should "serialize BigDecimal as a number (JsonFormat.Shape.STRING)" in { + val builder = newBuilder + .withConfigOverride(classOf[BigDecimal], + (c: MutableConfigOverride) => c.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.STRING))) + serialize(BigDecimal("123.456"), builder.build()) shouldBe """"123.456"""" + } + + it should "serialize BigInt as a number" in { + serialize(BigInt("12345678901234567890")) shouldBe "12345678901234567890" + } + + it should "serialize Int as a number" in { + serialize(42) shouldBe "42" + } + + it should "serialize Long as a number" in { + serialize(12345678901234L) shouldBe "12345678901234" + } + +} From 8f99fbcffcc1e7abaea9c0c8d51274006c0238b4 Mon Sep 17 00:00:00 2001 From: PJ Fanning Date: Mon, 16 Jun 2025 22:51:33 +0100 Subject: [PATCH 2/2] Update CaseClassSerializerTest.scala --- .../scala/ser/CaseClassSerializerTest.scala | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/test/scala/tools/jackson/module/scala/ser/CaseClassSerializerTest.scala b/src/test/scala/tools/jackson/module/scala/ser/CaseClassSerializerTest.scala index 93132305..d7950b54 100644 --- a/src/test/scala/tools/jackson/module/scala/ser/CaseClassSerializerTest.scala +++ b/src/test/scala/tools/jackson/module/scala/ser/CaseClassSerializerTest.scala @@ -2,7 +2,8 @@ package tools.jackson.module.scala.ser import com.fasterxml.jackson.annotation.JsonProperty.Access import com.fasterxml.jackson.annotation._ -import tools.jackson.databind.{MapperFeature, ObjectMapper, PropertyNamingStrategies} +import tools.jackson.databind.cfg.MutableConfigOverride +import tools.jackson.databind.{ObjectMapper, PropertyNamingStrategies} import tools.jackson.module.scala.DefaultScalaModule import scala.beans.BeanProperty @@ -63,8 +64,14 @@ case class PrivateDefaultFields( case class ClassWithUnitField(field: Unit, intField: Int) case class ClassWithOnlyUnitField(field: Unit) +object CaseClassSerializerTest { + case class BigDecimalHolder(bigDecimal: BigDecimal) +} + class CaseClassSerializerTest extends SerializerTest { + import CaseClassSerializerTest._ + case class NestedClass(field: String) def module = DefaultScalaModule @@ -212,4 +219,14 @@ class CaseClassSerializerTest extends SerializerTest { serialize(GeneratedDefaultArgumentClass()) shouldEqual "{}" } + it should "serialize BigDecimalHolder" in { + serialize(BigDecimalHolder(BigDecimal("123.456"))) shouldEqual """{"bigDecimal":123.456}""" + } + + it should "serialize BigDecimalHolder (JsonFormat.Shape.STRING)" in { + val builder = newBuilder + .withConfigOverride(classOf[BigDecimal], + (c: MutableConfigOverride) => c.setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.STRING))) + serialize(BigDecimalHolder(BigDecimal("123.456")), builder.build()) shouldEqual """{"bigDecimal":"123.456"}""" + } }