Skip to content

Commit 7bb9b17

Browse files
committed
properly implementing CombinedSchema#toString() with test
1 parent eab8bb1 commit 7bb9b17

File tree

5 files changed

+108
-12
lines changed

5 files changed

+108
-12
lines changed

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.util.Optional;
44

5+
import org.everit.json.schema.internal.JSONPrinter;
6+
57
/**
68
* Validator for {@code if}, {@code then}, {@code else} schemas.
79
*/
@@ -68,4 +70,18 @@ void accept(Visitor visitor) {
6870
visitor.visitConditionalSchema(this);
6971
}
7072

73+
@Override void describePropertiesTo(JSONPrinter writer) {
74+
if (ifSchema != null) {
75+
writer.key("if");
76+
ifSchema.describeTo(writer);
77+
}
78+
if (thenSchema != null) {
79+
writer.key("then");
80+
thenSchema.describeTo(writer);
81+
}
82+
if (elseSchema != null) {
83+
writer.key("else");
84+
elseSchema.describeTo(writer);
85+
}
86+
}
7187
}

core/src/main/java/org/everit/json/schema/ValidationListener.java renamed to core/src/main/java/org/everit/json/schema/listener/ValidationListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import org.everit.json.schema.listener.SchemaReferencedEvent;
99

1010
/**
11-
* Interface to capture which schemas are matching against a specific event in the {@link ValidatingVisitor}.
11+
* Interface to capture which schemas are matching against a specific event in the {@code ValidatingVisitor}.
1212
*/
1313
public interface ValidationListener {
1414

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

Lines changed: 81 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,30 @@
11
package org.everit.json.schema;
22

3+
import static org.everit.json.schema.JSONMatcher.sameJsonAs;
4+
import static org.junit.Assert.assertThat;
5+
6+
import org.json.JSONObject;
37
import org.junit.Test;
48

59
public class ConditionalSchemaTest {
610

711
private static final StringSchema MAX_LENGTH_STRING_SCHEMA = StringSchema.builder().maxLength(4).build();
12+
813
private static final StringSchema MIN_LENGTH_STRING_SCHEMA = StringSchema.builder().minLength(6).build();
14+
915
private static final StringSchema PATTERN_STRING_SCHEMA = StringSchema.builder().pattern("f.*o").build();
1016

17+
private static final ResourceLoader LOADER = new ResourceLoader("/org/everit/jsonvalidator/tostring/");
18+
19+
private static ConditionalSchema.Builder initCompleteSchema() {
20+
return ConditionalSchema.builder()
21+
.ifSchema(TrueSchema.builder().build())
22+
.thenSchema(ObjectSchema.builder()
23+
.requiresObject(true)
24+
.addRequiredProperty("prop").build())
25+
.elseSchema(EmptySchema.builder().build());
26+
}
27+
1128
// only if
1229

1330
@Test
@@ -48,7 +65,8 @@ public void onlyElseSuccess() {
4865

4966
@Test
5067
public void ifSubschemaSuccessThenSubschemaFailure() {
51-
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(MAX_LENGTH_STRING_SCHEMA).thenSchema(PATTERN_STRING_SCHEMA);
68+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(MAX_LENGTH_STRING_SCHEMA)
69+
.thenSchema(PATTERN_STRING_SCHEMA);
5270
TestSupport.failureOf(subject)
5371
.expectedKeyword("then")
5472
.expectedPointer("#")
@@ -80,7 +98,8 @@ public void ifSubschemaSuccessElseSubschemaFailure() {
8098

8199
@Test
82100
public void ifSubschemaFailureElseSubschemaFailure() {
83-
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).elseSchema(MAX_LENGTH_STRING_SCHEMA);
101+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA)
102+
.elseSchema(MAX_LENGTH_STRING_SCHEMA);
84103
TestSupport.failureOf(subject)
85104
.expectedKeyword("else")
86105
.expectedPointer("#")
@@ -124,17 +143,20 @@ public void thenSubschemaFailureElseSubschemaSuccess() {
124143

125144
@Test
126145
public void ifSubschemaSuccessThenSubschemaSuccessElseSubSchemaSuccess() {
127-
ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MAX_LENGTH_STRING_SCHEMA).build().validate("foo");
146+
ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA)
147+
.elseSchema(MAX_LENGTH_STRING_SCHEMA).build().validate("foo");
128148
}
129149

130150
@Test
131151
public void ifSubschemaSuccessThenSubschemaSuccessElseSubSchemaFailure() {
132-
ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA).build().validate("foo");
152+
ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA)
153+
.elseSchema(MIN_LENGTH_STRING_SCHEMA).build().validate("foo");
133154
}
134155

135156
@Test
136157
public void ifSubschemaSuccessThenSubschemaFailureElseSubSchemaSuccess() {
137-
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA);
158+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA)
159+
.elseSchema(MIN_LENGTH_STRING_SCHEMA);
138160
TestSupport.failureOf(subject)
139161
.expectedKeyword("then")
140162
.expectedPointer("#")
@@ -144,7 +166,8 @@ public void ifSubschemaSuccessThenSubschemaFailureElseSubSchemaSuccess() {
144166

145167
@Test
146168
public void ifSubschemaSuccessThenSubschemaFailureElseSubSchemaFailure() {
147-
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA);
169+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA)
170+
.elseSchema(MIN_LENGTH_STRING_SCHEMA);
148171
TestSupport.failureOf(subject)
149172
.expectedKeyword("then")
150173
.expectedPointer("#")
@@ -154,12 +177,14 @@ public void ifSubschemaSuccessThenSubschemaFailureElseSubSchemaFailure() {
154177

155178
@Test
156179
public void ifSubschemaFailureThenSubschemaSuccessElseSubSchemaSuccess() {
157-
ConditionalSchema.builder().ifSchema(MAX_LENGTH_STRING_SCHEMA).thenSchema(PATTERN_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA).build().validate("foobar");
180+
ConditionalSchema.builder().ifSchema(MAX_LENGTH_STRING_SCHEMA).thenSchema(PATTERN_STRING_SCHEMA)
181+
.elseSchema(MIN_LENGTH_STRING_SCHEMA).build().validate("foobar");
158182
}
159183

160184
@Test
161185
public void ifSubschemaFailureThenSubschemaSuccessElseSubSchemaFailure() {
162-
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA).elseSchema(MIN_LENGTH_STRING_SCHEMA);
186+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MAX_LENGTH_STRING_SCHEMA)
187+
.elseSchema(MIN_LENGTH_STRING_SCHEMA);
163188
TestSupport.failureOf(subject)
164189
.expectedKeyword("else")
165190
.expectedPointer("#")
@@ -169,17 +194,62 @@ public void ifSubschemaFailureThenSubschemaSuccessElseSubSchemaFailure() {
169194

170195
@Test
171196
public void ifSubschemaFailureThenSubschemaFailureElseSubSchemaSuccess() {
172-
ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MIN_LENGTH_STRING_SCHEMA).elseSchema(MAX_LENGTH_STRING_SCHEMA).build().validate("bar");
197+
ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MIN_LENGTH_STRING_SCHEMA)
198+
.elseSchema(MAX_LENGTH_STRING_SCHEMA).build().validate("bar");
173199
}
174200

