Skip to content

Commit c8018b6

Browse files
committed
Merge branch 'pull/266'
2 parents ea8c5ff + cd15a50 commit c8018b6

File tree

5 files changed

+126
-4
lines changed

5 files changed

+126
-4
lines changed

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

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import static java.util.Objects.requireNonNull;
44

5+
import java.util.HashMap;
6+
import java.util.Map;
57
import java.util.Objects;
68

79
import org.everit.json.schema.internal.JSONPrinter;
@@ -41,6 +43,14 @@ public Builder refValue(String refValue) {
4143
this.refValue = refValue;
4244
return this;
4345
}
46+
47+
@Override public ReferenceSchema.Builder unprocessedProperties(Map<String, Object> unprocessedProperties) {
48+
if (retval != null) {
49+
retval.unprocessedProperties = new HashMap<>(unprocessedProperties);
50+
}
51+
super.unprocessedProperties(unprocessedProperties);
52+
return this;
53+
}
4454
}
4555

4656
public static Builder builder() {
@@ -51,9 +61,12 @@ public static Builder builder() {
5161

5262
private final String refValue;
5363

64+
private Map<String, Object> unprocessedProperties;
65+
5466
public ReferenceSchema(final Builder builder) {
5567
super(builder);
5668
this.refValue = requireNonNull(builder.refValue, "refValue cannot be null");
69+
this.unprocessedProperties = builder.unprocessedProperties;
5770
}
5871

5972
@Override
@@ -90,6 +103,7 @@ public boolean equals(Object o) {
90103
ReferenceSchema that = (ReferenceSchema) o;
91104
return that.canEqual(this) &&
92105
Objects.equals(refValue, that.refValue) &&
106+
Objects.equals(unprocessedProperties, that.unprocessedProperties) &&
93107
Objects.equals(referredSchema, that.referredSchema) &&
94108
super.equals(that);
95109
} else {
@@ -99,7 +113,7 @@ public boolean equals(Object o) {
99113

100114
@Override
101115
public int hashCode() {
102-
return Objects.hash(super.hashCode(), referredSchema, refValue);
116+
return Objects.hash(super.hashCode(), referredSchema, refValue, unprocessedProperties);
103117
}
104118

105119
@Override
@@ -115,4 +129,8 @@ protected boolean canEqual(Object other) {
115129
writer.key("$ref");
116130
writer.value(refValue);
117131
}
132+
133+
@Override public Map<String, Object> getUnprocessedProperties() {
134+
return unprocessedProperties;
135+
}
118136
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public abstract static class Builder<S extends Schema> {
4141

4242
private Boolean writeOnly = null;
4343

44-
private Map<String, Object> unprocessedProperties = new HashMap<>(0);
44+
public Map<String, Object> unprocessedProperties = new HashMap<>(0);
4545

4646
public Builder<S> title(String title) {
4747
this.title = title;
@@ -293,7 +293,7 @@ public void describeTo(JSONPrinter writer) {
293293
writer.ifPresent("readOnly", readOnly);
294294
writer.ifPresent("writeOnly", writeOnly);
295295
describePropertiesTo(writer);
296-
unprocessedProperties.forEach((key, val) -> {
296+
getUnprocessedProperties().forEach((key, val) -> {
297297
writer.key(key).value(val);
298298
});
299299
writer.endObject();

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

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@
1515
*/
1616
package org.everit.json.schema;
1717

18+
import static java.util.Collections.emptyMap;
1819
import static org.everit.json.schema.TestSupport.buildWithLocation;
20+
import static org.junit.Assert.assertEquals;
1921
import static org.junit.Assert.assertTrue;
2022

2123
import org.everit.json.schema.ReferenceSchema.Builder;
@@ -24,11 +26,15 @@
2426
import org.junit.Assert;
2527
import org.junit.Test;
2628

29+
import com.google.common.collect.ImmutableMap;
30+
2731
import nl.jqno.equalsverifier.EqualsVerifier;
2832
import nl.jqno.equalsverifier.Warning;
2933

3034
public class ReferenceSchemaTest {
3135

36+
public static final ImmutableMap<String, Object> UNPROC_PROPS = ImmutableMap.of("unproc", true);
37+
3238
@Test
3339
public void constructorMustRunOnlyOnce() {
3440
Builder builder = ReferenceSchema.builder();
@@ -77,11 +83,50 @@ public void equalsVerifier() {
7783
.verify();
7884
}
7985

86+
@Test
87+
public void unprocessedPropertiesBeforeSettingRefSchema() {
88+
ReferenceSchema subject = ReferenceSchema.builder()
89+
.unprocessedProperties(UNPROC_PROPS)
90+
.refValue("#/pointer")
91+
.build();
92+
subject.setReferredSchema(EmptySchema.builder().build());
93+
assertEquals(UNPROC_PROPS, subject.getUnprocessedProperties());
94+
}
95+
96+
@Test
97+
public void unprocessedPropertiesAfterSettingRefSchema() {
98+
ReferenceSchema subject = ReferenceSchema.builder()
99+
.refValue("#/pointer")
100+
.unprocessedProperties(UNPROC_PROPS)
101+
.build();
102+
subject.setReferredSchema(EmptySchema.builder().build());
103+
assertEquals(UNPROC_PROPS, subject.getUnprocessedProperties());
104+
}
105+
106+
@Test
107+
public void unprocessedPropertiesAfterBuild() {
108+
Builder builder = ReferenceSchema.builder()
109+
.refValue("#/pointer");
110+
ReferenceSchema subject = builder
111+
.build();
112+
subject.setReferredSchema(EmptySchema.builder().build());
113+
builder.unprocessedProperties(UNPROC_PROPS);
114+
assertEquals(UNPROC_PROPS, subject.getUnprocessedProperties());
115+
}
116+
117+
@Test
118+
public void emptyUnprocessedProperties() {
119+
ReferenceSchema subject = ReferenceSchema.builder()
120+
.refValue("#/pointer")
121+
.build();
122+
subject.setReferredSchema(EmptySchema.builder().build());
123+
assertEquals(emptyMap(), subject.getUnprocessedProperties());
124+
}
125+
80126
@Test
81127
public void toStringTest() {
82128
JSONObject rawSchemaJson = ResourceLoader.DEFAULT.readObj("tostring/ref.json");
83129
String actual = SchemaLoader.load(rawSchemaJson).toString();
84-
System.out.println(actual);
85130
assertTrue(ObjectComparator.deepEquals(rawSchemaJson.query("/properties"),
86131
new JSONObject(actual).query("/properties")));
87132
}

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -745,4 +745,25 @@ public void commonPropsAreNotUnprocessedProps() {
745745
assertThat(new JSONObject(subject.toString()), sameJsonAs(schemaJson));
746746
}
747747

748+
@Test
749+
public void unprocessedPropertiesAreLoadedForRefElement() {
750+
SchemaLoader loader = SchemaLoader.builder()
751+
.draftV7Support()
752+
.useDefaults(true)
753+
.schemaJson(get("schemaRefWithUnprocessedProperties"))
754+
.build();
755+
ObjectSchema actual = (ObjectSchema) loader.load().build();
756+
757+
assertEquals(ImmutableMap.of(
758+
"unproc8", false
759+
), ((ReferenceSchema) actual.getPropertySchemas().get("prop4")).getReferredSchema().getUnprocessedProperties());
760+
761+
assertEquals(ImmutableMap.of("unproc4", true, "unproc5", JSONObject.NULL),
762+
actual.getPropertySchemas().get("prop2").getUnprocessedProperties());
763+
764+
assertEquals(ImmutableMap.of(
765+
"unproc7", JSONObject.NULL
766+
), actual.getPropertySchemas().get("prop4").getUnprocessedProperties());
767+
}
768+
748769
}

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,5 +686,43 @@
686686
"unproc6": false
687687
}
688688
}
689+
},
690+
"schemaRefWithUnprocessedProperties": {
691+
"title": "ttt",
692+
"description": "descr",
693+
"$id": "http://example.org",
694+
"default": 22,
695+
"nullable": false,
696+
"readOnly": false,
697+
"writeOnly": false,
698+
"definitions": {
699+
"dateMonthDayYear": {
700+
"description": "(MM/dd/yyyy)",
701+
"type": "string",
702+
"maxLength": 10,
703+
"pattern": "^\\d{2}/\\d{2}/\\d{4}$",
704+
"unproc8": false
705+
}
706+
},
707+
"type": "object",
708+
"unproc0": 1,
709+
"unproc1": "asdasd",
710+
"properties": {
711+
"prop": {
712+
"type": "string"
713+
},
714+
"prop2": {
715+
"unproc4": true,
716+
"unproc5": null
717+
},
718+
"prop3": {
719+
"$ref": "#",
720+
"unproc6": false
721+
},
722+
"prop4": {
723+
"$ref": "#/definitions/dateMonthDayYear",
724+
"unproc7": null
725+
}
726+
}
689727
}
690728
}

0 commit comments

Comments
 (0)