Skip to content

Commit 3df91d1

Browse files
committed
ObjectSchema#describePropertiesTo() improvements: adding support to the following keywords:
* minProperties, maxProperties * required * additionalProperties (schema) * dependencies (property)
1 parent 0526ac7 commit 3df91d1

File tree

3 files changed

+62
-9
lines changed

3 files changed

+62
-9
lines changed

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

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -462,16 +462,42 @@ public int hashCode() {
462462

463463
@Override
464464
void describePropertiesTo(JSONPrinter writer) {
465-
writer.key("type").value("object");
465+
if (requiresObject) {
466+
writer.key("type").value("object");
467+
}
466468
if (!propertySchemas.isEmpty()) {
467469
writer.key("properties");
468470
writer.object();
469471
propertySchemas.entrySet().forEach(entry -> {
470-
writer.key(entry.getKey());
471-
entry.getValue().describeTo(writer);
472-
});
472+
writer.key(entry.getKey());
473+
entry.getValue().describeTo(writer);
474+
});
473475
writer.endObject();
474476
}
477+
writer.ifPresent("minProperties", minProperties);
478+
writer.ifPresent("maxProperties", maxProperties);
479+
if (!requiredProperties.isEmpty()) {
480+
writer.key("required").value(requiredProperties);
481+
}
482+
if (schemaOfAdditionalProperties != null) {
483+
writer.key("additionalProperties");
484+
schemaOfAdditionalProperties.describeTo(writer);
485+
}
486+
if (!propertyDependencies.isEmpty()) {
487+
describePropertyDependenciesTo(writer);
488+
}
489+
}
490+
491+
private void describePropertyDependenciesTo(JSONPrinter writer) {
492+
writer.key("dependencies");
493+
writer.object();
494+
propertyDependencies.entrySet().forEach(entry -> {
495+
writer.key(entry.getKey());
496+
writer.array();
497+
entry.getValue().forEach(writer::value);
498+
writer.endArray();
499+
});
500+
writer.endObject();
475501
}
476502

477503
@Override

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

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public class ObjectSchemaTest {
3030

3131
private static final JSONObject OBJECTS = ResourceLoader.DEFAULT.readObj("objecttestcases.json");
3232

33+
private ResourceLoader loader = ResourceLoader.DEFAULT;
34+
3335
@Test
3436
public void additionalPropertiesOnEmptyObject() {
3537
ObjectSchema.builder()
@@ -283,15 +285,26 @@ public void equalsVerifier() {
283285

284286
@Test
285287
public void toStringTest() {
286-
JSONObject rawSchemaJson = ResourceLoader.DEFAULT.readObj("tostring/objectschema.json");
288+
JSONObject rawSchemaJson = loader.readObj("tostring/objectschema.json");
289+
String actual = SchemaLoader.load(rawSchemaJson).toString();
290+
assertTrue(ObjectComparator.deepEquals(rawSchemaJson, new JSONObject(actual)));
291+
}
292+
293+
@Test
294+
public void toStringNoExplicitType() {
295+
JSONObject rawSchemaJson = loader.readObj("tostring/objectschema.json");
296+
rawSchemaJson.remove("type");
287297
String actual = SchemaLoader.load(rawSchemaJson).toString();
288298
assertTrue(ObjectComparator.deepEquals(rawSchemaJson, new JSONObject(actual)));
289299
}
290300

301+
@Test @Ignore
302+
public void toStringNoAdditionalProperties() {
291303

304+
}
292305

293306
@Test @Ignore
294-
public void toStringNoExplicitType() {
307+
public void toStringSchemaDependencies() {
295308

296309
}
297310
}
Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
11
{
2-
"type" : "object",
2+
"type": "object",
33
"properties": {
4-
"numprop" : {
5-
"type" : "number"
4+
"numprop": {
5+
"type": "number"
66
}
7+
},
8+
"minProperties": 3,
9+
"maxProperties": 4,
10+
"required": [
11+
"numprop"
12+
],
13+
"additionalProperties": {
14+
"type": "boolean"
15+
},
16+
"dependencies": {
17+
"prop1": [
18+
"prop2",
19+
"prop3"
20+
]
721
}
822
}

0 commit comments

Comments
 (0)