Fixed bug #830: pkg-config support. YAZ installs yaz.pc for Debian
[yaz-moved-to-github.git] / test / tst_record_conv.c
index 2b414c6..c08b937 100644 (file)
@@ -1,16 +1,22 @@
 /*
- * Copyright (C) 2005-2006, Index Data ApS
+ * Copyright (C) 2005-2007, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: tst_record_conv.c,v 1.2 2006-05-03 13:04:46 adam Exp $
+ * $Id: tst_record_conv.c,v 1.13 2007-01-03 08:42:16 adam Exp $
  *
  */
 #include <yaz/record_conv.h>
 #include <yaz/test.h>
 #include <yaz/wrbuf.h>
 #include <string.h>
+#include <yaz/log.h>
+#include <yaz/libxml2_error.h>
 
-#if HAVE_XML2
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#if YAZ_HAVE_XML2
 
 #include <libxml/parser.h>
 #include <libxml/tree.h>
@@ -46,6 +52,8 @@ yaz_record_conv_t conv_configure(const char *xmlstring, WRBUF w)
         }
         else
         {
+
+
             int r = yaz_record_conv_configure(p, ptr);
             
             if (r)
@@ -81,49 +89,66 @@ int conv_configure_test(const char *xmlstring, const char *expect_error,
     else
     {
         if (expect_error)
-        {
             ret = 0;
-            yaz_record_conv_destroy(p);
-        }
         else
-        {
-            if (pt)
-                *pt = p;
-            else
-                yaz_record_conv_destroy(p);
             ret = 1;
-        }
     }
+
+    if (pt)
+        *pt = p;
+    else
+        if (p)
+            yaz_record_conv_destroy(p);
+
     wrbuf_free(w, 1);
     return ret;
 }
 
-static void tst_configure()
+static void tst_configure(void)
 {
+
+
+
     YAZ_CHECK(conv_configure_test("<bad", "xmlParseMemory", 0));
-    YAZ_CHECK(conv_configure_test("<bad/>", "Missing 'convert' element", 0));
-    YAZ_CHECK(conv_configure_test("<convert/>", 0, 0));
-    YAZ_CHECK(conv_configure_test("<convert><bad/></convert>",
-                                  "Bad element 'bad'."
-                                  "Expected marc, xslt, ..", 0));
-    YAZ_CHECK(conv_configure_test("<convert>"
+
+
+    YAZ_CHECK(conv_configure_test("<backend syntax='usmarc' name='F'>"
+                                  "<bad/></backend>",
+                                  "Element <backend>: expected <marc> or "
+                                  "<xslt> element, got <bad>", 0));
+
+#if YAZ_HAVE_XSLT
+    YAZ_CHECK(conv_configure_test("<backend syntax='usmarc' name='F'>"
                                   "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
                                   "<marc"
                                   " inputcharset=\"marc-8\""
                                   " outputcharset=\"marc-8\""
                                   "/>"
-                                  "</convert>",
-                                  "Attribute 'inputformat' required", 0));
-    YAZ_CHECK(conv_configure_test("<convert>"
-                                  "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
+                                  "</backend>",
+                                  "Element <marc>: attribute 'inputformat' "
+                                  "required", 0));
+    YAZ_CHECK(conv_configure_test("<backend syntax='usmarc' name='F'>"
+                                  "<xslt/>"
+                                  "</backend>",
+                                  "Element <xslt>: attribute 'stylesheet' "
+                                  "expected", 0));
+    YAZ_CHECK(conv_configure_test("<backend syntax='usmarc' name='F'>"
                                   "<marc"
                                   " inputcharset=\"utf-8\""
                                   " outputcharset=\"marc-8\""
                                   " inputformat=\"xml\""
                                   " outputformat=\"marc\""
                                   "/>"
-                                  "</convert>",
+                                  "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
+                                  "</backend>",
                                   0, 0));
+#else
+    YAZ_CHECK(conv_configure_test("<backend syntax='usmarc' name='F'>"
+                                  "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
+                                  "</backend>",
+                                  "xslt unsupported."
+                                  " YAZ compiled without XSLT support", 0));
+#endif 
 }
 
 static int conv_convert_test(yaz_record_conv_t p,
@@ -138,7 +163,8 @@ static int conv_convert_test(yaz_record_conv_t p,
     else
     {
         WRBUF output_record = wrbuf_alloc();
-        int r = yaz_record_conv_record(p, input_record, output_record);
+        int r = yaz_record_conv_record(p, input_record, strlen(input_record),
+                                       output_record);
         if (r)
         {
             if (output_expect_record)
@@ -186,7 +212,7 @@ static int conv_convert_test(yaz_record_conv_t p,
     return ret;
 }
 
-static void tst_convert()
+static void tst_convert1(void)
 {
     yaz_record_conv_t p = 0;
     const char *marcxml_rec =
@@ -204,30 +230,32 @@ static void tst_convert()
         "\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("<convert>"
+    YAZ_CHECK(conv_configure_test("<backend>"
                                   "<marc"
                                   " inputcharset=\"utf-8\""
                                   " outputcharset=\"marc-8\""
                                   " inputformat=\"xml\""
                                   " outputformat=\"marc\""
                                   "/>"
-                                  "</convert>",
+                                  "</backend>",
                                   0, &p));
     YAZ_CHECK(conv_convert_test(p, marcxml_rec, iso2709_rec));
+    yaz_record_conv_destroy(p);
 
-    YAZ_CHECK(conv_configure_test("<convert>"
+    YAZ_CHECK(conv_configure_test("<backend>"
                                   "<marc"
                                   " outputcharset=\"utf-8\""
                                   " inputcharset=\"marc-8\""
                                   " outputformat=\"marcxml\""
                                   " inputformat=\"marc\""
                                   "/>"
-                                  "</convert>",
+                                  "</backend>",
                                   0, &p));
     YAZ_CHECK(conv_convert_test(p, iso2709_rec, marcxml_rec));
+    yaz_record_conv_destroy(p);
 
 
-    YAZ_CHECK(conv_configure_test("<convert>"
+    YAZ_CHECK(conv_configure_test("<backend>"
                                   "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
                                   "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
                                   "<marc"
@@ -242,13 +270,13 @@ static void tst_convert()
                                   " outputformat=\"marcxml\""
                                   " inputformat=\"marc\""
                                   "/>"
-                                  "</convert>",
+                                  "</backend>",
                                   0, &p));
     YAZ_CHECK(conv_convert_test(p, marcxml_rec, marcxml_rec));
+    yaz_record_conv_destroy(p);
 
 
-
-    YAZ_CHECK(conv_configure_test("<convert>"
+    YAZ_CHECK(conv_configure_test("<backend>"
                                   "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
                                   "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
                                   "<marc"
@@ -261,10 +289,41 @@ static void tst_convert()
                                   " outputformat=\"marcxml\""
                                   " inputformat=\"marc\""
                                   "/>"
-                                  "</convert>",
+                                  "</backend>",
                                   0, &p));
     YAZ_CHECK(conv_convert_test(p, marcxml_rec, marcxml_rec));
+    yaz_record_conv_destroy(p);
+}
+
+static void tst_convert2(void)
+{
+    yaz_record_conv_t p = 0;
+    const char *marcxml_rec =
+        "<record xmlns=\"http://www.loc.gov/MARC21/slim\">\n"
+        "  <leader>00080nam a22000498a 4500</leader>\n"
+        "  <controlfield tag=\"001\">   11224466 </controlfield>\n"
+        "  <datafield tag=\"010\" ind1=\" \" ind2=\" \">\n"
+        "    <subfield code=\"a\">k&#xf8;benhavn</subfield>\n"
+        "  </datafield>\n"
+        "</record>\n";
+    const char *iso2709_rec =
+        "\x30\x30\x30\x37\x37\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\x34\x30\x30\x30\x31\x33"
+        "\x1E\x20\x20\x20\x31\x31\x32\x32\x34\x34\x36\x36\x20\x1E\x20\x20"
+        "\x1F\x61\x6b\xb2\x62\x65\x6e\x68\x61\x76\x6e\x1E\x1D";
 
+    YAZ_CHECK(conv_configure_test("<backend>"
+                                  "<marc"
+                                  " inputcharset=\"utf-8\""
+                                  " outputcharset=\"marc-8\""
+                                  " inputformat=\"xml\""
+                                  " outputformat=\"marc\""
+                                  "/>"
+                                  "</backend>",
+                                  0, &p));
+    YAZ_CHECK(conv_convert_test(p, marcxml_rec, iso2709_rec));
+    yaz_record_conv_destroy(p);
 }
 
 #endif
@@ -272,9 +331,13 @@ static void tst_convert()
 int main(int argc, char **argv)
 {
     YAZ_CHECK_INIT(argc, argv);
-#if HAVE_XML2
+    libxml2_error_to_yazlog(0 /* disable log */, 0);
+#if YAZ_HAVE_XML2
     tst_configure();
-    tst_convert();
+#endif
+#if  YAZ_HAVE_XSLT 
+    tst_convert1();
+    tst_convert2();
 #endif
     YAZ_CHECK_TERM;
 }