rpn2solr: support truncation left(2), left&right(3) YAZ-718
[yaz-moved-to-github.git] / test / test_soap2.c
1 /* This file is part of the YAZ toolkit.
2  * Copyright (C) Index Data
3  * See the file LICENSE for details.
4  */
5 #if HAVE_CONFIG_H
6 #include <config.h>
7 #endif
8
9 #include <stdlib.h>
10 #include <yaz/test.h>
11 #include <yaz/srw.h>
12 #include <yaz/soap.h>
13
14 #if YAZ_HAVE_XML2
15 #include <libxml/parser.h>
16
17 static void tst_srw(void)
18 {
19     const char *charset = 0;
20     char *content_buf = 0;
21     int content_len;
22     int ret;
23     ODR o = odr_createmem(ODR_ENCODE);
24     Z_SOAP_Handler h[2] = {
25         {"http://www.loc.gov/zing/srw/", 0, (Z_SOAP_fun) yaz_srw_codec},
26         {0, 0, 0}
27     };
28     Z_SRW_PDU *sr = yaz_srw_get(o, Z_SRW_searchRetrieve_request);
29     Z_SOAP *p = (Z_SOAP *) odr_malloc(o, sizeof(*p));
30
31     YAZ_CHECK(o);
32     YAZ_CHECK(sr);
33     YAZ_CHECK(p);
34 #if 0
35     sr->u.request->query = "jordb" "\xe6" "r";
36 #else
37     sr->u.request->query = "jordbaer";
38 #endif
39
40     p->which = Z_SOAP_generic;
41     p->u.generic = (Z_SOAP_Generic *) odr_malloc(o, sizeof(*p->u.generic));
42     p->u.generic->no = 0;
43     p->u.generic->ns = 0;
44     p->u.generic->p = sr;
45     p->ns = "http://schemas.xmlsoap.org/soap/envelope/";
46
47     ret = z_soap_codec_enc(o, &p, &content_buf, &content_len, h, charset);
48     odr_destroy(o);
49     YAZ_CHECK(ret == 0);  /* codec failed ? */
50 }
51 #endif
52
53 static void tst_array_to_uri(void)
54 {
55     ODR odr = odr_createmem(ODR_ENCODE);
56     char **names;
57     char **values;
58     char *query_string;
59     int r;
60
61     r = yaz_uri_to_array("&", odr, &names, &values);
62     YAZ_CHECK_EQ(r, 0);
63     if (r == 0)
64     {
65         YAZ_CHECK(names[0] == 0);
66         YAZ_CHECK(values[0] == 0);
67     }
68     r = yaz_uri_to_array("&&", odr, &names, &values);
69     YAZ_CHECK_EQ(r, 0);
70     if (r == 0)
71     {
72         yaz_array_to_uri(&query_string, odr, names, values);
73         YAZ_CHECK(!strcmp(query_string, ""));
74
75         YAZ_CHECK(names[0] == 0);
76         YAZ_CHECK(values[0] == 0);
77     }
78     r = yaz_uri_to_array("a=AA&bb=%42B", odr, &names, &values);
79     YAZ_CHECK_EQ(r, 2);
80     if (r == 2)
81     {
82         YAZ_CHECK(names[0] && !strcmp(names[0], "a"));
83         YAZ_CHECK(values[0] && !strcmp(values[0], "AA"));
84
85         YAZ_CHECK(names[1] && !strcmp(names[1], "bb"));
86         YAZ_CHECK(values[1] && !strcmp(values[1], "BB"));
87
88         YAZ_CHECK(names[2] == 0);
89         YAZ_CHECK(values[2] == 0);
90
91         yaz_array_to_uri(&query_string, odr, names, values);
92         YAZ_CHECK(!strcmp(query_string, "a=AA&bb=BB"));
93     }
94     r = yaz_uri_to_array("a=AA&bb&x", odr, &names, &values);
95     YAZ_CHECK_EQ(r, 3);
96     if (r == 3)
97     {
98         YAZ_CHECK(names[0] && !strcmp(names[0], "a"));
99         YAZ_CHECK(values[0] && !strcmp(values[0], "AA"));
100
101         YAZ_CHECK(names[1] && !strcmp(names[1], "bb"));
102         YAZ_CHECK(values[1] && !strcmp(values[1], ""));
103
104         YAZ_CHECK(names[2] && !strcmp(names[2], "x"));
105         YAZ_CHECK(values[2] && !strcmp(values[1], ""));
106
107         YAZ_CHECK(names[3] == 0);
108         YAZ_CHECK(values[3] == 0);
109
110         yaz_array_to_uri(&query_string, odr, names, values);
111         YAZ_CHECK(!strcmp(query_string, "a=AA&bb=&x="));
112     }
113
114     r = yaz_uri_to_array("a=AA&bb=&x=", odr, &names, &values);
115     YAZ_CHECK_EQ(r, 3);
116     if (r == 3)
117     {
118         YAZ_CHECK(names[0] && !strcmp(names[0], "a"));
119         YAZ_CHECK(values[0] && !strcmp(values[0], "AA"));
120
121         YAZ_CHECK(names[1] && !strcmp(names[1], "bb"));
122         YAZ_CHECK(values[1] && !strcmp(values[1], ""));
123
124         YAZ_CHECK(names[2] && !strcmp(names[2], "x"));
125         YAZ_CHECK(values[2] && !strcmp(values[1], ""));
126
127         YAZ_CHECK(names[3] == 0);
128         YAZ_CHECK(values[3] == 0);
129
130         yaz_array_to_uri(&query_string, odr, names, values);
131         YAZ_CHECK(!strcmp(query_string, "a=AA&bb=&x="));
132     }
133
134     r = yaz_uri_to_array("a=AA&&&bb&x&&", odr, &names, &values);
135     YAZ_CHECK_EQ(r, 3);
136     if (r == 3)
137     {
138         YAZ_CHECK(names[0] && !strcmp(names[0], "a"));
139         YAZ_CHECK(values[0] && !strcmp(values[0], "AA"));
140
141         YAZ_CHECK(names[1] && !strcmp(names[1], "bb"));
142         YAZ_CHECK(values[1] && !strcmp(values[1], ""));
143
144         YAZ_CHECK(names[2] && !strcmp(names[2], "x"));
145         YAZ_CHECK(values[2] && !strcmp(values[2], ""));
146
147         YAZ_CHECK(names[3] == 0);
148         YAZ_CHECK(values[3] == 0);
149
150         yaz_array_to_uri(&query_string, odr, names, values);
151         YAZ_CHECK(!strcmp(query_string, "a=AA&bb=&x="));
152     }
153
154     odr_destroy(odr);
155 }
156
157 int main(int argc, char **argv)
158 {
159     YAZ_CHECK_INIT(argc, argv);
160 #if YAZ_HAVE_XML2
161     LIBXML_TEST_VERSION;
162     tst_srw();
163 #endif
164     tst_array_to_uri();
165     YAZ_CHECK_TERM;
166 }
167 /*
168  * Local variables:
169  * c-basic-offset: 4
170  * c-file-style: "Stroustrup"
171  * indent-tabs-mode: nil
172  * End:
173  * vim: shiftwidth=4 tabstop=8 expandtab
174  */
175