55import static com .github .rschmitt .dynamicobject .DynamicObject .newInstance ;
66import static com .github .rschmitt .dynamicobject .DynamicObject .registerTag ;
77import static com .github .rschmitt .dynamicobject .DynamicObject .serialize ;
8+ import static org .junit .Assert .assertEquals ;
89import static org .junit .Assert .assertNull ;
910
1011import 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