Skip to content

Commit 6ec2666

Browse files
author
Albert Franzi
committed
Validate Listener with FailEarly mode too
1 parent 4abbb8b commit 6ec2666

File tree

6 files changed

+89
-22
lines changed

6 files changed

+89
-22
lines changed

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,38 +42,38 @@ void visitIfSchema(Schema ifSchema) {
4242
void visitThenSchema(Schema thenSchema) {
4343
if (ifSchemaException == null) {
4444
ValidationException thenSchemaException = owner.getFailureOfSchema(thenSchema, subject);
45-
ValidationException failure = null;
4645
if (thenSchemaException != null) {
47-
failure = new ValidationException(conditionalSchema,
46+
ValidationException failure = new ValidationException(conditionalSchema,
4847
new StringBuilder(new StringBuilder("#")),
4948
"input is invalid against the \"then\" schema",
5049
Arrays.asList(thenSchemaException),
5150
"then",
5251
conditionalSchema.getSchemaLocation());
52+
53+
owner.reportSchemaMatchEvent(thenSchema, failure);
5354
owner.failure(failure);
55+
} else {
56+
owner.reportSchemaMatchEvent(thenSchema, null);
5457
}
55-
owner.reportSchemaMatchEvent(thenSchema, failure);
56-
} else {
57-
owner.reportSchemaMatchEvent(thenSchema, ifSchemaException);
5858
}
5959
}
6060

6161
@Override
6262
void visitElseSchema(Schema elseSchema) {
6363
if (ifSchemaException != null) {
6464
ValidationException elseSchemaException = owner.getFailureOfSchema(elseSchema, subject);
65-
ValidationException failure = null;
6665
if (elseSchemaException != null) {
67-
failure = new ValidationException(conditionalSchema,
66+
ValidationException failure = new ValidationException(conditionalSchema,
6867
new StringBuilder(new StringBuilder("#")),
6968
"input is invalid against both the \"if\" and \"else\" schema",
7069
Arrays.asList(ifSchemaException, elseSchemaException),
7170
"else",
7271
conditionalSchema.getSchemaLocation());
73-
owner.failure(failure);
7472

73+
owner.reportSchemaMatchEvent(elseSchema, failure);
74+
owner.failure(failure);
7575
}
76-
owner.reportSchemaMatchEvent(elseSchema, failure);
76+
owner.reportSchemaMatchEvent(elseSchema, null);
7777
}
7878
}
7979

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

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

33

4-
import org.everit.json.schema.listener.SubschemaReferencedEvent;
4+
import org.everit.json.schema.listener.SchemaReferencedEvent;
55
import org.everit.json.schema.listener.SubschemaMatchEvent;
66
import org.everit.json.schema.listener.SubschemaMismatchEvent;
77

@@ -14,7 +14,7 @@ public interface SchemaVisitorListener {
1414

1515
void subschemaMismatch(SubschemaMismatchEvent mismatchEvent);
1616

17-
void subschemaReferenced(SubschemaReferencedEvent referencedEvent);
17+
void schemaReferenced(SchemaReferencedEvent referencedEvent);
1818

1919
}
2020

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import org.everit.json.schema.listener.SubschemaMatchEvent;
1414
import org.everit.json.schema.listener.SubschemaMismatchEvent;
15-
import org.everit.json.schema.listener.SubschemaReferencedEvent;
15+
import org.everit.json.schema.listener.SchemaReferencedEvent;
1616
import org.json.JSONArray;
1717
import org.json.JSONObject;
1818

@@ -186,7 +186,7 @@ void reportSchemaMatchEvent(Schema schema, ValidationException rval) {
186186

187187
void reportSchemaReferencedEvent(Schema schema, ValidationException rval) {
188188
if (schemaVisitorListener != null) {
189-
schemaVisitorListener.subschemaReferenced(new SubschemaReferencedEvent(schema, rval));
189+
schemaVisitorListener.schemaReferenced(new SchemaReferencedEvent(schema, rval));
190190
}
191191
}
192192

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import org.everit.json.schema.Schema;
44
import org.everit.json.schema.ValidationException;
55

6-
public class SubschemaReferencedEvent extends AbstractSchemaEvent {
6+
public class SchemaReferencedEvent extends AbstractSchemaEvent {
77

8-
public SubschemaReferencedEvent(Schema schema, ValidationException rval) {
8+
public SchemaReferencedEvent(Schema schema, ValidationException rval) {
99
super(schema, rval);
1010
}
1111

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

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.everit.json.schema.listener.AbstractSchemaEvent;
44
import org.everit.json.schema.listener.SubschemaMatchEvent;
55
import org.everit.json.schema.listener.SubschemaMismatchEvent;
6-
import org.everit.json.schema.listener.SubschemaReferencedEvent;
6+
import org.everit.json.schema.listener.SchemaReferencedEvent;
77
import org.json.JSONObject;
88
import org.junit.Before;
99
import org.junit.Test;
@@ -20,7 +20,7 @@ public class DummySchemaVisitorListener implements SchemaVisitorListener {
2020

2121
private List<SubschemaMatchEvent> validSchemas = new ArrayList<>();
2222
private List<SubschemaMismatchEvent> invalidSchemas = new ArrayList<>();
23-
private List<SubschemaReferencedEvent> referencedSchemas = new ArrayList<>();
23+
private List<SchemaReferencedEvent> referencedSchemas = new ArrayList<>();
2424

2525
@Override
2626
public void subschemaMatch(SubschemaMatchEvent matchEvent) {
@@ -33,7 +33,7 @@ public void subschemaMismatch(SubschemaMismatchEvent mismatchEvent) {
3333
}
3434

3535
@Override
36-
public void subschemaReferenced(SubschemaReferencedEvent referencedEvent) {
36+
public void schemaReferenced(SchemaReferencedEvent referencedEvent) {
3737
referencedSchemas.add(referencedEvent);
3838
}
3939

@@ -76,12 +76,17 @@ public String toString() {
7676
.withListener(schemaVisitorListener)
7777
.build();
7878

79+
private Validator validatorEarlyFailure = Validator.builder()
80+
.failEarly()
81+
.withListener(schemaVisitorListener)
82+
.build();
83+
7984
@Before
8085
public void cleanListener() {
8186
schemaVisitorListener.clear();
8287
}
8388

84-
private void testCase(String schemaPath, String eventPath, String expectedPath) {
89+
private void testCase(Validator validator, String schemaPath, String eventPath, String expectedPath) {
8590
JSONObject schemaContent = resource.getJSONObject(schemaPath);
8691
Schema schema = TestSupport.loadAsV7(schemaContent);
8792

@@ -98,6 +103,10 @@ private void testCase(String schemaPath, String eventPath, String expectedPath)
98103
schemaVisitorListener.clear();
99104
}
100105

106+
private void testCase(String schemaPath, String eventPath, String expectedPath) {
107+
testCase(validator, schemaPath, eventPath, expectedPath);
108+
}
109+
101110
@Test
102111
public void refSchema() {
103112
testCase("refSchema1", "refExample1", "refExpected1");
@@ -120,4 +129,15 @@ public void ifThenElseSchema() {
120129
testCase("ifThenElseSchema", "ifThenElseExample4.3", "ifThenElseExpected4.3");
121130
}
122131

132+
@Test
133+
public void testWithFailEarlyMode() {
134+
testCase(validatorEarlyFailure, "refSchema1", "refExample1", "refExpected1");
135+
testCase(validatorEarlyFailure, "combinedSchema2", "combinedExample2", "combinedExpected2FailEarly");
136+
testCase(validatorEarlyFailure, "refSchema3", "refExample3", "refExpected3");
137+
138+
testCase(validatorEarlyFailure, "ifThenElseSchema", "ifThenElseExample4.1", "ifThenElseExpected4.1");
139+
testCase(validatorEarlyFailure, "ifThenElseSchema", "ifThenElseExample4.2", "ifThenElseExpected4.2FailEarly");
140+
testCase(validatorEarlyFailure, "ifThenElseSchema", "ifThenElseExample4.3", "ifThenElseExpected4.3");
141+
}
142+
123143
}

core/src/test/resources/org/everit/jsonvalidator/complex-combined-test-schemas.json

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,35 @@
171171
}
172172
]
173173
},
174+
"combinedExpected2FailEarly": {
175+
"valid": [
176+
{
177+
"schema": {
178+
"$ref": "#/definitions/user"
179+
},
180+
"failures": "null",
181+
"location": "null"
182+
}
183+
],
184+
"referenced": [
185+
{
186+
"schema": {
187+
"$ref": "#/definitions/user"
188+
},
189+
"failures": "null",
190+
"location": "null"
191+
}
192+
],
193+
"invalid": [
194+
{
195+
"schema": {
196+
"$ref": "#/definitions/address"
197+
},
198+
"failures": "[#: required key [street_address] not found]",
199+
"location": "null"
200+
}
201+
]
202+
},
174203
"refSchema3": {
175204
"definitions": {
176205
"address": {
@@ -313,15 +342,33 @@
313342
},
314343
"failures": "[#/power: 1000 is not greater or equal to 9000]",
315344
"location": "#/if"
316-
},
345+
}
346+
]
347+
},
348+
"ifThenElseExpected4.2FailEarly": {
349+
"valid": [
317350
{
318351
"schema": {
319352
"required": [
320-
"disbelief"
353+
"confidence"
321354
]
322355
},
356+
"failures": "null",
357+
"location": "#/else"
358+
}
359+
],
360+
"referenced": [],
361+
"invalid": [
362+
{
363+
"schema": {
364+
"properties": {
365+
"power": {
366+
"minimum": 9000
367+
}
368+
}
369+
},
323370
"failures": "[#/power: 1000 is not greater or equal to 9000]",
324-
"location": "#/then"
371+
"location": "#/if"
325372
}
326373
]
327374
},

0 commit comments

Comments
 (0)