2
2
3
3
import assert from 'assert'
4
4
import squash from '../lib/squash'
5
+ import apply from '../lib/apply'
6
+ import { clone } from 'json8'
5
7
6
8
/* eslint comma-dangle: 0 */
7
9
8
- function test ( obj1 , obj2 ) {
9
- return assert . deepEqual ( squash ( obj1 ) , obj2 )
10
+ function test ( patch , squashed , doc , expected ) {
11
+ assert . deepEqual ( squash ( patch ) , squashed )
12
+
13
+
14
+ if ( doc ) {
15
+ assert . deepEqual ( apply ( clone ( doc ) , patch ) . doc , apply ( clone ( doc ) , squashed ) . doc )
16
+ }
17
+
18
+ if ( expected ) {
19
+ assert . deepEqual ( apply ( clone ( doc ) , patch ) . doc , expected )
20
+ assert . deepEqual ( apply ( clone ( doc ) , squashed ) . doc , expected )
21
+ }
10
22
}
11
23
12
24
/*
@@ -20,15 +32,19 @@ test(
20
32
] ,
21
33
[
22
34
{ "path" : "/foo" , "op" : "add" , "value" : "bar" }
23
- ]
35
+ ] ,
36
+ { } ,
37
+ { "foo" : "bar" }
24
38
)
25
39
// add - remove
26
40
test (
27
41
[
28
42
{ "path" : "/foo" , "op" : "add" , "value" : "lulz" } ,
29
43
{ "path" : "/foo" , "op" : "remove" }
30
44
] ,
31
- [ ]
45
+ [ ] ,
46
+ { } ,
47
+ { }
32
48
)
33
49
// add - replace
34
50
test (
38
54
] ,
39
55
[
40
56
{ "path" : "/foo" , "op" : "add" , "value" : "bar" }
41
- ]
57
+ ] ,
58
+ { } ,
59
+ { "foo" : "bar" }
42
60
)
43
61
// add - move to
44
62
test (
48
66
] ,
49
67
[
50
68
{ "path" : "/foo" , "op" : "move" , "from" : "/bar" }
51
- ]
69
+ ] ,
70
+ { "bar" : "lulz" } ,
71
+ { "foo" : "lulz" }
52
72
)
53
73
// // add - move from // FIXME this could resolve to [{"op": "add", "path": "/bar", "value": "lulz"}]
54
74
test (
59
79
[
60
80
{ "path" : "/foo" , "op" : "add" , "value" : "lulz" } ,
61
81
{ "path" : "/bar" , "op" : "move" , "from" : "/foo" }
62
- ]
82
+ ] ,
83
+ { } ,
84
+ { "bar" : "lulz" }
63
85
)
64
86
// add - copy to
65
87
test (
69
91
] ,
70
92
[
71
93
{ "path" : "/foo" , "op" : "copy" , "from" : "/bar" }
72
- ]
94
+ ] ,
95
+ { "bar" : "lulz" } ,
96
+ { "bar" : "lulz" , "foo" : "lulz" }
73
97
)
74
98
// add - copy from
75
99
test (
80
104
[
81
105
{ "path" : "/foo" , "op" : "add" , "value" : "lulz" } ,
82
106
{ "path" : "/bar" , "op" : "copy" , "from" : "/foo" }
83
- ]
107
+ ] ,
108
+ { } ,
109
+ { "foo" : "lulz" , "bar" : "lulz" }
84
110
)
85
111
// add - test
86
112
test (
91
117
[
92
118
{ "path" : "/foo" , "op" : "add" , "value" : "lulz" } ,
93
119
{ "path" : "/foo" , "op" : "test" , "value" : "lulz" }
94
- ]
120
+ ] ,
121
+ { } ,
122
+ { "foo" : "lulz" }
95
123
)
96
124
97
125
/*
@@ -105,7 +133,9 @@ test(
105
133
] ,
106
134
[
107
135
{ "path" : "/foo" , "op" : "add" , "value" : "bar" }
108
- ]
136
+ ] ,
137
+ { "foo" : "lulz" } ,
138
+ { "foo" : "bar" }
109
139
)
110
140
// // remove - remove // FIXME invalid patch ...
111
141
// test(
@@ -137,7 +167,9 @@ test(
137
167
] ,
138
168
[
139
169
{ "path" : "/foo" , "op" : "move" , "from" : "/bar" }
140
- ]
170
+ ] ,
171
+ { "foo" : "cat" , "bar" : "dog" } ,
172
+ { "foo" : "dog" }
141
173
)
142
174
// // remove - move from // FIXME invalid patch
143
175
// test(
@@ -157,7 +189,9 @@ test(
157
189
] ,
158
190
[
159
191
{ "path" : "/foo" , "op" : "copy" , "from" : "/bar" }
160
- ]
192
+ ] ,
193
+ { "foo" : "turtle" , "bar" : "dog" } ,
194
+ { "foo" : "dog" , "bar" : "dog" }
161
195
)
162
196
// // remove - copy from // FIXME invalid patch
163
197
// test(
@@ -193,15 +227,21 @@ test(
193
227
] ,
194
228
[
195
229
{ "path" : "/foo" , "op" : "add" , "value" : "bar" }
196
- ]
230
+ ] ,
231
+ { "foo" : "cat" } ,
232
+ { "foo" : "bar" }
197
233
)
198
- // replace - remove
234
+ // replace - remove // FIXAAAAAAAAAAA
199
235
test (
200
236
[
201
237
{ "path" : "/foo" , "op" : "replace" , "value" : "lulz" } ,
202
238
{ "path" : "/foo" , "op" : "remove" }
203
239
] ,
204
- [ ]
240
+ [
241
+ { "path" : "/foo" , "op" : "remove" }
242
+ ] ,
243
+ { "foo" : "cat" } ,
244
+ { }
205
245
)
206
246
// replace - replace
207
247
test (
0 commit comments