X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=test%2Ftstxmlquery.c;h=8164d80f08df677e5e5f795d4cd30b3730bf4efa;hp=625d5e2d2d643d432aa4fa747e0bffd7eacb2040;hb=69c2dee55aa204cab368989b8385eda8b83bf2e2;hpb=3086f0e19e38428814c7da92fcaf21eba2bc9a64 diff --git a/test/tstxmlquery.c b/test/tstxmlquery.c index 625d5e2..8164d80 100644 --- a/test/tstxmlquery.c +++ b/test/tstxmlquery.c @@ -1,19 +1,18 @@ -/* - * Copyright (C) 1995-2005, Index Data ApS +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2009 Index Data * See the file LICENSE for details. - * - * $Id: tstxmlquery.c,v 1.6 2006-01-30 14:02:07 adam Exp $ */ #include #include #include +#include #include #include #include -#if HAVE_XML2 +#if YAZ_HAVE_XML2 #include #include #endif @@ -26,7 +25,8 @@ enum pqf2xml_status { XML_NO_ERROR }; -enum pqf2xml_status pqf2xml_text(const char *pqf, const char *expect_xml) +enum pqf2xml_status pqf2xml_text(const char *pqf, const char *expect_xml, + const char *expect_pqf) { YAZ_PQF_Parser parser = yaz_pqf_create(); ODR odr = odr_createmem(ODR_ENCODE); @@ -45,9 +45,9 @@ enum pqf2xml_status pqf2xml_text(const char *pqf, const char *expect_xml) status = PQF_FAILED; else { - status = QUERY2XML_FAILED; -#if HAVE_XML2 +#if YAZ_HAVE_XML2 xmlDocPtr doc = 0; + yaz_rpnquery2xml(rpn, &doc); if (!doc) @@ -62,7 +62,30 @@ enum pqf2xml_status pqf2xml_text(const char *pqf, const char *expect_xml) if (len_out == strlen(expect_xml) && memcmp(buf_out, expect_xml, len_out) == 0) { - status = XML_MATCH; + Z_Query *query2 = 0; + int error_code = 0; + const char *addinfo = 0; + const xmlNode *root_element = xmlDocGetRootElement(doc); + ODR odr2 = odr_createmem(ODR_ENCODE); + + yaz_xml2query(root_element, &query2, odr2, + &error_code, &addinfo); + if (error_code || !query2) + status = XML_NO_MATCH; + else + { + WRBUF w = wrbuf_alloc(); + yaz_query_to_wrbuf(w, query2); + if (!expect_pqf || strcmp(expect_pqf, wrbuf_cstr(w)) == 0) + status = XML_MATCH; + else + { + status = XML_NO_MATCH; + printf("Result: %s\n", wrbuf_cstr(w)); + } + wrbuf_destroy(w); + } + odr_destroy(odr2); } else { @@ -70,81 +93,141 @@ enum pqf2xml_status pqf2xml_text(const char *pqf, const char *expect_xml) status = XML_NO_MATCH; } xmlFreeDoc(doc); + xmlFree(buf_out); } +#else + status = QUERY2XML_FAILED; #endif } odr_destroy(odr); return status; } -void tst() +static void tst(void) { - YAZ_CHECK_EQ(pqf2xml_text("@attr 1=4 bad query", ""), PQF_FAILED); -#if HAVE_XML2 + YAZ_CHECK_EQ(pqf2xml_text("@attr 1=4 bad query", "", 0), PQF_FAILED); +#if YAZ_HAVE_XML2 YAZ_CHECK_EQ(pqf2xml_text( "@attr 1=4 computer", "\n" - "" + "" "" - "computer" - "\n"), XML_MATCH); + "computer" + "\n", + "RPN @attrset Bib-1 @attr 1=4 computer" + ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@attr 2=1 @attr 1=title computer", "\n" - "" + "" "" "" - "computer" - "\n"), XML_MATCH); + "computer" + "\n", + "RPN @attrset Bib-1 @attr \"1=title\" @attr 2=1 computer" + ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@attr 2=1 @attr exp1 1=1 computer", "\n" - "" + "" "" "" - "computer" - "\n"), XML_MATCH); + "computer" + "\n", + "RPN @attrset Bib-1 @attr Exp-1 1=1 @attr 2=1 computer" + ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@and a b", "\n" - "" - "" - "ab" - "\n"), XML_MATCH); + "" + "" + "a" + "b" + "\n", + "RPN @attrset Bib-1 @and a b" + ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@or @and a b c", "\n" - "" - "" - "a" - "b" - "c" - "\n"), XML_MATCH); + "" + "" + "" + "a" + "b" + "c" + "\n", + "RPN @attrset Bib-1 @or @and a b c" + ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( "@set abe", "\n" - "" - "abe\n"), XML_MATCH); + "" + "abe\n", + "RPN @attrset Bib-1 @set abe" + ), XML_MATCH); YAZ_CHECK_EQ(pqf2xml_text( /* exclusion, distance, ordered, relationtype, knownunit, proxunit */ "@prox 0 3 1 2 k 2 a b", "\n" - "" - "" + "" - "ab" - "\n"), XML_MATCH); + "a" + "b" + "\n", + "RPN @attrset Bib-1 @prox 0 3 1 2 k 2 a b" + ), XML_MATCH); + YAZ_CHECK_EQ(pqf2xml_text( + "@term numeric 32", + "\n" + "" + "" + "32" + "\n", + "RPN @attrset Bib-1 @term numeric 32" + ), XML_MATCH); + + YAZ_CHECK_EQ(pqf2xml_text( + "@term string computer", + "\n" + "" + "" + "computer" + "\n", + "RPN @attrset Bib-1 @term string computer" + ), XML_MATCH); + + YAZ_CHECK_EQ(pqf2xml_text( + "@term null void", + "\n" + "" + "" + "" + "\n", + "RPN @attrset Bib-1 @term null x" + ), XML_MATCH); + + YAZ_CHECK_EQ(pqf2xml_text( + "@attrset gils @attr 4=2 x", + "\n" + "" + "" + "" + "x" + "\n", + "RPN @attrset GILS @attr 4=2 x" + ), XML_MATCH); #endif } @@ -158,6 +241,7 @@ int main (int argc, char **argv) /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab