Skip to content

Commit cabd7ae

Browse files
committed
adding CombinedSchema#synthetic attribute to avoid adding the wrapping allOf to the output
1 parent 36be57c commit cabd7ae

File tree

7 files changed

+55
-10
lines changed

7 files changed

+55
-10
lines changed

core/src/main/java/org/everit/json/schema/CombinedSchema.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public static class Builder extends Schema.Builder<CombinedSchema> {
2424

2525
private Collection<Schema> subschemas = new ArrayList<>();
2626

27+
private boolean synthetic;
28+
2729
@Override
2830
public CombinedSchema build() {
2931
return new CombinedSchema(this);
@@ -44,6 +46,10 @@ public Builder subschemas(Collection<Schema> subschemas) {
4446
return this;
4547
}
4648

49+
public Builder isSynthetic(boolean synthetic) {
50+
this.synthetic = synthetic;
51+
return this;
52+
}
4753
}
4854

4955
/**
@@ -147,6 +153,8 @@ public static Builder oneOf(Collection<Schema> schemas) {
147153
return builder(schemas).criterion(ONE_CRITERION);
148154
}
149155

156+
private final boolean synthetic;
157+
150158
private final Collection<Schema> subschemas;
151159

152160
private final ValidationCriterion criterion;
@@ -159,6 +167,7 @@ public static Builder oneOf(Collection<Schema> schemas) {
159167
*/
160168
public CombinedSchema(Builder builder) {
161169
super(builder);
170+
this.synthetic = builder.synthetic;
162171
this.criterion = requireNonNull(builder.criterion, "criterion cannot be null");
163172
this.subschemas = requireNonNull(builder.subschemas, "subschemas cannot be null");
164173
}
@@ -208,10 +217,14 @@ public boolean equals(Object o) {
208217

209218
@Override
210219
void describePropertiesTo(JSONPrinter writer) {
211-
writer.key(criterion.toString());
212-
writer.array();
213-
subschemas.forEach(subschema -> subschema.describeTo(writer));
214-
writer.endArray();
220+
if (synthetic) {
221+
subschemas.forEach(subschema -> subschema.describePropertiesTo(writer));
222+
} else {
223+
writer.key(criterion.toString());
224+
writer.array();
225+
subschemas.forEach(subschema -> subschema.describeTo(writer));
226+
writer.endArray();
227+
}
215228
}
216229

217230
@Override

core/src/main/java/org/everit/json/schema/FalseSchema.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.everit.json.schema;
22

3+
import org.everit.json.schema.internal.JSONPrinter;
4+
35
/**
46
* @author erosb
57
*/
@@ -30,7 +32,7 @@ public FalseSchema(Builder builder) {
3032
visitor.visitFalseSchema(this);
3133
}
3234

33-
@Override public String toString() {
34-
return "false";
35+
@Override public void describeTo(JSONPrinter writer) {
36+
writer.value(false);
3537
}
3638
}

core/src/main/java/org/everit/json/schema/TrueSchema.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package org.everit.json.schema;
22

3+
import org.everit.json.schema.internal.JSONPrinter;
4+
35
/**
46
* @author erosb
57
*/
@@ -20,8 +22,7 @@ public TrueSchema(Builder builder) {
2022
super(builder);
2123
}
2224

23-
@Override public String toString() {
24-
return "true";
25+
@Override public void describeTo(JSONPrinter writer) {
26+
writer.value(true);
2527
}
26-
2728
}

core/src/main/java/org/everit/json/schema/loader/SchemaLoader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ private Schema.Builder loadSchemaObject(JsonObject o) {
331331
.map(Schema.Builder::build)
332332
.map(Schema.class::cast)
333333
.collect(toList());
334-
effectiveReturnedSchema = CombinedSchema.allOf(built);
334+
effectiveReturnedSchema = CombinedSchema.allOf(built).isSynthetic(true);
335335
}
336336
loadCommonSchemaProperties(effectiveReturnedSchema);
337337
return effectiveReturnedSchema;

core/src/test/java/org/everit/json/schema/CombinedSchemaTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,20 @@ public void toStringTest() {
135135
+ "]}"), actual));
136136
}
137137

138+
@Test
139+
public void toStringTest_withSynthetic() {
140+
CombinedSchema subject = CombinedSchema.builder().criterion(CombinedSchema.ALL_CRITERION)
141+
.subschema(BooleanSchema.INSTANCE)
142+
.subschema(EmptySchema.INSTANCE)
143+
.isSynthetic(true)
144+
.build();
145+
146+
String actual = subject.toString();
147+
148+
assertTrue(ObjectComparator.deepEquals(new JSONObject(BooleanSchema.INSTANCE.toString()),
149+
new JSONObject(actual)));
150+
}
151+
138152
@Test
139153
public void oneOfEarlyFailureTest() {
140154
CombinedSchema subject = CombinedSchema

core/src/test/java/org/everit/json/schema/loader/SchemaLoaderTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.everit.json.schema.NotSchema;
3434
import org.everit.json.schema.NullSchema;
3535
import org.everit.json.schema.NumberSchema;
36+
import org.everit.json.schema.ObjectComparator;
3637
import org.everit.json.schema.ObjectSchema;
3738
import org.everit.json.schema.ReferenceSchema;
3839
import org.everit.json.schema.ResourceLoader;
@@ -684,4 +685,14 @@ public void unknownMetaSchemaException() {
684685
assertEquals("#", e.getSchemaLocation());
685686
}
686687
}
688+
689+
@Test
690+
public void sythetizedAllOf() {
691+
String actual = SchemaLoader.load(get("boolAndNot")).toString();
692+
assertTrue(ObjectComparator.deepEquals(
693+
get("boolAndNot"),
694+
new JSONObject(actual)
695+
));
696+
697+
}
687698
}

core/src/test/resources/org/everit/jsonvalidator/testschemas.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,5 +642,9 @@
642642
},
643643
"unknownMetaSchema": {
644644
"$schema": "http://json-schema.org/draft-09.75/schema"
645+
},
646+
"boolAndNot": {
647+
"type": "boolean",
648+
"not": false
645649
}
646650
}

0 commit comments

Comments
 (0)