Skip to content

Commit a6d54d6

Browse files
joewizadamretter
authored andcommitted
Merge pull request eXist-db#4816 from line-o/xqsuite/arg-types
[enhancement] allow more types in XQSuite
2 parents 2afa43d + 65a19a3 commit a6d54d6

File tree

2 files changed

+260
-100
lines changed

2 files changed

+260
-100
lines changed

exist-core/src/main/resources/org/exist/xquery/lib/xqsuite/xqsuite.xql

Lines changed: 78 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -580,82 +580,58 @@ declare %private function test:xdm-value-from-annotation-value($annotation-value
580580
)
581581
};
582582

583-
declare %private function test:cast($targs as element(value)*, $farg as element(argument)) {
584-
for $targ in $targs
585-
let $varg := test:xdm-value-from-annotation-value($targ)
583+
declare %private function test:cast(
584+
$annotation-arg-values as element(value)*,
585+
$function-argument as element(argument)
586+
) {
587+
for $annotation-arg-value in $annotation-arg-values
588+
let $literal-value := test:xdm-value-from-annotation-value($annotation-arg-value)
586589
return
587-
switch (string($farg/@type))
588-
case "xs:string"
589-
return
590-
if ($varg instance of xs:string)
591-
then
592-
$varg
593-
else
594-
string($varg)
595-
596-
case "xs:integer"
597-
return
598-
if ($varg instance of xs:integer)
599-
then
600-
$varg
601-
else
602-
xs:integer($varg)
603-
604-
case "xs:int"
605-
return
606-
xs:int($varg)
607-
608-
case "xs:decimal"
609-
return
610-
if ($varg instance of xs:decimal)
611-
then
612-
$varg
613-
else
614-
xs:decimal($varg)
615-
616-
case "xs:float"
617-
return
618-
xs:float($varg)
619-
620-
case "xs:double"
621-
return
622-
if ($varg instance of xs:decimal)
623-
then
624-
$varg
625-
else
626-
xs:double($varg)
627-
628-
case "xs:date"
629-
return
630-
xs:date($varg)
631-
632-
case "xs:dateTimeStamp"
633-
return
634-
xs:dateTimeStamp($varg)
635-
636-
case "xs:dateTime"
637-
return
638-
xs:dateTime($varg)
639-
640-
case "xs:time"
641-
return
642-
xs:time($varg)
643-
644-
case "element()"
645-
return
646-
fn:parse-xml($varg)/element()
647-
648-
case "text()"
649-
return
650-
if ($varg instance of xs:string)
651-
then
652-
text { $varg }
653-
else
654-
text { xs:string($varg) }
655-
656-
default
657-
return
658-
$varg
590+
switch (string($function-argument/@type))
591+
case "xs:string" return
592+
if ($literal-value instance of xs:string)
593+
then $literal-value
594+
else xs:string($literal-value)
595+
596+
case "xs:integer" return
597+
if ($literal-value instance of xs:integer)
598+
then $literal-value
599+
else xs:integer($literal-value)
600+
601+
case "xs:decimal" return
602+
if ($literal-value instance of xs:decimal)
603+
then $literal-value
604+
else xs:decimal($literal-value)
605+
606+
case "xs:double" return
607+
if ($literal-value instance of xs:double)
608+
then $literal-value
609+
else xs:double($literal-value)
610+
611+
case "xs:boolean" return xs:boolean($literal-value)
612+
case "xs:anyURI" return xs:anyURI($literal-value)
613+
614+
case "xs:NCName" return xs:NCName($literal-value)
615+
case "xs:QName" return xs:QName($literal-value)
616+
617+
case "xs:numeric" return xs:numeric($literal-value)
618+
case "xs:int" return xs:int($literal-value)
619+
case "xs:positiveInteger" return xs:positiveInteger($literal-value)
620+
case "xs:negativeInteger" return xs:negativeInteger($literal-value)
621+
case "xs:float" return xs:float($literal-value)
622+
623+
case "xs:time" return xs:time($literal-value)
624+
case "xs:date" return xs:date($literal-value)
625+
case "xs:dateTime" return xs:dateTime($literal-value)
626+
case "xs:dateTimeStamp" return xs:dateTimeStamp($literal-value)
627+
628+
case "xs:duration" return xs:duration($literal-value)
629+
case "xs:yearMonthDuration" return xs:yearMonthDuration($literal-value)
630+
case "xs:dayTimeDuration" return xs:dayTimeDuration($literal-value)
631+
632+
case "text()" return text { $literal-value }
633+
case "element()" return parse-xml($literal-value)/element()
634+
default return $literal-value
659635
};
660636

661637
declare function test:apply($func as function(*), $meta as element(function), $args as item()*) {
@@ -1005,30 +981,33 @@ declare %private function test:cast-to-type($value as item(), $result as item())
1005981
typeswitch ($result)
1006982
case node() return
1007983
parse-xml("<r>" || $value || "</r>")/r/node()
1008-
case xs:integer return
1009-
xs:integer($value)
1010-
case xs:int return
1011-
xs:int($value)
1012-
case xs:long return
1013-
xs:long($value)
1014-
case xs:decimal return
1015-
xs:decimal($value)
1016-
case xs:double return
1017-
xs:double($value)
1018-
case xs:float return
1019-
xs:float($value)
1020-
case xs:date return
1021-
xs:date($value)
1022-
case xs:dateTime return
1023-
xs:dateTime($value)
1024-
case xs:time return
1025-
xs:time($value)
1026-
case xs:boolean return
1027-
xs:boolean($value)
1028-
case xs:anyURI return
1029-
xs:anyURI($value)
1030-
default return
1031-
string($value)
984+
985+
case xs:integer return xs:integer($value)
986+
case xs:positiveInteger return xs:positiveInteger($value)
987+
case xs:negativeInteger return xs:negativeInteger($value)
988+
case xs:int return xs:int($value)
989+
case xs:long return xs:long($value)
990+
case xs:decimal return xs:decimal($value)
991+
case xs:double return xs:double($value)
992+
case xs:float return xs:float($value)
993+
case xs:numeric return xs:numeric($value)
994+
995+
case xs:date return xs:date($value)
996+
case xs:dateTime return xs:dateTime($value)
997+
case xs:time return xs:time($value)
998+
999+
case xs:duration return xs:duration($value)
1000+
case xs:yearMonthDuration return xs:yearMonthDuration($value)
1001+
case xs:dayTimeDuration return xs:dayTimeDuration($value)
1002+
1003+
case xs:boolean return xs:boolean($value)
1004+
1005+
case xs:anyURI return xs:anyURI($value)
1006+
1007+
case xs:NCName return xs:NCName($value)
1008+
case xs:QName return xs:QName($value)
1009+
1010+
default return string($value)
10321011
};
10331012

10341013
(: Helper functions to be used by test modules :)

exist-core/src/test/xquery/xqsuite/xqsuite-tests.xql

Lines changed: 182 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,185 @@ declare
6464
%test:assertXPath("string-length($result) = 5")
6565
function t:xpath-atomic-value() {
6666
"Hello"
67-
};
67+
};
68+
69+
declare
70+
%test:args("-0")
71+
%test:assertEquals("-0")
72+
%test:args(0)
73+
%test:assertEquals(0)
74+
%test:args(0.0)
75+
%test:assertEquals(0.0)
76+
%test:args(0e0)
77+
%test:assertEquals(0e0)
78+
function t:args-assert-item($arg) {
79+
$arg
80+
};
81+
82+
declare
83+
%test:args("-0")
84+
%test:assertEquals("-0")
85+
%test:args(0)
86+
%test:assertEquals(0)
87+
%test:args(0.0)
88+
%test:assertEquals(0.0)
89+
%test:args(0e0)
90+
%test:assertEquals(0e0)
91+
function t:args-assert-numeric($arg as xs:numeric) as xs:numeric {
92+
$arg
93+
};
94+
95+
declare
96+
%test:args("-0")
97+
%test:assertEquals("-0")
98+
%test:args(0)
99+
%test:assertEquals(0)
100+
%test:args(0.0)
101+
%test:assertEquals(0.0)
102+
%test:args(0e0)
103+
%test:assertEquals(0e0)
104+
function t:args-assert-double($arg as xs:double) as xs:double {
105+
$arg
106+
};
107+
108+
declare
109+
%test:args("-0")
110+
%test:assertEquals("-0")
111+
%test:args(0)
112+
%test:assertEquals(0)
113+
%test:args(0.0)
114+
%test:assertEquals(0.0)
115+
%test:args(0e0)
116+
%test:assertEquals(0e0)
117+
function t:args-assert-integer($arg as xs:integer) as xs:integer {
118+
$arg
119+
};
120+
121+
declare
122+
%test:args("-1")
123+
%test:assertEquals("-1")
124+
function t:args-assert-negative-integer($arg as xs:negativeInteger) as xs:negativeInteger {
125+
$arg
126+
};
127+
128+
declare
129+
%test:args(1)
130+
%test:assertEquals(1)
131+
function t:args-assert-positive-integer($arg as xs:positiveInteger) as xs:positiveInteger {
132+
$arg
133+
};
134+
135+
declare
136+
%test:args("true")
137+
%test:assertTrue
138+
%test:args("false")
139+
%test:assertFalse
140+
%test:args("true")
141+
%test:assertEquals("true")
142+
%test:args("false")
143+
%test:assertEquals("false")
144+
%test:args("1")
145+
%test:assertEquals("true")
146+
%test:args("0")
147+
%test:assertEquals("false")
148+
%test:args("1")
149+
%test:assertTrue
150+
%test:args("0")
151+
%test:assertFalse
152+
%test:args(1)
153+
%test:assertTrue
154+
%test:args(0)
155+
%test:assertFalse
156+
function t:args-assert-boolean($arg as xs:boolean) as xs:boolean {
157+
$arg
158+
};
159+
160+
declare
161+
%test:args("uri/like")
162+
%test:assertEquals("uri/like")
163+
function t:args-assert-anyURI($arg as xs:anyURI) as xs:anyURI {
164+
$arg
165+
};
166+
167+
declare
168+
%test:args("asdf")
169+
%test:assertEquals("asdf")
170+
function t:args-assert-ncname($arg as xs:NCName) as xs:NCName {
171+
$arg
172+
};
173+
174+
declare
175+
%test:args("test:asdf")
176+
%test:assertEquals("test:asdf")
177+
function t:args-assert-qname($arg as xs:QName) as xs:QName {
178+
$arg
179+
};
180+
181+
declare
182+
%test:args("2001-01-01")
183+
%test:assertEquals("2001-01-01")
184+
function t:args-assert-date($arg as xs:date) as xs:date {
185+
$arg
186+
};
187+
188+
declare
189+
%test:args("00:00:00.000")
190+
%test:assertEquals("00:00:00.000")
191+
function t:args-assert-time($arg as xs:time) as xs:time {
192+
$arg
193+
};
194+
195+
declare
196+
%test:args("2001-01-01T01:01:01.001")
197+
%test:assertEquals("2001-01-01T01:01:01.001")
198+
function t:args-assert-dateTime($arg as xs:dateTime) as xs:dateTime {
199+
$arg
200+
};
201+
202+
declare
203+
%test:args("2001-01-01T01:01:01.001Z")
204+
%test:assertEquals("2001-01-01T01:01:01.001Z")
205+
function t:args-assert-dateTimeStamp($arg as xs:dateTimeStamp) as xs:dateTimeStamp {
206+
$arg
207+
};
208+
209+
declare
210+
%test:args("P1Y1M1DT1H")
211+
%test:assertEquals("P1Y1M1DT1H")
212+
function t:args-assert-duration($arg as xs:duration) as xs:duration {
213+
$arg
214+
};
215+
216+
declare
217+
%test:args("P1Y1M")
218+
%test:assertEquals("P1Y1M")
219+
function t:args-assert-yearMonthDuration($arg as xs:yearMonthDuration) as xs:yearMonthDuration {
220+
$arg
221+
};
222+
223+
declare
224+
%test:args("P1DT1H")
225+
%test:assertEquals("P1DT1H")
226+
function t:args-assert-dayTimeDuration($arg as xs:dayTimeDuration) as xs:dayTimeDuration {
227+
$arg
228+
};
229+
230+
declare
231+
%test:args("-0")
232+
%test:assertEquals("-0")
233+
%test:args(0)
234+
%test:assertEquals(0)
235+
%test:args(0.0)
236+
%test:assertEquals(0.0)
237+
%test:args(0e0)
238+
%test:assertEquals(0e0)
239+
function t:args-assert-text($arg as text()) as text() {
240+
$arg
241+
};
242+
243+
declare
244+
%test:args("<test />")
245+
%test:assertEquals("<test />")
246+
function t:args-assert-element($arg as element()) as element() {
247+
$arg
248+
};

0 commit comments

Comments
 (0)