diff --git a/pom.xml b/pom.xml
index 1a35dc9..ef5c973 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
4.0.0
com.github.trickl
assertj-json-serialize
- 0.1.8-SNAPSHOT
+ 0.1.9-SNAPSHOT
jar
diff --git a/src/main/java/com/trickl/assertj/core/api/json/serialize/AbstractJsonObjectAssert.java b/src/main/java/com/trickl/assertj/core/api/json/serialize/AbstractJsonObjectAssert.java
index f72c110..e1d67e9 100644
--- a/src/main/java/com/trickl/assertj/core/api/json/serialize/AbstractJsonObjectAssert.java
+++ b/src/main/java/com/trickl/assertj/core/api/json/serialize/AbstractJsonObjectAssert.java
@@ -16,6 +16,8 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.CodeSource;
+import java.util.ArrayList;
+import java.util.List;
import org.assertj.core.api.AbstractAssert;
@@ -45,7 +47,7 @@ public abstract class AbstractJsonObjectAssert excludeInlineSchemaPackages = new ArrayList<>();
private String jsonDataFileExtension = DEFAULT_JSON_DATA_FILE_EXT;
@@ -184,8 +186,8 @@ public S doNotCreateExpectedIfAbsent() {
return myself;
}
- public S withNoInlineSchemas() {
- noInlineSchemas = true;
+ public S excludeInlineSchemaPackage(String packageName) {
+ excludeInlineSchemaPackages.add(packageName);
return myself;
}
@@ -218,8 +220,9 @@ protected String serialize(Object obj) {
protected String schema(Object obj) {
try {
SchemaFactoryWrapper visitor = new SchemaFactoryWrapper();
- if (noInlineSchemas) {
- visitor.setVisitorContext(new NoInlineSchemaVisitorContext());
+ if (excludeInlineSchemaPackages.size() > 0) {
+ visitor.setVisitorContext(
+ new ExcludeInlineSchemaVisitorContext(excludeInlineSchemaPackages));
}
objectMapper.acceptJsonFormatVisitor(actual.getObject().getClass(), visitor);
JsonSchema schema = visitor.finalSchema();
diff --git a/src/main/java/com/trickl/assertj/core/api/json/serialize/ExcludeInlineSchemaVisitorContext.java b/src/main/java/com/trickl/assertj/core/api/json/serialize/ExcludeInlineSchemaVisitorContext.java
new file mode 100644
index 0000000..1631c4b
--- /dev/null
+++ b/src/main/java/com/trickl/assertj/core/api/json/serialize/ExcludeInlineSchemaVisitorContext.java
@@ -0,0 +1,28 @@
+package com.trickl.assertj.core.api.json.serialize;
+
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.module.jsonSchema.factories.VisitorContext;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+public class ExcludeInlineSchemaVisitorContext extends VisitorContext {
+ private final List excludePackages;
+
+ @Override
+ public String getSeenSchemaUri(JavaType javaType) {
+ if (javaType != null && !javaType.isPrimitive() && isInExcludedPackage(javaType)) {
+ return javaTypeToUrn(javaType);
+ }
+ return null;
+ }
+
+ private boolean isInExcludedPackage(JavaType javaType) {
+ String packageName = javaType.getRawClass().getPackage().getName();
+ return excludePackages.stream().anyMatch((exclude ->
+ packageName.equals(exclude) || packageName.startsWith(exclude + ".")
+ ));
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/trickl/assertj/core/api/json/serialize/NoInlineSchemaVisitorContext.java b/src/main/java/com/trickl/assertj/core/api/json/serialize/NoInlineSchemaVisitorContext.java
deleted file mode 100644
index 36aa4ef..0000000
--- a/src/main/java/com/trickl/assertj/core/api/json/serialize/NoInlineSchemaVisitorContext.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.trickl.assertj.core.api.json.serialize;
-
-import com.fasterxml.jackson.databind.JavaType;
-import com.fasterxml.jackson.module.jsonSchema.factories.VisitorContext;
-
-public class NoInlineSchemaVisitorContext extends VisitorContext {
- @Override
- public String getSeenSchemaUri(JavaType javaType) {
- if (javaType != null && !javaType.isPrimitive()) {
- return javaTypeToUrn(javaType);
- }
- return null;
- }
-}
\ No newline at end of file
diff --git a/src/test/java/com/trickl/assertj/core/api/json/serialize/JsonObjectAssert_serializationAsExpected_Test.java b/src/test/java/com/trickl/assertj/core/api/json/serialize/JsonObjectAssert_serializationAsExpected_Test.java
index 63bcaee..36b9143 100644
--- a/src/test/java/com/trickl/assertj/core/api/json/serialize/JsonObjectAssert_serializationAsExpected_Test.java
+++ b/src/test/java/com/trickl/assertj/core/api/json/serialize/JsonObjectAssert_serializationAsExpected_Test.java
@@ -7,6 +7,7 @@
import java.util.Map;
import com.trickl.assertj.examples.Example;
+import com.trickl.assertj.examples.NestedComplexExample;
import com.trickl.assertj.examples.NestedExample;
import org.junit.Test;
@@ -72,10 +73,10 @@ public void should_pass_on_schema_match() {
}
@Test
- public void should_respect_no_inlining() {
+ public void should_respect_no_inlining_simple() {
NestedExample nested = new NestedExample();
assertThat(nested)
- .withNoInlineSchemas()
+ .excludeInlineSchemaPackage("com.trickl.assertj.examples")
.schemaAsExpected();
}
@@ -86,4 +87,12 @@ public void should_respect_allow_inlining() {
.withSchemaFileExtension(".schema2.json")
.schemaAsExpected();
}
+
+ @Test
+ public void should_respect_no_inlining_complex() {
+ NestedComplexExample nested = new NestedComplexExample();
+ assertThat(nested)
+ .excludeInlineSchemaPackage("com.trickl.assertj.examples")
+ .schemaAsExpected();
+ }
}
diff --git a/src/test/java/com/trickl/assertj/examples/NestedComplexExample.java b/src/test/java/com/trickl/assertj/examples/NestedComplexExample.java
new file mode 100644
index 0000000..a3879f6
--- /dev/null
+++ b/src/test/java/com/trickl/assertj/examples/NestedComplexExample.java
@@ -0,0 +1,17 @@
+package com.trickl.assertj.examples;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+import java.util.List;
+import java.util.Map;
+
+import lombok.Data;
+
+@Data
+public class NestedComplexExample {
+ @JsonProperty("list-example")
+ private List firstExample;
+
+ @JsonProperty("map-example")
+ private Map secondExample;
+}
diff --git a/src/test/resources/com/trickl/assertj/examples/NestedComplexExample.schema.json b/src/test/resources/com/trickl/assertj/examples/NestedComplexExample.schema.json
new file mode 100644
index 0000000..b01dfc3
--- /dev/null
+++ b/src/test/resources/com/trickl/assertj/examples/NestedComplexExample.schema.json
@@ -0,0 +1,20 @@
+{
+ "id": "urn:jsonschema:com:trickl:assertj:examples:NestedComplexExample",
+ "type": "object",
+ "properties": {
+ "list-example": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "$ref": "urn:jsonschema:com:trickl:assertj:examples:Example"
+ }
+ },
+ "map-example": {
+ "additionalProperties": {
+ "type": "object",
+ "$ref": "urn:jsonschema:com:trickl:assertj:examples:Example"
+ },
+ "type": "object"
+ }
+ }
+}
\ No newline at end of file