@@ -363,7 +363,15 @@ declare function helper:assert-equal-json-recursive($object1, $object2) as xs:bo
363363 typeswitch ($object1)
364364 case map:map return
365365 let $k1 := map:keys ($object1)
366- let $k2 := map:keys ($object2)
366+ let $k2 :=
367+ if ($object2 instance of map:map) then
368+ map:keys ($object2)
369+ else
370+ fn:error (
371+ xs:QName ("ASSERT-EQUAL-JSON-FAILED" ),
372+ "Assert Equal Json failed: comparing map to non-map" ,
373+ ($object1, $object2)
374+ )
367375 let $counts-equal := fn:count ($k1) eq fn:count ($k2)
368376 let $maps-equal :=
369377 for $key in map:keys ($object1)
@@ -376,15 +384,31 @@ declare function helper:assert-equal-json-recursive($object1, $object2) as xs:bo
376384 let $counts-equal := fn:count ($object1) = fn:count ($object2)
377385 let $items-equal :=
378386 let $o1 := json:array-values ($object1)
379- let $o2 := json:array-values ($object2)
387+ let $o2 :=
388+ if ($object2 instance of json:array ) then
389+ json:array-values ($object2)
390+ else
391+ fn:error (
392+ xs:QName ("ASSERT-EQUAL-JSON-FAILED" ),
393+ "Assert Equal JSON failed: comparing json:array to non-array" ,
394+ ($object1, $object2)
395+ )
380396 for $item at $i in $o1
381397 return
382398 helper:assert-equal-json-recursive ($item, $o2[$i])
383399 return
384400 $counts-equal and fn:not ($items-equal = fn:false ())
385401 case object-node () return
386402 let $m1 := fn:data ($object1)
387- let $m2 := fn:data ($object2)
403+ let $m2 :=
404+ if ($object2 instance of object-node ()) then
405+ fn:data ($object2)
406+ else
407+ fn:error (
408+ xs:QName ("ASSERT-EQUAL-JSON-FAILED" ),
409+ "Assert Equal JSON failed: comparing object-node to non-object-node" ,
410+ ($object1, $object2)
411+ )
388412 let $k1 := map:keys ($m1)
389413 let $k2 := map:keys ($m2)
390414 let $counts-equal := fn:count ($k1) eq fn:count ($k2)
@@ -657,3 +681,19 @@ declare function helper:remove-modules-directories($dirs as xs:string*)
657681 </options>)
658682 else ()
659683};
684+
685+ (: unquote text and get the actual doc content, but without tabs and newlines. convenience function. :)
686+ declare function helper:unquote ($doc-text as xs:string)
687+ as document-node ()
688+ {
689+ let $doc := fn:head (xdmp:unquote ($doc-text))
690+ return helper:strip-blanks ($doc)
691+ };
692+
693+ declare function helper:strip-blanks ($n as node ()) {
694+ typeswitch ($n)
695+ case document-node () return document {$n/node () ! helper:strip-blanks (.)}
696+ case element () return element {node-name ($n)} {$n/@*, $n/node () ! helper:strip-blanks (.)}
697+ case text () return if (fn:normalize-space ($n) eq '' ) then () else $n
698+ default return $n
699+ };
0 commit comments