1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import doctest
import unittest
import jsonpatch
class ApplyPatchTestCase(unittest.TestCase):
def test_apply_patch_to_copy(self):
obj = {'foo': 'bar'}
res = jsonpatch.apply_patch(obj, [{'add': '/baz', 'value': 'qux'}])
self.assertTrue(obj is not res)
def test_apply_patch_to_same_instance(self):
obj = {'foo': 'bar'}
res = jsonpatch.apply_patch(obj, [{'add': '/baz', 'value': 'qux'}],
in_place=True)
self.assertTrue(obj is res)
def test_add_object_key(self):
obj = {'foo': 'bar'}
res = jsonpatch.apply_patch(obj, [{'add': '/baz', 'value': 'qux'}])
self.assertTrue('baz' in res)
self.assertEqual(res['baz'], 'qux')
def test_add_array_item(self):
obj = {'foo': ['bar', 'baz']}
res = jsonpatch.apply_patch(obj, [{'add': '/foo/1', 'value': 'qux'}])
self.assertEqual(res['foo'], ['bar', 'qux', 'baz'])
def test_remove_object_key(self):
obj = {'foo': 'bar', 'baz': 'qux'}
res = jsonpatch.apply_patch(obj, [{'remove': '/baz'}])
self.assertTrue('baz' not in res)
def test_remove_array_item(self):
obj = {'foo': ['bar', 'qux', 'baz']}
res = jsonpatch.apply_patch(obj, [{'remove': '/foo/1'}])
self.assertEqual(res['foo'], ['bar', 'baz'])
def test_replace_object_key(self):
obj = {'foo': 'bar', 'baz': 'qux'}
res = jsonpatch.apply_patch(obj, [{'replace': '/baz', 'value': 'boo'}])
self.assertTrue(res['baz'], 'boo')
def test_replace_array_item(self):
obj = {'foo': ['bar', 'qux', 'baz']}
res = jsonpatch.apply_patch(obj, [{'replace': '/foo/1',
'value': 'boo'}])
self.assertEqual(res['foo'], ['bar', 'boo', 'baz'])
def test_move_object_key(self):
obj = {'foo': {'bar': 'baz', 'waldo': 'fred'},
'qux': {'corge': 'grault'}}
res = jsonpatch.apply_patch(obj, [{'move': '/foo/waldo',
'to': '/qux/thud'}])
self.assertEqual(res, {'qux': {'thud': 'fred', 'corge': 'grault'},
'foo': {'bar': 'baz'}})
def test_move_array_item(self):
obj = {'foo': ['all', 'grass', 'cows', 'eat']}
res = jsonpatch.apply_patch(obj, [{'move': '/foo/1', 'to': '/foo/3'}])
self.assertEqual(res, {'foo': ['all', 'cows', 'eat', 'grass']})
def test_test_success(self):
obj = {'baz': 'qux', 'foo': ['a', 2, 'c']}
jsonpatch.apply_patch(obj, [{'test': '/baz', 'value': 'qux'},
{'test': '/foo/1', 'value': 2}])
def test_test_error(self):
obj = {'bar': 'qux'}
self.assertRaises(AssertionError,
jsonpatch.apply_patch,
obj, [{'test': '/bar', 'value': 'bar'}])
class MakePatchTestCase(unittest.TestCase):
def test_apply_patch_to_copy(self):
src = {'foo': 'bar', 'boo': 'qux'}
dst = {'baz': 'qux', 'foo': 'boo'}
patch = jsonpatch.make_patch(src, dst)
res = patch.apply(src)
self.assertTrue(src is not res)
def test_apply_patch_to_same_instance(self):
src = {'foo': 'bar', 'boo': 'qux'}
dst = {'baz': 'qux', 'foo': 'boo'}
patch = jsonpatch.make_patch(src, dst)
res = patch.apply(src, in_place=True)
self.assertTrue(src is res)
def test_objects(self):
src = {'foo': 'bar', 'boo': 'qux'}
dst = {'baz': 'qux', 'foo': 'boo'}
patch = jsonpatch.make_patch(src, dst)
res = patch.apply(src)
self.assertEqual(res, dst)
def test_arrays(self):
src = {'numbers': [1, 2, 3], 'other': [1, 3, 4, 5]}
dst = {'numbers': [1, 3, 4, 5], 'other': [1, 3, 4]}
patch = jsonpatch.make_patch(src, dst)
res = patch.apply(src)
self.assertEqual(res, dst)
def test_complex_object(self):
src = {'data': [
{'foo': 1}, {'bar': [1, 2, 3]}, {'baz': {'1': 1, '2': 2}}
]}
dst = {'data': [
{'foo': [42]}, {'bar': []}, {'baz': {'boo': 'oom!'}}
]}
patch = jsonpatch.make_patch(src, dst)
res = patch.apply(src)
self.assertEqual(res, dst)
def suite():
suite = unittest.TestSuite()
suite.addTest(doctest.DocTestSuite(jsonpatch))
suite.addTest(unittest.makeSuite(ApplyPatchTestCase))
suite.addTest(unittest.makeSuite(MakePatchTestCase))
return suite
if __name__ == '__main__':
unittest.main(defaultTest='suite')
|