Skip to content

Commit 31927be

Browse files
committed
Don't discard the return values of custom validators
1 parent 2fa2c8f commit 31927be

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/main/java/com/github/rschmitt/dynamicobject/internal/DynamicObjectInstance.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,7 @@ public Object getValueFor(Object key, Type genericReturnType) {
149149

150150
public Object $$validate() {
151151
Validation.validateInstance(this);
152-
$$customValidate();
153-
return this;
152+
return $$customValidate();
154153
}
155154

156155
@Override

src/test/java/com/github/rschmitt/dynamicobject/ValidationTest.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import static com.github.rschmitt.dynamicobject.DynamicObject.newInstance;
66
import static com.github.rschmitt.dynamicobject.DynamicObject.registerTag;
77
import static com.github.rschmitt.dynamicobject.DynamicObject.serialize;
8+
import static org.junit.Assert.assertEquals;
89
import static org.junit.Assert.assertNull;
910

1011
import java.math.BigInteger;
@@ -192,6 +193,14 @@ public void customExceptionsArePropagated2() {
192193
DynamicObject.deserialize("{:str \"value\"}", Custom2.class).validate();
193194
}
194195

196+
@Test
197+
public void mutatingValidators() {
198+
MutatingValidator before = newInstance(MutatingValidator.class);
199+
MutatingValidator after = before.validate();
200+
assertEquals("value", after.str());
201+
assertEquals("value", newInstance(MutatingValidator.class).validate().str());
202+
}
203+
195204
private static <D extends DynamicObject<D>> void validationFailure(String edn, Class<D> type) {
196205
try {
197206
deserialize(edn, type).validate();
@@ -203,7 +212,7 @@ private static <D extends DynamicObject<D>> void validationFailure(String edn, C
203212

204213
private static <D extends DynamicObject<D>> void validationSuccess(String edn, Class<D> type) {
205214
D instance = deserialize(edn, type).validate();
206-
Assert.assertEquals(edn, serialize(instance));
215+
assertEquals(edn, serialize(instance));
207216
}
208217

209218

@@ -286,5 +295,16 @@ default Custom2 validate() {
286295
}
287296
}
288297

298+
public interface MutatingValidator extends DynamicObject<MutatingValidator> {
299+
String str();
300+
MutatingValidator str(String str);
301+
302+
default MutatingValidator validate() {
303+
if (size() == 0) {
304+
return str("value");
305+
} else return this;
306+
}
307+
}
308+
289309
public static class CustomException extends RuntimeException {}
290310
}

0 commit comments

Comments
 (0)