+static void tst_configure()
+{
+ 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>"
+ "<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\"/>"
+ "<marc"
+ " inputcharset=\"utf-8\""
+ " outputcharset=\"marc-8\""
+ " inputformat=\"xml\""
+ " outputformat=\"marc\""
+ "/>"
+ "</convert>",
+ 0, 0));
+}
+
+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, 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()