?? testmisc.java
字號:
package gnu.xquery.testsuite;import gnu.expr.*;import gnu.mapping.*;import gnu.xquery.lang.*;import gnu.text.*;public class TestMisc{ static { XQuery.registerEnvironment(); } static XQuery interp = XQuery.getInstance(); static Environment env = Environment.getCurrent(); static int expectedPasses = 0; static int unexpectedPasses = 0; static int expectedFailures = 0; static int unexpectedFailures = 0; static boolean verbose = false; static String failureExpectedNext = null; public static void main(String[] args) { // gnu.expr.ModuleExp.dumpZipPrefix = "kawa-zip-dump-"; // Compilation.debugPrintExpr = true; // Compilation.debugPrintFinalExpr = true; evalTest("3.5+1", "4.5"); evalTest("3.5+1 ,4*2.5", "4.5 10"); evalTest("3<5", "true"); evalTest("let $x:=3+4 return $x", "7"); evalTest("let $x:=3+4 return <a>{$x}</a>", "<a>7</a>"); // We resolve $request and $response to servlet request/response, // but only when they're not lexially bound. evalTest("let $request:=2, $response:=3 return ($request+$response)", "5"); evalTest("some $x in (1, 2, 3), $y in (2, 3, 4)" + " satisfies $x + $y = 4", "true"); evalTest("every $x in (1, 2, 3), $y in (2, 3, 4)" + " satisfies $x + $y = 4", "false"); evalTest("every $x in (11, 12, 13), $y in (2, 3, 4)" + " satisfies $x > $y", "true"); evalTest("for $y in (4,5,2+4) return <b>{10+$y}</b>", "<b>14</b><b>15</b><b>16</b>"); evalTest("for $i in (1 to 10) where ($i mod 2)=1 return 20+$i", "21 23 25 27 29"); evalTest("for $car at $i in ('Ford', 'Chevy')," + "$pet at $j in ('Cat', 'Dog') " + "return ($i, '/', $car, '/', $j, '/', $pet, ';')", "1/Ford/1/Cat;1/Ford/2/Dog;2/Chevy/1/Cat;2/Chevy/2/Dog;"); evalTest("(3,4,5)[3]", "5"); evalTest("1,((2,3)[false()]),5", "1 5"); evalTest("1,((2 to 4)[true()]),5", "1 2 3 4 5"); evalTest("(for $y in (5,4) return <b>{10+$y}</b>)[2]", "<b>14</b>"); evalTest("for $a in (<a><b c='1' d='3'/><b c='2' d='6'/></a>)/b/@c" + " return concat('c: ', $a, ' d: ', $a/../@d, ';')", "c: 1 d: 3;c: 2 d: 6;"); String tabNsNodes = " xmlns:h=\"H\" xmlns:j=\"J\" xmlns:k=\"J\""; evalTest("doc('tab.xml')/result", "<result"+tabNsNodes+">\n" + "<row>\n" + "<fld1>a1</fld1>\n" + "<fld2 align=\"right\"><!--ignore-this-comment-->12</fld2>\n" + "</row>\n" + "<row>\n" + "<fld1 align=\"left\">b1</fld1>\n" + "<fld2 align=\"right\">22</fld2>\n" + "</row>\n" + "<h:row>\n" + "<j:fld1><![CDATA[c]]><![CDATA[1]]></j:fld1>\n" + "<h:fld2><![CDATA[33]]></h:fld2>\n" + "<j:fld3>44</j:fld3>\n" + "<k:fld1>c2</k:fld1>\n" + "</h:row>\n" + "</result>"); evalTest("doc('tab.xml')/result/row/fld2", "<fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2>" +"<fld2"+tabNsNodes+" align=\"right\">22</fld2>"); evalTest("doc('tab.xml')/result/row[fld2]", "<row"+tabNsNodes+">\n" + "<fld1>a1</fld1>\n" + "<fld2 align=\"right\"><!--ignore-this-comment-->12</fld2>\n</row>" + "<row"+tabNsNodes+">\n" + "<fld1 align=\"left\">b1</fld1>\n" + "<fld2 align=\"right\">22</fld2>\n" + "</row>"); evalTest("doc('tab.xml')/result/row/*", "<fld1"+tabNsNodes+">a1</fld1><fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2><fld1"+tabNsNodes+" align=\"left\">b1</fld1><fld2"+tabNsNodes+" align=\"right\">22</fld2>"); evalTest("doc('tab.xml')/result/row[2]", "<row"+tabNsNodes+">\n" + "<fld1 align=\"left\">b1</fld1>\n" + "<fld2 align=\"right\">22</fld2>\n" + "</row>"); evalTest("for $x in doc('tab.xml')/result/row[2]/node()" + " return ('[',$x,']')", "[\n][<fld1"+tabNsNodes+" align=\"left\">b1</fld1>][\n" + "][<fld2"+tabNsNodes+" align=\"right\">22</fld2>][\n]"); evalTest("for $x in doc('tab.xml')/result/row[2]/text()" + " return ('[',$x,']')", "[\n][\n][\n]"); evalTest("for $x in doc('tab.xml')/result/row[2]//text()" + " return ('[',$x,']')", "[\n][b1][\n][22][\n]"); evalTest("doc('tab.xml')/result/row/*[2]", "<fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2>" + "<fld2"+tabNsNodes+" align=\"right\">22</fld2>"); evalTest("for $x in <T>r1<fld1>a1</fld1><fld3/>r2<fld2>12</fld2></T>" + " /node()" + " return ('[',$x,']')", "[r1][<fld1>a1</fld1>][<fld3 />][r2][<fld2>12</fld2>]"); evalTest("(doc('tab.xml')/result/row/*)[2]", "<fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2>"); evalTest("(doc('tab.xml')/result/row/*)[position()>1]", "<fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2>" +"<fld1"+tabNsNodes+" align=\"left\">b1</fld1>" +"<fld2"+tabNsNodes+" align=\"right\">22</fld2>"); evalTest("(doc('tab.xml')/result/row/*)[position()>1][2]", "<fld1"+tabNsNodes+" align=\"left\">b1</fld1>"); evalTest("doc('tab.xml')/result/row/(fld2,fld1)", "<fld1"+tabNsNodes+">a1</fld1>" +"<fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2>" +"<fld1"+tabNsNodes+" align=\"left\">b1</fld1>" +"<fld2"+tabNsNodes+" align=\"right\">22</fld2>"); evalTest("string(doc('tab.xml'))", "\n\na1\n12\n\n\nb1\n22\n\n\nc1\n33\n44\nc2\n\n\n"); evalTest("string(doc('tab.xml'))", "\n\na1\n12\n\n\nb1\n22\n\n\nc1\n33\n44\nc2\n\n\n"); evalTest("string(doc('tab.xml')/result/row/fld1/@align)", "left"); evalTest("doc('tab.xml')/result/row/fld2/@align/string()", "rightright"); evalTest("for $x in children(<a>xy{3+4}kl<c>def</c>{9}{11}</a>)" + " return ('[',$x,']')", "[xy 7 kl][<c>def</c>][9 11]"); evalTest("children(<a>xy{3+4}kl<c>def</c>{9}{11}</a>)", "xy 7 kl<c>def</c>9 11"); evalTest("<a>aab</a> ='aab'", "true"); evalTest("<a>abc</a>='abb'", "false"); evalTest("string(<a>{'aa''bbXccZdd'}</a>)", "aa'bbXccZdd"); evalTest("doc('tab.xml')/result/row[fld1]", "<row"+tabNsNodes+">\n" + "<fld1>a1</fld1>\n" + "<fld2 align=\"right\"><!--ignore-this-comment-->12</fld2>\n</row>" + "<row"+tabNsNodes+">\n" + "<fld1 align=\"left\">b1</fld1>\n" + "<fld2 align=\"right\">22</fld2>\n" + "</row>"); evalTest("doc('tab.xml')/result/row[fld3]", ""); evalTest("doc('tab.xml')/result/row/fld1[@align]", "<fld1"+tabNsNodes+" align=\"left\">b1</fld1>"); evalTest("doc('tab.xml')/result/row/fld2[@align]", "<fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2>" +"<fld2"+tabNsNodes+" align=\"right\">22</fld2>"); evalTest("'a',doc('tab.xml')/result/row/fld1[@align='left']", "a<fld1"+tabNsNodes+" align=\"left\">b1</fld1>"); evalTest("'a',doc('tab.xml')/result/row/fld1[@align='right']", "a"); evalTest("let $x:=12,\n" + " $y:=<a>{$x+$x}</a>\n" + " return <b atr1='11' atr2=\"{$x}\">{($y,99,$y)}</b>", "<b atr1=\"11\" atr2=\"12\"><a>24</a>99<a>24</a></b>"); evalTest("let $el := 'elm' return " + "document{element {$el} {attribute at{\"abc\"}, \"data\"}}/elm", "<elm at=\"abc\">data</elm>"); evalTest("let $a := <a at1='val1'><b/><c/></a>," + " $b0 := <b/>," + " $b := $a/b return" + " ($a is $a, $a << $b, $b >> $b," + " $a isnot $b, $b, $b0, $b is $b0)", "true true false true <b /> <b /> false"); evalTest("let $a := <a at1='val1'><b/><c/></a>," + " $b := $a/b, $c := $a/c return" + " for $n in distinct-nodes(($c, $a/@at1, $a, $c, $b, $b, $c))" + " return ('[', $n, ']')", "[<a at1=\"val1\"><b /><c /></a>][ at1=\"val1\"][<b />][<c />]"); // Boundary whitsapce (boundary-space) tests: evalTest("declare boundary-space preserve;\n" + "for $n in (<a> <b/> {' x '} </a>)/node() return ($n,';')", " ;<b/>; x ;"); evalTest("declare boundary-space strip;\n" + "for $n in (<a> <b/> {' x '} </a>)/node() return ($n,';')", "<b/>; x ;"); evalTest("declare boundary-space strip;\n" + "for $n in (<a> x <b/> y<c/> </a>)/node() return ($n,';')", " x ;<b/>; y;<c/>; ;"); evalTest("for $n in (<a> <b/> </a>)/node() return ($n,';')", "<b/>;"); evalTest("<a> {3} {4} </a>", "<a>34</a>"); // This actually succeeds because evalTest ignores spaces. // failureExpectedNext = "fix space handling in constructors"; evalTest("<a>{3,4}{5,6}</a>", "<a>3 45 6</a>"); failureExpectedNext = "fix space handling in constructors"; evalTest("let $x := <a>{3,4}{5,6}</a> return <b>{$x, $x}</b>", "<ba><a>3 45 6</a><a>3 45 6</a></b>"); evalTest("for $n in <a><?xq doit?>abc<![CDATA[<X>]]>d<!--a comment--></a>/node()" + " return ($n,';')", "<?xq doit?>;abc<![CDATA[<X>]]>d;<!--a comment-->;"); evalTest("for $n in <a><?xq doit?>abc<![CDATA[<X>]]>d<!--a comment--></a>/node()" + " return (string($n),';')", "doit;abc<X>d;a comment;"); evalTest("string(<a><?xq doit?>abc<![CDATA[<X>]]>d<!--a comment--></a>)", "abc<X>d"); // Simple namespace tests. evalTest("declare namespace xx='XXX';\n <xx:a>XX</xx:a>", "<xx:a xmlns:xx=\"XXX\">XX</xx:a>"); evalTest("declare namespace x1='XXX';\n declare namespace x2='XXX';\n" + "(<top><x1:ab>X1</x1:ab><x2:ab>X2</x2:ab></top>)/x2:ab/string()", "X1X2"); evalTest("declare namespace x1='XXX';\n declare namespace x2='YYY';\n" + "string((<top><x1:ab>X1</x1:ab><x2:ab>X2</x2:ab></top>)/x2:ab)", "X2"); evalTest("declare namespace x1='XXX';\n declare namespace x2='YYY';\n" + "(<top><x1:ab>X1</x1:ab><x2:ab>X2</x2:ab></top>)/*/string()", "X1X2"); evalTest("declare namespace x1='XXX';\n declare namespace x2='YYY';\n" + "(<top><x1:ab>X1</x1:ab><x2:ab>X2</x2:ab></top>)/*:*/string()", "X1X2"); evalTest("declare namespace x1='XXX';\n declare namespace x2='YYY';\n" + "string((<top><x1:ab>X1</x1:ab><x2:ab>X2</x2:ab></top>)/x1:*)", "X1"); evalTest("declare namespace x1='XXX';\n declare namespace x2='YYY';\n" + "(<top><x1:ab>X1</x1:ab><x2:ab>X2</x2:ab></top>)/*:ab/string()", "X1X2"); evalTest("declare namespace x1='XXX';\n declare namespace x2='YYY';\n" + "string((<top><x1:ab>X1</x1:ab><x2:cd>X2</x2:cd></top>)/*:cd)", "X2"); evalTest("declare namespace h='H';\n" + "string(doc('tab.xml')/result/h:row)", "\nc1\n33\n44\nc2\n"); evalTest("declare namespace xx='H';\n" + "doc('tab.xml')/result/xx:row/string()", "\nc1\n33\n44\nc2\n"); evalTest("doc('tab.xml')/result/*:row/string()", "\na1\n12\n\nb1\n22\n\nc1\n33\n44\nc2\n"); evalTest("doc('tab.xml')/result/*:row/*:fld1/string()", "a1b1c1c2"); evalTest("declare namespace k='J';\n" + "doc('tab.xml')/result/*:row/k:fld1/string()", "c1c2"); evalTest("declare namespace k='J';\n" + "string(doc('tab.xml')/result/*:row[k:fld1])", "\nc1\n33\n44\nc2\n"); evalTest("declare namespace m1 = 'bb'; declare namespace m2 = 'cc';" + "let $m1:x := 3 return let $m2:x := 4 return" + " <m2:a a:c='{$a:x}' xmlns:a='bb'>{ count($a:x) }</m2:a>", "<m2:a xmlns:a=\"bb\" xmlns:m2=\"cc\" a:c=\"3\">1</m2:a>"); evalTest("doc('tab.xml')/result/row[1]/descendant::*", "<fld1"+tabNsNodes+">a1</fld1>" +"<fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2>"); evalTest("for $x in doc('tab.xml')/result/row[1]/descendant::node() return ($x,';')", "\n;<fld1"+tabNsNodes+">a1</fld1>;a1;\n;" + "<fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2>;<!--ignore-this-comment-->;12;\n;"); evalTest("doc('tab.xml')/result/row[1]/descendant::text()", "a112"); evalTest("doc('tab.xml')/result/row[1]/descendant-or-self::*", "<row"+tabNsNodes+"><fld1>a1</fld1>" + "<fld2 align=\"right\"><!--ignore-this-comment-->12</fld2></row>" + "<fld1"+tabNsNodes+">a1</fld1>" + "<fld2"+tabNsNodes+" align=\"right\"><!--ignore-this-comment-->12</fld2>"); evalTest("for $n in doc('tab.xml')/result/* return node-name($n)", "row row h:row"); evalTest("for $n in doc('tab.xml')/result/row/* " + "return local-name-from-QName(node-name($n))", "fld1 fld2 fld1 fld2"); evalTest("declare namespace h='H';\n" +" for $n in doc('tab.xml')/result/*:row/* " + "return (prefix-from-QName(node-name($n)),';')", " ; ; ; ; j ; h ; j ; k ;"); evalTest("for $n in doc('tab.xml')/result/*:row/*:fld1 " + "return <n>{namespace-uri-from-QName(node-name($n))}</n>", "<n /><n /><n>J</n><n>J</n>"); evalTest("for $n in doc('tab.xml')/result/*:row/*:fld1 return " + "('[', for $p in ('', 'k', 'h') return" + " (namespace-uri-for-prefix($p,$n),';'), ']')", "[;J;H;][;J;H;][;J;H;][;J;H;]"); // Based on bugs reported by Francois Leygues <vizawalou@wanadoo.fr>: evalTest("let $bx := <b x='xx'></b> return" + " let $x := <a>{for $y in $bx return $y}</a>" + " return $x/b", "<b x=\"xx\" />"); evalTest("element r {let $y := <b x='1'/>" + " let $x:=<a>{$y}</a> return $x/b/@x}", "<r x=\"1\" />"); evalTest("declare function local:x(){<a><b x='1'/><b x='2'/></a>};" + " let $i := <a>{for $a in local:x()/b return $a}</a> return $i/b/@x", " x=\"1\" x=\"2\""); evalTest("declare function local:s(){ <a x='10'>{for $n in (<b x='2'/>) return ($n) }</a>};" + " let $st := local:s()/b return (" + " '[',$st/@x ,'] [',$st ,']')", "[ x=\"2\"] [<b x=\"2\" />]"); // Testcase from <Seshukumar_Adiraju@infosys.com>: evalTest("let $books := "
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -