Added nmem_text_node_cdata which takes xmlNode CDATA content and
[yaz-moved-to-github.git] / test / tst_record_conv.c
1 /*
2  * Copyright (C) 2005-2006, Index Data ApS
3  * See the file LICENSE for details.
4  *
5  * $Id: tst_record_conv.c,v 1.1 2006-05-02 20:47:46 adam Exp $
6  *
7  */
8 #include <yaz/record_conv.h>
9 #include <yaz/test.h>
10 #include <yaz/wrbuf.h>
11 #include <string.h>
12
13 #if HAVE_XML2
14
15 #include <libxml/parser.h>
16 #include <libxml/tree.h>
17
18 yaz_record_conv_t conv_from_xml(const char *xmlstring, WRBUF w)
19 {
20     xmlDocPtr doc = xmlParseMemory(xmlstring, strlen(xmlstring));
21     if (!doc)
22     {
23         wrbuf_printf(w, "xmlParseMemory");
24         return 0;
25     }
26     else
27     {
28         xmlNodePtr ptr = xmlDocGetRootElement(doc);
29         yaz_record_conv_t p = yaz_record_conv_create();
30         
31         if (!ptr)
32         {
33             wrbuf_printf(w, "xmlDocGetRootElement");
34             yaz_record_conv_destroy(p);
35             p = 0;
36         }
37         else if (!p)
38         {
39             wrbuf_printf(w, "yaz_record_conv_create");
40         }
41         else
42         {
43             int r = yaz_record_conv_configure(p, ptr);
44             
45             if (r)
46             {
47                 wrbuf_puts(w, yaz_record_conv_get_error(p));
48                 yaz_record_conv_destroy(p);
49                 p = 0;
50             }
51         }
52         xmlFreeDoc(doc);
53         return p;
54     }    
55 }
56
57 int conv_from_xml_compare(const char *xmlstring, const char *expect_error,
58                           yaz_record_conv_t *pt)
59 {
60     WRBUF w = wrbuf_alloc();
61     int ret;
62
63     yaz_record_conv_t p = conv_from_xml(xmlstring, w);
64
65     if (!p)
66     {
67         if (expect_error && !strcmp(wrbuf_buf(w), expect_error))
68             ret = 1;
69         else
70             ret = 0;
71     }
72     else
73     {
74         if (expect_error)
75         {
76             ret = 0;
77             yaz_record_conv_destroy(p);
78         }
79         else
80         {
81             if (pt)
82                 *pt = p;
83             else
84                 yaz_record_conv_destroy(p);
85             ret = 1;
86         }
87     }
88     wrbuf_free(w, 1);
89     return ret;
90 }
91
92 static void tst()
93 {
94     YAZ_CHECK(conv_from_xml_compare("<bad", "xmlParseMemory", 0));
95     YAZ_CHECK(conv_from_xml_compare("<bad/>", "Missing 'convert' element", 0));
96     YAZ_CHECK(conv_from_xml_compare("<convert/>", 0, 0));
97     YAZ_CHECK(conv_from_xml_compare("<convert><bad/></convert>",
98                                     "Bad element 'bad'."
99                                     "Expected xslt, marc_to_xml,...", 0));
100     YAZ_CHECK(conv_from_xml_compare("<convert>"
101                                     "<xslt stylesheet=\"x.xsl\"/>"
102                                     "<marc_to_xml charset=\"marc-8\"/>"
103                                     "</convert>",
104                                     0, 0));
105 }
106 #endif
107
108 int main(int argc, char **argv)
109 {
110     YAZ_CHECK_INIT(argc, argv);
111 #if HAVE_XML2
112     tst();
113 #endif
114     YAZ_CHECK_TERM;
115 }
116
117 /*
118  * Local variables:
119  * c-basic-offset: 4
120  * indent-tabs-mode: nil
121  * End:
122  * vim: shiftwidth=4 tabstop=8 expandtab
123  */
124