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