X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=test%2Ftst_record_conv.c;h=78463733793ef2c4a39c76dd814c8bc7d6bd64bc;hp=66460e001e613897254c0799480acd222422776d;hb=471c6dccdbb5c5a9c08b24c9abd6a1dcda29e79e;hpb=a0e27aac0589d493172c73f6660b844fc6460d7c diff --git a/test/tst_record_conv.c b/test/tst_record_conv.c index 66460e0..7846373 100644 --- a/test/tst_record_conv.c +++ b/test/tst_record_conv.c @@ -2,20 +2,26 @@ * Copyright (C) 2005-2006, Index Data ApS * See the file LICENSE for details. * - * $Id: tst_record_conv.c,v 1.1 2006-05-02 20:47:46 adam Exp $ + * $Id: tst_record_conv.c,v 1.8 2006-05-08 10:16:47 adam Exp $ * */ #include #include #include #include +#include +#include + +#if HAVE_CONFIG_H +#include +#endif #if HAVE_XML2 #include #include -yaz_record_conv_t conv_from_xml(const char *xmlstring, WRBUF w) +yaz_record_conv_t conv_configure(const char *xmlstring, WRBUF w) { xmlDocPtr doc = xmlParseMemory(xmlstring, strlen(xmlstring)); if (!doc) @@ -27,7 +33,13 @@ yaz_record_conv_t conv_from_xml(const char *xmlstring, WRBUF w) { xmlNodePtr ptr = xmlDocGetRootElement(doc); yaz_record_conv_t p = yaz_record_conv_create(); - + + if (p) + { + const char *srcdir = getenv("srcdir"); + if (srcdir) + yaz_record_conv_set_path(p, srcdir); + } if (!ptr) { wrbuf_printf(w, "xmlDocGetRootElement"); @@ -54,20 +66,23 @@ yaz_record_conv_t conv_from_xml(const char *xmlstring, WRBUF w) } } -int conv_from_xml_compare(const char *xmlstring, const char *expect_error, - yaz_record_conv_t *pt) +int conv_configure_test(const char *xmlstring, const char *expect_error, + yaz_record_conv_t *pt) { WRBUF w = wrbuf_alloc(); int ret; - yaz_record_conv_t p = conv_from_xml(xmlstring, w); + yaz_record_conv_t p = conv_configure(xmlstring, w); if (!p) { if (expect_error && !strcmp(wrbuf_buf(w), expect_error)) ret = 1; else + { ret = 0; + printf("%.*s\n", wrbuf_len(w), wrbuf_buf(w)); + } } else { @@ -78,38 +93,213 @@ int conv_from_xml_compare(const char *xmlstring, const char *expect_error, } else { - if (pt) - *pt = p; - else - yaz_record_conv_destroy(p); ret = 1; } } + if (pt) + *pt = p; + else + yaz_record_conv_destroy(p); + wrbuf_free(w, 1); return ret; } -static void tst() +static void tst_configure() +{ + YAZ_CHECK(conv_configure_test("", "Missing 'convert' element", 0)); + YAZ_CHECK(conv_configure_test("", 0, 0)); + YAZ_CHECK(conv_configure_test("", + "Bad element 'bad'." + "Expected marc, xslt, ..", 0)); +#if HAVE_XSLT + YAZ_CHECK(conv_configure_test("" + "" + "" + "", + "Attribute 'inputformat' required", 0)); + YAZ_CHECK(conv_configure_test("" + "" + "", + "Missing attribute 'stylesheet'", 0)); + YAZ_CHECK(conv_configure_test("" + "" + "" + "", + 0, 0)); +#else + YAZ_CHECK(conv_configure_test("" + "" + "", + "xslt unsupported." + " YAZ compiled without XSLT support", 0)); +#endif +} + +static int conv_convert_test(yaz_record_conv_t p, + const char *input_record, + const char *output_expect_record) +{ + int ret = 0; + if (!p) + { + YAZ_CHECK(ret); + } + else + { + WRBUF output_record = wrbuf_alloc(); + int r = yaz_record_conv_record(p, input_record, strlen(input_record), + output_record); + if (r) + { + if (output_expect_record) + { + printf("yaz_record_conv error=%s\n", + yaz_record_conv_get_error(p)); + ret = 0; + } + else + ret = 1; + } + else + { + if (!output_expect_record) + { + ret = 0; + } + else if (strlen(output_expect_record) != wrbuf_len(output_record)) + { + int expect_len = strlen(output_expect_record); + ret = 0; + printf("output_record expect-len=%d got-len=%d\n", expect_len, + wrbuf_len(output_record)); + printf("got-output_record = %.*s\n", + wrbuf_len(output_record), wrbuf_buf(output_record)); + printf("output_expect_record = %s\n", + output_expect_record); + } + else if (memcmp(output_expect_record, wrbuf_buf(output_record), + strlen(output_expect_record))) + { + ret = 0; + printf("got-output_record = %.*s\n", + wrbuf_len(output_record), wrbuf_buf(output_record)); + printf("output_expect_record = %s\n", + output_expect_record); + } + else + { + ret = 1; + } + } + wrbuf_free(output_record, 1); + } + return ret; +} + +static void tst_convert() { - YAZ_CHECK(conv_from_xml_compare("", "Missing 'convert' element", 0)); - YAZ_CHECK(conv_from_xml_compare("", 0, 0)); - YAZ_CHECK(conv_from_xml_compare("", - "Bad element 'bad'." - "Expected xslt, marc_to_xml,...", 0)); - YAZ_CHECK(conv_from_xml_compare("" - "" - "" - "", - 0, 0)); + yaz_record_conv_t p = 0; + const char *marcxml_rec = + "\n" + " 00080nam a22000498a 4500\n" + " 11224466 \n" + " \n" + " 11224466 \n" + " \n" + "\n"; + const char *iso2709_rec = + "\x30\x30\x30\x38\x30\x6E\x61\x6D\x20\x61\x32\x32\x30\x30\x30\x34" + "\x39\x38\x61\x20\x34\x35\x30\x30\x30\x30\x31\x30\x30\x31\x33\x30" + "\x30\x30\x30\x30\x30\x31\x30\x30\x30\x31\x37\x30\x30\x30\x31\x33" + "\x1E\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x20\x20" + "\x1F\x61\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x1D"; + + YAZ_CHECK(conv_configure_test("" + "" + "", + 0, &p)); + YAZ_CHECK(conv_convert_test(p, marcxml_rec, iso2709_rec)); + yaz_record_conv_destroy(p); + + YAZ_CHECK(conv_configure_test("" + "" + "", + 0, &p)); + YAZ_CHECK(conv_convert_test(p, iso2709_rec, marcxml_rec)); + yaz_record_conv_destroy(p); + + + YAZ_CHECK(conv_configure_test("" + "" + "" + "" + "" + "", + 0, &p)); + YAZ_CHECK(conv_convert_test(p, marcxml_rec, marcxml_rec)); + yaz_record_conv_destroy(p); + + + YAZ_CHECK(conv_configure_test("" + "" + "" + "" + "" + "", + 0, &p)); + YAZ_CHECK(conv_convert_test(p, marcxml_rec, marcxml_rec)); + yaz_record_conv_destroy(p); } + #endif int main(int argc, char **argv) { YAZ_CHECK_INIT(argc, argv); + libxml2_error_to_yazlog(0 /* disable log */, 0); #if HAVE_XML2 - tst(); + tst_configure(); +#endif +#if HAVE_XSLT + tst_convert(); #endif YAZ_CHECK_TERM; }