@@ -218,9 +218,13 @@ declare function helper:assert-at-least-one-equal($expected as item()*, $actual
218218
219219declare private function helper:are-these-equal ($expected as item ()*, $actual as item ()*) {
220220 if (fn:count ($expected) eq fn:count ($actual)) then
221- fn:count ((for $item at $i in $expected
222- return
223- fn:deep-equal ($item, $actual[$i]))[. = fn:true ()]) eq fn:count ($expected)
221+ if ($expected instance of json:array and $actual instance of json:array ) then
222+ helper:assert-equal-json-recursive ($expected, $actual)
223+ else
224+ fn:count ((
225+ for $item at $i in $expected
226+ return
227+ fn:deep-equal ($item, $actual[$i]))[. = fn:true ()]) eq fn:count ($expected)
224228 else
225229 fn:false ()
226230};
@@ -303,12 +307,55 @@ declare function helper:assert-equal-xml($expected, $actual) {
303307 helper:assert-true (fn:false (), ("unsupported type in $actual : " , xdmp:path ($actual)))
304308};
305309
306- declare function helper:assert-equal-json ($expected as map:map, $actual as map:map) {
307- let $equal := helper:assert-equal-json-recursive ($expected, $actual)
308- return
309- if ($equal) then helper:success ()
310+ declare function helper:assert-equal-json ($expected, $actual) {
311+ if ($expected instance of object-node ()*) then
312+ if ($actual instance of object-node ()*) then
313+ if (fn:count ($expected) = fn:count ($actual)) then
314+ if (helper:assert-equal-json-recursive ($expected, $actual)) then
315+ helper:success ()
316+ else
317+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed" , ($expected, $actual))
318+ else
319+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed (different counts of objects)" , ($expected, $actual))
310320 else
311- fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed" , ($expected, $actual))
321+ (: $actual is not object-node()* :)
322+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed ($actual does not consist of objects)" , ($expected, $actual))
323+ else if ($expected instance of map:map*) then
324+ if ($actual instance of map:map*) then
325+ if (fn:count ($expected) = fn:count ($actual)) then
326+ if (helper:assert-equal-json-recursive ($expected, $actual)) then
327+ helper:success ()
328+ else
329+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed" , ($expected, $actual))
330+ else
331+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed (different counts of objects)" , ($expected, $actual))
332+ else
333+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed ($actual does not consist of objects)" , ($expected, $actual))
334+ else if ($expected instance of array-node ()*) then
335+ if ($actual instance of array-node ()*) then
336+ if (fn:count ($expected) = fn:count ($actual)) then
337+ if (helper:assert-equal-json-recursive ($expected, $actual)) then
338+ helper:success ()
339+ else
340+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed" , ($expected, $actual))
341+ else
342+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed (different counts of arrays)" , ($expected, $actual))
343+ else
344+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed ($actual does not consist of arrays)" , ($expected, $actual))
345+ else if ($expected instance of document-node ()) then
346+ if ($actual instance of document-node ()) then
347+ if (fn:count ($expected) = fn:count ($actual)) then
348+ if (helper:assert-equal-json-recursive ($expected/node (), $actual/node ())) then
349+ helper:success ()
350+ else
351+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed (documents not equal)" , ($expected, $actual))
352+ else
353+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed (different counts of documents)" , ($expected, $actual))
354+ else
355+ fn:error (xs:QName ("ASSERT-EQUAL-JSON-FAILED" ), "Assert Equal Json failed ($actual is not a document)" , ($expected, $actual))
356+ else
357+ (: scalar values :)
358+ helper:assert-equal ($expected, $actual)
312359};
313360
314361declare function helper:assert-equal-json-recursive ($object1, $object2) as xs:boolean
@@ -335,6 +382,19 @@ declare function helper:assert-equal-json-recursive($object1, $object2) as xs:bo
335382 helper:assert-equal-json-recursive ($item, $o2[$i])
336383 return
337384 $counts-equal and fn:not ($items-equal = fn:false ())
385+ case object-node () return
386+ let $m1 := fn:data ($object1)
387+ let $m2 := fn:data ($object2)
388+ let $k1 := map:keys ($m1)
389+ let $k2 := map:keys ($m2)
390+ let $counts-equal := fn:count ($k1) eq fn:count ($k2)
391+ let $maps-equal :=
392+ for $key in map:keys ($m1)
393+ let $v1 := map:get ($m1, $key)
394+ let $v2 := map:get ($m2, $key)
395+ return
396+ helper:assert-equal-json-recursive ($v1, $v2)
397+ return $counts-equal and fn:not ($maps-equal = fn:false ())
338398 default return
339399 $object1 = $object2
340400};
0 commit comments