1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
2 /* test-nodelist.c
3 *
4 * Copyright (C) 2001 Paolo Casarini <paolo@casarini.org>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21 #include <stdio.h>
22 #include <gdome.h>
23
24 void
dot()25 dot() {
26 printf(".");
27 fflush(stdout);
28 }
29
30 gboolean
test_nl(GdomeElement * el)31 test_nl(GdomeElement *el) {
32 GdomeNodeList *nl;
33
34 GdomeDOMString *name;
35 GdomeDOMString *URI;
36 GdomeException exc;
37 GdomeNode *node, *childs[7], *tmp;
38 unsigned long lun, i;
39 gboolean ret = TRUE;
40
41 /* test NodeList.length */
42 name = gdome_str_mkref("NODE");
43 nl = gdome_el_getElementsByTagName(el, name, &exc);
44 lun = gdome_nl_length(nl, &exc);
45 if(lun != 19)
46 fprintf(stderr,"\nNodeList.length(NULL,\"%s\"), wrong",name->str), ret = FALSE;
47 gdome_str_unref (name);
48 gdome_nl_unref(nl, &exc);
49 name = gdome_str_mkref("*");
50 nl = gdome_el_getElementsByTagName(el, name, &exc);
51 lun = gdome_nl_length(nl, &exc);
52 if(lun != 35)
53 fprintf(stderr,"\nNodeList.length(NULL,\"%s\"), wrong",name->str), ret = FALSE;
54 gdome_str_unref (name);
55 gdome_nl_unref(nl, &exc);
56 name = gdome_str_mkref("OTHER");
57 nl = gdome_el_getElementsByTagName(el, name, &exc);
58 lun = gdome_nl_length(nl, &exc);
59 if(lun != 16)
60 fprintf(stderr,"\nNodeList.length(NULL,\"%s\"), wrong",name->str), ret = FALSE;
61 gdome_str_unref (name);
62 gdome_nl_unref(nl, &exc);
63 name = gdome_str_mkref("NODE");
64 URI = gdome_str_mkref("urn:cips.ciak.uk");
65 nl = gdome_el_getElementsByTagNameNS(el, URI, name, &exc);
66 lun = gdome_nl_length(nl, &exc);
67 if(lun != 9)
68 fprintf(stderr,"\nNodeList.length(\"%s\",\"%s\"), wrong",URI->str,name->str), ret = FALSE;
69 gdome_str_unref (name);
70 gdome_str_unref (URI);
71 gdome_nl_unref(nl, &exc);
72 name = gdome_str_mkref("*");
73 URI = gdome_str_mkref("urn:cips.ciak.uk");
74 nl = gdome_el_getElementsByTagNameNS(el, URI, name, &exc);
75 lun = gdome_nl_length(nl, &exc);
76 if(lun != 9)
77 fprintf(stderr,"\nNodeList.length(\"%s\",\"%s\"), wrong",URI->str,name->str), ret = FALSE;
78 gdome_str_unref (name);
79 gdome_str_unref (URI);
80 gdome_nl_unref(nl, &exc);
81 name = gdome_str_mkref("NODE");
82 URI = gdome_str_mkref("*");
83 nl = gdome_el_getElementsByTagNameNS(el, URI, name, &exc);
84 lun = gdome_nl_length(nl, &exc);
85 if(lun != 19)
86 fprintf(stderr,"\nNodeList.length(\"%s\",\"%s\"), wrong",URI->str,name->str), ret = FALSE;
87 gdome_str_unref (URI);
88 gdome_str_unref (name);
89 gdome_nl_unref(nl, &exc);
90 dot();
91
92 /* test Nodelist::item */
93 name = gdome_str_mkref("NODE");
94 nl = gdome_el_getElementsByTagName(el, name, &exc);
95 for(i=0; i<19 && ret;i++) {
96 node = gdome_nl_item(nl, i, &exc);
97 if(node == NULL)
98 fprintf(stderr,"\nNodeList.item(%lu), NULL",i), ret = FALSE;
99 else
100 gdome_n_unref(node,&exc);
101 }
102 gdome_nl_unref(nl, &exc);
103 gdome_str_unref (name);
104 name = gdome_str_mkref("NODE");
105 URI = gdome_str_mkref("urn:cips.ciak.uk");
106 nl = gdome_el_getElementsByTagNameNS(el, URI, name, &exc);
107 for(i=0; i<9 && ret;i++) {
108 node = gdome_nl_item(nl, i, &exc);
109 if(node == NULL)
110 fprintf(stderr,"\nNodeList.item(%lu) NS, NULL",i), ret = FALSE;
111 else
112 gdome_n_unref(node,&exc);
113 }
114 gdome_nl_unref(nl, &exc);
115 gdome_str_unref (name);
116 gdome_str_unref (URI);
117 dot();
118
119 /* test Nodelist in GdomeNode.childNodes*/
120 name = gdome_str_mkref("NODE");
121 nl = gdome_el_getElementsByTagName(el, name, &exc);
122 node = gdome_nl_item(nl, 9L, &exc);
123 gdome_nl_unref(nl, &exc);
124 gdome_str_unref (name);
125 nl = gdome_n_childNodes(node, &exc);
126 lun = gdome_nl_length(nl, &exc);
127 if (lun != 7)
128 fprintf(stderr,"\nNodeList.length() ChildNodes, wrong"), ret = FALSE;
129 for(i=0; i<lun && ret ;i++) {
130 childs[i] = gdome_nl_item(nl, i, &exc);
131 if (childs[i] == NULL)
132 fprintf(stderr,"\nNodeList.item(%lu) ChildNodes, NULL", i), ret = FALSE;
133 }
134 dot();
135
136 /* Test Nodelist Liveness */
137 for (i=0; i<lun ; i++) {
138 tmp = gdome_n_removeChild (node, childs[i], &exc);
139 gdome_n_unref (tmp, &exc);
140 }
141 if (gdome_nl_length (nl, &exc) != 0)
142 fprintf(stderr,"\nNodeList NOT LIVE"), ret = FALSE;
143 for (i=0; i<7 && ret; i++) {
144 tmp = gdome_n_appendChild (node, childs[i], &exc);
145 gdome_n_unref (tmp, &exc);
146 gdome_n_unref (childs[i], &exc);
147 if (gdome_nl_length (nl, &exc) != i+1)
148 fprintf(stderr,"\nNodeList NOT LIVE"), ret = FALSE;
149 }
150 gdome_nl_unref (nl, &exc);
151 gdome_n_unref (node, &exc);
152 dot();
153
154 printf("test_nodelist\n");
155
156 return ret;
157 }
158
159 int
main(int argc,char ** argv)160 main (int argc, char **argv)
161 {
162 GdomeDOMImplementation *domImpl = NULL;
163 GdomeDocument *domdoc = NULL;
164 GdomeElement *el = NULL;
165 GdomeException exc = 0;
166 gboolean ret;
167
168 domImpl = gdome_di_mkref();
169 domdoc = gdome_di_createDocFromURI(domImpl, LOCALDIR"/test-nodelist.xml", GDOME_LOAD_PARSING, &exc);
170 if (domdoc == NULL) {
171 fprintf (stderr, "DOImplementation.createDocFromURI: failed\n test-nodelist.xml not found\n");
172 return -1;
173 }
174 el = gdome_doc_documentElement (domdoc, &exc);
175 if (el == NULL) {
176 fprintf (stderr, "Document.documentElement: failed\n");
177 return -1;
178 }
179 ret = test_nl(el);
180 gdome_el_unref (el, &exc);
181 gdome_doc_unref(domdoc, &exc);
182
183
184 if(ret)
185 return 0;
186 else
187 return -1;
188 }
189