175201
@Test
176202
public void ifSubschemaFailureThenSubschemaFailureElseSubSchemaFailure() {
177-
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MIN_LENGTH_STRING_SCHEMA).elseSchema(MAX_LENGTH_STRING_SCHEMA);
203+
ConditionalSchema.Builder subject = ConditionalSchema.builder().ifSchema(PATTERN_STRING_SCHEMA).thenSchema(MIN_LENGTH_STRING_SCHEMA)
204+
.elseSchema(MAX_LENGTH_STRING_SCHEMA);
178205
TestSupport.failureOf(subject)
179206
.expectedKeyword("else")
180207
.expectedPointer("#")
181208
.input("barbarbar")
182209
.expect();
183210
}
184211

185-
}
212+
@Test
213+
public void toStringTest() {
214+
ConditionalSchema subject = initCompleteSchema().build();
215+
216+
JSONObject actual = new JSONObject(subject.toString());
217+
218+
assertThat(actual, sameJsonAs(LOADER.readObj("conditionalschema.json")));
219+
}
220+
221+
@Test
222+
public void toString_noIf() {
223+
ConditionalSchema subject = initCompleteSchema().ifSchema(null).build();
224+
JSONObject expectedSchemaJson = LOADER.readObj("conditionalschema.json");
225+
expectedSchemaJson.remove("if");
226+
227+
JSONObject actual = new JSONObject(subject.toString());
228+
229+
assertThat(actual, sameJsonAs(expectedSchemaJson));
230+
}
231+
232+
@Test
233+
public void toString_noThen() {
234+
ConditionalSchema subject = initCompleteSchema().thenSchema(null).build();
235+
JSONObject expectedSchemaJson = LOADER.readObj("conditionalschema.json");
236+
expectedSchemaJson.remove("then");
237+
238+
JSONObject actual = new JSONObject(subject.toString());
239+
240+
assertThat(actual, sameJsonAs(expectedSchemaJson));
241+
}
242+
243+
@Test
244+
public void toString_noElse() {
245+
ConditionalSchema subject = initCompleteSchema().thenSchema(null).elseSchema(null).build();
246+
JSONObject expectedSchemaJson = LOADER.readObj("conditionalschema.json");
247+
expectedSchemaJson.remove("then");
248+
expectedSchemaJson.remove("else");
249+
250+
JSONObject actual = new JSONObject(subject.toString());
251+
252+
assertThat(actual, sameJsonAs(expectedSchemaJson));
253+
}
254+
255+
}
File renamed without changes.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"if": true,
3+
"then": {
4+
"type": "object",
5+
"required": [
6+
"prop"
7+
]
8+
},
9+
"else": {}
10+
}

0 commit comments

Comments
 (0)