diff --git a/src/main/java/com/trickl/assertj/core/api/json/AbstractObjectAssert.java b/src/main/java/com/trickl/assertj/core/api/json/AbstractObjectAssert.java index 6d6278b..50b3429 100644 --- a/src/main/java/com/trickl/assertj/core/api/json/AbstractObjectAssert.java +++ b/src/main/java/com/trickl/assertj/core/api/json/AbstractObjectAssert.java @@ -22,6 +22,10 @@ public abstract class AbstractObjectAssert> extends AbstractAssert { private ObjectMapper objectMapper = new ObjectMapper(); + + private Path serializationResourcePath = null; + + private URL deserializationResourceUrl = null; public AbstractObjectAssert(Object actual, Class selfType) { super(actual, selfType); @@ -33,11 +37,16 @@ public AbstractObjectAssert(Object actual, Class selfType) { * @throws IOException If any file errors occur */ public S jsonSerializationAsExpected() throws IOException { + if (serializationResourcePath == null) { + serializationResourcePath = classAsResourcePathConvention( + actual.getClass(), ".json"); + } + String jsonString = serialize(actual); com.trickl.assertj.core.api.Assertions.assertThat(json(jsonString)) .allowingAnyArrayOrdering() .writeActualToFileOnFailure() - .isSameJsonAs(json(classAsResourcePathConvention(actual.getClass(), ".json"))); + .isSameJsonAs(json(serializationResourcePath)); return myself; } @@ -47,18 +56,38 @@ public S jsonSerializationAsExpected() throws IOException { * @throws IOException If any file errors occur */ public S jsonDeserializationAsExpected() throws IOException { - assertThat( - deserialize( - classAsResourceUrlConvention(actual.getClass(), ".json"), actual.getClass())) + if (deserializationResourceUrl == null) { + deserializationResourceUrl = classAsResourceUrlConvention(actual.getClass(), ".json"); + } + + assertThat(deserialize(deserializationResourceUrl, actual.getClass())) .isEqualTo(actual); return myself; } + + public S usingSerializationResourcePath(Path path) { + serializationResourcePath = path; + return myself; + } + + public S usingDeserializationResourceUrl(URL url) { + deserializationResourceUrl = url; + return myself; + } public S usingObjectMapper(ObjectMapper objectMapper) { this.objectMapper = objectMapper; return myself; } + private T deserialize(URL value, Class clazz) throws JsonProcessingException, IOException { + return objectMapper.readValue(value, (Class) clazz); + } + + private String serialize(Object obj) throws JsonProcessingException { + return objectMapper.writeValueAsString(obj); + } + private URL classAsResourceUrlConvention(Class clazz, String extension) { String resourceName = clazz.getSimpleName() + extension; return clazz.getResource(resourceName); @@ -73,12 +102,4 @@ private Path classAsResourcePathConvention(Class clazz, String extension) { clazz.getPackage().getName().replaceAll("\\.", "/"), clazz.getSimpleName() + extension); } - - private T deserialize(URL value, Class clazz) throws JsonProcessingException, IOException { - return objectMapper.readValue(value, (Class) clazz); - } - - private String serialize(Object obj) throws JsonProcessingException { - return objectMapper.writeValueAsString(obj); - } }