JFIF $ d d 7 * Z qn )ZP 0 !1 A "#a$2Qr D8 a Ri [f \m I ykI w0 c u F c Rı?lO7 к _f˓ [C $殷WF< _W ԣ s Kc ëI zyQy /_LK ℂ ;C",p F A : /] =H ~ , l s / 9 ć: [=/#f ; ) x { ٛE Q )~ = 𘙲r*2~ a _V = ' ku m F D } KYYC )( { * g& f `툪 r y ` = ^ c J. I ]( * `wq 1dđ #̩ ͑ 0 ; H ] u 搂 @:~ ו K L N s h } O I R* 8 :2 ! lD JV o ( 3 = M ( z Ȱ+i *N A r6K n S l ) ! J J Ӂ* % ݉?|D } d5: eP0 R; {$X' x F @ .ÊB {,WJ uQ ɲRI ;9 Q E琯 6 2fT .DU J ;*c P A\IL Nj! J ۱+ O\ ͔ ] ޒ S J ȧ c%A N ol ՎprU L Zԛe r E2= X D Xg VQeӓ k y P7 U* o m Q I s ,K `) 6\G3t?pgjr m ۛجw luGt f h 9uyP 0D;Uڽ"OXl i f $ ) &|ML 0 Z rm1 [ H XP l P R0 'G=i 2N +0 e 2 ]] 9 VT P O 7 h(F * 癈 ' = Q VZD F,d ߬ ~ T X G[ `le 69C R(!S2! P < 0 x < !1AQ "Raq 02Br #S CTb ? Ζ "]mH5WR 7 k.ۛ ! } Q~ + yԏ z |@ T20 S~ K e k *zF f^2X *( @ 8 r ? C I uI|֓>^Ex LgNU Y+{.R Ѫ τV YT D I 6 2 '8Y2 7'\T P.6 d &˦ @V q i |8 -O Ε ] ʔ U= T L 8= ;6c | !qfF3 a ů& ~$ l} 'NW U s$U k^S V : U#6w + +s &r+n ڐ { @ 29gL u " T Ù M=6 (^ "7 r}=6Yݾ lC u hquymp Ǧ G jhs ǜNl ɻ} o 7 #S6 a w 4 ! OS r D 5 7 % | ?x> L | / nD 6?/8 w # [ ) L 7 +6〼T A T g ! %5 Mm Z /c -{1_Je "| ^$ 'O & ޱմ < H vNqϡQ$ < 6 &Nݛ ֨tǻN (9 n ru~'όN sMG& ,uH Kw *Ī 5@ u6 BԒ i YN * f 0 _ GhKW u lT <nj- 0{ M L~ | /a v\ E = ?1 \ɟuq Ђ Y O a K ޡP q $ H8o Q˼EV ~ k 0 h' L Pp M -M" m^ !6l nմ 쮝C U T . ! :vMǨb h ډ Vc r @~p # !1QAa q ? AL0L x LU 4 d ; x " 16ad0 7.\ߋ 0 = P l v/ " c A Ay A|2pO8"d MV #1] = \ " ˡ ] k v I9 d ۓ & q ) ǐq E ꞅ v "P )q X &Q З non]я u ג./ ; gZ$ M QР 2M ]h ni 0 P $ێ 3CɏGjώy : m c # S_ l@ '_ \m|C 2`K _ 1 cIvGc $? PCQ S+D ? K aײ k Fr b 8 ύ NEدg ĝ U 3 6 #Ik+ v { v i ( ވ ? a e) X xy/*@Q Ǽ Ծ ) $ IWO l c G; !i k{ gOŀ L ('x T rb $ w) R $ & N1E td U3Uȉ1p M"N* (DNy d96.(jQ) X 5 c QɎMy W ? Q *!R > 6=7)Xj 5`J ] e 8%t ! + ' ! 1Q 5 !1 AQaq ё #2 "0BRb ? G t^ ## .l lQ T $ v , ,m 㵜5u bV =sY+ @d { N ! dn O < .- B; _w J t 6;Q Jd. Q c%p{ 1 ,sND dF H I0 Гo X ш e黅X ۢ F :)[ F G X ƹ / w _c MeD ,ʡc c . W D tA $ j@ : ) - #u c1< @ۗ9F ) KJ- hpP] _ x [ q B lb p ʖ w q " LFGd ƶ * s +ډ_Zc " ? % t[I P 6 J ]# =ɺ V v v CGs Gh1 > )6 |e y ? L ӣ m,4 G W Ui ` ] uJVo VDG< SB 6ϏQ @ TiU l y O U 0 kfV ~ ~}S Z @ *WU Ui ## ; s /[ = ! 7}" W N ] ' (L ! ~ y5 g9T̅J kbM' +s :S +B) v @ M j e C f j E 0 Y\Qn z G 1 д~ W o{T 9?` Rm yhsy3 !HAD ] m c1 ~ 2 L S u7x T ;j$ `} 4-> L# vzŏ I L S ֭ T { r jGK C ; b pU= - ` Bs K. S F w4 M q] Z dH S 0 ) tLg
[
{ "comment": "blur arrays and objects",
"doc": { "foo": 1 },
"patch": [ { "op": "add", "path": "/1", "value": 2 } ],
"expected": { "foo": 1, "1": 2 } },
{ "comment": "Adding to \"/-\" adds to the end of the array",
"doc": [ 1, 2 ],
"patch": [ { "op": "add", "path": "/-", "value": 3 } ],
"expected": [ 1, 2, 3 ] },
{ "comment": "value in array append not flattened",
"doc": [1, 2],
"patch": [{"op": "add", "path": "/-", "value": [3]}],
"expected": [1, 2, [3]] },
{ "comment": "move target can use '-'",
"doc": {"to":[ 1, 2 ], "from": 3},
"patch": [{"op": "move", "from":"/from", "path": "/to/-"}],
"expected": {"to":[ 1, 2, 3 ]}},
{ "comment": "copy target can use '-'",
"doc": {"to":[1, 2], "from": 3},
"patch": [{"op": "copy", "from": "/from", "path": "/to/-"}],
"expected": { "to":[ 1, 2, 3 ], "from": 3 } },
{ "comment": "replace target must exist",
"doc": {"foo": "bar"},
"patch": [{"op": "replace", "path": "/baz", "value": "sil"}],
"error": "replace target '/baz' not set" },
{ "comment": "- as remove target not allowed",
"doc": [1, 2],
"patch": [{"op": "remove", "path": "/-"}],
"error": "Non-array key '-' used on array" },
{ "comment": "remove of numeric index from obj doesn't convert to array",
"doc": {"foo": 1, "0":2, "bar":3},
"patch": [{"op": "remove", "path":"/0"}],
"expected": {"foo":1, "bar":3} },
{ "comment": "- as remove target for obj isn't special",
"doc": {"-": 1, "foo": 2},
"patch": [{"op": "remove", "path": "/-"}],
"expected": {"foo": 2} },
{ "comment": "toplevel as remove target",
"doc": [1],
"patch": [{"op": "remove", "path": ""}],
"error": "Can't remove whole document" },
{ "comment": "Ok to have doc as toplevel string?",
"doc": 1,
"patch": [{"op": "replace", "path": "", "value": "bar"}],
"expected": "bar" },
{ "comment": "Ok to have doc as toplevel number?",
"doc": 1,
"patch": [{"op": "replace", "path": "", "value": 1}],
"expected": 1 },
{ "comment": "Ok to have result doc as toplevel string?",
"doc": [ 1 ],
"patch": [{"op": "replace", "path": "", "value": "bar"}],
"expected": "bar" },
{ "comment": "'add' should replace existing member if it already exists",
"doc": { "foo": 1 },
"patch": [{"op": "add", "path": "/foo", "value": 2}],
"expected": { "foo": 2 } },
{ "comment": "test op with string at toplevel",
"doc": "foo",
"patch": [{"op": "test", "path":"", "value": "foo"}] },
{ "comment": "test op with number at toplevel",
"doc": 1,
"patch": [{"op": "test", "path":"", "value": 1}] },
{ "comment": "test op with false at toplevel",
"doc": false,
"patch": [{"op": "test", "path":"", "value": false}] },
{ "comment": "test op with true at toplevel",
"doc": true,
"patch": [{"op": "test", "path":"", "value": true}] },
{ "comment": "test op with null at toplevel",
"doc": null,
"patch": [{"op": "test", "path":"", "value": null}] },
{ "comment": "test null != false",
"doc": null,
"patch": [{"op": "test", "path":"", "value": false}],
"error": "expected false value not found" },
{ "comment": "test false != null",
"doc": false,
"patch": [{"op": "test", "path":"", "value": null}],
"error": "test target value different - expected null, found false" },
{ "comment": "test null != false",
"doc": null,
"patch": [{"op": "test", "path":"", "value": false}],
"error": "test target value different - expected false, found null" },
{ "comment": "test emptystr != false",
"doc": "",
"patch": [{"op": "test", "path":"", "value": false}],
"error": "test target value different - expected false, found \"\"" },
{ "comment": "test false != emptystr",
"doc": false,
"patch": [{"op": "test", "path":"", "value": ""}],
"error": "test target value different - expected \"\", found false" },
{ "comment": "null within string",
"doc": [ "foo\u0000foo" ],
"patch": [{"op":"test", "path":"/0", "value":"foo\u0000foo"}] },
{ "comment": "null string",
"doc": [ "\u0000" ],
"patch": [{"op":"test", "path":"/0", "value":"\u0000"}] },
{ "comment": "null in key",
"doc": { "foo\u0000foo": 1 },
"patch": [{"op":"replace", "path":"/foo\u0000foo", "value":2}],
"expected": { "foo\u0000foo": 2 } },
{ "comment": "null in key - test against prefix",
"doc": { "foo": 1, "foo\u0000foo": 2 },
"patch": [{"op":"test", "path":"/foo\u0000foo", "value":2}] },
{ "comment": "null in key - trailing",
"doc": { "foo": 1, "foo\u0000": 2 },
"patch": [{"op":"test", "path":"/foo\u0000", "value":2}] },
{ "comment": "null as key",
"doc": { "\u0000": 1 },
"patch": [{"op":"replace", "path":"/\u0000", "value":2}],
"expected": { "\u0000": 2 } },
{ "comment": "null as key prefix",
"doc": { "\u0000foo": 1 },
"patch": [{"op":"replace", "path":"/\u0000foo", "value":2}],
"expected": { "\u0000foo": 2 } },
{ "comment": "copy doc onto child",
"doc": { "foo": 1 },
"patch": [{"op":"copy", "from":"", "path":"/bar"}],
"expected": { "foo": 1, "bar": { "foo": 1 }} },
{ "comment": "move doc onto child ('from' must not be proper prefix)",
"doc": { "foo": { "bar": 1 } },
"patch": [{"op":"move", "from":"/foo", "path":"/foo/bar"}],
"error": "path '/foo/bar' not found (already removed)"},
{ "comment": "need bounds check on intermediate path",
"doc": [1, [2]],
"patch": [{"op": "test", "path":"/2/0", "value": 2}],
"error": "path '/2/0' not in target doc" },
{ "comment": "'-' should be legit member for object",
"doc": {"foo": 1},
"patch": [{"op": "add", "path":"/-", "value": 2}],
"expected": {"foo": 1, "-": 2} },
{ "comment": "remove of array-looking element of object",
"doc": {"foo":1, "0":2},
"patch": [{"op":"remove", "path":"/0"}],
"expected": {"foo": 1} },
{ "comment": "replace of array-looking element of object",
"doc": {"foo":1, "0":2},
"patch": [{"op":"replace", "path":"/0", "value":3}],
"expected": {"foo": 1, "0":3} },
{ "comment": "replace string with null (elicits diff error)",
"doc": [""],
"patch": [{"op": "replace", "path": "/0", "value": null}],
"expected": [null] },
{ "comment": "test object sorting for equality if numeric indices exist",
"doc": {"foo":1,"bar":3,"0":2},
"patch": [{"op": "test", "path":"", "value": {"foo":1,"0":2,"bar":3}}] },
{ "comment": "test php-style array element delete - disabled as reverse diff (gappy array from pure array) is impossible in json-patch without borrowing php array semantics",
"doc": {"0":"a", "2":"c"},
"patch": {"op":"add", "path":"/1", "value":"b"},
"expected": {"0":"a", "1":"b", "2":"c"},
"disabled": true
},
{ "comment": "test php-style array element delete - assoc-ish indexes",
"doc": {"0a":"a", "2c":"c"},
"patch": {"op":"add", "path":"/1b", "value":"b"},
"expected": {"0a":"a", "1b":"b", "2c": "c"} },
{ "comment": "Numerically equal must test equal",
"doc": [1.00],
"patch": [{"op": "test", "path":"/0", "value":1}]},
{ "comment": "Numerically equal must test equal",
"doc": [1],
"patch": [{"op": "test", "path":"/0", "value":1.00}]},
{ "comment": "Numerically equal must test equal",
"doc": [1e0],
"patch": [{"op": "test", "path":"/0", "value":1.00}]},
{ "comment": "append",
"doc": [1, 2, 3, 4],
"patch": [{"op": "append", "path": "/-", "value":[5, 6, 7, 8]}],
"expected": [1, 2, 3, 4, 5, 6, 7, 8],
"disabled": true
},
{ "comment": "last" }
]