@@ -19,6 +19,7 @@ var squash = module.exports = function squash(patch) {
19
19
// if current op overrides previous operations, remove them
20
20
if ( [ 'add' , 'replace' , 'remove' , 'move' , 'copy' ] . indexOf ( op . op ) !== - 1 ) {
21
21
squashed . forEach ( function ( prev , idx ) {
22
+ if ( prev . op === 'test' ) return
22
23
if ( prev . path === op . path ) { // same path - FIXME children/parents ?
23
24
if ( wasModified ( squashed , op . path ) ) {
24
25
squashed [ idx ] = undefined
@@ -103,17 +104,17 @@ equal(
103
104
{ "path" : "/foo" , "op" : "move" , "from" : "/bar" }
104
105
]
105
106
)
106
- // // add - move from // FIXME
107
- // equal(
108
- // [
109
- // {"path": "/foo", "op": "add", "value": "foo"},
110
- // {"path": "/bar", "op": "move", "from": "/foo"}
111
- // ],
112
- // [
113
- // {"path": "/foo", "op": "add", "value": "foo"},
114
- // {"path": "/bar", "op": "move", "from": "/foo"}
115
- // ],
116
- // )
107
+ // // add - move from // FIXME this could resolve to [{"op": "add", "path": "/bar", "value": "foo"}]
108
+ equal (
109
+ [
110
+ { "path" : "/foo" , "op" : "add" , "value" : "foo" } ,
111
+ { "path" : "/bar" , "op" : "move" , "from" : "/foo" }
112
+ ] ,
113
+ [
114
+ { "path" : "/foo" , "op" : "add" , "value" : "foo" } ,
115
+ { "path" : "/bar" , "op" : "move" , "from" : "/foo" }
116
+ ]
117
+ )
117
118
// add - copy to
118
119
equal (
119
120
[
@@ -135,6 +136,17 @@ equal(
135
136
{ "path" : "/bar" , "op" : "copy" , "from" : "/foo" }
136
137
]
137
138
)
139
+ // add - test
140
+ equal (
141
+ [
142
+ { "path" : "/foo" , "op" : "add" , "value" : "foo" } ,
143
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
144
+ ] ,
145
+ [
146
+ { "path" : "/foo" , "op" : "add" , "value" : "foo" } ,
147
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
148
+ ]
149
+ )
138
150
139
151
/*
140
152
* remove
@@ -212,6 +224,17 @@ equal(
212
224
// {"path": "/bar", "op": "copy", "from": "/foo"}
213
225
// ]
214
226
// )
227
+ // remove - test // FIXME invalid patch
228
+ equal (
229
+ [
230
+ { "path" : "/foo" , "op" : "remove" } ,
231
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
232
+ ] ,
233
+ [
234
+ { "path" : "/foo" , "op" : "remove" } ,
235
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
236
+ ]
237
+ )
215
238
216
239
217
240
/*
@@ -255,16 +278,6 @@ equal(
255
278
{ "path" : "/foo" , "op" : "move" , "from" : "/bar" }
256
279
]
257
280
)
258
- // replace - move to
259
- equal (
260
- [
261
- { "path" : "/foo" , "op" : "replace" , "value" : "foo" } ,
262
- { "path" : "/foo" , "op" : "move" , "from" : "/bar" }
263
- ] ,
264
- [
265
- { "path" : "/foo" , "op" : "move" , "from" : "/bar" }
266
- ]
267
- )
268
281
// replace - move from
269
282
equal (
270
283
[
@@ -297,7 +310,17 @@ equal(
297
310
{ "path" : "/bar" , "op" : "copy" , "from" : "/foo" }
298
311
]
299
312
)
300
-
313
+ // replace - test
314
+ equal (
315
+ [
316
+ { "path" : "/foo" , "op" : "replace" , "value" : "foo" } ,
317
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
318
+ ] ,
319
+ [
320
+ { "path" : "/foo" , "op" : "replace" , "value" : "foo" } ,
321
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
322
+ ]
323
+ )
301
324
302
325
/*
303
326
* move // FIXME maybe add move from/to for each
@@ -340,16 +363,6 @@ equal(
340
363
{ "path" : "/foo" , "op" : "move" , "from" : "/bar" }
341
364
]
342
365
)
343
- // move - move to
344
- equal (
345
- [
346
- { "path" : "/foo" , "op" : "move" , "from" : "/bar" } ,
347
- { "path" : "/foo" , "op" : "move" , "from" : "/bar" }
348
- ] ,
349
- [
350
- { "path" : "/foo" , "op" : "move" , "from" : "/bar" }
351
- ]
352
- )
353
366
// move - move from // FIXME this could resolve to [] but that's a pretty edge case
354
367
equal (
355
368
[
@@ -382,6 +395,17 @@ equal(
382
395
{ "path" : "/bar" , "op" : "copy" , "from" : "/foo" }
383
396
]
384
397
)
398
+ // move - test
399
+ equal (
400
+ [
401
+ { "path" : "/foo" , "op" : "move" , "from" : "/bar" } ,
402
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
403
+ ] ,
404
+ [
405
+ { "path" : "/foo" , "op" : "move" , "from" : "/bar" } ,
406
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
407
+ ]
408
+ )
385
409
386
410
387
411
/*
@@ -457,3 +481,107 @@ equal(
457
481
{ "path" : "/bar" , "op" : "copy" , "from" : "/foo" }
458
482
]
459
483
)
484
+ // copy - test
485
+ equal (
486
+ [
487
+ { "path" : "/foo" , "op" : "copy" , "from" : "/bar" } ,
488
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
489
+ ] ,
490
+ [
491
+ { "path" : "/foo" , "op" : "copy" , "from" : "/bar" } ,
492
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
493
+ ]
494
+ )
495
+
496
+
497
+ /*
498
+ * test
499
+ */
500
+ // test - add
501
+ equal (
502
+ [
503
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
504
+ { "path" : "/foo" , "op" : "add" , "value" : "bar" }
505
+ ] ,
506
+ [
507
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
508
+ { "path" : "/foo" , "op" : "add" , "value" : "bar" }
509
+ ]
510
+ )
511
+ // test - remove
512
+ equal (
513
+ [
514
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
515
+ { "path" : "/foo" , "op" : "remove" }
516
+ ] ,
517
+ [
518
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
519
+ { "path" : "/foo" , "op" : "remove" }
520
+ ]
521
+ )
522
+ // test - replace
523
+ equal (
524
+ [
525
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
526
+ { "path" : "/foo" , "op" : "replace" , "value" : "bar" }
527
+ ] ,
528
+ [
529
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
530
+ { "path" : "/foo" , "op" : "replace" , "value" : "bar" }
531
+ ]
532
+ )
533
+ // test - move to
534
+ equal (
535
+ [
536
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
537
+ { "path" : "/foo" , "op" : "move" , "from" : "/bar" }
538
+ ] ,
539
+ [
540
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
541
+ { "path" : "/foo" , "op" : "move" , "from" : "/bar" }
542
+ ]
543
+ )
544
+ // test - move from
545
+ equal (
546
+ [
547
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
548
+ { "path" : "/bar" , "op" : "move" , "from" : "/foo" }
549
+ ] ,
550
+ [
551
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
552
+ { "path" : "/bar" , "op" : "move" , "from" : "/foo" }
553
+ ]
554
+ )
555
+ // test - copy to
556
+ equal (
557
+ [
558
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
559
+ { "path" : "/foo" , "op" : "copy" , "from" : "/bar" }
560
+ ] ,
561
+ [
562
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
563
+ { "path" : "/foo" , "op" : "copy" , "from" : "/bar" }
564
+ ]
565
+ )
566
+ // test - copy from
567
+ equal (
568
+ [
569
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
570
+ { "path" : "/bar" , "op" : "copy" , "from" : "/foo" }
571
+ ] ,
572
+ [
573
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
574
+ { "path" : "/bar" , "op" : "copy" , "from" : "/foo" }
575
+ ]
576
+ )
577
+ // test - test
578
+ equal (
579
+ [
580
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
581
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
582
+ ] ,
583
+ [
584
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" } ,
585
+ { "path" : "/foo" , "op" : "test" , "value" : "foo" }
586
+ ]
587
+ )
0 commit comments