Beef up test a bit
[yaz-moved-to-github.git] / test / tst_record_conv.c
index 89d1f72..42518b7 100644 (file)
@@ -1,9 +1,6 @@
-/*
- * Copyright (C) 2005-2006, Index Data ApS
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2008 Index Data
  * See the file LICENSE for details.
- *
- * $Id: tst_record_conv.c,v 1.11 2006-10-04 16:59:34 mike Exp $
- *
  */
 #include <yaz/record_conv.h>
 #include <yaz/test.h>
@@ -52,6 +49,8 @@ yaz_record_conv_t conv_configure(const char *xmlstring, WRBUF w)
         }
         else
         {
+
+
             int r = yaz_record_conv_configure(p, ptr);
             
             if (r)
@@ -76,73 +75,77 @@ int conv_configure_test(const char *xmlstring, const char *expect_error,
 
     if (!p)
     {
-        if (expect_error && !strcmp(wrbuf_buf(w), expect_error))
+        if (expect_error && !strcmp(wrbuf_cstr(w), expect_error))
             ret = 1;
         else
         {
             ret = 0;
-            printf("%.*s\n", wrbuf_len(w), wrbuf_buf(w));
+            printf("%s\n", wrbuf_cstr(w));
         }
     }
     else
     {
         if (expect_error)
-        {
             ret = 0;
-            yaz_record_conv_destroy(p);
-        }
         else
-        {
             ret = 1;
-        }
     }
+
     if (pt)
         *pt = p;
     else
-        yaz_record_conv_destroy(p);
+        if (p)
+            yaz_record_conv_destroy(p);
 
-    wrbuf_free(w, 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/>", "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("<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("<convert>"
+    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>"
+                                  "</backend>",
+                                  "Element <marc>: attribute 'inputformat' "
+                                  "required", 0));
+    YAZ_CHECK(conv_configure_test("<backend syntax='usmarc' name='F'>"
                                   "<xslt/>"
-                                  "</convert>",
-                                  "Missing attribute 'stylesheet'", 0));
-    YAZ_CHECK(conv_configure_test("<convert>"
-                                  "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
+                                  "</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("<convert>"
+    YAZ_CHECK(conv_configure_test("<backend syntax='usmarc' name='F'>"
                                   "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
-                                  "</convert>",
+                                  "</backend>",
                                   "xslt unsupported."
                                   " YAZ compiled without XSLT support", 0));
-#endif
+#endif 
 }
 
 static int conv_convert_test(yaz_record_conv_t p,
@@ -176,32 +179,36 @@ static int conv_convert_test(yaz_record_conv_t p,
             {
                 ret = 0;
             }
-            else if (strlen(output_expect_record) != wrbuf_len(output_record))
+            else if (strcmp(output_expect_record, wrbuf_cstr(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);
+                printf("got-output_record len=%d: %s\n", 
+                       wrbuf_len(output_record),wrbuf_cstr(output_record));
+                printf("output_expect_record len=%d %s\n",
+                       strlen(output_expect_record), output_expect_record);
             }
             else
             {
                 ret = 1;
             }
         }
-        wrbuf_free(output_record, 1);
+        wrbuf_destroy(output_record);
+    }
+    return ret;
+}
+
+static int conv_convert_test_iter(yaz_record_conv_t p,
+                                  const char *input_record,
+                                  const char *output_expect_record,
+                                  int num_iter)
+{
+    int i;
+    int ret;
+    for (i = 0; i < num_iter; i++)
+    {
+        ret = conv_convert_test(p, input_record, output_expect_record);
+        if (!ret)
+            break;
     }
     return ret;
 }
@@ -224,32 +231,32 @@ static void tst_convert1(void)
         "\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"
@@ -264,13 +271,13 @@ static void tst_convert1(void)
                                   " 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"
@@ -283,7 +290,7 @@ static void tst_convert1(void)
                                   " outputformat=\"marcxml\""
                                   " inputformat=\"marc\""
                                   "/>"
-                                  "</convert>",
+                                  "</backend>",
                                   0, &p));
     YAZ_CHECK(conv_convert_test(p, marcxml_rec, marcxml_rec));
     yaz_record_conv_destroy(p);
@@ -307,16 +314,16 @@ static void tst_convert2(void)
         "\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("<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_CHECK(conv_convert_test_iter(p, marcxml_rec, iso2709_rec, 100));
     yaz_record_conv_destroy(p);
 }
 
@@ -329,7 +336,7 @@ int main(int argc, char **argv)
 #if YAZ_HAVE_XML2
     tst_configure();
 #endif
-#if YAZ_HAVE_XSLT
+#if  YAZ_HAVE_XSLT 
     tst_convert1();
     tst_convert2();
 #endif