+++ /dev/null
-/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2010 Index Data
- * See the file LICENSE for details.
- */
-#include <yaz/retrieval.h>
-#include <yaz/test.h>
-#include <yaz/wrbuf.h>
-#include <string.h>
-#include <yaz/log.h>
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#if YAZ_HAVE_XSLT
-
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-
-yaz_retrieval_t conv_configure(const char *xmlstring, WRBUF w)
-{
- xmlDocPtr doc = xmlParseMemory(xmlstring, strlen(xmlstring));
- if (!doc)
- {
- wrbuf_printf(w, "xmlParseMemory");
- return 0;
- }
- else
- {
- xmlNodePtr ptr = xmlDocGetRootElement(doc);
- yaz_retrieval_t p = yaz_retrieval_create();
-
- if (p)
- {
- const char *srcdir = getenv("srcdir");
- if (srcdir)
- yaz_retrieval_set_path(p, srcdir);
- }
- if (!ptr)
- {
- wrbuf_printf(w, "xmlDocGetRootElement");
- yaz_retrieval_destroy(p);
- p = 0;
- }
- else if (!p)
- {
- wrbuf_printf(w, "yaz_retrieval_create");
- }
- else
- {
- int r = yaz_retrieval_configure(p, ptr);
-
- if (r)
- {
- wrbuf_puts(w, yaz_retrieval_get_error(p));
- yaz_retrieval_destroy(p);
- p = 0;
- }
- }
- xmlFreeDoc(doc);
- return p;
- }
-}
-
-int conv_configure_test(const char *xmlstring, const char *expect_error,
- yaz_retrieval_t *pt)
-{
- WRBUF w = wrbuf_alloc();
- int ret;
-
- yaz_retrieval_t p = conv_configure(xmlstring, w);
-
- if (!p)
- {
- if (expect_error && !strcmp(wrbuf_cstr(w), expect_error))
- ret = 1;
- else
- {
- ret = 0;
- printf("%s\n", wrbuf_cstr(w));
- }
- }
- else
- {
- if (expect_error)
- {
- ret = 0;
- yaz_retrieval_destroy(p);
- }
- else
- {
- if (pt)
- *pt = p;
- else
- yaz_retrieval_destroy(p);
- ret = 1;
- }
- }
- wrbuf_destroy(w);
- return ret;
-}
-
-static void tst_configure(void)
-{
- YAZ_CHECK(conv_configure_test("<bad",
- "xmlParseMemory", 0));
-
- YAZ_CHECK(conv_configure_test("<bad/>",
- "Expected element <retrievalinfo>", 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo/>", 0, 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo><bad/></retrievalinfo>",
- "Element <retrievalinfo>:"
- " expected element <retrieval>, got <bad>",
- 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo><retrieval/>"
- "</retrievalinfo>",
- "Missing 'syntax' attribute", 0));
-
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " unknown=\"unknown\""
- ">"
- "</retrieval>"
- "</retrievalinfo>",
- "Element <retrieval>: expected attributes "
- "'syntax', identifier' or 'name', got "
- "'unknown'", 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " syntax=\"unknown_synt\""
- ">"
- "</retrieval>"
- "</retrievalinfo>",
- "Element <retrieval>: unknown attribute "
- "value syntax='unknown_synt'", 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " syntax=\"usmarc\""
- "/>"
- "</retrievalinfo>",
- 0, 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " syntax=\"usmarc\""
- " name=\"marcxml\"/>"
- "</retrievalinfo>",
- 0, 0));
-
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " syntax=\"usmarc\""
- " name=\"marcxml\""
- " identifier=\"info:srw/schema/1/marcxml-v1.1\""
- "/>"
- "</retrievalinfo>",
- 0, 0));
-
-
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " syntax=\"usmarc\""
- " identifier=\"info:srw/schema/1/marcxml-v1.1\""
- " name=\"marcxml\">"
- "<convert/>"
- "</retrieval>"
- "</retrievalinfo>",
- "Element <retrieval>: expected zero or one element "
- "<backend>, got <convert>", 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " syntax=\"usmarc\""
- " identifier=\"info:srw/schema/1/marcxml-v1.1\""
- " name=\"marcxml\">"
- " <backend syntax=\"usmarc\""
- " schema=\"marcxml\""
- "/>"
- "</retrieval>"
- "</retrievalinfo>",
- "Element <backend>: expected attributes 'syntax' or 'name,"
- " got 'schema'", 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " syntax=\"usmarc\""
- " identifier=\"info:srw/schema/1/marcxml-v1.1\""
- " name=\"marcxml\">"
- " <backend syntax=\"usmarc\""
- " name=\"marcxml\""
- "/>"
- "</retrieval>"
- "</retrievalinfo>",
- 0, 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " syntax=\"usmarc\""
- " identifier=\"info:srw/schema/1/marcxml-v1.1\""
- " name=\"marcxml\">"
- " <backend syntax=\"unknown\""
- "/>"
- "</retrieval>"
- "</retrievalinfo>",
- "Element <backend syntax='unknown'>: "
- "attribute 'syntax' has invalid value "
- "'unknown'", 0));
-
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval"
- " syntax=\"usmarc\""
- " identifier=\"info:srw/schema/1/marcxml-v1.1\""
- " name=\"marcxml\">"
- " <backend syntax=\"usmarc\""
- " unknown=\"silly\""
- "/>"
- "</retrieval>"
- "</retrievalinfo>",
- "Element <backend>: expected attributes "
- "'syntax' or 'name, got 'unknown'", 0));
-
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval syntax=\"usmarc\">"
- "<backend syntax=\"xml\" name=\"dc\">"
- "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
- "<marc"
- " inputcharset=\"utf-8\""
- " outputcharset=\"non-existent\""
- " inputformat=\"xml\""
- " outputformat=\"marc\""
- "/>"
- "</backend>"
- "</retrieval>"
- "</retrievalinfo>",
- "Element <marc inputcharset='utf-8'"
- " outputcharset='non-existent'>: Unsupported character"
- " set mapping defined by attribute values", 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval syntax=\"usmarc\">"
- "<backend syntax=\"xml\" name=\"dc\">"
- "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
- "<marc"
- " inputcharset=\"utf-8\""
- " outputcharset=\"marc-8\""
- " inputformat=\"not-existent\""
- " outputformat=\"marc\""
- "/>"
- "</backend>"
- "</retrieval>"
- "</retrievalinfo>",
- "Element <marc inputformat='not-existent'>: Unsupported"
- " input format defined by attribute value", 0));
-
- YAZ_CHECK(conv_configure_test("<retrievalinfo>"
- "<retrieval syntax=\"usmarc\">"
- "<backend syntax=\"xml\" name=\"dc\">"
- "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
- "<marc"
- " inputcharset=\"utf-8\""
- " outputcharset=\"marc-8\""
- " inputformat=\"xml\""
- " outputformat=\"marc\""
- "/>"
- "</backend>"
- "</retrieval>"
- "</retrievalinfo>",
- 0, 0));
-
- YAZ_CHECK(conv_configure_test(
- "<retrievalinfo "
- " xmlns=\"http://indexdata.com/yaz\" version=\"1.0\">"
- "<retrieval syntax=\"grs-1\"/>"
- "<retrieval syntax=\"usmarc\" name=\"F\"/>"
- "<retrieval syntax=\"usmarc\" name=\"B\"/>"
- "<retrieval syntax=\"xml\" name=\"marcxml\" "
- " identifier=\"info:srw/schema/1/marcxml-v1.1\">"
- " <backend syntax=\"usmarc\" name=\"F\">"
- " <marc inputformat=\"marc\" outputformat=\"marcxml\" "
- " inputcharset=\"marc-8\"/>"
- " </backend>"
- "</retrieval>"
- "<retrieval syntax=\"xml\" name=\"danmarc\">"
- " <backend syntax=\"usmarc\" name=\"F\">"
- " <marc inputformat=\"marc\" outputformat=\"marcxchange\" "
- " inputcharset=\"marc-8\"/>"
- " </backend>"
- "</retrieval>"
- "<retrieval syntax=\"xml\" name=\"dc\" "
- " identifier=\"info:srw/schema/1/dc-v1.1\">"
- " <backend syntax=\"usmarc\" name=\"F\">"
- " <marc inputformat=\"marc\" outputformat=\"marcxml\" "
- " inputcharset=\"marc-8\"/>"
- " <xslt stylesheet=\"tst_record_conv.xsl\"/> "
- " </backend>"
- "</retrieval>"
- "</retrievalinfo>",
- 0, 0));
-
-}
-
-#endif
-
-int main(int argc, char **argv)
-{
- YAZ_CHECK_INIT(argc, argv);
-
- yaz_log_xml_errors(0, 0 /* disable it */);
-
-#if YAZ_HAVE_XSLT
- tst_configure();
-#endif
- YAZ_CHECK_TERM;
-}
-
-/*
- * Local variables:
- * c-basic-offset: 4
- * c-file-style: "Stroustrup"
- * indent-tabs-mode: nil
- * End:
- * vim: shiftwidth=4 tabstop=8 expandtab
- */
-