|
From: Juri L. <ju...@ex...> - 2023-03-15 13:13:50
|
Hi Bernard! I would replace import module namespace test="http://exist-db.org/xquery/xqsuite" at "resource:org/exist/xquery/lib/xqsuite/xqsuite.xql"; with declare namespace test="http://exist-db.org/xquery/xqsuite"; Now to your actual problem: The namespace declared in the testsuite is very likely not seen by XQSuite. This is non-obvious. The reason for this is that test argument and assertion annotation values are string literals that get cast to the expected type in the context of the XQSuite module and not in the context of the testsuite. Many tests in exist-db core serialize XML an assert that the result string matches the expected value instead of which could be a workaround for your tests as well. In your case it might be easiest to just return the evaluated xpath from the testcase and to assert the strings equal declare %test:arg("error", "Bad Request") %test:arg("description", "Invalid ResourceID") %test:arg("extraHtml") %test:assertXPath("Bad Request") function local:errorHtml( $error as xs:string, $description as xs:string, $extraHtml as node()?) as node() { let $result := <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>{$error}</title> </head> <body> <p class='ErrorMessage'><b>Message: </b>{$error}</p> <p class='ErrorDescription'><b>Description: </b>{$description}</p> {$extraHtml} </body> </html> return $result/xhtml:html/xhtml:body/xhtml:p[@class = 'ErrorMessage'] }; Harris, Bernard T. (GSFC-5870) via Exist-open wrote on 14.03.23 13:35: > No matter what I do, I cannot get a useful (more than "$result") %:assertXPath to work in this case > > xquery version "3.1"; > > import module namespace inspect="http://exist-db.org/xquery/inspection"; > import module namespace test="http://exist-db.org/xquery/xqsuite" > at "resource:org/exist/xquery/lib/xqsuite/xqsuite.xql"; > > declare namespace xhtml = "http://www.w3.org/1999/xhtml"; > > declare > %test:arg("error", "Bad Request") > %test:arg("description", "Invalid ResourceID") > %test:arg("extraHtml") > %test:assertXPath("$result//*:html") > (: > %test:assertXPath("$result//*:html/*:head[*:title = 'Bad Request']") > %test:assertXPath("$result/xhtml:html/xhtml:body/xhtml:p[@class = 'ErrorMessage']") > :) > function local:errorHtml( > $error as xs:string, > $description as xs:string, > $extraHtml as node()?) > as node() > { > let $result := > <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> > <head> > <title>{$error}</title> > </head> > <body> > <p class='ErrorMessage'><b>Message: </b>{$error}</p> > <p class='ErrorDescription'><b>Description: </b>{$description}</p> > {$extraHtml} > </body> > </html> > return > $result > }; > > let $f := local:errorHtml#3 > return > test:suite($f) > > > It always results in > > <testsuites> > <testsuite package="http://www.w3.org/2005/xquery-local-functions" timestamp="2023-03-14T08:28:16.065-04:00" tests="1" failures="1" errors="0" pending="0" time="PT0.002S"> > <testcase name="errorHtml" class="local:errorHtml"> > <failure message="assertXPath failed." type="failure-error-code-1">$result//*:html</failure> > <output> > <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> > <head> > <title>Bad Request</title> > </head> > <body> > <p class="ErrorMessage"> > <b>Message: </b>Bad Request</p> > <p class="ErrorDescription"> > <b>Description: </b>Invalid ResourceID</p> > </body> > </html> > </output> > </testcase> > </testsuite> > </testsuites> > > Or > > <testcase name="errorHtml" class="spasexq:errorHtml"> > <error type="err:XPST0081" message="It is a static error if a QName used in an expression contains a namespace prefix that cannot be expanded into a namespace URI by using the statically known namespaces. Error while evaluating expression: $result//xhtml:html. No namespace defined for prefix xhtml:html"/> > </testcase> > > If I use the xhtml namespace in the assertXPath annotation. I found someone report a similar problem on stackoverflow in 2016 but it is not clear to me how it was resolved. This is on exist-db 6.2.0 and Java 11. Does anyone know what I am doing wrong? Thanks. > > Bernie Harris > > > > > _______________________________________________ > Exist-open mailing list > Exi...@li... > https://lists.sourceforge.net/lists/listinfo/exist-open > |