1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
2 /* test-mevents.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 <glib.h>
22 #include <stdio.h>
23 #include <string.h>
24 #include <gdome.h>
25 #include <gdome-events.h>
26
27 char prop[128];
28
29 void
signprop(const char * str)30 signprop (const char *str)
31 {
32 strcat (prop, str);
33 }
34
35 void
resetprop()36 resetprop ()
37 {
38 prop[0] = '\0';
39 }
40
41
callback(GdomeEventListener * self,GdomeEvent * event,GdomeException * exc)42 void callback (GdomeEventListener *self,
43 GdomeEvent *event,
44 GdomeException *exc)
45 {
46 GdomeNode *ct = gdome_mevnt_currentTarget ((GdomeMutationEvent *)event, exc);
47 GdomeDOMString *attrName, *id;
48
49 if (ct != NULL && gdome_n_nodeType (ct, exc) == GDOME_ELEMENT_NODE) {
50 attrName = gdome_str_mkref ("ITEM");
51 id = gdome_el_getAttribute ((GdomeElement *)ct, attrName, exc);
52 gdome_str_unref (attrName);
53 signprop (id->str);
54 gdome_str_unref (id);
55 }
56 else
57 signprop (" ");
58 gdome_n_unref (ct, exc);
59 }
60
61 void
dot()62 dot() {
63 printf(".");
64 fflush(stdout);
65 }
66
67 gboolean
test_mevents(GdomeDocument * doc)68 test_mevents (GdomeDocument *doc)
69 {
70 GdomeException exc;
71 GdomeElement *els[6], *el1, *el2;
72 GdomeEventListener *evl;
73 GdomeDOMString *id, *evntType, *str, *attrValue;
74 GdomeNode *result;
75 GdomeAttr *attr;
76 GdomeText *txt;
77 gchar buff[2];
78 gboolean ret = TRUE;
79 int i;
80 buff[1] = '\0';
81
82 evl = gdome_evntl_mkref (callback, NULL);
83
84 /* Get els refs */
85 for (i=0; i<6 && ret; i++) {
86 buff[0]='0'+i;
87 id = gdome_str_mkref_dup (buff);
88 els[i] = gdome_doc_getElementById (doc, id, &exc);
89 if (els[i] == NULL)
90 fprintf (stderr, "\nDocument.getElementById(\"%s\"), NULL", buff), ret = FALSE;
91 gdome_str_unref (id);
92 }
93 dot();
94
95 /* Setting capture listeners */
96 evntType = gdome_str_mkref("DOMNodeInserted");
97 for (i=0; i<6; i++)
98 gdome_el_addEventListener (els[i], evntType, evl, TRUE, &exc);
99 gdome_str_unref (evntType);
100 evntType = gdome_str_mkref("DOMNodeInsertedIntoDocument");
101 for (i=0; i<6; i++)
102 gdome_el_addEventListener (els[i], evntType, evl, TRUE, &exc);
103 gdome_str_unref (evntType);
104 evntType = gdome_str_mkref("DOMNodeRemoved");
105 for (i=0; i<6; i++)
106 gdome_el_addEventListener (els[i], evntType, evl, TRUE, &exc);
107 gdome_str_unref (evntType);
108 evntType = gdome_str_mkref("DOMNodeRemovedFromDocument");
109 for (i=0; i<6; i++)
110 gdome_el_addEventListener (els[i], evntType, evl, TRUE, &exc);
111 gdome_str_unref (evntType);
112 evntType = gdome_str_mkref("DOMSubtreeModified");
113 for (i=0; i<6; i++)
114 gdome_el_addEventListener (els[i], evntType, evl, TRUE, &exc);
115 gdome_str_unref (evntType);
116 evntType = gdome_str_mkref("DOMAttrModified");
117 for (i=0; i<6; i++)
118 gdome_el_addEventListener (els[i], evntType, evl, TRUE, &exc);
119 gdome_str_unref (evntType);
120 evntType = gdome_str_mkref("DOMCharacterDataModified");
121 for (i=0; i<6; i++)
122 gdome_el_addEventListener (els[i], evntType, evl, TRUE, &exc);
123 gdome_str_unref (evntType);
124 dot();
125
126 /* DOMCharacterDataModified Test 1 */
127 txt = (GdomeText *)gdome_el_firstChild (els[3], &exc);
128 str = gdome_str_mkref ("Changed Test String");
129 gdome_t_set_data (txt, str, &exc);
130 gdome_str_unref (str);
131 gdome_t_unref (txt, &exc);
132 if (strcmp (prop, "0123012"))
133 fprintf (stderr, "\n DOMCharacterDataModified Test 1 , failed"), ret = FALSE;
134 resetprop();
135 dot();
136
137 /* DOMNodeInserted Test 1 */
138 str = gdome_str_mkref ("WOW");
139 txt = gdome_doc_createTextNode (doc, str, &exc);
140 result = gdome_el_appendChild (els[2], (GdomeNode *)txt, &exc);
141 gdome_n_unref (result, &exc);
142 gdome_t_unref (txt, &exc);
143 gdome_str_unref (str);
144 if (strcmp (prop, "01201201"))
145 fprintf (stderr, "\n DOMNodeInserted Test 1 , failed"), ret = FALSE;
146 resetprop();
147 dot();
148
149 /* DOMNodeInserted Test 2 */
150 str = gdome_str_mkref ("WOW");
151 txt = gdome_doc_createTextNode (doc, str, &exc);
152 gdome_str_unref (str);
153 str = gdome_str_mkref ("NEWEL");
154 el1 = gdome_doc_createElement (doc, str, &exc);
155 gdome_str_unref (str);
156 result = gdome_el_appendChild (el1, (GdomeNode *)txt, &exc);
157 gdome_n_unref (result, &exc);
158 gdome_t_unref (txt, &exc);
159 result = gdome_el_appendChild (els[1], (GdomeNode *)el1, &exc);
160 gdome_n_unref (result, &exc);
161 gdome_el_unref (el1, &exc);
162 if (strcmp (prop, "0101010"))
163 fprintf (stderr, "\n DOMNodeInserted Test 2 , failed"), ret = FALSE;
164 resetprop();
165 dot();
166
167 /* DOMNodeInserted Test 3 */
168 str = gdome_str_mkref ("WOW");
169 txt = gdome_doc_createTextNode (doc, str, &exc);
170 gdome_str_unref (str);
171 str = gdome_str_mkref ("NEWEL");
172 el1 = gdome_doc_createElement (doc, str, &exc);
173 el2 = gdome_doc_createElement (doc, str, &exc);
174 gdome_str_unref (str);
175 result = gdome_el_appendChild (el2, (GdomeNode *)txt, &exc);
176 gdome_n_unref (result, &exc);
177 gdome_t_unref (txt, &exc);
178 str = gdome_str_mkref ("ITEM");
179 attrValue = gdome_str_mkref ("a");
180 gdome_el_setAttribute (el1, str, attrValue, &exc);
181 gdome_str_unref (attrValue);
182 attrValue = gdome_str_mkref ("b");
183 gdome_el_setAttribute (el2, str, attrValue, &exc);
184 gdome_str_unref (attrValue);
185 gdome_str_unref (str);
186 result = gdome_el_appendChild (el1, (GdomeNode *)el2, &exc);
187 gdome_n_unref (result, &exc);
188 evntType = gdome_str_mkref("DOMNodeInserted");
189 gdome_el_addEventListener (el1, evntType, evl, TRUE, &exc);
190 gdome_el_addEventListener (el2, evntType, evl, TRUE, &exc);
191 gdome_str_unref (evntType);
192 evntType = gdome_str_mkref("DOMNodeInsertedIntoDocument");
193 gdome_el_addEventListener (el1, evntType, evl, TRUE, &exc);
194 gdome_el_addEventListener (el2, evntType, evl, TRUE, &exc);
195 gdome_str_unref (evntType);
196 result = gdome_el_appendChild (els[3], (GdomeNode *)el1, &exc);
197 gdome_n_unref (result, &exc);
198 evntType = gdome_str_mkref("DOMNodeInserted");
199 gdome_el_removeEventListener (el1, evntType, evl, TRUE, &exc);
200 gdome_el_removeEventListener (el2, evntType, evl, TRUE, &exc);
201 gdome_str_unref (evntType);
202 evntType = gdome_str_mkref("DOMNodeInsertedIntoDocument");
203 gdome_el_removeEventListener (el1, evntType, evl, TRUE, &exc);
204 gdome_el_removeEventListener (el2, evntType, evl, TRUE, &exc);
205 gdome_str_unref (evntType);
206 gdome_el_unref (el2, &exc);
207 gdome_el_unref (el1, &exc);
208 if (strcmp (prop, "012301230123a0123ab012"))
209 fprintf (stderr, "\n DOMNodeInserted Test 3 , failed"), ret = FALSE;
210 resetprop();
211 dot();
212
213 /* DOMNodeRemoved Test 1 */
214 txt = (GdomeText *)gdome_el_lastChild (els[2], &exc);
215 result = gdome_el_removeChild (els[2], (GdomeNode *)txt, &exc);
216 gdome_n_unref (result, &exc);
217 gdome_t_unref (txt, &exc);
218 if (strcmp (prop, "01201201"))
219 fprintf (stderr, "\n DOMNodeRemoved Test 1 , failed"), ret = FALSE;
220 resetprop();
221 dot();
222
223 /* DOMNodeRemoved Test 2 */
224 el1 = (GdomeElement *)gdome_el_lastChild (els[1], &exc);
225 txt = (GdomeText *)gdome_el_lastChild (el1, &exc);
226 result = gdome_el_removeChild (els[1], (GdomeNode *)el1, &exc);
227 gdome_n_unref (result, &exc);
228 gdome_t_unref (txt, &exc);
229 gdome_el_unref (el1, &exc);
230 if (strcmp (prop, "0101010"))
231 fprintf (stderr, "\n DOMNodeRemoved Test 2 , failed"), ret = FALSE;
232 resetprop();
233 dot();
234
235 /* DOMNodeRemoved Test 3 */
236 el1 = (GdomeElement *)gdome_el_lastChild (els[3], &exc);
237 el2 = (GdomeElement *)gdome_el_lastChild (el1, &exc);
238 evntType = gdome_str_mkref("DOMNodeRemoved");
239 gdome_el_addEventListener (el1, evntType, evl, TRUE, &exc);
240 gdome_el_addEventListener (el2, evntType, evl, TRUE, &exc);
241 gdome_str_unref (evntType);
242 evntType = gdome_str_mkref("DOMNodeRemovedFromDocument");
243 gdome_el_addEventListener (el1, evntType, evl, TRUE, &exc);
244 gdome_el_addEventListener (el2, evntType, evl, TRUE, &exc);
245 gdome_str_unref (evntType);
246 result = gdome_el_removeChild (els[3], (GdomeNode *)el1, &exc);
247 gdome_n_unref (result, &exc);
248 evntType = gdome_str_mkref("DOMNodeRemoved");
249 gdome_el_removeEventListener (el1, evntType, evl, TRUE, &exc);
250 gdome_el_removeEventListener (el2, evntType, evl, TRUE, &exc);
251 gdome_str_unref (evntType);
252 evntType = gdome_str_mkref("DOMNodeRemovedFromDocument");
253 gdome_el_removeEventListener (el1, evntType, evl, TRUE, &exc);
254 gdome_el_removeEventListener (el2, evntType, evl, TRUE, &exc);
255 gdome_str_unref (evntType);
256 gdome_el_unref (el2, &exc);
257 gdome_el_unref (el1, &exc);
258 if (strcmp (prop, "012301230123a0123ab012"))
259 fprintf (stderr, "\n DOMNodeRemoved Test 3 , failed"), ret = FALSE;
260 resetprop();
261 dot();
262
263 /* DOMAttrModified ADDITION */
264 str = gdome_str_mkref ("ATTR");
265 attrValue = gdome_str_mkref ("attrValue");
266 attr = gdome_doc_createAttribute (doc, str, &exc);
267 gdome_a_set_value (attr, attrValue, &exc);
268 gdome_str_unref (attrValue);
269 gdome_str_unref (str);
270 gdome_el_setAttributeNode (els[3], attr, &exc);
271 if (strcmp (prop, "012012"))
272 fprintf (stderr, "\n DOMAttrModified ADDITION , failed"), ret = FALSE;
273 resetprop();
274 dot();
275
276 /* DOMAttrModified MODIFICATION */
277 attrValue = gdome_str_mkref ("attrNewValue");
278 gdome_a_set_value (attr, attrValue, &exc);
279 gdome_str_unref (attrValue);
280 gdome_a_unref (attr, &exc);
281 if (strcmp (prop, "012012"))
282 fprintf (stderr, "\n DOMAttrModified MODIFICATION , failed"), ret = FALSE;
283 resetprop();
284 dot();
285
286 /* DOMAttrModified REMOVAL */
287 str = gdome_str_mkref ("attr");
288 gdome_el_removeAttribute (els[3], str, &exc);
289 gdome_str_unref (str);
290 str = gdome_str_mkref ("ATTR");
291 gdome_el_removeAttribute (els[3], str, &exc);
292 gdome_str_unref (str);
293 if (strcmp (prop, "012012"))
294 fprintf (stderr, "\n DOMAttrModified REMOVAL , failed"), ret = FALSE;
295 resetprop();
296 dot();
297
298 /* Remove capture listeners */
299 evntType = gdome_str_mkref("DOMNodeInserted");
300 for (i=0; i<6; i++)
301 gdome_el_removeEventListener (els[i], evntType, evl, TRUE, &exc);
302 gdome_str_unref (evntType);
303 evntType = gdome_str_mkref("DOMNodeInsertedIntoDocument");
304 for (i=0; i<6; i++)
305 gdome_el_removeEventListener (els[i], evntType, evl, TRUE, &exc);
306 gdome_str_unref (evntType);
307 evntType = gdome_str_mkref("DOMNodeRemoved");
308 for (i=0; i<6; i++)
309 gdome_el_removeEventListener (els[i], evntType, evl, TRUE, &exc);
310 gdome_str_unref (evntType);
311 evntType = gdome_str_mkref("DOMNodeRemovedFromDocument");
312 for (i=0; i<6; i++)
313 gdome_el_removeEventListener (els[i], evntType, evl, TRUE, &exc);
314 gdome_str_unref (evntType);
315 evntType = gdome_str_mkref("DOMSubtreeModified");
316 for (i=0; i<6; i++)
317 gdome_el_removeEventListener (els[i], evntType, evl, TRUE, &exc);
318 gdome_str_unref (evntType);
319 evntType = gdome_str_mkref("DOMAttrModified");
320 for (i=0; i<6; i++)
321 gdome_el_removeEventListener (els[i], evntType, evl, TRUE, &exc);
322 gdome_str_unref (evntType);
323 evntType = gdome_str_mkref("DOMCharacterDataModified");
324 for (i=0; i<6; i++)
325 gdome_el_removeEventListener (els[i], evntType, evl, TRUE, &exc);
326 gdome_str_unref (evntType);
327 dot();
328
329 for (i=0; i<6; i++)
330 gdome_el_unref (els[i], &exc);
331
332 gdome_evntl_unref (evl, &exc);
333
334 printf ("test_mevents\n");
335 return ret;
336 }
337
338 int
main(int argc,char ** argv)339 main (int argc, char **argv)
340 {
341 GdomeDOMImplementation *domImpl = NULL;
342 GdomeDocument *domdoc = NULL;
343 GdomeException exc = 0;
344 gboolean ret = FALSE;
345
346 domImpl = gdome_di_mkref();
347 domdoc = gdome_di_createDocFromURI (domImpl, LOCALDIR"/test-mevents.xml", GDOME_LOAD_PARSING, &exc);
348 if (domdoc == NULL) {
349 fprintf (stderr, "DOImplementation.createDocFromURI: failed\n test-mevents.xml not found\n");
350 return -1;
351 }
352
353 ret = test_mevents(domdoc);
354 gdome_doc_unref(domdoc, &exc);
355
356 if(ret)
357 return 0;
358 else
359 return -1;
360 }
361