Skip to content

Commit bdc0add

Browse files
author
Lionel Montrieux
committed
Merge remote-tracking branch 'origin/master' into ARUHA-1271-less-ArrayLists
# Conflicts: # core/src/test/java/org/everit/json/schema/NumberSchemaTest.java
2 parents 7623862 + 5e5331b commit bdc0add

File tree

3 files changed

+34
-14
lines changed

3 files changed

+34
-14
lines changed

core/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@
136136
<dependency>
137137
<groupId>org.json</groupId>
138138
<artifactId>json</artifactId>
139-
<version>20170516</version>
139+
<version>20171018</version>
140140
</dependency>
141141
<dependency>
142142
<groupId>com.google.guava</groupId>

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

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
import org.json.JSONException;
55

66
import java.math.BigDecimal;
7+
import java.util.ArrayList;
8+
import java.util.List;
79
import java.util.Objects;
810

911
import static java.lang.String.format;
1012

1113
/**
1214
* Number schema validator.
15+
* @ThreadSafe
1316
*/
1417
public class NumberSchema extends Schema {
1518

@@ -131,42 +134,43 @@ public NumberSchema(final Builder builder) {
131134
this.exclusiveMaximumLimit = builder.exclusiveMaximumLimit;
132135
}
133136

134-
private void checkMaximum(final double subject) {
137+
private void checkMaximum(final double subject, final List<ValidationException> validationExceptions) {
135138
if (maximum != null) {
136139
if (exclusiveMaximum && maximum.doubleValue() <= subject) {
137-
throw failure(subject + " is not less than " + maximum, "exclusiveMaximum");
140+
validationExceptions.add(failure(subject + " is not less than " + maximum, "exclusiveMaximum"));
138141
} else if (maximum.doubleValue() < subject) {
139-
throw failure(subject + " is not less or equal to " + maximum, "maximum");
142+
validationExceptions.add(failure(subject + " is not less or equal to " + maximum, "maximum"));
140143
}
141144
}
142145
if (exclusiveMaximumLimit != null) {
143146
if (subject >= exclusiveMaximumLimit.doubleValue()) {
144-
throw failure(format("is not less than " + exclusiveMaximumLimit), "exclusiveMaximum");
147+
validationExceptions.add(
148+
failure(format("is not less than " + exclusiveMaximumLimit),"exclusiveMaximum"));
145149
}
146150
}
147151
}
148152

149-
private void checkMinimum(final double subject) {
153+
private void checkMinimum(final double subject, final List<ValidationException> validationExceptions) {
150154
if (minimum != null) {
151155
if (exclusiveMinimum && subject <= minimum.doubleValue()) {
152-
throw failure(subject + " is not greater than " + minimum, "exclusiveMinimum");
156+
validationExceptions.add(failure(subject + " is not greater than " + minimum, "exclusiveMinimum"));
153157
} else if (subject < minimum.doubleValue()) {
154-
throw failure(subject + " is not greater or equal to " + minimum, "minimum");
158+
validationExceptions.add(failure(subject + " is not greater or equal to " + minimum, "minimum"));
155159
}
156160
}
157161
if (exclusiveMinimumLimit != null) {
158162
if (subject <= exclusiveMinimumLimit.doubleValue()) {
159-
throw failure(subject + " is not greater than " + exclusiveMinimumLimit, "exclusiveMinimum");
163+
validationExceptions.add(failure(subject + " is not greater than " + exclusiveMinimumLimit, "exclusiveMinimum"));
160164
}
161165
}
162166
}
163167

164-
private void checkMultipleOf(final double subject) {
168+
private void checkMultipleOf(final double subject, final List<ValidationException> validationExceptions) {
165169
if (multipleOf != null) {
166170
BigDecimal remainder = BigDecimal.valueOf(subject).remainder(
167171
BigDecimal.valueOf(multipleOf.doubleValue()));
168172
if (remainder.compareTo(BigDecimal.ZERO) != 0) {
169-
throw failure(subject + " is not a multiple of " + multipleOf, "multipleOf");
173+
validationExceptions.add(failure(subject + " is not a multiple of " + multipleOf, "multipleOf"));
170174
}
171175
}
172176
}
@@ -206,9 +210,11 @@ public void validate(final Object subject) {
206210
throw failure(Integer.class, subject);
207211
}
208212
double intSubject = ((Number) subject).doubleValue();
209-
checkMinimum(intSubject);
210-
checkMaximum(intSubject);
211-
checkMultipleOf(intSubject);
213+
final List<ValidationException> validationExceptions = new ArrayList<>();
214+
checkMinimum(intSubject, validationExceptions);
215+
checkMaximum(intSubject, validationExceptions);
216+
checkMultipleOf(intSubject, validationExceptions);
217+
ValidationException.throwFor(this, validationExceptions);
212218
}
213219
}
214220

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,20 @@ public void multipleOfFailure() {
107107
.expect();
108108
}
109109

110+
@Test
111+
public void shouldListAllViolationsWhenThereIsMoreThanOne() {
112+
try {
113+
NumberSchema.builder()
114+
.multipleOf(10).minimum(10.0).maximum(15.0)
115+
.build()
116+
.validate(3);
117+
} catch (ValidationException ve) {
118+
assertEquals(2, ve.getViolationCount());
119+
assertEquals("minimum", ve.getCausingExceptions().get(0).getKeyword());
120+
assertEquals("multipleOf", ve.getCausingExceptions().get(1).getKeyword());
121+
}
122+
}
123+
110124
@Test
111125
public void notRequiresNumber() {
112126
NumberSchema.builder().requiresNumber(false).build().validate("foo");

0 commit comments

Comments
 (0)