7482535ad915ab25bdb405edb67cca674dfe1ae5
[yaz-moved-to-github.git] / test / tst_retrieval.c
1 /*
2  * Copyright (C) 2005-2006, Index Data ApS
3  * See the file LICENSE for details.
4  *
5  * $Id: tst_retrieval.c,v 1.1 2006-05-04 20:00:45 adam Exp $
6  *
7  */
8 #include <yaz/retrieval.h>
9 #include <yaz/test.h>
10 #include <yaz/wrbuf.h>
11 #include <string.h>
12
13 #if HAVE_CONFIG_H
14 #include <config.h>
15 #endif
16
17 #if HAVE_XSLT
18
19 #include <libxml/parser.h>
20 #include <libxml/tree.h>
21
22 yaz_retrieval_t conv_configure(const char *xmlstring, WRBUF w)
23 {
24     xmlDocPtr doc = xmlParseMemory(xmlstring, strlen(xmlstring));
25     if (!doc)
26     {
27         wrbuf_printf(w, "xmlParseMemory");
28         return 0;
29     }
30     else
31     {
32         xmlNodePtr ptr = xmlDocGetRootElement(doc);
33         yaz_retrieval_t p = yaz_retrieval_create();
34
35         if (p)
36         {
37             const char *srcdir = getenv("srcdir");
38             if (srcdir)
39                 yaz_retrieval_set_path(p, srcdir);
40         }
41         if (!ptr)
42         {
43             wrbuf_printf(w, "xmlDocGetRootElement");
44             yaz_retrieval_destroy(p);
45             p = 0;
46         }
47         else if (!p)
48         {
49             wrbuf_printf(w, "yaz_retrieval_create");
50         }
51         else
52         {
53             int r = yaz_retrieval_configure(p, ptr);
54             
55             if (r)
56             {
57                 wrbuf_puts(w, yaz_retrieval_get_error(p));
58                 yaz_retrieval_destroy(p);
59                 p = 0;
60             }
61         }
62         xmlFreeDoc(doc);
63         return p;
64     }    
65 }
66
67 int conv_configure_test(const char *xmlstring, const char *expect_error,
68                         yaz_retrieval_t *pt)
69 {
70     WRBUF w = wrbuf_alloc();
71     int ret;
72
73     yaz_retrieval_t p = conv_configure(xmlstring, w);
74
75     if (!p)
76     {
77         if (expect_error && !strcmp(wrbuf_buf(w), expect_error))
78             ret = 1;
79         else
80         {
81             ret = 0;
82             printf("%.*s\n", wrbuf_len(w), wrbuf_buf(w));
83         }
84     }
85     else
86     {
87         if (expect_error)
88         {
89             ret = 0;
90             yaz_retrieval_destroy(p);
91         }
92         else
93         {
94             if (pt)
95                 *pt = p;
96             else
97                 yaz_retrieval_destroy(p);
98             ret = 1;
99         }
100     }
101     wrbuf_free(w, 1);
102     return ret;
103 }
104
105 static void tst_configure()
106 {
107     YAZ_CHECK(conv_configure_test("<bad", "xmlParseMemory", 0));
108 #if 0
109     YAZ_CHECK(conv_configure_test("<bad/>", "Missing 'convert' element", 0));
110     YAZ_CHECK(conv_configure_test("<convert/>", 0, 0));
111     YAZ_CHECK(conv_configure_test("<convert><bad/></convert>",
112                                   "Bad element 'bad'."
113                                   "Expected marc, xslt, ..", 0));
114     YAZ_CHECK(conv_configure_test("<convert>"
115                                   "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
116                                   "<marc"
117                                   " inputcharset=\"marc-8\""
118                                   " outputcharset=\"marc-8\""
119                                   "/>"
120                                   "</convert>",
121                                   "Attribute 'inputformat' required", 0));
122     YAZ_CHECK(conv_configure_test("<convert>"
123                                   "<xslt stylesheet=\"tst_record_conv.xsl\"/>"
124                                   "<marc"
125                                   " inputcharset=\"utf-8\""
126                                   " outputcharset=\"marc-8\""
127                                   " inputformat=\"xml\""
128                                   " outputformat=\"marc\""
129                                   "/>"
130                                   "</convert>",
131                                   0, 0));
132 #endif
133 }
134
135 #endif
136
137 int main(int argc, char **argv)
138 {
139     YAZ_CHECK_INIT(argc, argv);
140 #if HAVE_XSLT
141     tst_configure();
142 #endif
143     YAZ_CHECK_TERM;
144 }
145
146 /*
147  * Local variables:
148  * c-basic-offset: 4
149  * indent-tabs-mode: nil
150  * End:
151  * vim: shiftwidth=4 tabstop=8 expandtab
152  */
153