diff --git a/approvaltests-tests/pom.xml b/approvaltests-tests/pom.xml index 7effb4d5..2cc822a1 100644 --- a/approvaltests-tests/pom.xml +++ b/approvaltests-tests/pom.xml @@ -15,6 +15,18 @@ 2.2.21 + + + + tools.jackson + jackson-bom + 3.0.2 + import + pom + + + + jakarta.servlet @@ -126,6 +138,10 @@ jackson-databind 2.20.1 + + tools.jackson.core + jackson-databind + org.apache.camel camel-xstream diff --git a/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.java b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.java new file mode 100644 index 00000000..47aa1fed --- /dev/null +++ b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.java @@ -0,0 +1,54 @@ +package org.approvaltests; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import org.junit.jupiter.api.Test; + +class JsonJackson3ApprovalsTest +{ + @Test + void testObjectMapperOverride() + { + MyClass o = new MyClass(); + JsonJackson3Approvals.verifyAsJson(o, + jm -> jm.changeDefaultPropertyInclusion(incl -> incl.withValueInclusion(JsonInclude.Include.NON_NULL))); + } + + @Test + void testDuplicateFields() + { + JsonJackson3Approvals.verifyAsJson(new MyOtherClass()); + } + private static class MyClass + { + @JsonIgnore + private String name = "MyClass"; + public String lastName = "MyClass"; + public String middleName = null; + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + } + private static class MyOtherClass extends MyClass + { + @JsonIgnore + private String name = "MyOtherClass"; + @Override + public String getName() + { + return name; + } + + @Override + public void setName(String name) + { + this.name = name; + } + } +} diff --git a/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testDuplicateFields.approved.json b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testDuplicateFields.approved.json new file mode 100644 index 00000000..374a4247 --- /dev/null +++ b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testDuplicateFields.approved.json @@ -0,0 +1,4 @@ +{ + "lastName" : "MyClass", + "middleName" : null +} diff --git a/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testObjectMapperOverride.approved.json b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testObjectMapperOverride.approved.json new file mode 100644 index 00000000..81d7f83c --- /dev/null +++ b/approvaltests-tests/src/test/java/org/approvaltests/JsonJackson3ApprovalsTest.testObjectMapperOverride.approved.json @@ -0,0 +1,3 @@ +{ + "lastName" : "MyClass" +} diff --git a/approvaltests/pom.xml b/approvaltests/pom.xml index 468dc4bc..c9d2ef08 100644 --- a/approvaltests/pom.xml +++ b/approvaltests/pom.xml @@ -37,6 +37,18 @@ https://github.com/approvals/ApprovalTests.Java + + + + tools.jackson + jackson-bom + 3.0.2 + import + pom + + + + com.approvaltests @@ -80,6 +92,11 @@ 2.20.1 true + + tools.jackson.core + jackson-databind + true + commons-net commons-net diff --git a/approvaltests/src/main/java/org/approvaltests/JsonJackson3Approvals.java b/approvaltests/src/main/java/org/approvaltests/JsonJackson3Approvals.java new file mode 100644 index 00000000..fb4740a1 --- /dev/null +++ b/approvaltests/src/main/java/org/approvaltests/JsonJackson3Approvals.java @@ -0,0 +1,54 @@ +package org.approvaltests; + +import com.spun.util.ObjectUtils; +import org.approvaltests.core.Options; +import org.lambda.functions.Function1; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.json.JsonMapper; + +public class JsonJackson3Approvals +{ + private JsonJackson3Approvals() + { + } + + public static void verifyAsJson(Object o) + { + verifyAsJson(o, new Options()); + } + + public static void verifyAsJson(Object o, Options options) + { + verifyAsJson(o, a -> a, options); + } + + public static void verifyAsJson(Object o, Function1 objectMapperBuilder) + { + verifyAsJson(o, objectMapperBuilder, new Options()); + } + + public static void verifyAsJson(Object o, Function1 objectMapperBuilder, + Options options) + { + Approvals.verify(asJson(o, objectMapperBuilder), options.forFile().withExtension(".json")); + } + + public static String asJson(Object o) + { + return asJson(o, a -> a); + } + + public static String asJson(Object o, Function1 objectMapperBuilder) + { + try + { + ObjectMapper objectMapper = objectMapperBuilder.call(JsonMapper.builder()).build(); + return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(o); + } + catch (JacksonException e) + { + throw ObjectUtils.throwAsError(e); + } + } +}