99import jsonpatch
1010import jsonpointer
1111import sys
12+ import string
13+ from hypothesis import given , note , strategies as st
1214
1315
1416class ApplyPatchTestCase (unittest .TestCase ):
@@ -518,6 +520,26 @@ def test_replace_missing(self):
518520 self .assertRaises (jsonpatch .JsonPatchConflict , jsonpatch .apply_patch , src , patch_obj )
519521
520522
523+ json_st = st .recursive (
524+ st .one_of ([
525+ st .none (),
526+ st .booleans (),
527+ st .floats (),
528+ st .text (string .printable )]),
529+ lambda children :
530+ st .lists (children )
531+ | st .dictionaries (st .text (string .printable ), children ))
532+
533+
534+ class RoundtripTests (unittest .TestCase ):
535+ @given (json_st , json_st )
536+ def test_roundtrip (self , src , dst ):
537+ patch = jsonpatch .JsonPatch .from_diff (src , dst , False )
538+ note ('Patch: %s' % (patch ,))
539+ res = patch .apply (src )
540+ self .assertEqual (res , dst )
541+
542+
521543if __name__ == '__main__' :
522544 modules = ['jsonpatch' ]
523545
@@ -531,6 +553,7 @@ def get_suite():
531553 suite .addTest (unittest .makeSuite (InvalidInputTests ))
532554 suite .addTest (unittest .makeSuite (ConflictTests ))
533555 suite .addTest (unittest .makeSuite (OptimizationTests ))
556+ suite .addTest (unittest .makeSuite (RoundtripTests ))
534557 return suite
535558
536559
0 commit comments