1: /**
2: * LibAxl: Another XML library (regression test)
3: * Copyright (C) 2006 Advanced Software Production Line, S.L.
4: */
5: #include <axl.h>
6: #include <axl_ns.h>
7: #include <axl_babel.h>
8:
9: #define test_41_iso_8859_1_value "!\"#$%'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
10:
11: #define test_41_iso_8859_2_value "!\"#$%'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~Ą˘Ł¤ĽŚ§¨ŠŞŤŹŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ"
12:
13: #define test_41_iso_8859_3_value "!\"#$%'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~Ħ˘£¤Ĥ§¨İŞĞĴŻ°ħ²³´µĥ·¸ışğĵ½żÀÁÂÄĊĈÇÈÉÊËÌÍÎÏÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâäċĉçèéêëìíîïñòóôġö÷ĝùúûüŭŝ˙"
14:
15: #define test_41_iso_8859_4_value "#$%'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ĄĸŖ¤ĨĻ§¨ŠĒĢŦŽ¯°ą˛ŗ´ĩļˇ¸šēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖ×ØŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙"
16:
17: #define test_41_iso_8859_5_value "#$%'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ЁЂЃЄЅІЇЈЉЊЋЌЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ"
18:
19: #define test_41_iso_8859_6_value "!\"#$%&'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~¤،؛؟ءآأؤإئابةتثجحخدذرزسشصضطظعغـفقكلمنهوىيًٌٍَُِّْ"
20:
21: #define test_41_iso_8859_7_value "!\"#$%'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~‘’£€₯¦§¨©ͺ«¬―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ"
22:
23: #define test_41_iso_8859_8_value "!\"#$%'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~¢£¤¥¦§¨©×«¬®¯°±²³´µ¶·¸¹÷»¼½¾‗אבגדהוזחטיךכלםמןנסעףפץצקרשת"
24:
25: #define test_41_iso_8859_9_value "!\"#$%'()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖ×ØÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ"
26:
27: #define test_41_iso_8859_15_value "Esto es una prueba: camión, españa, y la tabla de caráteres!\"#$%()*+,-./0123456789:;=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£€¥Š§š©ª«¬®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"
28:
29: /**
30: * @brief Check that xml node attributes can't be added twice
31: */
32: axl_bool test_45 (axlError ** error)
33: {
34: axlAttrCursor * cursor;
35: axlDoc * doc;
36: axlNode * node;
37: int count;
38:
39: doc = axl_doc_parse ("<root value='test1' />", 24, NULL);
40: if (doc == NULL) {
41: printf ("Expected to find proper document parsing but found NULL\n");
42: return axl_false;
43: } /* end if */
44:
45: /* get root node */
46: node = axl_doc_get_root (doc);
47:
48: /* get attribute value */
49: if (! HAS_ATTR (node, "value")) {
50: printf ("Expected to find attribute value but not found..\n");
51: return axl_false;
52: } /* end if */
53:
54: /* set new attribute */
55: axl_node_set_attribute (node, "value", "test2");
56:
57: /* check now many attributes we have */
58: cursor = axl_node_attr_cursor_new (node);
59: count = 0;
60: while (axl_node_attr_cursor_has_item (cursor)) {
61:
62: count++;
63:
64: /* next attribute */
65: axl_node_attr_cursor_next (cursor);
66: }
67: axl_node_attr_cursor_free (cursor);
68:
69: /* check count here */
70: if (count != 1) {
71: printf ("Error, expected to find 1 attribute but found: %d\n", count);
72: return axl_false;
73: }
74:
75: if (! HAS_ATTR_VALUE (node, "value", "test1")) {
76: printf ("Error, expected to find updated value=test1 but found %s..\n", ATTR_VALUE (node, "value"));
77: return axl_false;
78: }
79:
80: axl_doc_free (doc);
81:
82: return axl_true;
83: }
84:
85: /**
86: * @brief Check and fix DTD bug
87: */
88: axl_bool test_44 (axlError ** error)
89: {
90:
91: axlDoc * doc;
92: axlDtd * dtd;
93:
94: /* parse the document found */
95: doc = axl_doc_parse_from_file ("test_44.xml", error);
96: if (doc == NULL)
97: return axl_false;
98:
99:
100: dtd = axl_dtd_parse_from_file ("test_44.dtd", error);
101: if (dtd == NULL)
102: return axl_false;
103:
104: /* now validate the document */
105: if (! axl_dtd_validate (doc, dtd, error)) {
106: return axl_false;
107: }
108:
109: /* release memory used by the parser */
110: axl_doc_free (doc);
111:
112: /* parse the document found */
113: doc = axl_doc_parse_from_file ("test_44_b.xml", error);
114: if (doc == NULL)
115: return axl_false;
116:
117: /* now validate the document */
118: if (! axl_dtd_validate (doc, dtd, error)) {
119: return axl_false;
120: }
121:
122: /* release memory used by the DTD element */
123: axl_dtd_free (dtd);
124:
125: /* release memory used by the parser */
126: axl_doc_free (doc);
127:
128: return axl_true;
129:
130: }
131:
132:
133: /**
134: * @brief Check a memory leak while operating with root nodes.
135: */
136: axl_bool test_43 (axlError ** error)
137: {
138: axlDoc * doc = axl_doc_parse("<example />", -1, NULL);
139: axlNode * root = axl_doc_get_root(doc);
140:
141: axl_node_set_name (root, "my_name");
142:
143: axl_doc_free(doc);
144: return axl_true;
145: }
146:
147: /**
148: * @brief Storing arbitrary binary content inside CDATA declaration
149: * including ']]>'.
150: *
151: * @param error The optional axlError to be used to report erros.
152: *
153: * @return axl_true tests are ok, otherwise axl_false is returned.
154: */
155: axl_bool test_42 (axlError ** error)
156: {
157: axlDoc * doc;
158: axlNode * node;
159: char * content;
160: int size;
161:
162: /* parse example */
163: doc = axl_doc_parse_from_file ("test_42.xml", error);
164: if (doc == NULL)
165: return axl_false;
166:
167: node = axl_doc_get_root (doc);
168: content = axl_node_get_content_trans (node, NULL);
169:
170: /* check content */
171: if (! axl_cmp ("this is an example ]]> more content", content)) {
172: printf ("Expected to find: '%s' but found '%s'\n",
173: "this is an example ]]> more content", content);
174: axl_error_report (error, -1, "Expected to find a particular content but different value was found (1)");
175: return axl_false;
176: }
177:
178: axl_free (content);
179:
180: /* free document */
181: axl_doc_free (doc);
182:
183: /* parse example */
184: doc = axl_doc_parse_from_file ("test_42a.xml", error);
185: if (doc == NULL)
186: return axl_false;
187:
188: node = axl_doc_get_root (doc);
189: content = axl_node_get_content_trans (node, NULL);
190:
191: /* check content */
192: if (! axl_cmp ("this is an example ]]> more content ]]> second piece", content)) {
193: printf ("Expected to find: '%s' but found '%s'\n",
194: "this is an example ]]> more content ]]> second piece", content);
195: axl_error_report (error, -1, "Expected to find a particular content but different value was found (2)");
196: return axl_false;
197: }
198:
199: axl_free (content);
200:
201: /* free document */
202: axl_doc_free (doc);
203:
204: doc = axl_doc_parse ("<body />", 8, NULL);
205: node = axl_doc_get_root (doc);
206:
207: /* set CDATA content */
208: axl_node_set_cdata_content (node, "This is a test ]]> with not valid content <![CDATA[..]]>", 56);
209:
210: /* dump content */
211: if (! axl_doc_dump (doc, &content, &size)) {
212: axl_error_report (error, -1, "Failed to perform dump operation after CDATA content configuration..");
213: return axl_false;
214: }
215:
216: /* check dumped content */
217: if (! axl_cmp ("<?xml version='1.0' encoding='utf-8' ?><body><![CDATA[This is a test ]]>]]><![CDATA[ with not valid content <![CDATA[..]]>]]><![CDATA[]]></body>",
218: content)) {
219: printf ("Content found: '%s'\n", content);
220: printf ("Content expected: '%s'\n",
221: "<?xml version='1.0' ?><body><![CDATA[This is a test ]]>]]><![CDATA[ with not valid content <![CDATA[..]]>]]><![CDATA[]]></body>");
222: axl_error_report (error, -1, "Expected to find a different value for xml dump content");
223: return axl_false;
224: } /* end if */
225:
226: /* free content */
227: axl_free (content);
228:
229: /* now dump the content into a document */
230: if (! axl_doc_dump_to_file (doc, "test_42c.xml")) {
231: axl_error_report (error, -1, "Expected proper dump operation to file but it failed");
232: return axl_false;
233: } /* end if */
234:
235: /* free doc */
236: axl_doc_free (doc);
237:
238: /* open the document */
239: doc = axl_doc_parse_from_file ("test_42c.xml", error);
240: if (doc == NULL) {
241: printf ("Expected to open dumped document for CDATA check..\n");
242: return axl_false;
243: }
244:
245: /* get document root */
246: node = axl_doc_get_root (doc);
247: content = axl_node_get_content_trans (node, &size);
248:
249: if (! axl_cmp ("This is a test ]]> with not valid content <![CDATA[..]]>", content)) {
250: printf ("Content found: '%s'\n", content);
251: printf ("Content expected: '%s'\n", "This is a test ]]> with not valid content <![CDATA[..]]>");
252: axl_error_report (error, -1, "Expected to find different content in node found inside document dumped..");
253: return axl_false;
254: } /* end if */
255:
256: /* free content */
257: axl_free (content);
258:
259: /* free doc reference */
260: axl_doc_free (doc);
261:
262: doc = axl_doc_parse_from_file ("test_42d.xml", error);
263: if (doc == NULL) {
264: printf ("Expected to properly open test document test_42d.xml..\n");
265: return axl_false;
266: } /* end if */
267:
268: /* dump document */
269: if (! axl_doc_dump (doc, &content, &size)) {
270: printf ("Failed to dump document test_42d.xml..\n");
271: return axl_false;
272: } /* end if */
273:
274: /* free document */
275: axl_doc_free (doc);
276:
277: /* now create a document holding the content dumped */
278: doc = axl_doc_parse ("<body />", 8, error);
279: if (doc == NULL) {
280: printf ("Expected to find proper document parsing for <body />..\n");
281: return axl_false;
282: }
283:
284: /* set content */
285: node = axl_doc_get_root (doc);
286: axl_node_set_cdata_content (node, content, size);
287:
288: /* free content */
289: axl_free (content);
290:
291: /* now dump content created */
292: if (! axl_doc_dump (doc, &content, &size)) {
293: printf ("Failed to dump document test_42d.xml..\n");
294: return axl_false;
295: } /* end if */
296:
297: /* check content */
298: if (! axl_cmp (content,
299: "<?xml version='1.0' encoding='utf-8' ?><body><![CDATA[<?xml version='1.0' encoding='utf-8' ?><content><full-name><![CDATA[some data]]>]]><![CDATA[</full-name><nick><![CDATA[some data]]>]]><![CDATA[</nick><value><![CDATA[some data]]>]]><![CDATA[</value></content>]]></body>")) {
300: axl_error_report (error, -1, "Expected to find different value after dump operation..\n");
301: return axl_false;
302: }
303:
304: axl_free (content);
305: axl_doc_free (doc);
306:
307:
308: return axl_true;
309: }
310:
311: /**
312: * @brief Extended encoding support.
313: *
314: * @param error The optional axlError to be used to report erros.
315: *
316: * @return axl_true tests are ok, otherwise axl_false is returned.
317: */
318: axl_bool test_41 (axlError ** error)
319: {
320: axlDoc * doc;
321: axlNode * node;
322: int index;
323:
324: /* configure babel translate functions */
325: printf ("Test 41: init babel..\n");
326: if (! axl_babel_init (error))
327: return axl_false;
328:
329: /* check utf 8 */
330: printf ("Test 41: checking utf-8 engine..\n");
331: if (! axl_babel_check_utf8_content (test_41_iso_8859_15_value, strlen (test_41_iso_8859_15_value), &index)) {
332: printf ("ERROR: utf-8 content error found at index=%d..\n", index);
333: axl_error_new (-1, "Expected to find proper utf-8 content but it wasn't found", NULL, error);
334: return axl_false;
335: }
336:
337: /*** UTF-8 support */
338: /* test utf-8 encoding */
339: printf ("Test 41: test utf-8 support..\n");
340: doc = axl_doc_parse_from_file ("test_41.utf-8.xml", error);
341: if (doc == NULL)
342: return axl_false;
343:
344: /* find info node */
345: node = axl_doc_get_root (doc);
346: if (! NODE_CMP_NAME (node, "encodings")) {
347: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
348: return axl_false;
349: }
350:
351: axl_doc_free (doc);
352:
353: /* check unicode file without xml header */
354: printf ("Test 41: test utf-8 content without xml header..\n");
355: doc = axl_doc_parse_from_file ("test_41.utf-8.withoutheader.xml", error);
356: if (doc == NULL)
357: return axl_false;
358:
359: if (! axl_cmp (axl_doc_get_encoding (doc), "utf-8")) {
360: axl_error_new (-1, "Expected to find utf-8 content declaration but it wasn't found", NULL, error);
361: return axl_false;
362: }
363: axl_doc_free (doc);
364:
365: /* check unicode file without xml header */
366: printf ("Test 41: test wrong xml utf-8 content without xml header..\n");
367: doc = axl_doc_parse_from_file ("test_41.utf-8.wrongwithoutheader.xml", NULL);
368: if (doc != NULL)
369: return axl_false;
370:
371: /* test utf-8 encoding (wrong test) */
372: printf ("Test 41: test wrong utf-8 content..\n");
373: doc = axl_doc_parse_from_file ("test_41.utf-8.wrong.xml", error);
374: if (doc != NULL)
375: return axl_false;
376:
377: /* check unicode file without declaration */
378: printf ("Test 41: test utf-8 content without decleration..\n");
379: doc = axl_doc_parse_from_file ("test_41.utf-8.withoutencoding.xml", error);
380: if (doc == NULL)
381: return axl_false;
382:
383: if (! axl_cmp (axl_doc_get_encoding (doc), "utf-8")) {
384: axl_error_new (-1, "Expected to find utf-8 content declaration but it wasn't found", NULL, error);
385: return axl_false;
386: }
387: axl_doc_free (doc);
388:
389: /* check large unicode file without declearation */
390: printf ("Test 41: test large utf-8 content without decleration..\n");
391: doc = axl_doc_parse_from_file ("large.xml", error);
392: if (doc == NULL)
393: return axl_false;
394:
395: if (! axl_cmp (axl_doc_get_encoding (doc), "utf-8")) {
396: axl_error_new (-1, "Expected to find utf-8 content declaration but it wasn't found", NULL, error);
397: return axl_false;
398: }
399: axl_doc_free (doc);
400:
401: /*** ISO-8859-15 SUPPORT ***/
402: /* test iso-8859-15 encoding */
403: printf ("Test 41: test iso-8859-15..\n");
404: doc = axl_doc_parse_from_file ("test_41.iso-8859-15.xml", error);
405: if (doc == NULL)
406: return axl_false;
407:
408: /* find info node */
409: node = axl_doc_get_root (doc);
410: if (! NODE_CMP_NAME (node, "info")) {
411: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
412: return axl_false;
413: }
414:
415: /* check node content */
416: if (! axl_cmp (test_41_iso_8859_15_value,
417: axl_node_get_content (node, NULL))) {
418: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
419: (int) strlen (test_41_iso_8859_15_value), test_41_iso_8859_15_value,
420: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
421: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
422: return axl_false;
423: }
424:
425: /* free document */
426: axl_doc_free (doc);
427:
428: /*** ISO-8859-15 LARGE FILE ***/
429: printf ("Test 41: test iso-8859-15 large..\n");
430: /* now parse a large document that would require
431: * prebuffering */
432: doc = axl_doc_parse_from_file ("test_41.iso-8859-15.2.xml", error);
433: if (doc == NULL)
434: return axl_false;
435:
436: /* find info node */
437: node = axl_doc_get_root (doc);
438: if (! NODE_CMP_NAME (node, "info")) {
439: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
440: return axl_false;
441: }
442:
443: /* check utf-8 format */
444: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
445: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
446: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
447: return axl_false;
448: }
449:
450: if (strlen (axl_node_get_content (node, NULL)) != 26642) {
451: printf ("ERROR: expected content lenght %d but found %d\n",
452: (int) strlen (axl_node_get_content (node, NULL)), 26642);
453: }
454:
455: /* free document */
456: axl_doc_free (doc);
457:
458: /*** ISO-8859-1 support ***/
459: printf ("Test 41: test iso-8859-1..\n");
460: /* now parse a large document that would require
461: * prebuffering */
462: doc = axl_doc_parse_from_file ("test_41.iso-8859-1.xml", error);
463: if (doc == NULL)
464: return axl_false;
465:
466: /* find info node */
467: node = axl_doc_get_root (doc);
468: if (! NODE_CMP_NAME (node, "info")) {
469: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
470: return axl_false;
471: }
472:
473: /* check utf-8 format */
474: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
475: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
476: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
477: return axl_false;
478: }
479:
480: if (! axl_cmp (test_41_iso_8859_1_value,
481: axl_node_get_content (node, NULL))) {
482: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
483: (int) strlen (test_41_iso_8859_1_value), test_41_iso_8859_1_value,
484: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
485: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
486: return axl_false;
487: }
488:
489: /* free document */
490: axl_doc_free (doc);
491:
492: /*** ISO-8859-2 support ***/
493: printf ("Test 41: test iso-8859-2..\n");
494: /* now parse a large document that would require
495: * prebuffering */
496: doc = axl_doc_parse_from_file ("test_41.iso-8859-2.xml", error);
497: if (doc == NULL)
498: return axl_false;
499:
500: /* find info node */
501: node = axl_doc_get_root (doc);
502: if (! NODE_CMP_NAME (node, "info")) {
503: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
504: return axl_false;
505: }
506:
507: /* check utf-8 format */
508: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
509: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
510: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
511: return axl_false;
512: }
513:
514: if (! axl_cmp (test_41_iso_8859_2_value,
515: axl_node_get_content (node, NULL))) {
516: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
517: (int) strlen (test_41_iso_8859_2_value), test_41_iso_8859_2_value,
518: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
519: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
520: return axl_false;
521: }
522:
523: /* free document */
524: axl_doc_free (doc);
525:
526: /*** ISO-8859-3 support ***/
527: printf ("Test 41: test iso-8859-3..\n");
528: /* now parse a large document that would require
529: * prebuffering */
530: doc = axl_doc_parse_from_file ("test_41.iso-8859-3.xml", error);
531: if (doc == NULL)
532: return axl_false;
533:
534: /* find info node */
535: node = axl_doc_get_root (doc);
536: if (! NODE_CMP_NAME (node, "info")) {
537: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
538: return axl_false;
539: }
540:
541: /* check utf-8 format */
542: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
543: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
544: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
545: return axl_false;
546: }
547:
548: if (! axl_cmp (test_41_iso_8859_3_value,
549: axl_node_get_content (node, NULL))) {
550: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
551: (int) strlen (test_41_iso_8859_3_value), test_41_iso_8859_3_value,
552: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
553: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
554: return axl_false;
555: }
556:
557: /* free document */
558: axl_doc_free (doc);
559:
560: /*** ISO-8859-4 support ***/
561: printf ("Test 41: test iso-8859-4..\n");
562: /* now parse a large document that would require
563: * prebuffering */
564: doc = axl_doc_parse_from_file ("test_41.iso-8859-4.xml", error);
565: if (doc == NULL)
566: return axl_false;
567:
568: /* find info node */
569: node = axl_doc_get_root (doc);
570: if (! NODE_CMP_NAME (node, "info")) {
571: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
572: return axl_false;
573: }
574:
575: /* check utf-8 format */
576: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
577: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
578: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
579: return axl_false;
580: }
581:
582: if (! axl_cmp (test_41_iso_8859_4_value,
583: axl_node_get_content (node, NULL))) {
584: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
585: (int) strlen (test_41_iso_8859_4_value), test_41_iso_8859_4_value,
586: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
587: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
588: return axl_false;
589: }
590:
591: /* free document */
592: axl_doc_free (doc);
593:
594: /*** ISO-8859-5 support ***/
595: printf ("Test 41: test iso-8859-5..\n");
596: /* now parse a large document that would require
597: * prebuffering */
598: doc = axl_doc_parse_from_file ("test_41.iso-8859-5.xml", error);
599: if (doc == NULL)
600: return axl_false;
601:
602: /* find info node */
603: node = axl_doc_get_root (doc);
604: if (! NODE_CMP_NAME (node, "info")) {
605: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
606: return axl_false;
607: }
608:
609: /* check utf-8 format */
610: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
611: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
612: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
613: return axl_false;
614: }
615:
616: if (! axl_cmp (test_41_iso_8859_5_value,
617: axl_node_get_content (node, NULL))) {
618: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
619: (int) strlen (test_41_iso_8859_5_value), test_41_iso_8859_5_value,
620: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
621: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
622: return axl_false;
623: }
624:
625: /* free document */
626: axl_doc_free (doc);
627:
628: /*** ISO-8859-6 support ***/
629: printf ("Test 41: test iso-8859-6..\n");
630: /* now parse a large document that would require
631: * prebuffering */
632: doc = axl_doc_parse_from_file ("test_41.iso-8859-6.xml", error);
633: if (doc == NULL)
634: return axl_false;
635:
636: /* find info node */
637: node = axl_doc_get_root (doc);
638: if (! NODE_CMP_NAME (node, "info")) {
639: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
640: return axl_false;
641: }
642:
643: /* check utf-8 format */
644: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
645: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
646: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
647: return axl_false;
648: }
649:
650: if (! axl_cmp (test_41_iso_8859_6_value,
651: axl_node_get_content (node, NULL))) {
652: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
653: (int) strlen (test_41_iso_8859_6_value), test_41_iso_8859_6_value,
654: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
655: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
656: return axl_false;
657: }
658:
659: /* free document */
660: axl_doc_free (doc);
661:
662: /*** ISO-8859-7 support ***/
663: printf ("Test 41: test iso-8859-7..\n");
664: /* now parse a large document that would require
665: * prebuffering */
666: doc = axl_doc_parse_from_file ("test_41.iso-8859-7.xml", error);
667: if (doc == NULL)
668: return axl_false;
669:
670: /* find info node */
671: node = axl_doc_get_root (doc);
672: if (! NODE_CMP_NAME (node, "info")) {
673: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
674: return axl_false;
675: }
676:
677: /* check utf-8 format */
678: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
679: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
680: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
681: return axl_false;
682: }
683:
684: if (! axl_cmp (test_41_iso_8859_7_value,
685: axl_node_get_content (node, NULL))) {
686: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
687: (int) strlen (test_41_iso_8859_7_value), test_41_iso_8859_7_value,
688: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
689: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
690: return axl_false;
691: }
692:
693: /* free document */
694: axl_doc_free (doc);
695:
696: /*** ISO-8859-8 support ***/
697: printf ("Test 41: test iso-8859-8..\n");
698: /* now parse a large document that would require
699: * prebuffering */
700: doc = axl_doc_parse_from_file ("test_41.iso-8859-8.xml", error);
701: if (doc == NULL)
702: return axl_false;
703:
704: /* find info node */
705: node = axl_doc_get_root (doc);
706: if (! NODE_CMP_NAME (node, "info")) {
707: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
708: return axl_false;
709: }
710:
711: /* check utf-8 format */
712: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
713: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
714: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
715: return axl_false;
716: }
717:
718: if (! axl_cmp (test_41_iso_8859_8_value,
719: axl_node_get_content (node, NULL))) {
720: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
721: (int) strlen (test_41_iso_8859_8_value), test_41_iso_8859_8_value,
722: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
723: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
724: return axl_false;
725: }
726:
727: /* free document */
728: axl_doc_free (doc);
729:
730: /*** ISO-8859-9 support ***/
731: printf ("Test 41: test iso-8859-9..\n");
732: /* now parse a large document that would require
733: * prebuffering */
734: doc = axl_doc_parse_from_file ("test_41.iso-8859-9.xml", error);
735: if (doc == NULL)
736: return axl_false;
737:
738: /* find info node */
739: node = axl_doc_get_root (doc);
740: if (! NODE_CMP_NAME (node, "info")) {
741: axl_error_new (-1, "Expected to find root node called <info> but it wasn't found", NULL, error);
742: return axl_false;
743: }
744:
745: /* check utf-8 format */
746: if (! axl_babel_check_utf8_content (axl_node_get_content (node, NULL), -1, &index)) {
747: printf ("ERROR: found utf-8 content error at index=%d..\n", index);
748: axl_error_new (-1, "Expected to find proper utf-8 content but a failure was found", NULL, error);
749: return axl_false;
750: }
751:
752: if (! axl_cmp (test_41_iso_8859_9_value,
753: axl_node_get_content (node, NULL))) {
754: printf ("Found diferences at node content: (size: %d)'%s' != (size: %d) '%s'..\n",
755: (int) strlen (test_41_iso_8859_9_value), test_41_iso_8859_9_value,
756: (int) strlen (axl_node_get_content (node, NULL)), axl_node_get_content (node, NULL));
757: axl_error_new (-1, "Found diferences at node content..\n", NULL, error);
758: return axl_false;
759: }
760:
761: /* free document */
762: axl_doc_free (doc);
763: return axl_true;
764:
765:
766:
767: /* test utf-16 encoding */
768: doc = axl_doc_parse_from_file ("test_41.utf-16.xml", error);
769: if (doc == NULL)
770: return axl_false;
771:
772: /* check document content to ensure values */
773:
774: /* free document */
775: axl_free (doc);
776:
777: /* finish babel */
778: axl_babel_finish ();
779:
780: return axl_true;
781: }
782:
783: /**
784: * @brief Avoid including recursively white spaces content into dumped
785: * documents.
786: *
787: * @param error The optional axlError to be used to report erros.
788: *
789: * @return axl_true tests are ok, otherwise axl_false is returned.
790: */
791: axl_bool test_40 (axlError ** error)
792: {
793: axlDoc * doc = axl_doc_parse_from_file ("test_40.xml", error);
794: axlDoc * doc2;
795: axlNode * node;
796: axlItem * item;
797: char * content;
798: char * content2;
799:
800: if (doc == NULL)
801: return axl_false;
802:
803: /* now dump the document */
804: if (! axl_doc_dump_pretty_to_file (doc, "test_40.xml.test", 8))
805: return axl_false;
806:
807: /* now parse dumped document */
808: doc2 = axl_doc_parse_from_file ("test_40.xml.test", error);
809: if (doc2 == NULL)
810: return axl_false;
811:
812: /* check comment content */
813: node = axl_doc_get_root (doc2);
814:
815: item = axl_item_get_first_child (node);
816:
817: content = axl_item_get_content (item, NULL);
818: if (content == NULL) {
819: axl_error_new (-1, "Expected to find content defined for first axl item found inside test_40.xml", NULL, error);
820: return axl_false;
821: }
822:
823: node = axl_doc_get_root (doc);
824: item = axl_item_get_first_child (node);
825: content2 = axl_item_get_content (item, NULL);
826: if (content2 == NULL) {
827: axl_error_new (-1, "Expected to find content defined for first axl item found inside test_40.xml.test", NULL, error);
828: return axl_false;
829: }
830:
831:
832: /* check content */
833: if (! axl_cmp (content, content2)) {
834: printf ("Failed, expected equal content, but found differences: (%d)'%s' != (%d)'%s'\n",
835: (int) strlen (content), content, (int) strlen (content2), content2);
836: axl_error_new (-1, "Failed, expected equal content, but found differences", NULL, error);
837: return axl_false;
838: }
839:
840: axl_doc_free (doc);
841: axl_doc_free (doc2);
842:
843: return axl_true;
844: }
845:
846: /* include inline dtd definition (test_39) */
847: #include <channel.dtd.h>
848: #include <fact.dtd.h>
849: #include <xml-rpc.dtd.h>
850: #include <tls.dtd.h>
851:
852: /**
853: * @brief Check DTD validation error found.
854: *
855: * @param error The optional axlError to be used to report erros.
856: *
857: * @return axl_true if the validity test is passed, otherwise axl_false is
858: * returned.
859: */
860: axl_bool test_39 (axlError ** error)
861: {
862: axlDtd * dtd;
863: axlDtd * dtd2;
864:
865: /* check channel.dtd */
866: dtd = axl_dtd_parse (CHANNEL_DTD, -1, error);
867: if (dtd == NULL) {
868: return axl_false;
869: }
870:
871: dtd2 = axl_dtd_parse_from_file ("channel.dtd", error);
872: if (dtd2 == NULL)
873: return axl_false;
874:
875: /* check if both dtds are equal */
876: if (! axl_dtd_are_equal (dtd, dtd2)) {
877: axl_error_new (-1, "Expected to find equal dtd definitions, but axl_dtd_are_equal failed", NULL, error);
878: return axl_false;
879: }
880:
881: /* free dtd and doc */
882: axl_dtd_free (dtd);
883: axl_dtd_free (dtd2);
884:
885: /* check channel.dtd */
886: dtd = axl_dtd_parse (FACT_DTD, -1, error);
887: if (dtd == NULL) {
888: return axl_false;
889: }
890:
891: dtd2 = axl_dtd_parse_from_file ("fact.dtd", error);
892: if (dtd2 == NULL)
893: return axl_false;
894:
895: /* check if both dtds are equal */
896: if (! axl_dtd_are_equal (dtd, dtd2)) {
897: axl_error_new (-1, "Expected to find equal dtd definitions, but axl_dtd_are_equal failed", NULL, error);
898: return axl_false;
899: }
900:
901: /* free dtd and doc */
902: axl_dtd_free (dtd);
903: axl_dtd_free (dtd2);
904:
905: /* check channel.dtd */
906: dtd = axl_dtd_parse (XML_RPC_DTD, -1, error);
907: if (dtd == NULL) {
908: return axl_false;
909: }
910:
911: dtd2 = axl_dtd_parse_from_file ("xml-rpc.dtd", error);
912: if (dtd2 == NULL)
913: return axl_false;
914:
915: /* check if both dtds are equal */
916: if (! axl_dtd_are_equal (dtd, dtd2)) {
917: axl_error_new (-1, "Expected to find equal dtd definitions, but axl_dtd_are_equal failed", NULL, error);
918: return axl_false;
919: }
920:
921: /* free dtd and doc */
922: axl_dtd_free (dtd);
923: axl_dtd_free (dtd2);
924:
925: /* check channel.dtd */
926: dtd = axl_dtd_parse (TLS_DTD, -1, error);
927: if (dtd == NULL) {
928: return axl_false;
929: }
930:
931: dtd2 = axl_dtd_parse_from_file ("tls.dtd", error);
932: if (dtd2 == NULL)
933: return axl_false;
934:
935: /* check if both dtds are equal */
936: if (! axl_dtd_are_equal (dtd, dtd2)) {
937: axl_error_new (-1, "Expected to find equal dtd definitions, but axl_dtd_are_equal failed", NULL, error);
938: return axl_false;
939: }
940:
941: /* free dtd and doc */
942: axl_dtd_free (dtd);
943: axl_dtd_free (dtd2);
944:
945: return axl_true;
946: }
947:
948:
949: /**
950: * @brief Check DTD validation error found.
951: *
952: * @param error The optional axlError to be used to report erros.
953: *
954: * @return axl_true if the validity test is passed, otherwise axl_false is
955: * returned.
956: */
957: axl_bool test_38 (axlError ** error)
958: {
959: axlDtd * dtd;
960: axlDoc * doc;
961:
962: dtd = axl_dtd_parse_from_file ("test_38.dtd", error);
963: if (dtd == NULL)
964: return axl_false;
965:
966: doc = axl_doc_parse_from_file ("test_38.xml", error);
967: if (doc == NULL)
968: return axl_false;
969:
970: /* validate */
971: if (! axl_dtd_validate (doc, dtd, error)) {
972: axl_error_new (-1, "Expected to find proper a validation for the test (IDREF references)", NULL, error);
973: return axl_false;
974: }
975:
976: /* free dtd and doc */
977: axl_dtd_free (dtd);
978: axl_doc_free (doc);
979:
980: return axl_true;
981: }
982:
983: /**
984: * @brief Check if it is possible to dettach the root node.
985: *
986: * @param error The optional axlError to be used to report erros.
987: *
988: * @return axl_true if the validity test is passed, otherwise axl_false is
989: * returned.
990: */
991: axl_bool test_37 (axlError ** error)
992: {
993:
994: axlDoc * doc;
995: axlDoc * doc2;
996: axlNode * root;
997:
998: /* parse file */
999: doc = axl_doc_parse ("<child> This is content, more content </child>", -1, error);
1000: if (doc == NULL)
1001: return axl_false;
1002:
1003: doc2 = axl_doc_parse ("<child />", -1, error);
1004: if (doc2 == NULL)
1005: return axl_false;
1006:
1007: /* clear content */
1008: root = axl_doc_get_root (doc);
1009: axl_node_set_is_empty (root, axl_true);
1010:
1011: if (! axl_doc_are_equal (doc, doc2)) {
1012: axl_error_new (-1, "Expected equal documents, not found", NULL, error);
1013: return axl_false;
1014: }
1015:
1016: axl_doc_free (doc);
1017: axl_doc_free (doc2);
1018:
1019: return axl_true;
1020: }
1021:
1022: /**
1023: * @brief Check if it is possible to dettach the root node.
1024: *
1025: * @param error The optional axlError to be used to report erros.
1026: *
1027: * @return axl_true if the validity test is passed, otherwise axl_false is
1028: * returned.
1029: */
1030: axl_bool test_36 (axlError ** error)
1031: {
1032: /* parse the document */
1033: axlDoc * doc = axl_doc_parse_from_file ("test_35.xml", error);
1034: axlNode * root;
1035:
1036: /* check returned document */
1037: if (doc == NULL)
1038: return axl_false;
1039:
1040: /* now get the root node and detach it */
1041: root = axl_doc_get_root (doc);
1042: axl_node_deattach (root);
1043:
1044: /* free the node */
1045: axl_node_free (root);
1046:
1047: /* free the document */
1048: axl_doc_free (doc);
1049:
1050: root = axl_node_parse_strings (error,
1051: "<child>",
1052: " <widget class=\"GtkLabel\" id=\"label4\">",
1053: " <property name=\"visible\">True</property>",
1054: " <property name=\"label\" translatable=\"yes\"><b>1. Seleccione el sistema:</b></property>",
1055: " <property name=\"use_underline\">False</property>",
1056: " <property name=\"use_markup\">True</property>",
1057: " <property name=\"justify\">GTK_JUSTIFY_LEFT</property>",
1058: " <property name=\"wrap\">False</property>",
1059: " <property name=\"selectable\">False</property>",
1060: " <property name=\"xalign\">0</property>",
1061: " <property name=\"yalign\">0.5</property>",
1062: " <property name=\"xpad\">0</property>",
1063: " <property name=\"ypad\">0</property>",
1064: " <property name=\"ellipsize\">PANGO_ELLIPSIZE_NONE</property>",
1065: " <property name=\"width_chars\">-1</property>",
1066: " <property name=\"single_line_mode\">False</property>",
1067: " <property name=\"angle\">0</property>",
1068: " </widget>",
1069: " <packing>",
1070: " <property name=\"padding\">0</property>",
1071: " <property name=\"expand\">False</property>",
1072: " <property name=\"fill\">False</property>",
1073: " </packing>",
1074: "</child>",
1075: NULL);
1076: if (root == NULL) {
1077: printf ("Error: unable to parse content..\n");
1078: return axl_false;
1079: }
1080:
1081: axl_node_free (root);
1082:
1083: /* create the node using the parse api */
1084: root = axl_node_parse (error, "<child><widget class=\"GtkLabel\" id=\"label4\"/></child>");
1085: if (root == NULL) {
1086: printf ("Error: unable to parse content..\n");
1087: return axl_false;
1088: }
1089:
1090: axl_node_free (root);
1091:
1092:
1093: return axl_true;
1094:
1095: }
1096:
1097: /**
1098: * @brief Checks a bug while opening a document.
1099: *
1100: * @param error The optional axlError to be used to report erros.
1101: *
1102: * @return axl_true if the validity test is passed, otherwise axl_false is
1103: * returned.
1104: */
1105: axl_bool test_35 (axlError ** error)
1106: {
1107: /* parse the document */
1108: axlDoc * doc = axl_doc_parse_from_file ("test_35.xml", error);
1109:
1110: if (doc == NULL)
1111: return axl_false;
1112:
1113: /* free the document */
1114: axl_doc_free (doc);
1115:
1116: return axl_true;
1117:
1118: }
1119:
1120: /**
1121: * @brief Checks a bug while triming strings.
1122: *
1123: * @param error The optional axlError to be used to report erros.
1124: *
1125: * @return axl_true if the validity test is passed, otherwise axl_false is
1126: * returned.
1127: */
1128: axl_bool test_34 (axlError ** error)
1129: {
1130: char * string = axl_strdup (" ");
1131:
1132: axl_stream_trim (string);
1133: if (strlen (string) != 0) {
1134: axl_error_new (-1, "Expected to find empty string after trim operation, but not found", NULL, error);
1135: return axl_false;
1136: }
1137:
1138: axl_free (string);
1139:
1140: /* more length */
1141: string = axl_strdup (" ");
1142:
1143: axl_stream_trim (string);
1144: if (strlen (string) != 0) {
1145: axl_error_new (-1, "Expected to find empty string after trim operation, but not found", NULL, error);
1146: return axl_false;
1147: }
1148:
1149: axl_free (string);
1150:
1151: /* more length with one byte */
1152: string = axl_strdup (" a ");
1153:
1154: axl_stream_trim (string);
1155: if (strlen (string) != 1) {
1156: axl_error_new (-1, "Expected to find one byte length string after trim operation, but not found", NULL, error);
1157: return axl_false;
1158: }
1159:
1160: axl_free (string);
1161:
1162: return axl_true;
1163: }
1164:
1165: /**
1166: * @brief Checks a recursive root node configuration.
1167: *
1168: * @param error The optional axlError to be used to report erros.
1169: *
1170: * @return axl_true if the validity test is passed, otherwise axl_false is
1171: * returned.
1172: */
1173: axl_bool test_33 (axlError ** error)
1174: {
1175: axlDoc * doc;
1176: axlNode * node;
1177: axlNode * temp;
1178: int iterator;
1179:
1180: /* create an empty document */
1181: doc = axl_doc_create (NULL, NULL, axl_true);
1182:
1183: /* set the root node */
1184: node = axl_node_create ("test");
1185: axl_doc_set_root (doc, node);
1186:
1187: /* create a root node */
1188: iterator = 0;
1189: while (iterator < 2) {
1190: /* get current root */
1191: temp = axl_doc_get_root (doc);
1192:
1193: /* create a new root */
1194: node = axl_node_create ("test");
1195:
1196: /* configure the new root */
1197: axl_doc_set_root (doc, node);
1198:
1199: /* configure the child */
1200: axl_node_set_child (node, temp);
1201:
1202: /* next iterator */
1203: iterator++;
1204: }
1205:
1206: /* free */
1207: axl_doc_free (doc);
1208:
1209: return axl_true;
1210: }
1211:
1212: /**
1213: * @brief Test DTD attribute declaration support <!ATTLIST > using IDREF
1214: * declarations.
1215: *
1216: * @param error The optional axlError to be used to report errors.
1217: *
1218: * @return axl_true if the validity test is passed, axl_false if not.
1219: */
1220: axl_bool test_32 (axlError ** error) {
1221:
1222: axlDtd * dtd;
1223: axlDoc * doc;
1224:
1225: dtd = axl_dtd_parse_from_file ("test_32.dtd", error);
1226: if (dtd == NULL)
1227: return axl_false;
1228:
1229: doc = axl_doc_parse_from_file ("test_32.xml", error);
1230: if (doc == NULL)
1231: return axl_false;
1232:
1233: /* validate */
1234: if (! axl_dtd_validate (doc, dtd, error)) {
1235: axl_error_new (-1, "Expected to find a validation error for the test (IDREF references)", NULL, error);
1236: return axl_false;
1237: }
1238:
1239: /* free dtd and doc */
1240: axl_dtd_free (dtd);
1241: axl_doc_free (doc);
1242:
1243: return axl_true;
1244: }
1245:
1246: /**
1247: * @brief Test DTD attribute declaration support <!ATTLIST > using ID
1248: * declarations.
1249: *
1250: * @param error The optional axlError to be used to report errors.
1251: *
1252: * @return axl_true if the validity test is passed, axl_false if not.
1253: */
1254: axl_bool test_31 (axlError ** error) {
1255:
1256: axlDtd * dtd;
1257: axlDoc * doc;
1258:
1259: dtd = axl_dtd_parse_from_file ("test_31.dtd", error);
1260: if (dtd == NULL)
1261: return axl_false;
1262:
1263: doc = axl_doc_parse_from_file ("test_31.xml", error);
1264: if (doc == NULL)
1265: return axl_false;
1266:
1267: /* validate */
1268: if (! axl_dtd_validate (doc, dtd, error)) {
1269: axl_error_new (-1, "Expected to find a validation error for the test (unique ID)", NULL, error);
1270: return axl_false;
1271: }
1272:
1273: /* free dtd and doc */
1274: axl_dtd_free (dtd);
1275: axl_doc_free (doc);
1276:
1277: dtd = axl_dtd_parse_from_file ("test_31a.dtd", error);
1278: if (dtd != NULL) {
1279: axl_error_new (-1, "Expected to find a error due to double declaration for an ID attribute, but DTD was loaded ok", NULL, error);
1280: axl_dtd_free (dtd);
1281: return axl_false;
1282: }
1283: axl_error_free (*error);
1284: *error = NULL;
1285:
1286: return axl_true;
1287: }
1288:
1289:
1290: /**
1291: * @brief Test DTD attribute declaration support <!ATTLIST >
1292: *
1293: * @param error The optional axlError to be used to report errors.
1294: *
1295: * @return axl_true if the validity test is passed, axl_false if not.
1296: */
1297: axl_bool test_30 (axlError ** error) {
1298:
1299: axlDtd * dtd;
1300: axlDtdAttribute * attr;
1301: axlDoc * doc;
1302:
1303: dtd = axl_dtd_parse_from_file ("test_30.dtd", error);
1304: if (dtd == NULL)
1305: return axl_false;
1306:
1307: /* get the declarations found */
1308: attr = axl_dtd_get_attr (dtd, "node");
1309: if (attr == NULL) {
1310: axl_error_new (-1, "expected to find attribute declaration, but not found", NULL, error);
1311: return axl_false;
1312: } /* end if */
1313:
1314: /* get the declarations found */
1315: attr = axl_dtd_get_attr (dtd, "node1");
1316: if (attr != NULL) {
1317: axl_error_new (-1, "expected to NOT find attribute declaration, but not found", NULL, error);
1318: return axl_false;
1319: } /* end if */
1320:
1321: /* check the number of contraints */
1322: if (axl_dtd_get_attr_contraints (dtd, "node") != 3) {
1323: axl_error_new (-1, "expected to find 2 contraints for the <node>, but not found", NULL, error);
1324: return axl_false;
1325: } /* end if */
1326:
1327: doc = axl_doc_parse_from_file ("test_30.xml", error);
1328: if (doc == NULL) {
1329: axl_error_new (-1, "unable to parse file to check attribute validation", NULL, error);
1330: return axl_false;
1331: }
1332:
1333: /* validate */
1334: if (! axl_dtd_validate (doc, dtd, error))
1335: return axl_false;
1336:
1337: axl_doc_free (doc);
1338:
1339: doc = axl_doc_parse_from_file ("test_30a.xml", error);
1340: if (doc == NULL) {
1341: axl_error_new (-1, "unable to parse file to check attribute validation", NULL, error);
1342: return axl_false;
1343: }
1344:
1345: /* validate */
1346: if (axl_dtd_validate (doc, dtd, error)) {
1347: axl_error_new (-1, "Expected to find non-proper validation for enum value (2), inside attlist declaration", NULL, error);
1348: return axl_false;
1349: }
1350: axl_error_free (*error);
1351:
1352: axl_dtd_free (dtd);
1353:
1354: dtd = axl_dtd_parse_from_file ("test_30b.dtd", error);
1355: if (dtd == NULL)
1356: return axl_false;
1357:
1358:
1359: /* validate */
1360: if (axl_dtd_validate (doc, dtd, error)) {
1361: axl_error_new (-1, "Expected to find non-proper validation for required value, inside attlist declaration", NULL, error);
1362: return axl_false;
1363: }
1364: axl_error_free (*error);
1365:
1366: axl_doc_free (doc);
1367:
1368: doc = axl_doc_parse_from_file ("test_30b.xml", error);
1369: if (doc == NULL) {
1370: axl_error_new (-1, "unable to parse file to check attribute validation", NULL, error);
1371: return axl_false;
1372: }
1373:
1374: /* validate */
1375: if (! axl_dtd_validate (doc, dtd, error)) {
1376: axl_error_new (-1, "Expected to FIND proper validation for required value, inside attlist declaration", NULL, error);
1377: return axl_false;
1378: }
1379:
1380: axl_doc_free (doc);
1381: axl_dtd_free (dtd);
1382: return axl_true;
1383: }
1384:
1385: #ifdef AXL_NS_SUPPORT
1386:
1387: #define HTML_NS "http://www.w3.org/1999/xhtml"
1388: #define BOOK_NS "urn:loc.gov:books"
1389: #define ISBN_NS "urn:ISBN:0-395-36341-6"
1390:
1391: /**
1392: * @brief Test namespace defaulting support from axl ns library.
1393: *
1394: * @param error The optional axlError to be used to report errors.
1395: *
1396: * @return axl_true if the validity test is passed, axl_false if not.
1397: */
1398: axl_bool test_29 (axlError ** error)
1399: {
1400: axlDoc * doc;
1401: axlNode * node;
1402:
1403: /* parse namespace file */
1404: doc = axl_doc_parse_from_file ("test_29.xml", error);
1405: if (doc == NULL)
1406: return axl_false;
1407:
1408: /* call to validate namespace */
1409: if (! axl_ns_doc_validate (doc, error))
1410: return axl_false;
1411:
1412: /* get root document */
1413: node = axl_doc_get_root (doc);
1414:
1415: /* find number inside isbn namespace */
1416: node = axl_ns_node_find_called (node, HTML_NS, "p");
1417: if (node == NULL || ! axl_ns_node_cmp (node, HTML_NS, "p")) {
1418: axl_error_new (-1, "Expected to find xhtml p node, but it wasn't found", NULL, error);
1419: return axl_false;
1420: } /* end if */
1421:
1422: /* get root document */
1423: node = axl_doc_get_root (doc);
1424:
1425: /* find number inside isbn namespace */
1426: node = axl_ns_node_get_child_called (node, ISBN_NS, "number");
1427: if (node == NULL || ! axl_ns_node_cmp (node, ISBN_NS, "number")) {
1428: axl_error_new (-1, "Expected to find isbn number node, but it wasn't found", NULL, error);
1429: return axl_false;
1430: } /* end if */
1431:
1432: /* find number inside isbn namespace */
1433: node = axl_ns_node_get_next_called (node, ISBN_NS, "test");
1434: if (node == NULL || ! axl_ns_node_cmp (node, ISBN_NS, "test")) {
1435: axl_error_new (-1, "Expected to find isbn test node, but it wasn't found", NULL, error);
1436: return axl_false;
1437: } /* end if */
1438:
1439:
1440: /* free document */
1441: axl_doc_free (doc);
1442:
1443: return axl_true;
1444: }
1445:
1446: /**
1447: * @brief Test namespace defaulting support from axl ns library.
1448: *
1449: * @param error The optional axlError to be used to report errors.
1450: *
1451: * @return axl_true if the validity test is passed, axl_false if not.
1452: */
1453: axl_bool test_28 (axlError ** error)
1454: {
1455: axlDoc * doc;
1456: axlNode * node;
1457:
1458: /* parse namespace file */
1459: doc = axl_doc_parse_from_file ("test_28.xml", error);
1460: if (doc == NULL)
1461: return axl_false;
1462:
1463: /* call to validate namespace */
1464: if (! axl_ns_doc_validate (doc, error))
1465: return axl_false;
1466:
1467: /* get root document */
1468: node = axl_doc_get_root (doc);
1469:
1470: /* get following node */
1471: node = axl_node_get_first_child (node);
1472:
1473: /* check default namespace */
1474: if (! axl_ns_node_cmp (node, HTML_NS, "table")) {
1475: axl_error_new (-1, "expected to find a valid ns-node-cmp, but it wasn't found", NULL, error);
1476: return axl_false;
1477: }
1478:
1479: /* get the following */
1480: node = axl_node_get_first_child (node);
1481:
1482: /* check default namespace */
1483: if (! axl_ns_node_cmp (node, HTML_NS, "th")) {
1484: axl_error_new (-1, "expected to find a valid ns-node-cmp, but it wasn't found", NULL, error);
1485: return axl_false;
1486: }
1487:
1488: axl_doc_free (doc);
1489:
1490: return axl_true;
1491: }
1492:
1493: /**
1494: * @brief Test namespace support from axl ns library.
1495: *
1496: * @param error The optional axlError to be used to report errors.
1497: *
1498: * @return axl_true if the validity test is passed, axl_false if not.
1499: */
1500: axl_bool test_27 (axlError ** error)
1501: {
1502: axlDoc * doc;
1503: axlNode * node;
1504:
1505: /* parse namespace file */
1506: doc = axl_doc_parse_from_file ("test_27.xml", error);
1507: if (doc == NULL)
1508: return axl_false;
1509:
1510: /* call to validate namespace */
1511: if (! axl_ns_doc_validate (doc, error))
1512: return axl_false;
1513:
1514: /* get root document */
1515: node = axl_doc_get_root (doc);
1516:
1517: if (! axl_ns_node_cmp (node, BOOK_NS, "book")) {
1518: axl_error_new (-1, "expected to find a valid ns-node-cmp, but it wasn't found", NULL, error);
1519: return axl_false;
1520: }
1521:
1522: /* get first child */
1523: node = axl_node_get_first_child (node);
1524:
1525: if (! axl_ns_node_cmp (node, BOOK_NS, "title")) {
1526: axl_error_new (-1, "expected to find a failure validating with ns-node-cmp, but it wasn't found", NULL, error);
1527: return axl_false;
1528: }
1529:
1530: node = axl_node_get_next (node);
1531: if (axl_ns_node_cmp (node, BOOK_NS, "number")) {
1532: axl_error_new (-1, "expected to find a failure validating with ns-node-cmp, but it wasn't found", NULL, error);
1533: return axl_false;
1534: }
1535:
1536: /* get next */
1537: if (! axl_ns_node_cmp (node, ISBN_NS, "number")) {
1538: axl_error_new (-1, "expected to find a valid ns-node-cmp, but it wasn't found", NULL, error);
1539: return axl_false;
1540: }
1541:
1542: axl_doc_free (doc);
1543:
1544: return axl_true;
1545: }
1546:
1547:
1548: /**
1549: * @brief Test namespace support from axl ns library.
1550: *
1551: * @param error The optional axlError to be used to report errors.
1552: *
1553: * @return axl_true if the validity test is passed, axl_false if not.
1554: */
1555: axl_bool test_26 (axlError ** error)
1556: {
1557: axlDoc * doc;
1558:
1559: /* parse namespace file */
1560: doc = axl_doc_parse_from_file ("test_26.xml", error);
1561: if (doc == NULL)
1562: return axl_false;
1563:
1564: /* call to validate namespace */
1565: if (! axl_ns_doc_validate (doc, error))
1566: return axl_false;
1567:
1568: axl_doc_free (doc);
1569:
1570: /* parse a namespace file that do not follow rules (node) */
1571: doc = axl_doc_parse_from_file ("test_26b.xml", error);
1572: if (doc == NULL)
1573: return axl_false;
1574:
1575: /* call to validate namespace */
1576: if (axl_ns_doc_validate (doc, error)) {
1577: axl_error_new (-1, "Expected to find ns validation error, but not found (test_26b)", NULL, error);
1578: return axl_false;
1579: }
1580: axl_error_free (*error);
1581:
1582: axl_doc_free (doc);
1583:
1584: /* parse a namespace file that do not follow rules (attribute) */
1585: doc = axl_doc_parse_from_file ("test_26c.xml", error);
1586: if (doc == NULL)
1587: return axl_false;
1588:
1589: /* call to validate namespace */
1590: if (axl_ns_doc_validate (doc, error)) {
1591: axl_error_new (-1, "Expected to find ns validation error, but not found (test_26c)", NULL, error);
1592: return axl_false;
1593: }
1594: axl_error_free (*error);
1595:
1596: axl_doc_free (doc);
1597:
1598: return axl_true;
1599: }
1600:
1601: #endif /* end #ifdef AXL_NS_SUPPORT */
1602:
1603: /**
1604: * @brief Test Axl Item API while performing lookups.
1605: *
1606: * @param error The optional axlError to be used to report errors.
1607: *
1608: * @return axl_true if the validity test is passed, axl_false if not.
1609: */
1610: axl_bool test_25 (axlError ** error) {
1611:
1612: axlDoc * doc;
1613: axlNode * root;
1614: axlNode * node;
1615:
1616: /* load the document */
1617: doc = axl_doc_parse_from_file ("test_23.xml", error);
1618: if (doc == NULL)
1619: return axl_false;
1620:
1621: /* get root node */
1622: root = axl_doc_get_root (doc);
1623:
1624: /* lookup a node */
1625: node = axl_node_find_called (root, "child3");
1626:
1627: if (! NODE_CMP_NAME (node, "child3")) {
1628: axl_error_new (-1, "Expected to find <child3> node but it wasn't found", NULL, error);
1629: return axl_false;
1630: }
1631:
1632: /* lookup a node */
1633: node = axl_node_find_called (root, "strong");
1634:
1635: if (! NODE_CMP_NAME (node, "strong")) {
1636: axl_error_new (-1, "Expected to find <strong> node but it wasn't found", NULL, error);
1637: return axl_false;
1638: }
1639:
1640: if (! axl_cmp (axl_node_get_content (node, NULL), "this content goes\n bold")) {
1641: axl_error_new (-1, "Expected to find <strong> node content, but it wasn't found", NULL, error);
1642: return axl_false;
1643: }
1644:
1645: /* lookup a node */
1646: node = axl_node_find_called (root, "strong1");
1647: if (node != NULL) {
1648: axl_error_new (-1, "Expected to not find node content, but it wasn't found", NULL, error);
1649: return axl_false;
1650: }
1651:
1652: /* free the document */
1653: axl_doc_free (doc);
1654:
1655: return axl_true;
1656: }
1657:
1658:
1659: /**
1660: * @brief Test Axl Item API while replacing nodes and adding content
1661: * on a particular position.
1662: *
1663: * @param error The optional axlError to be used to report errors.
1664: *
1665: * @return axl_true if the validity test is passed, axl_false if not.
1666: */
1667: axl_bool test_24 (axlError ** error) {
1668: if (! axl_node_has_invalid_chars ("MEDIR PIEZAS S/MUESTREO EN MAQUINA DE VISION SIN CONTACTO\n\
1669: \n\
1670: LOTES<10 UDS. 100%PIEZAS\n\
1671: 10 UDS.<LOTES<20 UDS. 10+20% (SOBRE 10 PIEZAS)\n\
1672: LOTES>20 UDS 12+10% (SOBRE 20 PIEZAS) \n\
1673: \n\
1674: ¡ATENCION!!!!\n\
1675: MANIPULAR PIEZAS CON GUANTES DE LATEX EVITANDO CONTAMINAR LAS PIEZAS", -1, NULL)) {
1676: axl_error_new (-1, "Expected to find invalid characters, but it wasn't found", NULL, error);
1677: return axl_false;
1678: }
1679:
1680: if (axl_node_has_invalid_chars ("MEDIR PIEZAS S/MUESTREO EN MAQUINA DE VISION SIN CONTACTO\n\
1681: \n\
1682: LOTES 10 UDS. 100%PIEZAS\n\
1683: 10 UDS. LOTES 20 UDS. 10+20% (SOBRE 10 PIEZAS)\n\
1684: LOTES20 UDS 12+10% (SOBRE 20 PIEZAS) \n\
1685: \n\
1686: ¡ATENCION!!!!\n\
1687: MANIPULAR PIEZAS CON GUANTES DE LATEX EVITANDO CONTAMINAR LAS PIEZAS", -1, NULL)) {
1688: axl_error_new (-1, "Expected to find valid characters, but it wasn't found", NULL, error);
1689: return axl_false;
1690: }
1691:
1692: return axl_true;
1693: }
1694:
1695: /**
1696: * @brief Test Axl Item API while replacing nodes and adding content
1697: * on a particular position.
1698: *
1699: * @param error The optional axlError to be used to report errors.
1700: *
1701: * @return axl_true if the validity test is passed, axl_false if not.
1702: */
1703: axl_bool test_23 (axlError ** error)
1704: {
1705: axlDoc * doc;
1706: axlDoc * doc2;
1707: axlNode * node;
1708: axlItem * item;
1709:
1710: /* load the document */
1711: doc = axl_doc_parse_from_file ("test_23.xml", error);
1712: if (doc == NULL)
1713: return axl_false;
1714:
1715: /* get the child1 node */
1716: node = axl_doc_get (doc, "/document/childs/child3a");
1717: if (node == NULL) {
1718: axl_error_new (-1, "Unable to get child3a node under /document/child3a", NULL, error);
1719: return axl_false;
1720: }
1721:
1722: if (! NODE_CMP_NAME (node, "child3a")) {
1723: axl_error_new (-1, "Found node that wasn't expected", NULL, error);
1724: return axl_false;
1725: }
1726:
1727: if (! axl_node_is_empty (node)) {
1728: axl_error_new (-1, "Expected to find child3a node to be empty, but it wasn't found", NULL, error);
1729: return axl_false;
1730: }
1731:
1732: /* get the child1 node */
1733: node = axl_doc_get (doc, "/document/childs/child1");
1734: if (node == NULL) {
1735: axl_error_new (-1, "Unable to get child1 node under /document/childs", NULL, error);
1736: return axl_false;
1737: }
1738:
1739: if (! NODE_CMP_NAME (node, "child1")) {
1740: axl_error_new (-1, "Found node that wasn't expected", NULL, error);
1741: return axl_false;
1742: }
1743:
1744: /* create content */
1745: item = axl_item_new (ITEM_CONTENT, "This is a test");
1746:
1747: /* replace the node */
1748: axl_item_replace (axl_item_node_holder (node), item, axl_true);
1749:
1750: /* now parse the reference xml document */
1751: doc2 = axl_doc_parse_from_file ("test_23b.xml", error);
1752: if (doc2 == NULL)
1753: return axl_false;
1754:
1755: /* check that both documents are equal */
1756: if (! axl_doc_are_equal_trimmed (doc, doc2)) {
1757: axl_error_new (-1, "Expected to find equal documents, but it wasn't found", NULL, error);
1758: return axl_false;
1759: }
1760:
1761: /* free the document */
1762: axl_doc_free (doc);
1763:
1764: /* load the document */
1765: doc = axl_doc_parse_from_file ("test_23.xml", error);
1766: if (doc == NULL)
1767: return axl_false;
1768:
1769: /* check that both documents aren't equal using strict comparation */
1770: if (axl_doc_are_equal (doc, doc2)) {
1771: axl_error_new (-1, "Expected to find documents not equal, but it wasn't found", NULL, error);
1772: return axl_false;
1773: }
1774:
1775: /* free the document */
1776: axl_doc_free (doc);
1777: axl_doc_free (doc2);
1778:
1779: /* test ok */
1780: return axl_true;
1781: }
1782:
1783: /**
1784: * @brief Test xml attribute support.
1785: *
1786: * @param error The optional axlError to be used to report errors.
1787: *
1788: * @return axl_true if the validity test is passed, axl_false if not.
1789: */
1790: axl_bool test_22 (axlError ** error)
1791: {
1792: axlDoc * doc;
1793: axlNode * node;
1794: const char * value;
1795: axlAttrCursor * cursor;
1796:
1797:
1798: /* create a document */
1799: doc = axl_doc_create (NULL, NULL, axl_false);
1800:
1801: node = axl_node_create ("root-node");
1802: axl_doc_set_root (doc, node);
1803:
1804: /* check for attributes */
1805: if (axl_node_has_attribute (node, "attribute-not-found")) {
1806: axl_error_new (-1, "Found an attribute requested, which doesn't exists", NULL, error);
1807: return axl_false;
1808: }
1809:
1810: /* get attribute */
1811: value = axl_node_get_attribute_value (node, "attribute-not-found");
1812: if (value != NULL) {
1813: axl_error_new (-1, "Found an attribute requested, which doesn't exists", NULL, error);
1814: return axl_false;
1815: }
1816:
1817: /* store an attriburte */
1818: axl_node_set_attribute (node, "attribute1", "value1");
1819:
1820: /* check for attributes */
1821: if (! axl_node_has_attribute (node, "attribute1")) {
1822: axl_error_new (-1, "Not found an attribute requested, which should exists", NULL, error);
1823: return axl_false;
1824: }
1825:
1826: /* get attribute */
1827: value = axl_node_get_attribute_value (node, "attribute1");
1828: if (! axl_cmp (value, "value1")) {
1829: axl_error_new (-1, "Not found an attribute requested, which should exists", NULL, error);
1830: return axl_false;
1831: }
1832:
1833: /* store more attributes to check function with hashes */
1834: axl_node_set_attribute (node, "attribute2", "value2");
1835: axl_node_set_attribute (node, "attribute3", "value3");
1836: axl_node_set_attribute (node, "attribute4", "value4");
1837: axl_node_set_attribute (node, "attribute5", "value5");
1838: axl_node_set_attribute (node, "attribute6", "value6");
1839:
1840: /* check axl attribute iteration API */
1841: cursor = axl_node_attr_cursor_new (node);
1842: while (axl_node_attr_cursor_has_item (cursor)) {
1843:
1844: if (axl_cmp ("attribute2", axl_node_attr_cursor_get_key (cursor)) &&
1845: ! axl_cmp ("value2", axl_node_attr_cursor_get_value (cursor))) {
1846: axl_error_new (-1, "Found that the value associated to 'attribute2' isn't 'value2'", NULL, error);
1847: return axl_false;
1848: } /* end if */
1849:
1850: if (axl_cmp ("attribute3", axl_node_attr_cursor_get_key (cursor)) &&
1851: ! axl_cmp ("value3", axl_node_attr_cursor_get_value (cursor))) {
1852: axl_error_new (-1, "Found that the value associated to 'attribute3' isn't 'value3'", NULL, error);
1853: return axl_false;
1854: } /* end if */
1855:
1856: if (axl_cmp ("attribute4", axl_node_attr_cursor_get_key (cursor)) &&
1857: ! axl_cmp ("value4", axl_node_attr_cursor_get_value (cursor))) {
1858: axl_error_new (-1, "Found that the value associated to 'attribute4' isn't 'value4'", NULL, error);
1859: return axl_false;
1860: } /* end if */
1861:
1862: if (axl_cmp ("attribute5", axl_node_attr_cursor_get_key (cursor)) &&
1863: ! axl_cmp ("value5", axl_node_attr_cursor_get_value (cursor))) {
1864: axl_error_new (-1, "Found that the value associated to 'attribute5' isn't 'value5'", NULL, error);
1865: return axl_false;
1866: } /* end if */
1867:
1868: if (axl_cmp ("attribute6", axl_node_attr_cursor_get_key (cursor)) &&
1869: ! axl_cmp ("value6", axl_node_attr_cursor_get_value (cursor))) {
1870: axl_error_new (-1, "Found that the value associated to 'attribute6' isn't 'value6'", NULL, error);
1871: return axl_false;
1872: } /* end if */
1873:
1874: /* go next */
1875: axl_node_attr_cursor_next (cursor);
1876:
1877: } /* end if */
1878:
1879: axl_node_attr_cursor_free (cursor);
1880:
1881:
1882: axl_node_set_attribute (node, "attribute7", "value7");
1883: axl_node_set_attribute (node, "attribute8", "value8");
1884: axl_node_set_attribute (node, "attribute9", "value9");
1885: axl_node_set_attribute (node, "attribute10", "value10");
1886: axl_node_set_attribute (node, "attribute11", "value11");
1887:
1888: /* check that an attribute doesn't exists */
1889: if (axl_node_has_attribute (node, "attribute-not-found")) {
1890: axl_error_new (-1, "Found an attribute requested, which doesn't exists", NULL, error);
1891: return axl_false;
1892: }
1893:
1894: /* get attribute */
1895: value = axl_node_get_attribute_value (node, "attribute-not-found");
1896: if (value != NULL) {
1897: axl_error_new (-1, "Found an attribute requested, which doesn't exists", NULL, error);
1898: return axl_false;
1899: }
1900:
1901: /* check for attributes */
1902: if (! axl_node_has_attribute (node, "attribute2")) {
1903: axl_error_new (-1, "Not found an attribute requested, which should exists(2)", NULL, error);
1904: return axl_false;
1905: }
1906:
1907: /* get attribute */
1908: value = axl_node_get_attribute_value (node, "attribute2");
1909: if (! axl_cmp (value, "value2")) {
1910: printf ("value2 != %s\n", value);
1911: axl_error_new (-1, "Not found an attribute requested, which should exists(value2)", NULL, error);
1912: return axl_false;
1913: }
1914:
1915: /* check for attributes */
1916: if (! axl_node_has_attribute (node, "attribute3")) {
1917: axl_error_new (-1, "Not found an attribute requested, which should exists(3)", NULL, error);
1918: return axl_false;
1919: }
1920:
1921: /* get attribute */
1922: value = axl_node_get_attribute_value (node, "attribute3");
1923: if (! axl_cmp (value, "value3")) {
1924: axl_error_new (-1, "Not found an attribute requested, which should exists (value3)", NULL, error);
1925: return axl_false;
1926: }
1927:
1928: /* check for attributes */
1929: if (! axl_node_has_attribute (node, "attribute4")) {
1930: axl_error_new (-1, "Not found an attribute requested, which should exists (value4)", NULL, error);
1931: return axl_false;
1932: }
1933:
1934: /* get attribute */
1935: value = axl_node_get_attribute_value (node, "attribute4");
1936: if (! axl_cmp (value, "value4")) {
1937: axl_error_new (-1, "Not found an attribute requested, which should exists (value4)", NULL, error);
1938: return axl_false;
1939: }
1940:
1941: /* check for attributes */
1942: if (! axl_node_has_attribute (node, "attribute5")) {
1943: axl_error_new (-1, "Not found an attribute requested, which should exists (value5)", NULL, error);
1944: return axl_false;
1945: }
1946:
1947: /* get attribute */
1948: value = axl_node_get_attribute_value (node, "attribute5");
1949: if (! axl_cmp (value, "value5")) {
1950: axl_error_new (-1, "Not found an attribute requested, which should exists (value5)", NULL, error);
1951: return axl_false;
1952: }
1953:
1954: /* check for attributes */
1955: if (! axl_node_has_attribute (node, "attribute6")) {
1956: axl_error_new (-1, "Not found an attribute requested, which should exists (value6)", NULL, error);
1957: return axl_false;
1958: }
1959:
1960: /* get attribute */
1961: value = axl_node_get_attribute_value (node, "attribute6");
1962: if (! axl_cmp (value, "value6")) {
1963: axl_error_new (-1, "Not found an attribute requested, which should exists (value6)", NULL, error);
1964: return axl_false;
1965: }
1966:
1967: /* check for attributes */
1968: if (! axl_node_has_attribute (node, "attribute7")) {
1969: axl_error_new (-1, "Not found an attribute requested, which should exists (value7)", NULL, error);
1970: return axl_false;
1971: }
1972:
1973: /* get attribute */
1974: value = axl_node_get_attribute_value (node, "attribute7");
1975: if (! axl_cmp (value, "value7")) {
1976: axl_error_new (-1, "Not found an attribute requested, which should exists (value7)", NULL, error);
1977: return axl_false;
1978: }
1979:
1980: /* check for attributes */
1981: if (! axl_node_has_attribute (node, "attribute8")) {
1982: axl_error_new (-1, "Not found an attribute requested, which should exists (value8)", NULL, error);
1983: return axl_false;
1984: }
1985:
1986: /* get attribute */
1987: value = axl_node_get_attribute_value (node, "attribute8");
1988: if (! axl_cmp (value, "value8")) {
1989: axl_error_new (-1, "Not found an attribute requested, which should exists (value8)", NULL, error);
1990: return axl_false;
1991: }
1992:
1993: /* check for attributes */
1994: if (! axl_node_has_attribute (node, "attribute9")) {
1995: axl_error_new (-1, "Not found an attribute requested, which should exists (value9)", NULL, error);
1996: return axl_false;
1997: }
1998:
1999: /* get attribute */
2000: value = axl_node_get_attribute_value (node, "attribute9");
2001: if (! axl_cmp (value, "value9")) {
2002: axl_error_new (-1, "Not found an attribute requested, which should exists (value9)", NULL, error);
2003: return axl_false;
2004: }
2005:
2006: /* check for attributes */
2007: if (! axl_node_has_attribute (node, "attribute10")) {
2008: axl_error_new (-1, "Not found an attribute requested, which should exists (value10)", NULL, error);
2009: return axl_false;
2010: }
2011:
2012: /* get attribute */
2013: value = axl_node_get_attribute_value (node, "attribute10");
2014: if (! axl_cmp (value, "value10")) {
2015: axl_error_new (-1, "Not found an attribute value requested, which should exists (value10)", NULL, error);
2016: return axl_false;
2017: }
2018:
2019: /* check for attributes */
2020: if (! axl_node_has_attribute (node, "attribute11")) {
2021: axl_error_new (-1, "Not found an attribute requested, which should exists (value11)", NULL, error);
2022: return axl_false;
2023: }
2024:
2025: /* get attribute */
2026: value = axl_node_get_attribute_value (node, "attribute11");
2027: if (! axl_cmp (value, "value11")) {
2028: axl_error_new (-1, "Not found an attribute requested, which should exists (value11)", NULL, error);
2029: return axl_false;
2030: }
2031:
2032: /* check axl attribute iteration API */
2033: cursor = axl_node_attr_cursor_new (node);
2034: while (axl_node_attr_cursor_has_item (cursor)) {
2035:
2036: if (axl_cmp ("attribute2", axl_node_attr_cursor_get_key (cursor)) &&
2037: ! axl_cmp ("value2", axl_node_attr_cursor_get_value (cursor))) {
2038: axl_error_new (-1, "Found that the value associated to 'attribute2' isn't 'value2'", NULL, error);
2039: return axl_false;
2040: } /* end if */
2041:
2042: if (axl_cmp ("attribute3", axl_node_attr_cursor_get_key (cursor)) &&
2043: ! axl_cmp ("value3", axl_node_attr_cursor_get_value (cursor))) {
2044: axl_error_new (-1, "Found that the value associated to 'attribute3' isn't 'value3'", NULL, error);
2045: return axl_false;
2046: } /* end if */
2047:
2048: if (axl_cmp ("attribute4", axl_node_attr_cursor_get_key (cursor)) &&
2049: ! axl_cmp ("value4", axl_node_attr_cursor_get_value (cursor))) {
2050: axl_error_new (-1, "Found that the value associated to 'attribute4' isn't 'value4'", NULL, error);
2051: return axl_false;
2052: } /* end if */
2053:
2054: if (axl_cmp ("attribute5", axl_node_attr_cursor_get_key (cursor)) &&
2055: ! axl_cmp ("value5", axl_node_attr_cursor_get_value (cursor))) {
2056: axl_error_new (-1, "Found that the value associated to 'attribute5' isn't 'value5'", NULL, error);
2057: return axl_false;
2058: } /* end if */
2059:
2060: if (axl_cmp ("attribute6", axl_node_attr_cursor_get_key (cursor)) &&
2061: ! axl_cmp ("value6", axl_node_attr_cursor_get_value (cursor))) {
2062: axl_error_new (-1, "Found that the value associated to 'attribute6' isn't 'value6'", NULL, error);
2063: return axl_false;
2064: } /* end if */
2065:
2066: if (axl_cmp ("attribute7", axl_node_attr_cursor_get_key (cursor)) &&
2067: ! axl_cmp ("value7", axl_node_attr_cursor_get_value (cursor))) {
2068: axl_error_new (-1, "Found that the value associated to 'attribute7' isn't 'value7'", NULL, error);
2069: return axl_false;
2070: } /* end if */
2071:
2072: if (axl_cmp ("attribute8", axl_node_attr_cursor_get_key (cursor)) &&
2073: ! axl_cmp ("value8", axl_node_attr_cursor_get_value (cursor))) {
2074: axl_error_new (-1, "Found that the value associated to 'attribute8' isn't 'value8'", NULL, error);
2075: return axl_false;
2076: } /* end if */
2077:
2078: if (axl_cmp ("attribute9", axl_node_attr_cursor_get_key (cursor)) &&
2079: ! axl_cmp ("value9", axl_node_attr_cursor_get_value (cursor))) {
2080: axl_error_new (-1, "Found that the value associated to 'attribute9' isn't 'value9'", NULL, error);
2081: return axl_false;
2082: } /* end if */
2083:
2084: if (axl_cmp ("attribute10", axl_node_attr_cursor_get_key (cursor)) &&
2085: ! axl_cmp ("value10", axl_node_attr_cursor_get_value (cursor))) {
2086: axl_error_new (-1, "Found that the value associated to 'attribute10' isn't 'value10'", NULL, error);
2087: return axl_false;
2088: } /* end if */
2089:
2090: if (axl_cmp ("attribute11", axl_node_attr_cursor_get_key (cursor)) &&
2091: ! axl_cmp ("value11", axl_node_attr_cursor_get_value (cursor))) {
2092: axl_error_new (-1, "Found that the value associated to 'attribute11' isn't 'value11'", NULL, error);
2093: return axl_false;
2094: } /* end if */
2095:
2096: /* go next */
2097: axl_node_attr_cursor_next (cursor);
2098:
2099: } /* end if */
2100:
2101: axl_node_attr_cursor_free (cursor);
2102:
2103: /* remove attributes */
2104: if (axl_node_num_attributes (node) != 11) {
2105: axl_error_new (-1, "Expected to find 11 attributes", NULL, error);
2106: return axl_false;
2107: }
2108:
2109: printf ("Test 22: removing attribute 1, current attributes are %d\n", axl_node_num_attributes (node));
2110: axl_node_remove_attribute (node, "attribute1");
2111: printf ("Test 22: after removing attribute 1, current attributes are %d\n", axl_node_num_attributes (node));
2112:
2113: if (axl_node_num_attributes (node) != 10) {
2114: axl_error_report (error, -1, "Expected to find 10 attributes, but found: %d", axl_node_num_attributes (node));
2115: return axl_false;
2116: }
2117:
2118: if (axl_node_has_attribute (node, "attribute1")) {
2119: axl_error_new (-1, "Found that attribute1 should not appear, but it was found", NULL, error);
2120: return axl_false;
2121: } /* end if */
2122:
2123: node = axl_node_create ("test");
2124: axl_node_set_attribute (node, "test", "test");
2125:
2126: if (axl_node_num_attributes (node) != 1) {
2127: axl_error_new (-1, "Expected to find 1 attributes", NULL, error);
2128: return axl_false;
2129: }
2130:
2131: axl_node_remove_attribute (node, "test");
2132:
2133: if (axl_node_num_attributes (node) != 0) {
2134: axl_error_new (-1, "Expected to find 1 attributes", NULL, error);
2135: return axl_false;
2136: }
2137:
2138: axl_node_set_attribute (node, "test1", "test");
2139: axl_node_set_attribute (node, "test2", "test");
2140: axl_node_set_attribute (node, "test3", "test");
2141:
2142: if (axl_node_num_attributes (node) != 3) {
2143: axl_error_new (-1, "Expected to find 3 attributes", NULL, error);
2144: return axl_false;
2145: }
2146:
2147: axl_node_remove_attribute (node, "test1");
2148: axl_node_remove_attribute (node, "test2");
2149: axl_node_remove_attribute (node, "test3");
2150:
2151: if (axl_node_num_attributes (node) != 0) {
2152: axl_error_new (-1, "Expected to find 0 attributes", NULL, error);
2153: return axl_false;
2154: }
2155:
2156: axl_node_free (node);
2157:
2158: /* free document */
2159: axl_doc_free (doc);
2160:
2161: /* check to parse a document with */
2162: doc = axl_doc_parse_from_file ("test_22.xml", NULL);
2163: if (doc != NULL) {
2164: axl_error_report (error, -1, "Expected to find a failure while reading an xml document with duplicated attributes");
2165: return axl_false;
2166: } /* end if */
2167:
2168:
2169: /* check for empty attributes ( ='value') */
2170: doc = axl_doc_parse_from_file ("test_22b.xml", NULL);
2171: if (doc != NULL) {
2172: axl_error_report (error, -1, "Expected to find a failure while loading a document with empty attributes");
2173: return axl_false;
2174: }
2175:
2176: /* check for empty values associated to
2177: * attributes ( value=' this value ' ) */
2178: doc = axl_doc_parse_from_file ("test_22c.xml", NULL);
2179: if (doc != NULL) {
2180: axl_error_report (error, -1, "Expected to find a failure while loading a document with empty attributes values");
2181: return axl_false;
2182: } /* end if */
2183:
2184: doc = axl_doc_create (NULL, NULL, axl_true);
2185: node = axl_node_create ("test");
2186: axl_doc_set_root (doc, node);
2187:
2188: /* configure attributes */
2189: axl_node_set_attribute (node, "", "a value");
2190:
2191: /* configure attribute */
2192: axl_node_set_attribute (node, "", "");
2193:
2194: /* configure attribute */
2195: axl_node_set_attribute (node, "", "another value");
2196:
2197: if (! axl_doc_dump_pretty_to_file (doc, "test_22-test.xml", 4)) {
2198: axl_error_report (error, -1, "Expected to find proper dump after wrong attribute configuration..");
2199: return axl_false;
2200: } /* end if */
2201:
2202: axl_doc_free (doc);
2203:
2204: /* check for empty values associated to
2205: * attributes ( value=' this value ' ) */
2206: doc = axl_doc_parse_from_file ("test_22-test.xml", NULL);
2207: if (doc == NULL) {
2208: axl_error_report (error, -1, "Expected to find proper document loading after wrong attribute configuration.");
2209: return axl_false;
2210: } /* end if */
2211:
2212: /* free documnent */
2213: axl_doc_free (doc);
2214:
2215: return axl_true;
2216: }
2217:
2218: /**
2219: * @brief Test mixed content documents support (TEST NOT FINISHED).
2220: *
2221: * @param error The optional axlError to be used to report errors.
2222: *
2223: * @return axl_true if the validity test is passed, axl_false if not.
2224: */
2225: axl_bool test_21 (axlError ** error)
2226: {
2227: axlDoc * doc;
2228: axlNode * node;
2229: axlItem * item;
2230: char * content;
2231: int content_size;
2232:
2233: /* load the document */
2234: doc = axl_doc_parse_from_file ("test_21.xml", error);
2235: if (doc == NULL)
2236: return axl_false;
2237:
2238: /* get the root node */
2239: node = axl_doc_get_root (doc);
2240:
2241: /* check document content */
2242: if (! NODE_CMP_NAME (node, "document")) {
2243: axl_error_new (-1, "Expected to find root node=<document> but it wasn't found", NULL, error);
2244: return axl_false;
2245: }
2246:
2247: /* iterate root childs */
2248: item = axl_item_get_first_child (node);
2249:
2250: if (axl_item_get_type (item) != ITEM_CONTENT) {
2251: axl_error_new (-1, "Expected to find content but it wasn't found", NULL, error);
2252: return axl_false;
2253: }
2254:
2255: /* get the content */
2256: content = axl_item_get_content (item, &content_size);
2257: if (! axl_cmp (content, "\n Some content inside the document ")) {
2258: axl_error_new (-1, "Expected to find content but it wasn't found", NULL, error);
2259: return axl_false;
2260: }
2261:
2262: /* get tne the item */
2263: item = axl_item_get_next (item);
2264: if (axl_item_get_type (item) != ITEM_NODE) {
2265: axl_error_new (-1, "Expected to find a node but it wasn't found", NULL, error);
2266: return axl_false;
2267: }
2268:
2269: /* get the node */
2270: node = axl_item_get_data (item);
2271:
2272: /* check document content */
2273: if (! NODE_CMP_NAME (node, "strong")) {
2274: axl_error_new (-1, "Expected to find root node=<strong> but it wasn't found", NULL, error);
2275: return axl_false;
2276: }
2277:
2278: /* get the first child of <strong> */
2279: item = axl_item_get_first_child (node);
2280:
2281: if (axl_item_get_type (item) != ITEM_CONTENT) {
2282: axl_error_new (-1, "Expected to find content inside strong but it wasn't found", NULL, error);
2283: return axl_false;
2284: }
2285:
2286: /* get the content */
2287: content = axl_item_get_content (item, &content_size);
2288: if (! axl_cmp (content, "this content goes\n bold")) {
2289: axl_error_new (-1, "Expected to find content but it wasn't found", NULL, error);
2290: return axl_false;
2291: }
2292:
2293: /* now get the next item following the <strong> node */
2294: item = axl_item_node_next (node);
2295:
2296: if (item == NULL) {
2297: axl_error_new (-1, "Expected to find content following <strong> but a null item reference was found", NULL, error);
2298: return axl_false;
2299: }
2300:
2301: /* check to be it a content */
2302: if (axl_item_get_type (item) != ITEM_CONTENT) {
2303: axl_error_new (-1, "Expected to find content following <strong> node but it wasn't found", NULL, error);
2304: return axl_false;
2305: }
2306:
2307: /* get the content */
2308: content = axl_item_get_content (item, &content_size);
2309: if (! axl_cmp (content, " more data stored directly inside the document node.\n\n ")) {
2310: axl_error_new (-1, "Expected to find content but it wasn't found", NULL, error);
2311: return axl_false;
2312: }
2313:
2314: /* get the next item */
2315: item = axl_item_get_next (item);
2316: if (axl_item_get_type (item) != ITEM_NODE) {
2317: axl_error_new (-1, "Expected to find a node but it wasn't found", NULL, error);
2318: return axl_false;
2319: }
2320:
2321: /* get the node */
2322: node = axl_item_get_data (item);
2323:
2324: /* check document content */
2325: if (! NODE_CMP_NAME (node, "childs")) {
2326: axl_error_new (-1, "Expected to find root node=<strong> but it wasn't found", NULL, error);
2327: return axl_false;
2328: }
2329:
2330: /* get the first item */
2331: item = axl_item_get_first_child (node);
2332: if (axl_item_get_type (item) != ITEM_COMMENT) {
2333: axl_error_new (-1, "Expected to find content inside strong but it wasn't found", NULL, error);
2334: return axl_false;
2335: }
2336:
2337: /* get the content */
2338: content = axl_item_get_content (item, &content_size);
2339: if (! axl_cmp (content, " here goes a comment before text block ")) {
2340: axl_error_new (-1, "Expected to find a comment, child of <childs>, but it wasn't found", NULL, error);
2341: return axl_false;
2342: }
2343:
2344: /* get next item */
2345: item = axl_item_get_next (item);
2346:
2347: /* check to be it a content */
2348: if (axl_item_get_type (item) != ITEM_CONTENT) {
2349: axl_error_new (-1, "Expected to find content following <childs> node comment but it wasn't found", NULL, error);
2350: return axl_false;
2351: }
2352:
2353: /* get the content */
2354: content = axl_item_get_content (item, &content_size);
2355: if (! axl_cmp (content, "More text after child declaration.\n ")) {
2356: axl_error_new (-1, "Expected to find a content inside <childs> node, but it wasn't found", NULL, error);
2357: return axl_false;
2358: }
2359:
2360: /* get next item */
2361: item = axl_item_get_next (item);
2362:
2363: /* get the node */
2364: node = axl_item_get_data (item);
2365:
2366: /* check document content */
2367: if (! NODE_CMP_NAME (node, "child1")) {
2368: axl_error_new (-1, "Expected to find root node=<strong> but it wasn't found", NULL, error);
2369: return axl_false;
2370: }
2371:
2372:
2373: /* free axl document */
2374: axl_doc_free (doc);
2375:
2376: return axl_true;
2377: }
2378:
2379: /**
2380: * @brief Test entity support (basic entity support).
2381: *
2382: * @param error The optional axlError to be used to report errors.
2383: *
2384: * @return axl_true if the validity test is passed, axl_false if not.
2385: */
2386: axl_bool test_20b (axlError ** error)
2387: {
2388: axlNode * node;
2389:
2390: axlNode * aux;
2391: axlNode * aux2;
2392:
2393: axlNode * child1;
2394: axlNode * root;
2395:
2396: axlDoc * doc;
2397: axlDoc * doc2;
2398: axlDoc * doc3;
2399:
2400:
2401: int iterator = 0;
2402: int sum = 0;
2403:
2404: /* load the document */
2405: doc = axl_doc_parse_from_file ("test_20.xml", error);
2406: if (doc == NULL)
2407: return axl_false;
2408:
2409: /* load reference */
2410: doc2 = axl_doc_parse_from_file ("test_20a.xml", error);
2411: if (doc2 == NULL)
2412: return axl_false;
2413:
2414: while (iterator < 10) {
2415:
2416: /* get document root */
2417: root = axl_doc_get_root (doc);
2418:
2419: /* copy and release */
2420: node = axl_node_copy (root, axl_true, axl_true);
2421:
2422: /* get the child1 reference */
2423: child1 = axl_node_get_first_child (node);
2424:
2425: /* get child2 refrence */
2426: aux = axl_node_get_first_child (child1);
2427: while (aux != NULL) {
2428:
2429: sum = axl_node_get_child_num (child1);
2430:
2431: /* get the next child before deattaching the
2432: * node */
2433: aux2 = axl_node_get_next (aux);
2434:
2435: /* dettach the node from the <child1> parent
2436: * and attach it to the document */
2437: axl_node_deattach (aux);
2438:
2439: if ((sum - 1) != (axl_node_get_child_num (child1))) {
2440: /* after doing the deattach process,
2441: * the copy node doesn't have the
2442: * expected child number */
2443: axl_error_new (-1, "After doing the deattach process, the copy node doesn't have the expected child number", NULL, error);
2444: return axl_false;
2445: }
2446:
2447: /* set the node to the document root */
2448: axl_node_set_child (node, aux);
2449:
2450: if (! NODE_CMP_NAME (axl_node_get_parent (aux), "document")) {
2451:
2452: axl_error_new (-1, "Expected to find a parent not found", NULL, error);
2453: return axl_false;
2454: }
2455:
2456: /* get the next child */
2457: aux = aux2;
2458:
2459: } /* end while */
2460:
2461: /* remove the child1 node */
2462: aux = axl_node_get_first_child (node);
2463: axl_node_remove (aux, axl_true);
2464:
2465: /* create the document holding the result */
2466: doc3 = axl_doc_create (NULL, NULL, axl_false);
2467: axl_doc_set_root (doc3, node);
2468:
2469: /* compare the document */
2470: if (!axl_doc_are_equal (doc2, doc3)) {
2471: axl_error_new (-1, "Expected to find equal documents but (modified doc2 != doc3), they wasn't found", NULL, error);
2472: return axl_false;
2473: }
2474:
2475: /* free the document */
2476: axl_doc_free (doc3);
2477:
2478: /* update iterator */
2479: iterator++;
2480:
2481: } /* end while */
2482:
2483: /* free the document 2 */
2484: axl_doc_free (doc2);
2485:
2486: /* free the document */
2487: axl_doc_free (doc);
2488:
2489: return axl_true;
2490:
2491: }
2492:
2493:
2494: /**
2495: * @brief Test entity support (basic entity support).
2496: *
2497: * @param error The optional axlError to be used to report errors.
2498: *
2499: * @return axl_true if the validity test is passed, axl_false if not.
2500: */
2501: axl_bool test_20 (axlError ** error)
2502: {
2503: axlNode * node;
2504: axlNode * root;
2505: axlDoc * doc;
2506: axlDoc * doc2;
2507: char * data;
2508:
2509:
2510: /* load the document */
2511: doc = axl_doc_parse_from_file ("test_20.xml", error);
2512: if (doc == NULL)
2513: return axl_false;
2514:
2515: /* get document root */
2516: root = axl_doc_get_root (doc);
2517: node = axl_node_copy (root, axl_true, axl_true);
2518:
2519: /* check if both nodes are equal */
2520: if (! axl_node_are_equal (root, node)) {
2521: axl_error_new (-1, "Expected to find equal nodes but they weren't", NULL, error);
2522: return axl_false;
2523: }
2524:
2525: /* create a new document */
2526: doc2 = axl_doc_create (NULL, NULL, axl_false);
2527: axl_doc_set_root (doc2, node);
2528:
2529: if (! axl_doc_are_equal (doc, doc2)) {
2530: axl_error_new (-1, "Expected to find equal documents but they weren't", NULL, error);
2531: return axl_false;
2532: }
2533:
2534: /* free document */
2535: axl_doc_free (doc2);
2536:
2537: /* configure some anotation data */
2538: axl_node_annotate_data (root, "key", "value");
2539:
2540: /* get child1 */
2541: node = axl_node_get_first_child (root);
2542:
2543: /* get child2 */
2544: node = axl_node_get_first_child (node);
2545:
2546: /* anotate data */
2547: axl_node_annotate_data (node, "key1", "value1");
2548:
2549: /* perform searches */
2550: data = axl_node_annotate_get (node, "key", axl_false);
2551: if (data != NULL) {
2552: axl_error_new (-1, "Expected to find nothing while looking for 'key'(1)", NULL, error);
2553: return axl_false;
2554: }
2555:
2556: data = axl_node_annotate_get (node, "key", axl_true);
2557: if (data == NULL || !axl_cmp (data, "value")) {
2558: axl_error_new (-1, "Expected to find data while looking for 'key' at parents (2)", NULL, error);
2559: return axl_false;
2560: }
2561:
2562: /* perform searches inside the node */
2563: data = axl_node_annotate_get (node, "key1", axl_false);
2564: if (data == NULL || !axl_cmp (data, "value1")) {
2565: axl_error_new (-1, "Expected to find nothing while looking for 'key1'(3)", NULL, error);
2566: return axl_false;
2567: }
2568:
2569: /* perform more anotation but with native data */
2570: axl_node_annotate_int (root, "int-value", 14);
2571:
2572: if (axl_node_annotate_get_int (root, "int-value", axl_false) != 14) {
2573: axl_error_new (-1, "Expected to find an integer value (14), but it wasn't found", NULL, error);
2574: return axl_false;
2575: }
2576:
2577: axl_node_annotate_double (root, "double-value", 58.20);
2578:
2579: if (axl_node_annotate_get_double (root, "double-value", axl_false) != 58.20) {
2580: axl_error_new (-1, "Expected to find an double value (58.20), but it wasn't found", NULL, error);
2581: return axl_false;
2582: }
2583:
2584: axl_node_annotate_string (root, "string-value", "this is a test string");
2585:
2586: if (! axl_cmp (axl_node_annotate_get_string (root, "string-value", axl_false), "this is a test string")) {
2587: axl_error_new (-1, "Expected to find a string value (\"this is a test string\"), but it wasn't found", NULL, error);
2588: return axl_false;
2589: }
2590:
2591: if (axl_node_annotate_get_string (root, "string-not-found", axl_false) != NULL) {
2592: axl_error_new (-1, "Expected to find empty value for an anotated element which isn't installed", NULL, error);
2593: return axl_false;
2594: }
2595:
2596: /* free document created */
2597: axl_doc_free (doc);
2598:
2599: return axl_true;
2600:
2601: }
2602:
2603: /**
2604: * @brief Test entity support (basic entity support).
2605: *
2606: * @param error The optional axlError to be used to report errors.
2607: *
2608: * @return axl_true if the validity test is passed, axl_false if not.
2609: */
2610: axl_bool test_19 (axlError ** error)
2611: {
2612: axlDoc * doc;
2613: axlDoc * reference;
2614: axlNode * node;
2615: axlNode * replace;
2616:
2617: /* create replace node */
2618: replace = axl_node_create ("replace");
2619: axl_node_set_content (replace, "test", -1);
2620:
2621: doc = axl_doc_parse_from_file ("test_19.xml", error);
2622: if (doc == NULL)
2623: return axl_false;
2624:
2625: /* document */
2626: node = axl_doc_get_root (doc);
2627:
2628: /* child1 */
2629: node = axl_node_get_first_child (node);
2630:
2631: /* child2 */
2632: node = axl_node_get_first_child (node);
2633:
2634: /* replace */
2635: axl_node_replace (node, replace, axl_false);
2636:
2637: reference = axl_doc_parse_from_file ("test_19a.xml", error);
2638: if (reference == NULL)
2639: return axl_false;
2640:
2641: /* check both documents to be equal */
2642: if (! axl_doc_are_equal (doc, reference)) {
2643: axl_error_new (-1, "Expected to find equal documents, but not found on first child replace", NULL, error);
2644: return axl_false;
2645: }
2646:
2647: /* free reference */
2648: axl_doc_free (reference);
2649:
2650: /* restore */
2651: axl_node_replace (replace, node, axl_false);
2652:
2653: /* get child2 */
2654: node = axl_node_get_next (node);
2655:
2656: /* replace */
2657: axl_node_replace (node, replace, axl_false);
2658:
2659:
2660: reference = axl_doc_parse_from_file ("test_19b.xml", error);
2661: if (reference == NULL)
2662: return axl_false;
2663:
2664: /* check both documents to be equal */
2665: if (! axl_doc_are_equal (doc, reference)) {
2666: axl_error_new (-1, "Expected to find equal documents, but not found on first child replace", NULL, error);
2667: return axl_false;
2668: }
2669:
2670: /* free reference */
2671: axl_doc_free (reference);
2672:
2673: /* restore */
2674: axl_node_replace (replace, node, axl_false);
2675:
2676: /* get child2 */
2677: node = axl_node_get_next (node);
2678: /* get child2 */
2679: node = axl_node_get_next (node);
2680:
2681: /* replace */
2682: axl_node_replace (node, replace, axl_true);
2683:
2684: reference = axl_doc_parse_from_file ("test_19c.xml", error);
2685: if (reference == NULL)
2686: return axl_false;
2687:
2688: /* check both documents to be equal */
2689: if (! axl_doc_are_equal (doc, reference)) {
2690: axl_error_new (-1, "Expected to find equal documents, but not found on first child replace", NULL, error);
2691: return axl_false;
2692: }
2693:
2694: /* free reference */
2695: axl_doc_free (reference);
2696:
2697: node = axl_node_create ("child5");
2698: axl_node_set_content (node, "test", -1);
2699:
2700: /* replace */
2701: axl_node_replace (replace, node, axl_true);
2702:
2703: /* document */
2704: node = axl_doc_get_root (doc);
2705: /* child1 */
2706: node = axl_node_get_first_child (node);
2707: /* child2 */
2708: node = axl_node_get_first_child (node);
2709:
2710: /* remove child2 */
2711: axl_node_remove (node, axl_true);
2712:
2713: reference = axl_doc_parse_from_file ("test_19d.xml", error);
2714: if (reference == NULL)
2715: return axl_false;
2716:
2717: /* check both documents to be equal */
2718: if (! axl_doc_are_equal (doc, reference)) {
2719: axl_error_new (-1, "Expected to find equal documents, but not found on first child remove", NULL, error);
2720: return axl_false;
2721: }
2722:
2723: /* free reference */
2724: axl_doc_free (reference);
2725:
2726: /* document */
2727: node = axl_doc_get_root (doc);
2728: /* child1 */
2729: node = axl_node_get_first_child (node);
2730: /* child3 */
2731: node = axl_node_get_first_child (node);
2732:
2733: /* remove child3 */
2734: axl_node_remove (node, axl_true);
2735:
2736: reference = axl_doc_parse_from_file ("test_19e.xml", error);
2737: if (reference == NULL)
2738: return axl_false;
2739:
2740: /* check both documents to be equal */
2741: if (! axl_doc_are_equal (doc, reference)) {
2742: axl_error_new (-1, "Expected to find equal documents, but not found on first child remove", NULL, error);
2743: return axl_false;
2744: }
2745:
2746: /* free reference */
2747: axl_doc_free (reference);
2748:
2749: /* document */
2750: node = axl_doc_get_root (doc);
2751: /* child1 */
2752: node = axl_node_get_first_child (node);
2753: /* child4 */
2754: node = axl_node_get_first_child (node);
2755:
2756: /* remove child4 */
2757: axl_node_remove (node, axl_true);
2758:
2759: reference = axl_doc_parse_from_file ("test_19f.xml", error);
2760: if (reference == NULL)
2761: return axl_false;
2762:
2763: /* check both documents to be equal */
2764: if (! axl_doc_are_equal (doc, reference)) {
2765: axl_error_new (-1, "Expected to find equal documents, but not found on first child remove", NULL, error);
2766: return axl_false;
2767: }
2768:
2769: /* free reference */
2770: axl_doc_free (reference);
2771:
2772: /* document */
2773: node = axl_doc_get_root (doc);
2774: /* child1 */
2775: node = axl_node_get_first_child (node);
2776: /* child5 */
2777: node = axl_node_get_first_child (node);
2778:
2779: /* remove child5 */
2780: axl_node_remove (node, axl_true);
2781:
2782: reference = axl_doc_parse_from_file ("test_19g.xml", error);
2783: if (reference == NULL)
2784: return axl_false;
2785:
2786: /* check both documents to be equal */
2787: if (! axl_doc_are_equal (doc, reference)) {
2788: axl_error_new (-1, "Expected to find equal documents, but not found on first child remove", NULL, error);
2789: return axl_false;
2790: }
2791:
2792: /* free reference */
2793: axl_doc_free (reference);
2794:
2795: /* free document */
2796: axl_doc_free (doc);
2797:
2798: /* free reference */
2799: return axl_true;
2800: }
2801:
2802: /**
2803: * @brief Test entity support (basic entity support).
2804: *
2805: * @param error The optional axlError to be used to report errors.
2806: *
2807: * @return axl_true if the validity test is passed, axl_false if not.
2808: */
2809: axl_bool test_18 (axlError ** error)
2810: {
2811: axlDtd * dtd = NULL;
2812: char * content;
2813:
2814: /* parse af-arch DTD */
2815: dtd = axl_dtd_parse_from_file ("channel.dtd", error);
2816: if (dtd == NULL)
2817: return axl_false;
2818:
2819: /* lookup for entity definitions */
2820: if (axl_dtd_entity_exists (dtd, "TEST", GENERAL_ENTITY)) {
2821: axl_error_new (-1, "Expected to not find an entity value which was found (TEST)..", NULL, error);
2822: return axl_false;
2823: }
2824:
2825: if (axl_dtd_entity_exists (dtd, "URI", GENERAL_ENTITY)) {
2826: axl_error_new (-1, "Expected to not find an entity value which was found (URI)..", NULL, error);
2827: return axl_false;
2828: }
2829:
2830: /* lookup for entity definitions that are expected to be found */
2831: if (! axl_dtd_entity_exists (dtd, "URI", PARAMETER_ENTITY)) {
2832: axl_error_new (-1, "Expected to find an entity value which wasn't found (% URI)..", NULL, error);
2833: return axl_false;
2834: }
2835:
2836: if (! axl_dtd_entity_exists (dtd, "LOCS", PARAMETER_ENTITY)) {
2837: axl_error_new (-1, "Expected to find an entity value which wasn' found (% LOCS)..", NULL, error);
2838: return axl_false;
2839: }
2840:
2841: /* now get the content inside */
2842: content = axl_dtd_entity_value (dtd, "CHAN", PARAMETER_ENTITY);
2843: if (content == NULL) {
2844: axl_error_new (-1, "Expected to find parameter entity content for (% CHAN) but it wasn't found", NULL, error);
2845: return axl_false;
2846: }
2847:
2848: if (! axl_cmp (content, "CDATA")) {
2849: axl_error_new (-1, "Expected to find parameter entity content for (% CHAN) it doesn't match", NULL, error);
2850: return axl_false;
2851: }
2852:
2853: /* free the dtd */
2854: axl_dtd_free (dtd);
2855:
2856: return axl_true;
2857: }
2858:
2859: /**
2860: * @brief A more complex DTD parsing example
2861: *
2862: * @param error The optional axlError to be used to report errors.
2863: *
2864: * @return axl_true if the validity test is passed, axl_false if not.
2865: */
2866: axl_bool test_17 (axlError ** error)
2867: {
2868: axlDoc * doc = NULL;
2869: axlDtd * dtd = NULL;
2870:
2871: /* parse common DTD file */
2872: dtd = axl_dtd_parse_from_file ("xml-rpc.dtd", error);
2873: if (dtd == NULL)
2874: return axl_false;
2875:
2876: /* parse a file that must not be valid */
2877: doc = axl_doc_parse_from_file ("test17.xdl", error);
2878: if (doc == NULL)
2879: return axl_false;
2880:
2881: /* the following validation must fail */
2882: if (axl_dtd_validate (doc, dtd, error)) {
2883: axl_error_new (-1, "A validation was produced when expected a failure", NULL, error);
2884: return axl_false;
2885: }
2886:
2887: /* because a failure was expected, release memory allocated by
2888: * axl_error_new */
2889: axl_error_free (*error);
2890:
2891: /* free the document */
2892: axl_doc_free (doc);
2893:
2894: /* release DTD reference */
2895: axl_dtd_free (dtd);
2896:
2897: return axl_true;
2898: }
2899:
2900: /**
2901: * @brief A more complex DTD parsing example
2902: *
2903: * @param error The optional axlError to be used to report errors.
2904: *
2905: * @return axl_true if the validity test is passed, axl_false if not.
2906: */
2907: axl_bool test_16 (axlError ** error)
2908: {
2909: axlDoc * doc = NULL;
2910: axlDtd * dtd = NULL;
2911:
2912: /* parse common DTD file */
2913: dtd = axl_dtd_parse_from_file ("xml-rpc.dtd", error);
2914: if (dtd == NULL)
2915: return axl_false;
2916:
2917: /* parse a file that must not be valid */
2918: doc = axl_doc_parse_from_file ("test03.xdl", error);
2919: if (doc == NULL)
2920: return axl_false;
2921:
2922: /* the following validation must fail */
2923: if (axl_dtd_validate (doc, dtd, error)) {
2924: axl_error_new (-1, "A validation was produced when expected a failure", NULL, error);
2925: return axl_false;
2926: }
2927:
2928: /* because a failure was expected, release memory allocated by
2929: * axl_error_new */
2930: axl_error_free (*error);
2931:
2932: /* free the document */
2933: axl_doc_free (doc);
2934:
2935: /* parse the next file that must be valid */
2936: doc = axl_doc_parse_from_file ("test04.xdl", error);
2937: if (doc == NULL)
2938: return axl_false;
2939:
2940: /* the following validation should successed */
2941: if (! axl_dtd_validate (doc, dtd, error))
2942: return axl_false;
2943:
2944: /* release the document */
2945: axl_doc_free (doc);
2946:
2947: /* release DTD reference */
2948: axl_dtd_free (dtd);
2949:
2950: return axl_true;
2951: }
2952:
2953: /**
2954: * @brief A more complex DTD parsing example
2955: *
2956: * @param error The optional axlError to be used to report errors.
2957: *
2958: * @return axl_true if the validity test is passed, axl_false if not.
2959: */
2960: axl_bool test_15 (axlError ** error)
2961: {
2962: axlDoc * doc = NULL;
2963: axlDtd * dtd = NULL;
2964:
2965: /* parse common DTD file */
2966: dtd = axl_dtd_parse_from_file ("xml-rpc.dtd", error);
2967: if (dtd == NULL)
2968: return axl_false;
2969:
2970: /* parse a file that must not be valid */
2971: doc = axl_doc_parse_from_file ("test01.xdl", error);
2972: if (doc == NULL)
2973: return axl_false;
2974:
2975: /* the following validation must fail */
2976: if (axl_dtd_validate (doc, dtd, error)) {
2977: axl_error_new (-1, "A validation was produced when expected a failure", NULL, error);
2978: return axl_false;
2979: }
2980:
2981: /* because a failure was expected, release memory allocated by
2982: * axl_error_new */
2983: axl_error_free (*error);
2984:
2985: /* free the document */
2986: axl_doc_free (doc);
2987:
2988: /* parse the next file that must be valid */
2989: doc = axl_doc_parse_from_file ("test02.xdl", error);
2990: if (doc == NULL)
2991: return axl_false;
2992:
2993: /* the following validation should successed */
2994: if (! axl_dtd_validate (doc, dtd, error))
2995: return axl_false;
2996:
2997: /* release the document */
2998: axl_doc_free (doc);
2999:
3000: /* release DTD reference */
3001: axl_dtd_free (dtd);
3002:
3003: return axl_true;
3004: }
3005:
3006: /**
3007: * @brief A more complex DTD parsing example
3008: *
3009: * @param error The optional axlError to be used to report errors.
3010: *
3011: * @return axl_true if the validity test is passed, axl_false if not.
3012: */
3013: axl_bool test_14 (axlError ** error)
3014: {
3015: axlDoc * doc = NULL;
3016: axlNode * node = NULL;
3017:
3018: char * xml_document;
3019: char * value;
3020: int size = 0;
3021: int document_size;
3022:
3023:
3024: /* create an emtpy document */
3025: doc = axl_doc_create ("1.0", NULL, axl_false);
3026:
3027: /* create the root node */
3028: node = axl_node_create ("test");
3029: axl_node_set_content (node, "This is a test (') (\") (>) (<) (&), more data###", -1);
3030:
3031: axl_doc_set_root (doc, node);
3032:
3033: /* dump the document */
3034: axl_doc_dump (doc, &xml_document, &document_size);
3035:
3036: if (!axl_cmp ("<?xml version='1.0' ?><test>This is a test (') (") (>) (<) (&), more data###</test>",
3037: xml_document)) {
3038: axl_error_new (-1, "Found dump mismatch that shows entities are not handled properly", NULL, error);
3039: return axl_false;
3040: }
3041:
3042: /* free memory dump */
3043: axl_free (xml_document);
3044:
3045: /* get the content translated */
3046: value = axl_node_get_content_copy (node, &size);
3047:
3048: if (size != 68) {
3049: axl_error_new (-1, "Found a document size mismatch while dumping entity content", NULL, error);
3050: return axl_false;
3051: }
3052:
3053: /* free the content received */
3054: axl_free (value);
3055:
3056: /* get the content translated */
3057: value = axl_node_get_content_trans (node, &size);
3058:
3059: if (size != 48) {
3060: axl_error_new (-1, "Found a document size mismatch while dumping entity content (already translated)", NULL, error);
3061: return axl_false;
3062: }
3063:
3064: /* check node content returned */
3065: if (!axl_cmp (value, "This is a test (\') (\") (>) (<) (&), more data###")) {
3066: axl_error_new (-1, "Found an string mismatch while checking a node content which was translated", NULL, error);
3067: return axl_false;
3068: }
3069:
3070: /* free the content translated */
3071: axl_free (value);
3072:
3073: /* free document */
3074: axl_doc_free (doc);
3075:
3076: doc = axl_doc_parse ("<?xml version='1.0' ?><test></test>", 37, error);
3077: if (doc == NULL) {
3078: printf ("Expected to parse a document but it fails, error was: %s\n", axl_error_get (*error));
3079: return axl_false;
3080: }
3081:
3082: /* get the content */
3083: node = axl_doc_get (doc, "/test");
3084: if (node == NULL) {
3085: axl_error_new (-1, "Expected to find a node reference not found (/test)\n", NULL, error);
3086: return axl_false;
3087: }
3088:
3089: /* get the content */
3090: size = 11;
3091: value = (char*) axl_node_get_content (node, &size);
3092: if (size != 0) {
3093: axl_error_new (-1, "Expected to find a node content with 0 bytes but it 11 (/test)\n", NULL, error);
3094: return axl_false;
3095: }
3096:
3097: /* get the content copy */
3098: size = 13;
3099: value = axl_node_get_content_copy (node, &size);
3100: if (size != 0) {
3101: axl_error_new (-1, "Expected to find a node content with 0 bytes but it 13 (/test)\n", NULL, error);
3102: return axl_false;
3103: }
3104: axl_free (value);
3105:
3106: /* get content copy trans */
3107: size = 14;
3108: value = axl_node_get_content_trans (node, &size);
3109: if (size != 0) {
3110: axl_error_new (-1, "Expected to find a node content with 0 bytes but it 14 (/test)\n", NULL, error);
3111: return axl_false;
3112: }
3113: axl_free (value);
3114:
3115: /* get content trimmed */
3116: size = 15;
3117: value = axl_node_get_content_trim (node, &size);
3118: if (size != 0) {
3119: axl_error_new (-1, "Expected to find a node content with 0 bytes but it 15 (/test)\n", NULL, error);
3120: return axl_false;
3121: }
3122:
3123: /* free the document */
3124: axl_doc_free (doc);
3125:
3126: return axl_true;
3127: }
3128:
3129: /**
3130: * @brief Memory dump operation checks.
3131: *
3132: * @param error The optional axlError to be used to report errors.
3133: *
3134: * @return axl_true if the validity test is passed, axl_false if not.
3135: */
3136: axl_bool test_13 (axlError ** error)
3137: {
3138: axlDoc * doc = NULL;
3139: axlDoc * doc2 = NULL;
3140: axlDoc * doc3 = NULL;
3141:
3142: axlNode * node = NULL;
3143: char * content;
3144: int size;
3145:
3146: doc = axl_doc_parse_from_file ("test13.xml", error);
3147: if (doc == NULL)
3148: return axl_false;
3149:
3150: /* dump xml document */
3151: axl_doc_dump (doc, &content, &size);
3152:
3153: doc2 = axl_doc_parse (content, size, error);
3154: if (doc2 == NULL)
3155: return axl_false;
3156:
3157: /* check if both documents are equals */
3158: if (! axl_doc_are_equal (doc, doc2)) {
3159: axl_error_new (-1, "Expected to dump an equivalent xml document, but found an error", NULL, error);
3160: return axl_false;
3161: }
3162:
3163: /* free dump */
3164: axl_free (content);
3165:
3166: /* free axl document */
3167: axl_doc_free (doc);
3168:
3169: /* free axl document */
3170: axl_doc_free (doc2);
3171:
3172: doc = axl_doc_parse_from_file ("test_13c.xml", error);
3173: if (doc == NULL)
3174: return axl_false;
3175:
3176: if (! axl_doc_dump_pretty (doc, &content, &size, 4)) {
3177: axl_error_new (-1, "Failed to dump pretty print, while expected a proper execution", NULL, error);
3178: return axl_false;
3179: }
3180:
3181: doc2 = axl_doc_parse (content, size, error);
3182: if (doc2 == NULL)
3183: return axl_false;
3184:
3185: /* free content */
3186: axl_free (content);
3187:
3188: if (! axl_doc_are_equal (doc, doc2)) {
3189: axl_error_new (-1, "Expected to find documents to be equal.", NULL, error);
3190: return axl_false;
3191: }
3192:
3193: /* free both document references */
3194: axl_doc_free (doc);
3195: axl_doc_free (doc2);
3196:
3197: /* check pretty printing function */
3198: doc = axl_doc_parse_from_file ("test_13b.xml", error);
3199: if (doc == NULL)
3200: return axl_false;
3201:
3202: if (! axl_doc_dump_pretty (doc, &content, &size, 4)) {
3203: axl_error_new (-1, "Failed to dump pretty print, while expected a proper execution", NULL, error);
3204: return axl_false;
3205: }
3206:
3207: doc2 = axl_doc_parse (content, size, error);
3208: if (doc2 == NULL)
3209: return axl_false;
3210:
3211: if (! axl_doc_are_equal (doc, doc2)) {
3212: axl_error_new (-1, "Expected to find documents to be equal.", NULL, error);
3213: return axl_false;
3214: }
3215:
3216: /* free content */
3217: axl_free (content);
3218:
3219: /* free both document references */
3220: axl_doc_free (doc);
3221: axl_doc_free (doc2);
3222:
3223: /* reopen document to dump nodes */
3224: doc = axl_doc_parse_from_file ("test_13c.xml", error);
3225: if (doc == NULL)
3226: return axl_false;
3227:
3228: /* get a reference to the first root child node: <test> */
3229: node = axl_doc_get_root (doc);
3230: node = axl_node_get_first_child (node);
3231: if (! NODE_CMP_NAME (node, "test")) {
3232: axl_error_new (-1, "Expected to find a child node called: <test>", NULL, error);
3233: return axl_false;
3234: } /* end if */
3235:
3236: /* dump the content */
3237: if (! axl_node_dump (node, &content, &size)) {
3238: axl_error_new (-1, "Expected to find a proper dump operation", NULL, error);
3239: return axl_false;
3240: } /* end if */
3241:
3242: /* parse the content dumped, to check it is really the result
3243: * expected */
3244: doc2 = axl_doc_parse (content, size, NULL);
3245: if (doc2 == NULL) {
3246: axl_error_new (-1, "Expected to parse properly dumped content from a node, but a failure was found", NULL, error);
3247: return axl_false;
3248: } /* end if */
3249:
3250: doc3 = axl_doc_parse_from_file ("test_13d.xml", NULL);
3251: if (doc3 == NULL) {
3252: axl_error_new (-1, "Expected to parse properly a reference file but an error was found", NULL, error);
3253: return axl_false;
3254: } /* end if */
3255:
3256: /* check result */
3257: if (! axl_doc_are_equal (doc2, doc3)) {
3258: axl_error_new (-1, "Expected to find equal document to reference, at node dump operations, but not found", NULL, error);
3259: return axl_false;
3260: } /* end if */
3261:
3262: /* free the content */
3263: axl_free (content);
3264:
3265: /* free the document */
3266: axl_doc_free (doc);
3267: axl_doc_free (doc2);
3268: axl_doc_free (doc3);
3269:
3270: /* load test_13e.xml document */
3271: doc = axl_doc_parse_from_file ("test_13e.xml", NULL);
3272: if (doc == NULL) {
3273: axl_error_new (-1, "Expected to find parseable document, but an error was found..", NULL, error);
3274: return axl_false;
3275: }
3276:
3277: /* now dump the document */
3278: if (!axl_doc_dump_pretty_to_file (doc, "test_13e.xml.test", 4)) {
3279: axl_error_new (-1, "Expected to perform a proper dump operation but an error was found..", NULL, error);
3280: return axl_false;
3281: }
3282:
3283: /* now open the content produced and check both results */
3284: doc2 = axl_doc_parse_from_file ("test_13e.xml.test", NULL);
3285: if (doc2 == NULL) {
3286: axl_error_new (-1, "Failed to open document that was expected to be opened", NULL, error);
3287: return axl_false;
3288: } /* end if */
3289:
3290: /* check both document */
3291: if (! axl_doc_are_equal (doc, doc2)) {
3292: axl_error_new (-1, "Expected to find equal documents before dump operation, but it wasn't found", NULL, error);
3293: return axl_false;
3294: }
3295:
3296: /* free both documents */
3297: axl_doc_free (doc2);
3298: axl_doc_free (doc);
3299:
3300: /* load test_13e.xml document */
3301: doc = axl_doc_parse_from_file ("test_13f.xml", NULL);
3302: if (doc == NULL) {
3303: axl_error_new (-1, "Expected to find parseable document, but an error was found..", NULL, error);
3304: return axl_false;
3305: }
3306:
3307: /* dump to memory */
3308: if (! axl_doc_dump_pretty (doc, &content, &size, 4)) {
3309: axl_error_new (-1, "Expected to find proper dump operation not found", NULL, error);
3310: return axl_false;
3311: } /* end if */
3312:
3313: /* now check content dumped against the predefined value */
3314: if (size != 1262 || ! axl_cmp (content, "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n\
3315: <common-unit-translate>\n\
3316: <!-- Translations for the module and its attributes -->\n\
3317: <translate module='issued_invoice' as='Facturas emitidas' norma='no'>\n\
3318: <translate attr='All Columns' as='Todas las columnas' norma='no'>Value1</translate>\n\
3319: <translate attr='invoice_number' as='Número' norma='no'>Value1</translate>\n\
3320: <translate attr='date' as='Fecha' norma='no'>Value1</translate>\n\
3321: <translate attr='amount' as='Importe' norma='no'>Value1</translate>\n\
3322: <translate attr='year' as='Año' norma='no'>Value1</translate>\n\
3323: <translate attr='tax' as='IVA' norma='no'>Value1</translate>\n\
3324: <translate attr='amount_with_tax' as='Total' norma='no'>Value1</translate>\n\
3325: <translate attr='cur_state' as='Estado' norma='no'>Value1</translate>\n\
3326: </translate>\n\
3327: <!-- Translations for enum declarations -->\n\
3328: <translate enum='IssuedInvoiceState' as='Estado factura' norma='no'>\n\
3329: <translate value='Valid' as='Valida' norma='no'>Value1</translate>\n\
3330: <translate value='Cancelled' as='Anulada' norma='no'>Value1</translate>\n\
3331: <translate value='NegativeInvoice' as='Negativa' norma='no'>Value1</translate>\n\
3332: </translate>\n\
3333: </common-unit-translate>\n")) {
3334: printf ("Content lenght found: %d and size=%d..\n", (int) strlen (content), size);
3335: axl_error_new (-1, "Failed to check dump content, expected different values", NULL, error);
3336: return axl_false;
3337: } /* end if */
3338:
3339: axl_free (content);
3340:
3341: /* free document */
3342: axl_doc_free (doc);
3343:
3344:
3345: return axl_true;
3346: }
3347:
3348: /**
3349: * @brief A more complex DTD parsing example
3350: *
3351: * @param error The optional axlError to be used to report errors.
3352: *
3353: * @return axl_true if the validity test is passed, axl_false if not.
3354: */
3355: axl_bool test_12 (axlError ** error)
3356: {
3357: axlDoc * doc = NULL;
3358: axlDtd * dtd = NULL;
3359:
3360: /* parse gmovil file (an af-arch xml chunk) */
3361: doc = axl_doc_parse_from_file ("channel.xml", error);
3362: if (doc == NULL)
3363: return axl_false;
3364:
3365: /* parse af-arch DTD */
3366: dtd = axl_dtd_parse_from_file ("channel.dtd", error);
3367: if (dtd == NULL)
3368: return axl_false;
3369:
3370: /* perform DTD validation */
3371: if (! axl_dtd_validate (doc, dtd, error)) {
3372: return axl_false;
3373: }
3374:
3375: /* free doc reference */
3376: axl_doc_free (doc);
3377:
3378: /* parse gmovil file (an af-arch xml chunk) */
3379: doc = axl_doc_parse_from_file ("channel2.xml", error);
3380: if (doc == NULL)
3381: return axl_false;
3382:
3383: /* perform DTD validation */
3384: if (! axl_dtd_validate (doc, dtd, error)) {
3385: return axl_false;
3386: }
3387:
3388: /* free doc reference */
3389: axl_doc_free (doc);
3390:
3391: /* parse gmovil file (an af-arch xml chunk) */
3392: doc = axl_doc_parse_from_file ("channel3.xml", error);
3393: if (doc == NULL)
3394: return axl_false;
3395:
3396: /* perform DTD validation */
3397: if (! axl_dtd_validate (doc, dtd, error)) {
3398: return axl_false;
3399: }
3400:
3401: /* free doc reference */
3402: axl_doc_free (doc);
3403:
3404: /* parse gmovil file (an af-arch xml chunk) */
3405: doc = axl_doc_parse_from_file ("channel4.xml", error);
3406: if (doc == NULL)
3407: return axl_false;
3408:
3409: /* perform DTD validation */
3410: if (! axl_dtd_validate (doc, dtd, error)) {
3411: return axl_false;
3412: }
3413:
3414: /* free doc reference */
3415: axl_doc_free (doc);
3416:
3417: /* free dtd reference */
3418: axl_dtd_free (dtd);
3419:
3420: /* parse a BEEP greetins example */
3421: doc = axl_doc_parse_from_file ("channel5.xml", error);
3422: if (doc == NULL)
3423: return axl_false;
3424:
3425: /* parse the TLS dtd file */
3426: dtd = axl_dtd_parse_from_file ("channel.dtd", error);
3427: if (dtd == NULL)
3428: return axl_false;
3429:
3430: /* perform DTD validation */
3431: if (! axl_dtd_validate (doc, dtd, error)) {
3432: return axl_false;
3433: }
3434:
3435: /* free doc reference */
3436: axl_doc_free (doc);
3437:
3438: /* free dtd reference */
3439: axl_dtd_free (dtd);
3440:
3441:
3442: /* test end */
3443: return axl_true;
3444: }
3445:
3446: /**
3447: * @brief A more complex DTD parsing example
3448: *
3449: * @param error The optional axlError to be used to report errors.
3450: *
3451: * @return axl_true if the validity test is passed, axl_false if not.
3452: */
3453: axl_bool test_11 (axlError ** error)
3454: {
3455: axlDoc * doc = NULL;
3456: axlDtd * dtd = NULL;
3457:
3458: /* parse gmovil file (an af-arch xml chunk) */
3459: doc = axl_doc_parse_from_file ("gmovil2.xml", error);
3460: if (doc == NULL)
3461: return axl_false;
3462:
3463: /* parse af-arch DTD */
3464: dtd = axl_dtd_parse_from_file ("fact.dtd", error);
3465: if (dtd == NULL)
3466: return axl_false;
3467:
3468: /* perform DTD validation */
3469: if (! axl_dtd_validate (doc, dtd, error)) {
3470: return axl_false;
3471: }
3472:
3473: /* free doc reference */
3474: axl_doc_free (doc);
3475:
3476: /* free dtd reference */
3477: axl_dtd_free (dtd);
3478:
3479: /* test end */
3480: return axl_true;
3481: }
3482:
3483: /**
3484: * @brief A more complex DTD parsing example
3485: *
3486: * @param error The optional axlError to be used to report errors.
3487: *
3488: * @return axl_true if the validity test is passed, axl_false if not.
3489: */
3490: axl_bool test_10 (axlError ** error)
3491: {
3492: axlDoc * doc = NULL;
3493: axlDtd * dtd = NULL;
3494: axlDtdElement * element = NULL;
3495: axlDtdElementList * itemList = NULL;
3496:
3497: /* parse gmovil file (an af-arch xml chunk) */
3498: doc = axl_doc_parse_from_file ("test5.xml", error);
3499: if (doc == NULL)
3500: return axl_false;
3501:
3502: /* parse af-arch DTD */
3503: dtd = axl_dtd_parse_from_file ("test5.dtd", error);
3504: if (dtd == NULL)
3505: return axl_false;
3506:
3507: /* get the dtd element representation */
3508: element = axl_dtd_get_element (dtd, "choices");
3509:
3510: /* get the item list inside */
3511: itemList = axl_dtd_get_item_list (element);
3512: if (axl_dtd_item_list_count (itemList) != 4) {
3513: axl_error_new (-1, "expected to receive an item list with 4 item nodes inside", NULL, error);
3514: return axl_false;
3515: }
3516:
3517: if (axl_dtd_item_list_type (itemList) != CHOICE) {
3518: axl_error_new (-1, "expected to receive a choice item list", NULL, error);
3519: return axl_false;
3520: }
3521:
3522: if (axl_dtd_item_list_repeat (itemList) != ZERO_OR_MANY) {
3523: axl_log ("test-01", AXL_LEVEL_DEBUG, "received a different repeat configuration: %d != %d",
3524: ZERO_OR_MANY, axl_dtd_item_list_repeat (itemList));
3525: axl_error_new (-1, "expected to receive an item list with (*) zero or many spec", NULL, error);
3526: return axl_false;
3527: }
3528:
3529:
3530: /* perform DTD validation */
3531: if (! axl_dtd_validate (doc, dtd, error)) {
3532: return axl_false;
3533: }
3534:
3535: /* free dtd reference */
3536: axl_dtd_free (dtd);
3537:
3538:
3539: /* parse af-arch DTD */
3540: dtd = axl_dtd_parse_from_file ("test5.1.dtd", error);
3541: if (dtd == NULL)
3542: return axl_false;
3543:
3544: /* perform DTD validation */
3545: if (axl_dtd_validate (doc, dtd, error)) {
3546: axl_error_new (-1, "A validation failure was expected.", NULL, error);
3547: return axl_false;
3548: }
3549:
3550: /* because a failure was expected, release memory allocated by
3551: * axl_error_new */
3552: axl_error_free (*error);
3553:
3554: /* free doc reference */
3555: axl_doc_free (doc);
3556:
3557: /* free dtd reference */
3558: axl_dtd_free (dtd);
3559:
3560: /* test end */
3561: return axl_true;
3562: }
3563:
3564: /**
3565: * @brief A more complex DTD parsing example
3566: *
3567: * @param error The optional axlError to be used to report errors.
3568: *
3569: * @return axl_true if the validity test is passed, axl_false if not.
3570: */
3571: axl_bool test_09 (axlError ** error)
3572: {
3573: axlDoc * doc = NULL;
3574: axlDtd * dtd = NULL;
3575: axlDtdElement * element = NULL;
3576: axlDtdElementList * itemList = NULL;
3577: axlDtdElementListNode * itemNode = NULL;
3578:
3579:
3580: /* parse gmovil file (an af-arch xml chunk) */
3581: doc = axl_doc_parse_from_file ("test4.xml", error);
3582: if (doc == NULL)
3583: return axl_false;
3584:
3585: /* parse af-arch DTD */
3586: dtd = axl_dtd_parse_from_file ("test4.dtd", error);
3587: if (dtd == NULL)
3588: return axl_false;
3589:
3590:
3591: /* get dtd element */
3592: element = axl_dtd_get_element (dtd, "nodes");
3593: if (element == NULL) {
3594: axl_error_new (-1, "unable to find expected DTD element", NULL, error);
3595: return axl_false;
3596: }
3597:
3598: /* get the item list */
3599: itemList = axl_dtd_get_item_list (element);
3600: if (axl_dtd_item_list_count (itemList) != 8) {
3601: axl_log ("test-01", AXL_LEVEL_CRITICAL, "found item list size: %d != 8",
3602: axl_dtd_item_list_count (itemList));
3603: axl_error_new (-1, "expected to find an item list definition with 8 elements", NULL, error);
3604: return axl_false;
3605: }
3606:
3607: /* check <first> node spec */
3608: itemNode = axl_dtd_item_list_get_node (itemList, 0);
3609: if (axl_dtd_item_node_get_type (itemNode) != AXL_ELEMENT_NODE) {
3610: axl_error_new (-1, "expected to find an item node definition, not found", NULL, error);
3611: return axl_false;
3612: }
3613:
3614: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "first")) {
3615: axl_error_new (-1, "expected to find an item node name (first) definition, not found", NULL, error);
3616: return axl_false;
3617: }
3618:
3619: if (axl_dtd_item_node_get_repeat (itemNode) != ONE_OR_MANY) {
3620: axl_error_new (-1, "expected to find an item node definition with one or many repeat def (+), not found", NULL, error);
3621: return axl_false;
3622: }
3623:
3624: /* check <second> node spec */
3625: itemNode = axl_dtd_item_list_get_node (itemList, 1);
3626: if (axl_dtd_item_node_get_type (itemNode) != AXL_ELEMENT_NODE) {
3627: axl_error_new (-1, "expected to find an item node definition, not found", NULL, error);
3628: return axl_false;
3629: }
3630:
3631: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "second")) {
3632: axl_error_new (-1, "expected to find an item node name (second) definition, not found", NULL, error);
3633: return axl_false;
3634: }
3635:
3636: if (axl_dtd_item_node_get_repeat (itemNode) != ONE_AND_ONLY_ONE) {
3637: axl_error_new (-1, "expected to find an item node definition with one and only one repeat def (), not found", NULL, error);
3638: return axl_false;
3639: }
3640:
3641: /* check <third> node spec */
3642: itemNode = axl_dtd_item_list_get_node (itemList, 2);
3643: if (axl_dtd_item_node_get_type (itemNode) != AXL_ELEMENT_NODE) {
3644: axl_error_new (-1, "expected to find an item node definition, not found", NULL, error);
3645: return axl_false;
3646: }
3647:
3648: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "third")) {
3649: axl_error_new (-1, "expected to find an item node name (third) definition, not found", NULL, error);
3650: return axl_false;
3651: }
3652:
3653: if (axl_dtd_item_node_get_repeat (itemNode) != ZERO_OR_ONE) {
3654: axl_error_new (-1, "expected to find an item node definition with zero or one repeat def (?), not found", NULL, error);
3655: return axl_false;
3656: }
3657:
3658: /* check <fourth> node spec */
3659: itemNode = axl_dtd_item_list_get_node (itemList, 3);
3660: if (axl_dtd_item_node_get_type (itemNode) != AXL_ELEMENT_NODE) {
3661: axl_error_new (-1, "expected to find an item node definition, not found", NULL, error);
3662: return axl_false;
3663: }
3664:
3665: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "fourth")) {
3666: axl_error_new (-1, "expected to find an item node name (fourth) definition, not found", NULL, error);
3667: return axl_false;
3668: }
3669:
3670: if (axl_dtd_item_node_get_repeat (itemNode) != ONE_AND_ONLY_ONE) {
3671: axl_error_new (-1, "expected to find an item node definition with one and only one repeat def (), not found", NULL, error);
3672: return axl_false;
3673: }
3674:
3675: /* check <fifth> node spec */
3676: itemNode = axl_dtd_item_list_get_node (itemList, 4);
3677: if (axl_dtd_item_node_get_type (itemNode) != AXL_ELEMENT_NODE) {
3678: axl_error_new (-1, "expected to find an item node definition, not found", NULL, error);
3679: return axl_false;
3680: }
3681:
3682: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "fifth")) {
3683: axl_error_new (-1, "expected to find an item node name (fifth) definition, not found", NULL, error);
3684: return axl_false;
3685: }
3686:
3687: if (axl_dtd_item_node_get_repeat (itemNode) != ZERO_OR_MANY) {
3688: axl_error_new (-1, "expected to find an item node definition with zero to many repeat def (*), not found", NULL, error);
3689: return axl_false;
3690: }
3691:
3692: /* check <fourth> node spec */
3693: itemNode = axl_dtd_item_list_get_node (itemList, 5);
3694: if (axl_dtd_item_node_get_type (itemNode) != AXL_ELEMENT_NODE) {
3695: axl_error_new (-1, "expected to find an item node definition, not found", NULL, error);
3696: return axl_false;
3697: }
3698:
3699: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "fourth")) {
3700: axl_error_new (-1, "expected to find an item node name (fourth) definition, not found", NULL, error);
3701: return axl_false;
3702: }
3703:
3704: if (axl_dtd_item_node_get_repeat (itemNode) != ZERO_OR_MANY) {
3705: axl_error_new (-1, "expected to find an item node definition with zero to many repeat def (*), not found", NULL, error);
3706: return axl_false;
3707: }
3708:
3709: /* check repetition pattern for node spec 6 */
3710: itemNode = axl_dtd_item_list_get_node (itemList, 6);
3711: if (axl_dtd_item_node_get_type (itemNode) != AXL_ELEMENT_LIST) {
3712: axl_error_new (-1, "expected to find an item node definition, not found", NULL, error);
3713: return axl_false;
3714: }
3715:
3716: if (axl_dtd_item_node_get_repeat (itemNode) != ZERO_OR_ONE) {
3717: axl_log ("test-01", AXL_LEVEL_DEBUG, "repeat configuration was different: %d != %d",
3718: axl_dtd_item_node_get_repeat (itemNode), ZERO_OR_ONE);
3719: axl_error_new (-1, "expected to find an item node definition with zero or one repeat def (?), not found", NULL, error);
3720: return axl_false;
3721: }
3722:
3723: /* check repetition pattern for node spec 7 */
3724: itemNode = axl_dtd_item_list_get_node (itemList, 7);
3725: if (axl_dtd_item_node_get_type (itemNode) != AXL_ELEMENT_LIST) {
3726: axl_error_new (-1, "expected to find an item node definition, not found", NULL, error);
3727: return axl_false;
3728: }
3729:
3730: if (axl_dtd_item_node_get_repeat (itemNode) != ZERO_OR_MANY) {
3731: axl_log ("test-01", AXL_LEVEL_DEBUG, "repeat configuration was different: %d != %d",
3732: axl_dtd_item_node_get_repeat (itemNode), ZERO_OR_MANY);
3733: axl_error_new (-1, "expected to find an item node definition with zero or one repeat def (*), not found", NULL, error);
3734: return axl_false;
3735: }
3736:
3737:
3738: /* perform DTD validation */
3739: if (! axl_dtd_validate (doc, dtd, error)) {
3740: return axl_false;
3741: }
3742:
3743: /* free doc reference */
3744: axl_doc_free (doc);
3745:
3746: /* free dtd reference */
3747: axl_dtd_free (dtd);
3748:
3749: /* test end */
3750: return axl_true;
3751: }
3752:
3753: /**
3754: * @brief Perform a loading for a large file.
3755: *
3756: * @param error The optional axlError to be used to report errors.
3757: *
3758: * @return axl_true if the validity test is passed, axl_false if not.
3759: */
3760: axl_bool test_08 (axlError ** error)
3761: {
3762: /* top level definitions */
3763: axlDoc * doc = NULL;
3764:
3765: /* get current doc reference */
3766: doc = axl_doc_parse_from_file ("large.xml", error);
3767: if (doc == NULL)
3768: return axl_false;
3769:
3770: /* release the document */
3771: axl_doc_free (doc);
3772:
3773: return axl_true;
3774: }
3775:
3776:
3777: /**
3778: * @brief A bit more complex DTD parsing checkings
3779: *
3780: * @param error The optional axlError to be used to report errors.
3781: *
3782: * @return axl_true if the validity test is passed, axl_false if not.
3783: */
3784: axl_bool test_07 (axlError ** error)
3785: {
3786: /* top level definitions */
3787: axlDoc * doc = NULL;
3788: axlDtd * dtd = NULL;
3789:
3790: /* get current doc reference */
3791: doc = axl_doc_parse_from_file ("test3.xml", error);
3792: if (doc == NULL)
3793: return axl_false;
3794:
3795: /* load DTD */
3796: dtd = axl_dtd_parse_from_file ("test3.dtd", error);
3797: if (dtd == NULL)
3798: return axl_false;
3799:
3800: /* validate the xml document */
3801: if (! axl_dtd_validate (doc, dtd, error)) {
3802: return axl_false;
3803: }
3804:
3805: /* free document */
3806: axl_doc_free (doc);
3807:
3808: /* free dtd document */
3809: axl_dtd_free (dtd);
3810:
3811: return axl_true;
3812: }
3813:
3814: /**
3815: * @brief A bit more complex DTD parsing checkings
3816: *
3817: * @param error The optional axlError to be used to report errors.
3818: *
3819: * @return axl_true if the validity test is passed, axl_false if not.
3820: */
3821: axl_bool test_06 (axlError ** error)
3822: {
3823: /* top level definitions */
3824: axlDoc * doc = NULL;
3825: axlDtd * dtd = NULL;
3826:
3827: /* dtd iteration variables */
3828: axlDtdElement * element;
3829: axlDtdElementList * itemList;
3830: axlDtdElementListNode * itemNode;
3831:
3832: /* get current doc reference */
3833: doc = axl_doc_parse_from_file ("test3.xml", error);
3834: if (doc == NULL)
3835: return axl_false;
3836:
3837: /* load DTD */
3838: dtd = axl_dtd_parse_from_file ("test3.dtd", error);
3839: if (dtd == NULL)
3840: return axl_false;
3841:
3842: /* get the DTD element reference and check it */
3843: element = axl_dtd_get_root (dtd);
3844: if (element == NULL) {
3845: axl_error_new (-1, "Expected to receive a root DTD node, not found", NULL, error);
3846: return axl_false;
3847: }
3848:
3849: /* check expected DTD root content */
3850: if (! axl_cmp (axl_dtd_get_element_name (element), "complex")) {
3851: axl_error_new (-1, "Expected to receive a root DTD node name, not found", NULL, error);
3852: return axl_false;
3853: }
3854:
3855: if (axl_dtd_get_element_type (element) != ELEMENT_TYPE_CHILDREN) {
3856: axl_error_new (-1, "Expected to receive a root DTD node selection type (Children), not found", NULL, error);
3857: return axl_false;
3858: }
3859:
3860: /* get content specification */
3861: itemList = axl_dtd_get_item_list (element);
3862: if (axl_dtd_item_list_count (itemList) != 1) {
3863: axl_log ("test-01", AXL_LEVEL_DEBUG, "item count %d != %d item spected",
3864: axl_dtd_item_list_count (itemList), 1);
3865: axl_error_new (-1, "Expected to receive an item list specification with only one node, not found", NULL, error);
3866: return axl_false;
3867: }
3868:
3869: /* get times configuration */
3870: if (axl_dtd_item_list_repeat (itemList) != ONE_AND_ONLY_ONE) {
3871: axl_error_new (-1, "Expected to receive a repetition configuration (one and only one) but not found", NULL, error);
3872: return axl_false;
3873: }
3874:
3875: /* get the child node reference */
3876: itemNode = axl_dtd_item_list_get_node (itemList, 0);
3877: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "data")) {
3878: axl_log ("test-01", AXL_LEVEL_CRITICAL, "found item name: '%s' != data",
3879: axl_dtd_item_node_get_value (itemNode));
3880: axl_error_new (-1, "Expected to receive an item node but, not found", NULL, error);
3881: return axl_false;
3882: }
3883:
3884: /* get the DTD element which represents the provided data */
3885: element = axl_dtd_get_element (dtd, "data");
3886: if ((element == NULL) || (!axl_cmp (axl_dtd_get_element_name (element), "data"))) {
3887: axl_error_new (-1, "Expected to receive a DTD element definition but NULL was found or a different DTD name, not found", NULL, error);
3888: return axl_false;
3889: }
3890:
3891: /* get content specification */
3892: itemList = axl_dtd_get_item_list (element);
3893: if (axl_dtd_item_list_count (itemList) != 3) {
3894: axl_log ("test-01", AXL_LEVEL_DEBUG, "item count %d != %d item spected",
3895: axl_dtd_item_list_count (itemList), 3);
3896: axl_error_new (-1, "Expected to receive an item list specification with only one node, not found", NULL, error);
3897: return axl_false;
3898: }
3899:
3900: /* get item list especification */
3901: if (axl_dtd_item_list_type (itemList) != SEQUENCE) {
3902: axl_log ("test-01", AXL_LEVEL_DEBUG, "item count %d != %d item spected",
3903: axl_dtd_item_list_count (itemList), 3);
3904: axl_error_new (-1, "Expected to receive an item list specification as a sequence type, not found", NULL, error);
3905: return axl_false;
3906: }
3907:
3908: /* check item nodes found inside the item list */
3909: itemNode = axl_dtd_item_list_get_node (itemList, 0);
3910: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "row")) {
3911: axl_error_new (-1, "Expected to receive an item node (row) but, not found", NULL, error);
3912: return axl_false;
3913: }
3914:
3915: /* get the child node reference */
3916: itemNode = axl_dtd_item_list_get_node (itemList, 1);
3917: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "column")) {
3918: axl_error_new (-1, "Expected to receive an item node (column) but, not found", NULL, error);
3919: return axl_false;
3920: }
3921:
3922: /* get current configuration for repetition value for the
3923: * provided content particule */
3924: if (axl_dtd_item_node_get_repeat (itemNode) != ONE_AND_ONLY_ONE) {
3925: axl_error_new (-1, "Expected to receive an item node repeat configuration but, not found", NULL, error);
3926: return axl_false;
3927: }
3928:
3929:
3930: /* get the child node reference */
3931: itemNode = axl_dtd_item_list_get_node (itemList, 2);
3932: if (! axl_cmp (axl_dtd_item_node_get_value (itemNode), "value")) {
3933: axl_error_new (-1, "Expected to receive an item node (value) but, not found", NULL, error);
3934: return axl_false;
3935: }
3936:
3937: /* now work with the choice element */
3938: element = axl_dtd_get_element (dtd, "column");
3939: if ((element == NULL) || (!axl_cmp (axl_dtd_get_element_name (element), "column"))) {
3940: axl_error_new (-1, "Expected to receive a DTD element definition but NULL was found or a different DTD name (column), not found", NULL, error);
3941: return axl_false;
3942: }
3943:
3944: /* get content specification */
3945: itemList = axl_dtd_get_item_list (element);
3946: if (axl_dtd_item_list_count (itemList) != 4) {
3947: axl_log ("test-01", AXL_LEVEL_DEBUG, "item count %d != %d item spected",
3948: axl_dtd_item_list_count (itemList), 4);
3949: axl_error_new (-1, "Expected to receive an item list specification with only one node, not found", NULL, error);
3950: return axl_false;
3951: }
3952:
3953: /* get item list especification */
3954: if (axl_dtd_item_list_type (itemList) != CHOICE) {
3955: axl_error_new (-1, "Expected to receive an item list specification as a CHOICE type, not found", NULL, error);
3956: return axl_false;
3957: }
3958:
3959: /* get the DTD element which represents the provided data */
3960: element = axl_dtd_get_element (dtd, "data");
3961: if ((element == NULL) || (!axl_cmp (axl_dtd_get_element_name (element), "data"))) {
3962: axl_error_new (-1, "Expected to receive a DTD element definition but NULL was found or a different DTD name, not found", NULL, error);
3963: return axl_false;
3964: }
3965:
3966: /* free document */
3967: axl_doc_free (doc);
3968:
3969: /* free dtd document */
3970: axl_dtd_free (dtd);
3971:
3972: return axl_true;
3973: }
3974:
3975: /**
3976: * @brief DTD operations. Checks that DTD support works, reading
3977: * simple DTD definitions, and ensuring elements are properly read.
3978: *
3979: * @param error The axlError reference to be filled if the function
3980: * returns axl_false.
3981: *
3982: * @return axl_true if the validity test is passed, axl_false if not.
3983: */
3984: axl_bool test_05 (axlError ** error)
3985: {
3986:
3987: axlDoc * doc;
3988: axlNode * node;
3989: axlDtd * dtd;
3990:
3991: /* parse the document found */
3992: doc = axl_doc_parse_from_file ("test.xml", error);
3993: if (doc == NULL)
3994: return axl_false;
3995:
3996: node = axl_doc_get (doc, "/complex/data/row/td");
3997: if (node == NULL) {
3998: axl_error_new (-1, "Expected to receive a node, not found", NULL, error);
3999: axl_doc_free (doc);
4000: return axl_false;
4001: }
4002:
4003: if (! axl_cmp (axl_node_get_content (node, NULL), "10")) {
4004: axl_error_new (-1, "Expected to receive a node content, not found", NULL, error);
4005: axl_doc_free (doc);
4006: return axl_false;
4007: }
4008:
4009: /* free previous document */
4010: axl_doc_free (doc);
4011:
4012: /* parse the document found */
4013: doc = axl_doc_parse_from_file ("test2.xml", error);
4014: if (doc == NULL)
4015: return axl_false;
4016:
4017:
4018: dtd = axl_dtd_parse_from_file ("test.dtd", error);
4019: if (dtd == NULL)
4020: return axl_false;
4021:
4022: /* now validate the document */
4023: if (! axl_dtd_validate (doc, dtd, error)) {
4024: return axl_false;
4025: }
4026:
4027: /* release memory used by the parser */
4028: axl_doc_free (doc);
4029:
4030: /* release memory used by the DTD element */
4031: axl_dtd_free (dtd);
4032:
4033: return axl_true;
4034:
4035: }
4036:
4037: /**
4038: * @brief Perform some additional checks for a more extended xml
4039: * documents, that includes attributes inside node definitions.
4040: *
4041: * @param error The axlError where failures will be reported
4042: *
4043: * @return The \ref axl_true if test is passed, axl_false if not.
4044: */
4045: axl_bool test_04 (axlError ** error)
4046: {
4047: axlDoc * doc;
4048: axlNode * node;
4049:
4050: /* parse the document */
4051: doc = axl_doc_parse_strings (error,
4052: "<?xml version='1.0' ?>",
4053: " <?test \"my content\" ?>",
4054: " <complex>",
4055: " <data>",
4056: " <row>",
4057: " <!-- A comment inside the middle of the document ",
4058: " more comments ... ",
4059: " more comments \n \r <td>..</td> -->",
4060: " <td>10</td>",
4061: " <test />",
4062: " \n \n \r <?test \"my content\" ?> \n \n",
4063: " <?test \"my content\" ?>",
4064: " <more>",
4065: " <test3 attr='2.0' />",
4066: " </more>",
4067: " </row>",
4068: " <test2 />",
4069: " <non-xml-document>",
4070: " \n \r \n \t",
4071: " <![CDATA[<xml><<<<<<>>>>>><<<>>>><<<<<<>>>]]>"
4072: " \r \n \r \t",
4073: " </non-xml-document>",
4074: " </data>",
4075: " <!-- <data>",
4076: " <row>",
4077: " A comment inside the middle of the document ",
4078: " more comments ... ",
4079: " more comments \n \r <td>..</td> ",
4080: " <td>10</td>",
4081: " <test />",
4082: " <more>",
4083: " <test2 attr='2.0' attr2='3.0' attr4='4.0'/>",
4084: " </more>",
4085: " </row>",
4086: " <test2 />",
4087: " </data> -->",
4088: " </complex>",
4089: NULL);
4090: /* check the result returned */
4091: if (doc == NULL)
4092: return axl_false;
4093:
4094: /* get the node <td> value */
4095: node = axl_doc_get (doc, "/complex/data/row/td");
4096: if (! axl_cmp (axl_node_get_content (node, NULL), "10")) {
4097: axl_log ("test-04", AXL_LEVEL_DEBUG, "found a different content than the expected ('10' != '%s')",
4098: axl_node_get_content (node, NULL));
4099: axl_error_new (-1, "Expected to receive a 10 value, but not found", NULL, error);
4100: return axl_false;
4101: }
4102:
4103: /* get a reference to the test2 node */
4104: node = axl_doc_get (doc, "/complex/data/row/more/test3");
4105: if (node == NULL) {
4106: axl_error_new (-1, "Expected to find a test3 node at the given location", NULL, error);
4107: return axl_false;
4108: }
4109:
4110: /* check the attribute */
4111: if (! axl_node_has_attribute (node, "attr")) {
4112: axl_error_new (-1, "Expected to find an attribute called 'attr' inside test3 node at the given location", NULL, error);
4113: return axl_false;
4114: }
4115:
4116: /* check the attribute value */
4117: if (! axl_cmp (axl_node_get_attribute_value (node, "attr"), "2.0")) {
4118: axl_error_new (-1, "Expected to find an attribute value equal '2.0' inside test2 node at the given location", NULL, error);
4119: return axl_false;
4120: }
4121:
4122: /* add here Pi instruction checking */
4123: if (! axl_doc_has_pi_target (doc, "test")) {
4124: axl_error_new (-1, "failed to get expected PI target 'test'", NULL, error);
4125: return axl_false;
4126: }
4127:
4128: if (! axl_cmp (axl_doc_get_pi_target_content (doc, "test"), "\"my content\"")) {
4129: axl_error_new (-1, "expected to receive a PI content not found", NULL, error);
4130: return axl_false;
4131: }
4132:
4133: node = axl_doc_get (doc, "/complex/data/row");
4134: if (node == NULL) {
4135: axl_error_new (-1, "unable to get expected node to check node PI support", NULL, error);
4136: return axl_false;
4137: }
4138:
4139: if (! axl_node_has_pi_target (node, "test")) {
4140: axl_error_new (-1, "failed to get expected PI target 'test' for the node", NULL, error);
4141: return axl_false;
4142: }
4143:
4144:
4145: node = axl_doc_get (doc, "/complex/data/non-xml-document");
4146: if (node == NULL) {
4147: axl_error_new (-1, "Expected to receive the CDATA node, not found", NULL, error);
4148: return axl_false;
4149: }
4150:
4151: if (! axl_cmp (axl_node_get_content (node, NULL), "<xml><<<<<<>>>>>><<<>>>><<<<<<>>>")) {
4152: printf ("Content doesn't match: %s != %s\n",
4153: axl_node_get_content (node, NULL), "<xml><<<<<<>>>>>><<<>>>><<<<<<>>>");
4154: axl_error_new (-1, "Expected to recevie CDATA content, not found or not match", NULL, error);
4155: return axl_false;
4156: }
4157:
4158:
4159: /* free the memory */
4160: axl_doc_free (doc);
4161:
4162: return axl_true;
4163: }
4164:
4165: /**
4166: * @brief Checks a more extended and complex xml documents
4167: *
4168: * @param error The axlError where failures will be reported.
4169: *
4170: * @return \ref axl_true if test is passed, axl_false if not.
4171: */
4172: axl_bool test_03 (axlError ** error)
4173: {
4174:
4175: axlDoc * doc;
4176: axlNode * node;
4177:
4178: /* parse the xml document provided */
4179: doc = axl_doc_parse ("<?xml version='1.0' ?>\n\
4180: <complex>\n\
4181: <data>\n\
4182: <row>10</row><row>20</row><row>30</row><row>40</row>\n\
4183: </data>\n\
4184: <data2>\n\
4185: <td> 23 </td>\n\
4186: </data2>\n\
4187: </complex>", -1, error);
4188: if (doc == NULL)
4189: return axl_false;
4190:
4191: /* get the root node */
4192: node = axl_doc_get_root (doc);
4193: if (! NODE_CMP_NAME (node, "complex")) {
4194: axl_error_new (-2, "Root node returned from the document is not the one excepted", NULL, error);
4195: axl_doc_free (doc);
4196: return axl_false;
4197: }
4198:
4199: /* test get node function */
4200: node = axl_doc_get (doc, "/complex/data2/td");
4201: if (node == NULL) {
4202: axl_error_new (-2, "Unable to find a node due to a path selection", NULL, error);
4203: axl_doc_free (doc);
4204: return axl_false;
4205: }
4206:
4207: /* check the node returned */
4208: if (! NODE_CMP_NAME (node, "td")) {
4209: axl_error_new (-2, "The node for the node looked up doesn't match ", NULL, error);
4210: axl_doc_free (doc);
4211: return axl_false;
4212: }
4213:
4214: /* check for returning bad nodes */
4215: node = axl_doc_get (doc, "/complex/data3/td");
4216: if (node != NULL) {
4217: axl_error_new (-2, "Returned a node that should be NULL", NULL, error);
4218: axl_doc_free (doc);
4219: return axl_false;
4220: }
4221:
4222: node = axl_doc_get (doc, "/complex/data2/td");
4223: if (!axl_cmp (axl_node_get_content (node, NULL), " 23 ")) {
4224: axl_log ("test-03", AXL_LEVEL_DEBUG, "expected to receive a node content: ' 23 ' but received '%s'",
4225: axl_node_get_content (node, NULL));
4226: axl_error_new (-2, "Node content have failed, expected a different value", NULL, error);
4227: return axl_false;
4228: }
4229:
4230: node = axl_doc_get (doc, "complex/data3/td");
4231: if (node != NULL) {
4232: axl_error_new (-2, "Parsed a path that is invalid", NULL, error);
4233: return axl_false;
4234: }
4235:
4236: /* release memory allocated by the document */
4237: axl_doc_free (doc);
4238:
4239: return axl_true;
4240: }
4241:
4242: axl_bool test_02_always_fail (axlStream * stream, const char ** detected, axlPointer user_data, axlError ** error)
4243: {
4244: /* always return axl_false to check how behave the library */
4245: return axl_false;
4246: }
4247:
4248:
4249: /**
4250: * @brief Checks xml document error for basic parsing.
4251: *
4252: * @param error The axlError where failures are returned.
4253: *
4254: * @return axl_true if test are properly run. axl_false if not.
4255: */
4256: axl_bool test_02 (axlError ** error)
4257: {
4258: axlDoc * doc;
4259:
4260: doc = axl_doc_parse ("<? xml >", 8, error);
4261: if (doc != NULL) {
4262: axl_error_new (-1, "Failed to detect wrong xml header", NULL, error);
4263: return axl_false;
4264: }
4265: axl_error_free (* error);
4266: (*error) = NULL;
4267:
4268: doc = axl_doc_parse ("<?xml >", 7, error);
4269: if (doc != NULL) {
4270:
4271: axl_error_new (-1, "Failed to detect wrong xml trailing header", NULL, error);
4272: return axl_false;
4273: }
4274: axl_error_free (* error);
4275: (*error) = NULL;
4276:
4277: /* configure an encoding function that fails to detect */
4278: axl_doc_set_detect_codification_func (test_02_always_fail, NULL);
4279:
4280: doc = axl_doc_parse ("<this />", 8, error);
4281: if (doc != NULL) {
4282: axl_error_new (-1, "Failed to detect wrong xml trailing header", NULL, error);
4283: return axl_false;
4284: }
4285: axl_error_free (* error);
4286: (*error) = NULL;
4287: /* uninstall detect codification */
4288: axl_doc_set_detect_codification_func (NULL, NULL);
4289:
4290:
4291: /* wrong closed document comment */
4292: doc = axl_doc_parse ("<document><this><!-- this not closed --</document>", 50, error);
4293: if (doc != NULL) {
4294: axl_error_new (-1, "Failed to detect wrong balanced xml document", NULL, error);
4295: return axl_false;
4296: }
4297: axl_error_free (* error);
4298: (*error) = NULL;
4299:
4300: /* opening an unbalanced document */
4301: doc = axl_doc_parse ("<document><this><!-- this not closed --></document>", 51, error);
4302: if (doc != NULL) {
4303: axl_error_new (-1, "Failed to detect wrong balanced xml document", NULL, error);
4304: return axl_false;
4305: }
4306: axl_error_free (* error);
4307: (*error) = NULL;
4308:
4309: /* opening an unbalanced document with all nodes called the same */
4310: printf ("Test 02: unbalanced document called with same nodes..\n");
4311: doc = axl_doc_parse ("<document><document><!-- this not closed --></document>", 55, error);
4312: if (doc != NULL) {
4313: axl_error_new (-1, "Failed to detect wrong balanced xml document", NULL, error);
4314: return axl_false;
4315: }
4316: axl_error_free (* error);
4317: (*error) = NULL;
4318:
4319: return axl_true;
4320: }
4321:
4322:
4323: /**
4324: * @brief Parse an initial document, with an xml header with
4325: * version=1.0 and no more header.
4326: *
4327: *
4328: * @return axl_false if the function fails to parse the
4329: * document. axl_true if the test was properly executed.
4330: */
4331: axl_bool test_01 (axlError ** error)
4332: {
4333: /* axl document representation */
4334: axlDoc * doc;
4335:
4336:
4337: /* parse the given string */
4338: doc = axl_doc_parse ("<?xml version='1.0' ?><axldoc />", 32, error);
4339: if (doc == NULL) {
4340: return axl_false;
4341: }
4342: axl_doc_free (doc);
4343:
4344: doc = axl_doc_parse ("<?xml version='1.0' ?> <another />", 55, error);
4345: if (doc == NULL) {
4346: return axl_false;
4347: }
4348:
4349: /* release document parsed */
4350: axl_doc_free (doc);
4351:
4352: doc = axl_doc_parse ("<?xml \n \t \n \r version='1.0' ?> <doc />", 50, error);
4353: if (doc == NULL) {
4354: return axl_false;
4355: }
4356:
4357: /* release document parsed */
4358: axl_doc_free (doc);
4359:
4360: doc = axl_doc_parse ("<?xml version=\"1.0\" ?> \r \t \n<another />", 54, error);
4361: if (doc == NULL) {
4362: return axl_false;
4363: }
4364:
4365: /* release document parsed */
4366: axl_doc_free (doc);
4367:
4368: doc = axl_doc_parse ("<?xml version=\"1.0\" \t \n \r encoding='utf-8\" ?> <data />", 63, error);
4369: if (doc == NULL) {
4370: return axl_false;
4371: }
4372:
4373: if (strcmp ("utf-8", axl_doc_get_encoding (doc))) {
4374: printf ("ERROR: encoding read from the document differs from the expected (got %s, expected %s)!\n",
4375: axl_doc_get_encoding (doc), "utf-8");
4376: axl_error_new (-1, "ERROR: encoding read from the document differs from the expected!", NULL, error);
4377: return axl_false;
4378: }
4379:
4380: /* release document parsed */
4381: axl_doc_free (doc);
4382:
4383: doc = axl_doc_parse ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <data/>", 65, error);
4384: if (doc == NULL) {
4385: return axl_false;
4386: }
4387:
4388: if (!axl_doc_get_standalone (doc)) {
4389: printf ("ERROR: Expected to receive a true standalone configuration but axl_false was found\n");
4390: return axl_false;
4391: }
4392:
4393: /* release document parsed */
4394: axl_doc_free (doc);
4395:
4396:
4397: return axl_true;
4398: }
4399:
4400: /**
4401: * @brief Axl stream boundary checks.
4402: *
4403: *
4404: * @return axl_false if the function fails to parse the
4405: * document. axl_true if the test was properly executed.
4406: */
4407: axl_bool test_01a (axlError ** error)
4408: {
4409: axlStream * stream;
4410: char * value;
4411: int chunk_matched = -2;
4412:
4413: /* parse the string */
4414: stream = axl_stream_new ("customer", -1, NULL, -1, error);
4415: if (stream == NULL)
4416: return axl_false;
4417:
4418: /* get the value */
4419: value = axl_stream_get_until (stream, NULL, &chunk_matched, axl_true, 2, "[", ".");
4420: if (value != NULL) {
4421: /* free the stream */
4422: axl_stream_free (stream);
4423:
4424: /* fill an error */
4425: axl_error_new (-1, "expected to find a null value while parsing content", NULL, error);
4426:
4427: return axl_false;
4428: }
4429:
4430: if (chunk_matched != -1) {
4431: /* free the stream */
4432: axl_stream_free (stream);
4433:
4434: /* fill an error */
4435: axl_error_new (-1, "expected to chunk matched value equal to -1", NULL, error);
4436:
4437: return axl_false;
4438: }
4439:
4440: /* parse the stream using zero support */
4441:
4442: /* get the value */
4443: value = axl_stream_get_until_zero (stream, NULL, &chunk_matched, axl_true, 2, "[", ".");
4444: if (value == NULL) {
4445: /* free the stream */
4446: axl_stream_free (stream);
4447:
4448: /* fill an error */
4449: axl_error_new (-1, "expected to find a defined value while parsing content", NULL, error);
4450:
4451: return axl_false;
4452: }
4453:
4454: if (chunk_matched != -2) {
4455: /* free the stream */
4456: axl_stream_free (stream);
4457:
4458: /* fill an error */
4459: axl_error_new (-1, "expected to chunk matched value equal to -2", NULL, error);
4460:
4461: return axl_false;
4462: }
4463:
4464: /* zero string found (in the current stream) */
4465: if (! axl_cmp (value, "customer")) {
4466: printf ("Found values: '%s' != 'customer'\n", value);
4467:
4468: /* fill an error */
4469: axl_error_new (-1, "expected to find a string not found", NULL, error);
4470:
4471: return axl_false;
4472: }
4473:
4474: /* free the stream */
4475: axl_stream_free (stream);
4476:
4477: /* parse the string */
4478: stream = axl_stream_new ("customer", -1, NULL, -1, error);
4479: if (stream == NULL)
4480: return axl_false;
4481:
4482: axl_stream_push (stream, "provider ", 9);
4483: if (! (axl_stream_peek (stream, "provider", 8) > 0)) {
4484: axl_error_new (-1, "failed to check expected input at the stream after push operation", NULL, error);
4485: return axl_false;
4486: } /* end if */
4487:
4488: if (axl_stream_get_size (stream) != 17) {
4489: axl_error_new (-1, "Found unexpected stream buffer size, while expecting 17", NULL, error);
4490: return axl_false;
4491: } /* end if */
4492:
4493: axl_stream_inspect (stream, "pro", 3);
4494:
4495: if (! (axl_stream_inspect (stream, "vider ", 6) > 0)) {
4496: axl_error_new (-1, "Expected to find an string value.. ('vider ') not found", NULL, error);
4497: return axl_false;
4498: } /* end if */
4499:
4500: axl_stream_free (stream);
4501:
4502: return axl_true;
4503: }
4504:
4505:
4506:
4507:
4508: axl_bool test_01b_show_node_found (axlNode * node,
4509: axlNode * parent,
4510: axlDoc * doc,
4511: axl_bool * was_removed,
4512: axlPointer ptr,
4513: axlPointer ptr2)
4514: {
4515: int * iterator = ptr;
4516:
4517: /* show node found */
4518: switch (*iterator) {
4519: case 0:
4520: /* <document> case */
4521: if (! NODE_CMP_NAME (node, "document")) {
4522:
4523: /* fill the error */
4524: axl_error_new (-1, "Expected to find a document node not found <document>", NULL, (axlError **) ptr2);
4525:
4526: /* stop iterating */
4527: return axl_false;
4528: }
4529:
4530: break;
4531: case 1:
4532: /* <child1> case */
4533: if (! NODE_CMP_NAME (node, "child1")) {
4534: /* fill the error */
4535: axl_error_new (-1, "Expected to find a document node not found <child1>", NULL, (axlError **) ptr2);
4536:
4537: /* stop iterating */
4538: return axl_false;
4539: }
4540:
4541: if (! NODE_CMP_NAME (parent, "document")) {
4542: /* fill the error */
4543: axl_error_new (-1, "Expected to find parent node <document> for child1", NULL, (axlError **) ptr2);
4544:
4545: /* stop iterating */
4546: return axl_false;
4547: }
4548:
4549: break;
4550: case 2:
4551: /* <child2> case */
4552: if (! NODE_CMP_NAME (node, "child2")) {
4553: /* fill the error */
4554: axl_error_new (-1, "Expected to find a document node not found <child2>", NULL, (axlError **) ptr2);
4555:
4556: /* stop iterating */
4557: return axl_false;
4558: }
4559:
4560: if (! NODE_CMP_NAME (parent, "document")) {
4561: /* fill the error */
4562: axl_error_new (-1, "Expected to find parent node <document> for child2", NULL, (axlError **) ptr2);
4563:
4564: /* stop iterating */
4565: return axl_false;
4566: }
4567:
4568: break;
4569: case 3:
4570: /* <child3> case */
4571: if (! NODE_CMP_NAME (node, "child3")) {
4572: /* fill the error */
4573: axl_error_new (-1, "Expected to find a document node not found <child3>", NULL, (axlError **) ptr2);
4574:
4575: /* stop iterating */
4576: return axl_false;
4577: }
4578:
4579: if (! NODE_CMP_NAME (parent, "document")) {
4580: /* fill the error */
4581: axl_error_new (-1, "Expected to find parent node <document> for child3", NULL, (axlError **) ptr2);
4582:
4583: /* stop iterating */
4584: return axl_false;
4585: }
4586:
4587: break;
4588: case 4:
4589: /* <a> case */
4590: if (! NODE_CMP_NAME (node, "a")) {
4591: /* fill the error */
4592: axl_error_new (-1, "Expected to find a document node not found <a>", NULL, (axlError **) ptr2);
4593:
4594: /* stop iterating */
4595: return axl_false;
4596: }
4597:
4598: if (! NODE_CMP_NAME (parent, "child3")) {
4599: /* fill the error */
4600: axl_error_new (-1, "Expected to find parent node <child3> for a", NULL, (axlError **) ptr2);
4601:
4602: /* stop iterating */
4603: return axl_false;
4604: }
4605:
4606: break;
4607: case 5:
4608: /* <b> case */
4609: if (! NODE_CMP_NAME (node, "b")) {
4610: /* fill the error */
4611: axl_error_new (-1, "Expected to find a document node not found <b>", NULL, (axlError **) ptr2);
4612:
4613: /* stop iterating */
4614: return axl_false;
4615: }
4616:
4617: if (! NODE_CMP_NAME (parent, "child3")) {
4618: /* fill the error */
4619: axl_error_new (-1, "Expected to find parent node <child3> for b", NULL, (axlError **) ptr2);
4620:
4621: /* stop iterating */
4622: return axl_false;
4623: }
4624:
4625: break;
4626: case 6:
4627: /* <c> case */
4628: if (! NODE_CMP_NAME (node, "c")) {
4629: /* fill the error */
4630: axl_error_new (-1, "Expected to find a document node not found <c>", NULL, (axlError **) ptr2);
4631:
4632: /* stop iterating */
4633: return axl_false;
4634: }
4635:
4636: if (! NODE_CMP_NAME (parent, "child3")) {
4637: /* fill the error */
4638: axl_error_new (-1, "Expected to find parent node <child3> for c", NULL, (axlError **) ptr2);
4639:
4640: /* stop iterating */
4641: return axl_false;
4642: }
4643:
4644: break;
4645: case 7:
4646: /* <d> case */
4647: if (! NODE_CMP_NAME (node, "d")) {
4648: /* fill the error */
4649: axl_error_new (-1, "Expected to find a document node not found <d>", NULL, (axlError **) ptr2);
4650:
4651: /* stop iterating */
4652: return axl_false;
4653: }
4654:
4655: if (! NODE_CMP_NAME (parent, "c")) {
4656: /* fill the error */
4657: axl_error_new (-1, "Expected to find parent node <c> for d", NULL, (axlError **) ptr2);
4658:
4659: /* stop iterating */
4660: return axl_false;
4661: }
4662:
4663: break;
4664: case 8:
4665: /* <e> case */
4666: if (! NODE_CMP_NAME (node, "e")) {
4667: /* fill the error */
4668: axl_error_new (-1, "Expected to find a document node not found <e>", NULL, (axlError **) ptr2);
4669:
4670: /* stop iterating */
4671: return axl_false;
4672: }
4673:
4674: if (! NODE_CMP_NAME (parent, "c")) {
4675: /* fill the error */
4676: axl_error_new (-1, "Expected to find parent node <c> for e", NULL, (axlError **) ptr2);
4677:
4678: /* stop iterating */
4679: return axl_false;
4680: }
4681:
4682: break;
4683: case 9:
4684: /* <e> case */
4685: if (! NODE_CMP_NAME (node, "f")) {
4686: /* fill the error */
4687: axl_error_new (-1, "Expected to find a document node not found <f>", NULL, (axlError **) ptr2);
4688:
4689: /* stop iterating */
4690: return axl_false;
4691: }
4692:
4693: if (! NODE_CMP_NAME (parent, "child3")) {
4694: /* fill the error */
4695: axl_error_new (-1, "Expected to find parent node <child3> for f", NULL, (axlError **) ptr2);
4696:
4697: /* stop iterating */
4698: return axl_false;
4699: }
4700:
4701: break;
4702: case 10:
4703: /* <g> case */
4704: if (! NODE_CMP_NAME (node, "g")) {
4705: /* fill the error */
4706: axl_error_new (-1, "Expected to find a document node not found <g>", NULL, (axlError **) ptr2);
4707:
4708: /* stop iterating */
4709: return axl_false;
4710: }
4711:
4712: if (! NODE_CMP_NAME (parent, "child3")) {
4713: /* fill the error */
4714: axl_error_new (-1, "Expected to find parent node <chile3> for g", NULL, (axlError **) ptr2);
4715:
4716: /* stop iterating */
4717: return axl_false;
4718: }
4719:
4720: break;
4721: case 11:
4722: /* <child4> case */
4723: if (! NODE_CMP_NAME (node, "child4")) {
4724: /* fill the error */
4725: axl_error_new (-1, "Expected to find a document node not found <child4>", NULL, (axlError **) ptr2);
4726:
4727: /* stop iterating */
4728: return axl_false;
4729: }
4730:
4731: if (! NODE_CMP_NAME (parent, "document")) {
4732: /* fill the error */
4733: axl_error_new (-1, "Expected to find parent node <document> for child4", NULL, (axlError **) ptr2);
4734:
4735: /* stop iterating */
4736: return axl_false;
4737: }
4738: break;
4739: case 12:
4740: /* <child5> case */
4741: if (! NODE_CMP_NAME (node, "child5")) {
4742: /* fill the error */
4743: axl_error_new (-1, "Expected to find a document node not found <child5>", NULL, (axlError **) ptr2);
4744:
4745: /* stop iterating */
4746: return axl_false;
4747: }
4748:
4749: if (! NODE_CMP_NAME (parent, "document")) {
4750: /* fill the error */
4751: axl_error_new (-1, "Expected to find parent node <document> for child4", NULL, (axlError **) ptr2);
4752:
4753: /* stop iterating */
4754: return axl_false;
4755: }
4756:
4757: break;
4758: }
4759:
4760: /* update count */
4761: (*iterator)++;
4762:
4763: /* keep iterating */
4764: return axl_true;
4765: }
4766:
4767:
4768: axl_bool test_01b_show_node_found2 (axlNode * node,
4769: axlNode * parent,
4770: axlDoc * doc,
4771: axl_bool * was_removed,
4772: axlPointer ptr, axlPointer ptr2)
4773: {
4774: int * iterator = ptr;
4775:
4776: /* show node found */
4777: switch (*iterator) {
4778: case 0:
4779: /* <document> case */
4780: if (! NODE_CMP_NAME (node, "document")) {
4781: /* fill the error */
4782: axl_error_new (-1, "Expected to find a document node not found <document>", NULL, (axlError **) ptr2);
4783:
4784: /* stop iterating */
4785: return axl_false;
4786: }
4787: break;
4788: case 1:
4789: /* <child1> case */
4790: if (! NODE_CMP_NAME (node, "child1")) {
4791: /* fill the error */
4792: axl_error_new (-1, "Expected to find a document node not found <child1>", NULL, (axlError **) ptr2);
4793:
4794: /* stop iterating */
4795: return axl_false;
4796: }
4797: break;
4798: case 2:
4799: /* <child2> case */
4800: if (! NODE_CMP_NAME (node, "child2")) {
4801: /* fill the error */
4802: axl_error_new (-1, "Expected to find a document node not found <child2>", NULL, (axlError **) ptr2);
4803:
4804: /* stop iterating */
4805: return axl_false;
4806: }
4807: break;
4808: case 3:
4809: /* <child3> case */
4810: if (! NODE_CMP_NAME (node, "child3")) {
4811: /* fill the error */
4812: axl_error_new (-1, "Expected to find a document node not found <child3>", NULL, (axlError **) ptr2);
4813:
4814: /* stop iterating */
4815: return axl_false;
4816: }
4817: break;
4818: case 4:
4819: /* <child4> case */
4820: if (! NODE_CMP_NAME (node, "child4")) {
4821: /* fill the error */
4822: axl_error_new (-1, "Expected to find a document node not found <child4>", NULL, (axlError **) ptr2);
4823:
4824: /* stop iterating */
4825: return axl_false;
4826: }
4827: break;
4828: case 5:
4829: /* <child5> case */
4830: if (! NODE_CMP_NAME (node, "child5")) {
4831: /* fill the error */
4832: axl_error_new (-1, "Expected to find a document node not found <child5>", NULL, (axlError **) ptr2);
4833:
4834: /* stop iterating */
4835: return axl_false;
4836: }
4837: break;
4838: case 6:
4839: /* <a> case */
4840: if (! NODE_CMP_NAME (node, "a")) {
4841: /* fill the error */
4842: axl_error_new (-1, "Expected to find a document node not found <a>", NULL, (axlError **) ptr2);
4843:
4844: /* stop iterating */
4845: return axl_false;
4846: }
4847: break;
4848: case 7:
4849: /* <b> case */
4850: if (! NODE_CMP_NAME (node, "b")) {
4851: /* fill the error */
4852: axl_error_new (-1, "Expected to find a document node not found <b>", NULL, (axlError **) ptr2);
4853:
4854: /* stop iterating */
4855: return axl_false;
4856: }
4857: break;
4858: case 8:
4859: /* <c> case */
4860: if (! NODE_CMP_NAME (node, "c")) {
4861: /* fill the error */
4862: axl_error_new (-1, "Expected to find a document node not found <c>", NULL, (axlError **) ptr2);
4863:
4864: /* stop iterating */
4865: return axl_false;
4866: }
4867: break;
4868: case 9:
4869: /* <f> case */
4870: if (! NODE_CMP_NAME (node, "f")) {
4871: /* fill the error */
4872: axl_error_new (-1, "Expected to find a document node not found <f>", NULL, (axlError **) ptr2);
4873:
4874: /* stop iterating */
4875: return axl_false;
4876: }
4877: break;
4878: case 10:
4879: /* <g> case */
4880: if (! NODE_CMP_NAME (node, "g")) {
4881: /* fill the error */
4882: axl_error_new (-1, "Expected to find a document node not found <g>", NULL, (axlError **) ptr2);
4883:
4884: /* stop iterating */
4885: return axl_false;
4886: }
4887: break;
4888: case 11:
4889: /* <d> case */
4890: if (! NODE_CMP_NAME (node, "d")) {
4891: /* fill the error */
4892: axl_error_new (-1, "Expected to find a document node not found <d>", NULL, (axlError **) ptr2);
4893:
4894: /* stop iterating */
4895: return axl_false;
4896: }
4897: break;
4898: case 12:
4899: /* <e> case */
4900: if (! NODE_CMP_NAME (node, "e")) {
4901: /* fill the error */
4902: axl_error_new (-1, "Expected to find a document node not found <e>", NULL, (axlError **) ptr2);
4903:
4904: /* stop iterating */
4905: return axl_false;
4906: }
4907: break;
4908: }
4909:
4910: /* update count */
4911: (*iterator)++;
4912:
4913: /* keep iterating */
4914: return axl_true;
4915: }
4916:
4917:
4918:
4919:
4920: /**
4921: * @brief Axl stream boundary checks.
4922: *
4923: *
4924: * @return axl_false if the function fails to parse the
4925: * document. axl_true if the test was properly executed.
4926: */
4927: axl_bool test_01b (axlError ** error)
4928: {
4929: axlDoc * doc;
4930: axlNode * node;
4931: int test_01b_id;
4932:
4933: /* parse document */
4934: doc = axl_doc_parse_from_file ("test_01b.xml", error);
4935: if (doc == NULL)
4936: return axl_false;
4937:
4938: /* get document root */
4939: node = axl_doc_get_root (doc);
4940: if (! NODE_CMP_NAME (node, "document")) {
4941: axl_error_new (-1, "Expected to find root <document>, but it wasn't found", NULL, error);
4942: return axl_false;
4943: }
4944:
4945: /* get first child node */
4946: node = axl_node_get_first_child (node);
4947: if (! NODE_CMP_NAME (node, "child1")) {
4948: axl_error_new (-1, "Expected to find child node <child1>, but it wasn't found", NULL, error);
4949: return axl_false;
4950: }
4951:
4952: /* get sibling node */
4953: node = axl_node_get_next (node);
4954: if (! NODE_CMP_NAME (node, "child2")) {
4955: axl_error_new (-1, "Expected to find child node <child2>, but it wasn't found", NULL, error);
4956: return axl_false;
4957: }
4958:
4959: /* now iterate over all nodes inside the document */
4960: test_01b_id = 0;
4961: if (! axl_doc_iterate_full (doc, DEEP_ITERATION, test_01b_show_node_found, &test_01b_id, error))
4962: return axl_false;
4963:
4964: /* now iterate over all nodes inside (wide mode) the document */
4965: test_01b_id = 0;
4966: if (! axl_doc_iterate_full (doc, WIDE_ITERATION, test_01b_show_node_found2, &test_01b_id, error))
4967: return axl_false;
4968:
4969: /* test ok */
4970: axl_doc_free (doc);
4971: return axl_true;
4972: }
4973:
4974: /**
4975: * @brief Axl stream boundary checks.
4976: *
4977: *
4978: * @return axl_false if the function fails to parse the
4979: * document. axl_true if the test was properly executed.
4980: */
4981: axl_bool test_01c (axlError ** error)
4982: {
4983: axlDoc * doc;
4984: axlNode * node;
4985: axlNode * parent;
4986:
4987: /* parse document (uses the same xml document as test_01b) */
4988: doc = axl_doc_parse_from_file ("test_01b.xml", error);
4989: if (doc == NULL)
4990: return axl_false;
4991:
4992: /* get document root */
4993: node = axl_doc_get_root (doc);
4994: if (! NODE_CMP_NAME (node, "document")) {
4995: axl_error_new (-1, "Expected to find root <document>, but it wasn't found", NULL, error);
4996: return axl_false;
4997: }
4998:
4999: /* get first child */
5000: node = axl_node_get_first_child (node);
5001:
5002: if (! NODE_CMP_NAME (node, "child1")) {
5003: axl_error_new (-1, "Expected to find <child1>, but it wasn't found", NULL, error);
5004: return axl_false;
5005: }
5006:
5007: /* check parent */
5008: parent = axl_node_get_parent (node);
5009: if (! NODE_CMP_NAME (parent, "document")) {
5010: axl_error_new (-1, "Expected to find parent <document>, but it wasn't found", NULL, error);
5011: return axl_false;
5012: }
5013:
5014: node = axl_node_get_next (node);
5015: if (! NODE_CMP_NAME (node, "child2")) {
5016: axl_error_new (-1, "Expected to find <child2>, but it wasn't found", NULL, error);
5017: return axl_false;
5018: }
5019:
5020: /* check parent */
5021: parent = axl_node_get_parent (node);
5022: if (! NODE_CMP_NAME (parent, "document")) {
5023: axl_error_new (-1, "Expected to find parent <document>, but it wasn't found", NULL, error);
5024: return axl_false;
5025: }
5026:
5027: node = axl_node_get_next (node);
5028: if (! NODE_CMP_NAME (node, "child3")) {
5029: axl_error_new (-1, "Expected to find <child3>, but it wasn't found", NULL, error);
5030: return axl_false;
5031: }
5032: /* check parent */
5033: parent = axl_node_get_parent (node);
5034: if (! NODE_CMP_NAME (parent, "document")) {
5035: axl_error_new (-1, "Expected to find parent <document>, but it wasn't found", NULL, error);
5036: return axl_false;
5037: }
5038:
5039: node = axl_node_get_next (node);
5040: if (! NODE_CMP_NAME (node, "child4")) {
5041: axl_error_new (-1, "Expected to find <child4>, but it wasn't found", NULL, error);
5042: return axl_false;
5043: }
5044: /* check parent */
5045: parent = axl_node_get_parent (node);
5046: if (! NODE_CMP_NAME (parent, "document")) {
5047: axl_error_new (-1, "Expected to find parent <document>, but it wasn't found", NULL, error);
5048: return axl_false;
5049: }
5050:
5051: node = axl_node_get_next (node);
5052: if (! NODE_CMP_NAME (node, "child5")) {
5053: axl_error_new (-1, "Expected to find <child5>, but it wasn't found", NULL, error);
5054: return axl_false;
5055: }
5056: /* check parent */
5057: parent = axl_node_get_parent (node);
5058: if (! NODE_CMP_NAME (parent, "document")) {
5059: axl_error_new (-1, "Expected to find parent <document>, but it wasn't found", NULL, error);
5060: return axl_false;
5061: }
5062:
5063: if (axl_node_get_next (node) != NULL) {
5064: axl_error_new (-1, "Expected to find NULL value while calling to axl_node_get_next, but it wasn't found", NULL, error);
5065: return axl_false;
5066: }
5067:
5068: node = axl_node_get_previous (node);
5069: if (! NODE_CMP_NAME (node, "child4")) {
5070: axl_error_new (-1, "Expected to find <child4>, but it wasn't found", NULL, error);
5071: return axl_false;
5072: }
5073: /* check parent */
5074: if (! NODE_CMP_NAME (parent, "document")) {
5075: axl_error_new (-1, "Expected to find parent <document>, but it wasn't found", NULL, error);
5076: return axl_false;
5077: }
5078:
5079: node = axl_node_get_previous (node);
5080: if (! NODE_CMP_NAME (node, "child3")) {
5081: axl_error_new (-1, "Expected to find <child3>, but it wasn't found", NULL, error);
5082: return axl_false;
5083: }
5084: /* check parent */
5085: if (! NODE_CMP_NAME (parent, "document")) {
5086: axl_error_new (-1, "Expected to find parent <document>, but it wasn't found", NULL, error);
5087: return axl_false;
5088: }
5089:
5090: node = axl_node_get_previous (node);
5091: if (! NODE_CMP_NAME (node, "child2")) {
5092: axl_error_new (-1, "Expected to find <child2>, but it wasn't found", NULL, error);
5093: return axl_false;
5094: }
5095: /* check parent */
5096: if (! NODE_CMP_NAME (parent, "document")) {
5097: axl_error_new (-1, "Expected to find parent <document>, but it wasn't found", NULL, error);
5098: return axl_false;
5099: }
5100:
5101: node = axl_node_get_previous (node);
5102: if (! NODE_CMP_NAME (node, "child1")) {
5103: axl_error_new (-1, "Expected to find <child1>, but it wasn't found", NULL, error);
5104: return axl_false;
5105: }
5106: /* check parent */
5107: parent = axl_node_get_parent (node);
5108: if (! NODE_CMP_NAME (parent, "document")) {
5109: axl_error_new (-1, "Expected to find parent <document>, but it wasn't found", NULL, error);
5110: return axl_false;
5111: }
5112:
5113: if (axl_node_get_previous (node) != NULL) {
5114: axl_error_new (-1, "Expected to find NULL value while calling to axl_node_get_next, but it wasn't found", NULL, error);
5115: return axl_false;
5116: }
5117:
5118: /* check next called and previous called api */
5119: node = axl_doc_get_root (doc);
5120: node = axl_node_get_first_child (node);
5121:
5122:
5123: /* get <child5> */
5124: node = axl_node_get_next_called (node, "child5");
5125: if (! NODE_CMP_NAME (node, "child5")) {
5126: axl_error_new (-1, "Expected to find <child5> node while calling to axl_node_get_next_called, but it wasn't found", NULL, error);
5127: return axl_false;
5128: }
5129:
5130: /* check next empty */
5131: if (axl_node_get_next_called (node, "child5") != NULL) {
5132: axl_error_new (-1, "Expected to find empty node following to <child5> node while calling to axl_node_get_next_called, but it was found", NULL, error);
5133: return axl_false;
5134: }
5135:
5136: /* get <child1> */
5137: node = axl_node_get_previous_called (node, "child1");
5138: if (! NODE_CMP_NAME (node, "child1")) {
5139: axl_error_new (-1, "Expected to find <child1> node while calling to axl_node_get_previous_called, but it wasn't found", NULL, error);
5140: return axl_false;
5141: }
5142:
5143: /* check next empty */
5144: if (axl_node_get_previous_called (node, "child1") != NULL) {
5145: axl_error_new (-1, "Expected to find empty node following to <child1> node while calling to axl_node_get_previous_called, but it was found", NULL, error);
5146: return axl_false;
5147: }
5148:
5149: /* free document */
5150: axl_doc_free (doc);
5151:
5152: return axl_true;
5153: }
5154:
5155: /**
5156: * @brief Axl node nth access.
5157: *
5158: * @return axl_false if the function fails to parse the
5159: * document. axl_true if the test was properly executed.
5160: */
5161: axl_bool test_01d (axlError ** error)
5162: {
5163: axlDoc * doc;
5164: axlNode * node;
5165: axlNode * child;
5166:
5167: /* parse document */
5168: doc = axl_doc_parse_from_file ("test_01d.xml", error);
5169: if (doc == NULL)
5170: return axl_false;
5171:
5172: /* get document root */
5173: node = axl_doc_get_root (doc);
5174:
5175: /* get the node at the 0 position */
5176: child = axl_node_get_child_nth (node, 0);
5177: if (! NODE_CMP_NAME (child, "child1")) {
5178: axl_error_new (-1, "Expected to find node <child1> at 0, but it wasn't found", NULL, error);
5179: return axl_false;
5180: }
5181:
5182: /* get the node at the 1 position */
5183: child = axl_node_get_child_nth (node, 1);
5184: if (! NODE_CMP_NAME (child, "child2")) {
5185: axl_error_new (-1, "Expected to find node <child2> at 1, but it wasn't found", NULL, error);
5186: return axl_false;
5187: }
5188:
5189: /* get the node at the 2 position */
5190: child = axl_node_get_child_nth (node, 2);
5191: if (! NODE_CMP_NAME (child, "child3")) {
5192: axl_error_new (-1, "Expected to find node <child3> at 2, but it wasn't found", NULL, error);
5193: return axl_false;
5194: }
5195:
5196: /* get the node at the 3 position */
5197: child = axl_node_get_child_nth (node, 3);
5198: if (! NODE_CMP_NAME (child, "child4")) {
5199: axl_error_new (-1, "Expected to find node <child4> at 3, but it wasn't found", NULL, error);
5200: return axl_false;
5201: }
5202:
5203: /* get the node at the 4 position */
5204: child = axl_node_get_child_nth (node, 4);
5205: if (! NODE_CMP_NAME (child, "child5")) {
5206: axl_error_new (-1, "Expected to find node <child5> at 4, but it wasn't found", NULL, error);
5207: return axl_false;
5208: }
5209:
5210: /* now with <child3> childs *> */
5211: node = axl_node_get_child_nth (node, 2);
5212:
5213: /* get the node at the 0 position */
5214: child = axl_node_get_child_nth (node, 0);
5215: if (! NODE_CMP_NAME (child, "a")) {
5216: axl_error_new (-1, "Expected to find node <a> at 0, but it wasn't found", NULL, error);
5217: return axl_false;
5218: }
5219:
5220: /* get the node at the 1 position */
5221: child = axl_node_get_child_nth (node, 1);
5222: if (! NODE_CMP_NAME (child, "b")) {
5223: axl_error_new (-1, "Expected to find node <b> at 1, but it wasn't found", NULL, error);
5224: return axl_false;
5225: }
5226:
5227: /* get the node at the 2 position */
5228: child = axl_node_get_child_nth (node, 2);
5229: if (! NODE_CMP_NAME (child, "c")) {
5230: axl_error_new (-1, "Expected to find node <c> at 2, but it wasn't found", NULL, error);
5231: return axl_false;
5232: }
5233:
5234: /* get the node at the 3 position */
5235: child = axl_node_get_child_nth (node, 3);
5236: if (! NODE_CMP_NAME (child, "f")) {
5237: axl_error_new (-1, "Expected to find node <f> at 3, but it wasn't found", NULL, error);
5238: return axl_false;
5239: }
5240:
5241: /* get the node at the 4 position */
5242: child = axl_node_get_child_nth (node, 4);
5243: if (! NODE_CMP_NAME (child, "g")) {
5244: axl_error_new (-1, "Expected to find node <g> at 4, but it wasn't found", NULL, error);
5245: return axl_false;
5246: }
5247:
5248: /* test ok */
5249: axl_doc_free (doc);
5250: return axl_true;
5251: }
5252:
5253: /**
5254: * @brief Check parsing document with huge node content.
5255: *
5256: * @return axl_false if the function fails to parse the
5257: * document. axl_true if the test was properly executed.
5258: */
5259: axl_bool test_01e (axlError ** error)
5260: {
5261: axlDoc * doc;
5262: axlNode * node;
5263: int size;
5264:
5265: /* parse document */
5266: doc = axl_doc_parse_from_file ("test_01e.xml", error);
5267: if (doc == NULL)
5268: return axl_false;
5269:
5270: /* get root node */
5271: node = axl_doc_get_root (doc);
5272: if (! axl_node_get_content (node, &size))
5273: return axl_false;
5274:
5275: /* free document */
5276: axl_doc_free (doc);
5277:
5278: return axl_true;
5279: }
5280:
5281: /**
5282: * @brief Check parsing document xml:space attribute.
5283: *
5284: * @return axl_false if the function fails to parse the document. axl_true if
5285: * the test was properly executed.
5286: */
5287: axl_bool test_01f (axlError ** error)
5288: {
5289: axlDoc * doc;
5290: axlNode * node;
5291: const char * content;
5292: int size;
5293:
5294: /* parse document */
5295: doc = axl_doc_parse_from_file ("test_01f.xml", error);
5296: if (doc == NULL)
5297: return axl_false;
5298:
5299: /* get root node */
5300: node = axl_doc_get_root (doc);
5301: content = axl_node_get_content (node, &size);
5302:
5303: if (! axl_cmp (content, " ")) {
5304: printf ("found content '%s' but expected '%s'...\n", content, " ");
5305: axl_error_new (-1, "Expected to find content not found", NULL, error);
5306: axl_free (doc);
5307: return axl_false;
5308: }
5309:
5310: /* free document */
5311: axl_doc_free (doc);
5312:
5313: /* parse document */
5314: doc = axl_doc_parse_from_file ("test_01f2.xml", error);
5315: if (doc == NULL)
5316: return axl_false;
5317:
5318: /* get node <content/id> */
5319: node = axl_doc_get_root (doc);
5320: node = axl_node_get_child_called (node, "id");
5321: content = axl_node_get_content (node, &size);
5322:
5323: if (! axl_cmp (content, " ")) {
5324: printf ("found content '%s' but expected '%s'...\n", content, " ");
5325: axl_error_new (-1, "Expected to find content not found", NULL, error);
5326: axl_free (doc);
5327: return axl_false;
5328: }
5329:
5330: /* get node <content/id2> */
5331: node = axl_doc_get_root (doc);
5332: node = axl_node_get_child_called (node, "id2");
5333: content = axl_node_get_content (node, &size);
5334:
5335: if (! axl_cmp (content, "")) {
5336: printf ("found content '%s' but expected '%s'...\n", content, "");
5337: axl_error_new (-1, "Expected to find content not found", NULL, error);
5338: axl_free (doc);
5339: return axl_false;
5340: }
5341:
5342: /* free document */
5343: axl_doc_free (doc);
5344:
5345: return axl_true;
5346: }
5347:
5348: /**
5349: * @brief Test current libaxl list implementation.
5350: *
5351: *
5352: * @return axl_true if it works properly or axl_false if not.
5353: */
5354: axl_bool test_01_01 (void)
5355: {
5356: axlList * list;
5357: int value;
5358:
5359: axlPointer ptr1;
5360: axlPointer ptr2;
5361: axlPointer ptr3;
5362: axlPointer ptr4;
5363:
5364: /* create the list */
5365: list = axl_list_new (axl_list_equal_string, NULL);
5366: if (axl_list_length (list) != 0) {
5367: printf ("Bad length returned by the list (%d != 0)\n",
5368: axl_list_length (list));
5369: return axl_false;
5370: }
5371:
5372: if (! axl_list_is_empty (list)) {
5373: printf ("Expected to find empty list just after list created\n");
5374: return axl_false;
5375: } /* end if */
5376:
5377: /* add data */
5378: axl_list_add (list, "test 1");
5379: if (axl_list_length (list) != 1) {
5380: printf ("Bad length returned by the list (%d != 1)\n",
5381: axl_list_length (list));
5382: return axl_false;
5383: }
5384:
5385: if (axl_list_is_empty (list)) {
5386: printf ("Expected to find a non-empty list just after items added\n");
5387: return axl_false;
5388: } /* end if */
5389:
5390: axl_list_add (list, "test 2");
5391: if (axl_list_length (list) != 2) {
5392: printf ("Bad length returned by the list (%d != 2)\n",
5393: axl_list_length (list));
5394: return axl_false;
5395: }
5396:
5397: axl_list_add (list, "test 3");
5398: if (axl_list_length (list) != 3) {
5399: printf ("Bad length returned by the list (%d != 3)\n",
5400: axl_list_length (list));
5401: return axl_false;
5402: }
5403:
5404: /* remove data */
5405: axl_list_remove (list, "test 1");
5406: if (axl_list_length (list) != 2) {
5407: printf ("Bad length returned by the list, seems that remove doesn't work (%d != 2)\n",
5408: axl_list_length (list));
5409: return axl_false;
5410: }
5411:
5412: axl_list_remove (list, "test 2");
5413: if (axl_list_length (list) != 1) {
5414: printf ("Bad length returned by the list, seems that remove doesn't work\n");
5415: return axl_false;
5416: }
5417:
5418: axl_list_remove (list, "test 3");
5419: if (axl_list_length (list) != 0) {
5420: printf ("Bad length returned by the list, seems that remove doesn't work\n");
5421: return axl_false;
5422: }
5423:
5424: /* add data again */
5425: axl_list_add (list, "test 4");
5426: axl_list_add (list, "test 5");
5427: if (axl_list_length (list) != 2) {
5428: printf ("Bad length returned by the list, seems that remove doesn't work\n");
5429: return axl_false;
5430: }
5431:
5432: axl_list_remove (list, "test 1");
5433: if (axl_list_length (list) != 2) {
5434: printf ("Bad length returned by the list, seems that remove doesn't work\n");
5435: return axl_false;
5436: }
5437:
5438: if (! axl_list_exists (list, "test 5")) {
5439: printf ("Exist function have failed\n");
5440: return axl_false;
5441: }
5442:
5443: if (! axl_list_exists (list, "test 4")) {
5444: printf ("Exist function have failed\n");
5445: return axl_false;
5446: }
5447:
5448: if (axl_list_exists (list, "test 1")) {
5449: printf ("Exist function have failed\n");
5450: return axl_false;
5451: }
5452:
5453: if (! axl_list_exists_at (list, "test 4", 0)) {
5454: printf ("\"Exists at\" functionality seems to not work (0)\n");
5455: return axl_false;
5456: }
5457:
5458: if (! axl_list_exists_at (list, "test 5", 1)) {
5459: printf ("\"Exists at\" functionality seems to not work (1)\n");
5460: return axl_false;
5461: }
5462:
5463: axl_list_free (list);
5464:
5465: /* create a new list */
5466: list = axl_list_new (axl_list_equal_string, NULL);
5467:
5468: axl_list_add (list, "test 1");
5469: axl_list_add (list, "test 3");
5470: axl_list_add (list, "test 5");
5471:
5472: axl_list_add_at (list, "test 0", 0);
5473: axl_list_add_at (list, "test 2", 2);
5474: axl_list_add_at (list, "test 4", 4);
5475: axl_list_add_at (list, "test 6", 6);
5476:
5477: if (! axl_list_exists_at (list, "test 0", 0)) {
5478: printf ("\"Exists at\" functionality seems to not work (0)\n");
5479: return axl_false;
5480: }
5481:
5482: if (! axl_list_exists_at (list, "test 1", 1)) {
5483: printf ("\"Exists at\" functionality seems to not work (1)\n");
5484: return axl_false;
5485: }
5486:
5487: if (! axl_list_exists_at (list, "test 2", 2)) {
5488: printf ("\"Exists at\" functionality seems to not work (2)\n");
5489: return axl_false;
5490: }
5491:
5492: if (! axl_list_exists_at (list, "test 3", 3)) {
5493: printf ("\"Exists at\" functionality seems to not work (3)\n");
5494: return axl_false;
5495: }
5496:
5497: if (! axl_list_exists_at (list, "test 4", 4)) {
5498: printf ("\"Exists at\" functionality seems to not work (4)\n");
5499: return axl_false;
5500: }
5501:
5502: if (! axl_list_exists_at (list, "test 5", 5)) {
5503: printf ("\"Exists at\" functionality seems to not work (5)\n");
5504: return axl_false;
5505: }
5506:
5507: if (! axl_list_exists_at (list, "test 6", 6)) {
5508: printf ("\"Exists at\" functionality seems to not work (6)\n");
5509: return axl_false;
5510: }
5511:
5512: /* free the list */
5513: axl_list_free (list);
5514:
5515: /* create an integer list */
5516: list = axl_list_new (axl_list_equal_int, NULL);
5517: axl_list_add (list, INT_TO_PTR (1));
5518: axl_list_add (list, INT_TO_PTR (3));
5519: axl_list_add (list, INT_TO_PTR (3900));
5520: axl_list_add (list, INT_TO_PTR (20230));
5521:
5522: if (axl_list_length (list) != 4) {
5523: printf ("Expected to find 4 items inside an integer list");
5524: return axl_false;
5525: }
5526:
5527: /* remove one item */
5528: axl_list_remove (list, INT_TO_PTR (1));
5529:
5530: if (axl_list_length (list) != 3) {
5531: printf ("Expected to find 3 items inside an integer list");
5532: return axl_false;
5533: }
5534:
5535: /* remove one item */
5536: axl_list_remove (list, INT_TO_PTR (1));
5537:
5538: if (axl_list_length (list) != 3) {
5539: printf ("Expected to find 3 items inside an integer list");
5540: return axl_false;
5541: }
5542:
5543: /* remove one item */
5544: axl_list_remove (list, INT_TO_PTR (3));
5545:
5546: if (axl_list_length (list) != 2) {
5547: printf ("Expected to find 2 items inside an integer list");
5548: return axl_false;
5549: }
5550:
5551: /* remove one item */
5552: axl_list_remove (list, INT_TO_PTR (3900));
5553:
5554: if (axl_list_length (list) != 1) {
5555: printf ("Expected to find 1 items inside an integer list");
5556: return axl_false;
5557: }
5558:
5559: /* remove one item */
5560: axl_list_remove (list, INT_TO_PTR (20230));
5561:
5562: if (axl_list_length (list) != 0) {
5563: printf ("Expected to find 0 items inside an integer list");
5564: return axl_false;
5565: }
5566: axl_list_free (list);
5567:
5568: /* create an integer list */
5569: list = axl_list_new (axl_list_equal_int, NULL);
5570:
5571: /* add items */
5572: axl_list_add (list, INT_TO_PTR (8));
5573: axl_list_add (list, INT_TO_PTR (10));
5574: axl_list_add (list, INT_TO_PTR (11));
5575: axl_list_add (list, INT_TO_PTR (12));
5576: axl_list_add (list, INT_TO_PTR (102));
5577: axl_list_add (list, INT_TO_PTR (1123));
5578: axl_list_add (list, INT_TO_PTR (412));
5579: axl_list_add (list, INT_TO_PTR (122));
5580: axl_list_add (list, INT_TO_PTR (148));
5581: axl_list_add (list, INT_TO_PTR (670));
5582: axl_list_add (list, INT_TO_PTR (2));
5583:
5584: if (axl_list_length (list) != 11) {
5585: printf ("Expected to find 11 element, but found: %d\n", axl_list_length (list));
5586: return axl_false;
5587: }
5588:
5589: /* remove the third element */
5590: axl_list_remove (list, INT_TO_PTR (11));
5591:
5592: if (axl_list_length (list) != 10) {
5593: printf ("Expected to find 10 element, but found: %d\n", axl_list_length (list));
5594: return axl_false;
5595: }
5596:
5597: /* remove the third element */
5598: axl_list_remove (list, INT_TO_PTR (122));
5599:
5600: if (axl_list_length (list) != 9) {
5601: printf ("Expected to find 9 element, but found: %d\n", axl_list_length (list));
5602: return axl_false;
5603: }
5604:
5605: /* free the list */
5606: axl_list_free (list);
5607:
5608: list = axl_list_new (axl_list_equal_int, NULL);
5609:
5610: axl_list_append (list, INT_TO_PTR (9));
5611: axl_list_append (list, INT_TO_PTR (10));
5612: axl_list_append (list, INT_TO_PTR (8));
5613: axl_list_append (list, INT_TO_PTR (11));
5614:
5615: if (axl_list_length (list) != 4) {
5616: printf ("Expected to find 4 element, but found: %d\n", axl_list_length (list));
5617: return axl_false;
5618: }
5619:
5620: /* remove */
5621: axl_list_remove (list, INT_TO_PTR(8));
5622:
5623: if (axl_list_length (list) != 3) {
5624: printf ("Expected to find 3 element, but found: %d\n", axl_list_length (list));
5625: return axl_false;
5626: }
5627:
5628: /* free the list */
5629: axl_list_free (list);
5630:
5631: list = axl_list_new (axl_list_equal_int, NULL);
5632:
5633: axl_list_append (list, INT_TO_PTR (8));
5634: axl_list_append (list, INT_TO_PTR (10));
5635: axl_list_append (list, INT_TO_PTR (11));
5636: axl_list_append (list, INT_TO_PTR (9));
5637:
5638: if (axl_list_length (list) != 4) {
5639: printf ("Expected to find 4 element, but found: %d\n", axl_list_length (list));
5640: return axl_false;
5641: }
5642:
5643: axl_list_remove (list, INT_TO_PTR(10));
5644:
5645: if (axl_list_length (list) != 3) {
5646: printf ("Expected to find 3 element, but found: %d\n", axl_list_length (list));
5647: return axl_false;
5648: }
5649:
5650: /* free the list */
5651: axl_list_free (list);
5652:
5653: list = axl_list_new (axl_list_equal_int, NULL);
5654:
5655: axl_list_append (list, INT_TO_PTR (9));
5656: axl_list_append (list, INT_TO_PTR (8));
5657: axl_list_append (list, INT_TO_PTR (10));
5658: axl_list_append (list, INT_TO_PTR (11));
5659:
5660: if (axl_list_length (list) != 4) {
5661: printf ("Expected to find 4 element, but found: %d\n", axl_list_length (list));
5662: return axl_false;
5663: }
5664:
5665: /* remove */
5666: axl_list_remove (list, INT_TO_PTR(8));
5667:
5668: /* remove */
5669: axl_list_remove (list, INT_TO_PTR(10));
5670:
5671: if (axl_list_length (list) != 2) {
5672: printf ("Expected to find 2 element, but found: %d\n", axl_list_length (list));
5673: return axl_false;
5674: }
5675:
5676: /* free the list */
5677: axl_list_free (list);
5678:
5679:
5680: /* create a list and check remove first/get first */
5681: list = axl_list_new (axl_list_equal_int, NULL);
5682: axl_list_add (list, INT_TO_PTR(1));
5683: axl_list_add (list, INT_TO_PTR(2));
5684: axl_list_add (list, INT_TO_PTR(3));
5685: axl_list_add (list, INT_TO_PTR(4));
5686: axl_list_add (list, INT_TO_PTR(5));
5687: axl_list_add (list, INT_TO_PTR(6));
5688: axl_list_add (list, INT_TO_PTR(7));
5689: axl_list_add (list, INT_TO_PTR(8));
5690: axl_list_add (list, INT_TO_PTR(9));
5691: axl_list_add (list, INT_TO_PTR(10));
5692: while (axl_list_length (list) > 0) {
5693:
5694: /* get the integer value */
5695: value = PTR_TO_INT (axl_list_get_first (list));
5696:
5697: if (! (value > 0)) {
5698: printf ("Expected to not find any item under 0..\n");
5699: return axl_false;
5700: }
5701:
5702: /* remove */
5703: axl_list_unlink_first (list);
5704: }
5705: if (axl_list_length (list) != 0) {
5706: printf ("Expected to find 0 length list..\n");
5707: return axl_false;
5708: }
5709:
5710: axl_list_free (list);
5711:
5712: /* create an empty list and destroy */
5713: list = axl_list_new (axl_list_equal_int, NULL);
5714:
5715: /* add one item */
5716: axl_list_add (list, INT_TO_PTR (1));
5717: if (axl_list_length (list) != 1) {
5718: printf ("Expected to find 1 length length..\n");
5719: return axl_false;
5720: }
5721:
5722: axl_list_add (list, INT_TO_PTR (2));
5723: if (axl_list_length (list) != 2) {
5724: printf ("Expected to find 2 length length..\n");
5725: return axl_false;
5726: }
5727:
5728: axl_list_unlink (list, INT_TO_PTR (1));
5729: if (axl_list_length (list) != 1) {
5730: printf ("Expected to find 1 length length..\n");
5731: return axl_false;
5732: }
5733:
5734: axl_list_unlink (list, INT_TO_PTR (2));
5735: if (axl_list_length (list) != 0) {
5736: printf ("Expected to find 0 length length..\n");
5737: return axl_false;
5738: }
5739:
5740: axl_list_free (list);
5741:
5742: /* remove by pointer */
5743: list = axl_list_new (axl_list_always_return_1, axl_free);
5744:
5745: /* add items */
5746: ptr1 = axl_new (char, 4);
5747: ptr2 = axl_new (char, 4);
5748: ptr3 = axl_new (char, 4);
5749: ptr4 = axl_new (char, 4);
5750:
5751: /* store items */
5752: axl_list_add (list, ptr1);
5753: axl_list_add (list, ptr2);
5754: axl_list_add (list, ptr3);
5755: axl_list_add (list, ptr4);
5756:
5757: /* check lengths */
5758: if (axl_list_length (list) != 4) {
5759: printf ("Expected to find a 4 item list...but found: %d..\n",
5760: axl_list_length (list));
5761: return axl_false;
5762: }
5763:
5764: /* remove items */
5765: axl_list_remove_ptr (list, ptr1);
5766:
5767: if (axl_list_length (list) != 3) {
5768: printf ("Expected to find a 3 item list...but found: %d..\n",
5769: axl_list_length (list));
5770: return axl_false;
5771: }
5772:
5773: /* remove items */
5774: axl_list_remove_ptr (list, ptr2);
5775: axl_list_remove_ptr (list, ptr3);
5776: axl_list_remove_ptr (list, ptr4);
5777:
5778: if (axl_list_length (list) != 0) {
5779: printf ("Expected to find a 0 item list...but found: %d..\n",
5780: axl_list_length (list));
5781: return axl_false;
5782: }
5783:
5784: axl_list_free (list);
5785:
5786: /* add and remove item 0 */
5787: list = axl_list_new (axl_list_equal_int, NULL);
5788: axl_list_append (list, INT_TO_PTR (0));
5789: axl_list_append (list, INT_TO_PTR (0));
5790: axl_list_append (list, INT_TO_PTR (0));
5791: axl_list_append (list, INT_TO_PTR (0));
5792:
5793: if (axl_list_length (list) != 4) {
5794: printf ("Expected to find 4 items stored in the list.., but found: %d..\n",
5795: axl_list_length (list));
5796: return axl_false;
5797: } /* end if */
5798:
5799: axl_list_remove (list, INT_TO_PTR (0));
5800:
5801: if (axl_list_length (list) != 3) {
5802: printf ("Expected to find 3 items stored in the list.., but found: %d..\n",
5803: axl_list_length (list));
5804: return axl_false;
5805: } /* end if */
5806:
5807: axl_list_remove_ptr (list, INT_TO_PTR (0));
5808:
5809: if (axl_list_length (list) != 2) {
5810: printf ("Expected to find 2 items stored in the list.., but found: %d..\n",
5811: axl_list_length (list));
5812: return axl_false;
5813: } /* end if */
5814:
5815: axl_list_remove_first (list);
5816:
5817: if (axl_list_length (list) != 1) {
5818: printf ("Expected to find 1 items stored in the list.., but found: %d..\n",
5819: axl_list_length (list));
5820: return axl_false;
5821: } /* end if */
5822:
5823: axl_list_remove_last (list);
5824:
5825: if (axl_list_length (list) != 0) {
5826: printf ("Expected to find 0 items stored in the list.., but found: %d..\n",
5827: axl_list_length (list));
5828: return axl_false;
5829: } /* end if */
5830:
5831: axl_list_free (list);
5832:
5833: /* add and remove item 0 */
5834: list = axl_list_new (axl_list_always_return_1, NULL);
5835: axl_list_append (list, INT_TO_PTR (0));
5836: axl_list_append (list, INT_TO_PTR (0));
5837: axl_list_append (list, INT_TO_PTR (0));
5838: axl_list_append (list, INT_TO_PTR (0));
5839:
5840: if (axl_list_length (list) != 4) {
5841: printf ("Expected to find 4 items stored in the list.., but found: %d..\n",
5842: axl_list_length (list));
5843: return axl_false;
5844: } /* end if */
5845:
5846: axl_list_remove_ptr (list, INT_TO_PTR (0));
5847:
5848: if (axl_list_length (list) != 3) {
5849: printf ("Expected to find 3 items stored in the list.., but found: %d..\n",
5850: axl_list_length (list));
5851: return axl_false;
5852: } /* end if */
5853:
5854: axl_list_remove_first (list);
5855:
5856: if (axl_list_length (list) != 2) {
5857: printf ("Expected to find 2 items stored in the list.., but found: %d..\n",
5858: axl_list_length (list));
5859: return axl_false;
5860: } /* end if */
5861:
5862: axl_list_remove_last (list);
5863:
5864: if (axl_list_length (list) != 1) {
5865: printf ("Expected to find 1 items stored in the list.., but found: %d..\n",
5866: axl_list_length (list));
5867: return axl_false;
5868: } /* end if */
5869:
5870: axl_list_free (list);
5871:
5872: list = axl_list_new (axl_list_always_return_1, NULL);
5873: axl_list_append (list, INT_TO_PTR (0));
5874:
5875: if (axl_list_length (list) != 1) {
5876: printf ("Expected to find 1 items stored in the list.., but found: %d..\n",
5877: axl_list_length (list));
5878: return axl_false;
5879: } /* end if */
5880:
5881: axl_list_prepend (list, INT_TO_PTR (0));
5882:
5883: if (axl_list_length (list) != 2) {
5884: printf ("Expected to find 2 items stored in the list.., but found: %d..\n",
5885: axl_list_length (list));
5886: return axl_false;
5887: } /* end if */
5888:
5889: axl_list_free (list);
5890:
5891: return axl_true;
5892: }
5893:
5894: axl_bool test_01_02_foreach (axlPointer stack_data,
5895: axlPointer user_data,
5896: axlPointer user_data2)
5897: {
5898: int * iterator = user_data;
5899:
5900: if ((*iterator == 0) && axl_cmp ((char*) stack_data, "test 3")) {
5901: (*iterator)++;
5902: return axl_false;
5903: } else if ((*iterator == 1) && axl_cmp ((char*) stack_data, "test 2")) {
5904: (*iterator)++;
5905: return axl_false;
5906: } else if ((*iterator == 2) && axl_cmp ((char*) stack_data, "test 1")) {
5907: (*iterator)++;
5908: return axl_false;
5909: }
5910:
5911: /* return axl_true to stop operations */
5912: return axl_true;
5913: }
5914:
5915: /**
5916: * @brief Checks current configuration for the stack implementation
5917: * based on the axlList.
5918: *
5919: *
5920: * @return axl_true if the stack works properly, otherwise axl_false
5921: * is returned.
5922: */
5923: axl_bool test_01_02 (void)
5924: {
5925: axlStack * stack;
5926: char * value;
5927: int iterator = 0;
5928:
5929: /* create the stack */
5930: stack = axl_stack_new (NULL);
5931:
5932: axl_stack_push (stack, "test 1");
5933: axl_stack_push (stack, "test 2");
5934: axl_stack_push (stack, "test 3");
5935:
5936: /* check foreach function */
5937: axl_stack_foreach (stack, test_01_02_foreach, &iterator, NULL);
5938:
5939: if (iterator != 3) {
5940: printf ("Wrong value expected while using the foreach function\n");
5941: return axl_false;
5942: }
5943:
5944: if (axl_stack_size (stack) != 3) {
5945: printf ("Wrong stack size expected ..\n");
5946: return axl_false;
5947: }
5948:
5949: value = axl_stack_pop (stack);
5950: if (! axl_stream_cmp (value, "test 3", 6)) {
5951: printf ("Wrong pop value returned (%s != %s)..\n", value, "test 3");
5952: return axl_false;
5953: }
5954:
5955: value = axl_stack_pop (stack);
5956: if (! axl_stream_cmp (value, "test 2", 6)) {
5957: printf ("Wrong pop value returned (%s != %s)..\n", value, "test 2");
5958: return axl_false;
5959: }
5960:
5961: value = axl_stack_pop (stack);
5962: if (! axl_stream_cmp (value, "test 1", 6)) {
5963: printf ("Wrong pop value returned (%s != %s)..\n", value, "test 1");
5964: return axl_false;
5965: }
5966:
5967: if (axl_stack_size (stack) != 0) {
5968: printf ("Wrong stack size before operating..\n");
5969: return axl_false;
5970: }
5971:
5972: if (! axl_stack_is_empty (stack)) {
5973: printf ("Wrong stack emptyness value received..\n");
5974: return axl_false;
5975: }
5976:
5977: /* destroy the stack */
5978: axl_stack_free (stack);
5979:
5980: return axl_true;
5981: }
5982:
5983: axl_bool test_01_03_vargs (const char * format, ...)
5984: {
5985: va_list args;
5986:
5987: va_start (args, format);
5988:
5989: /* get the result */
5990: if (axl_stream_vprintf_len (format, args) != 8)
5991: return axl_false;
5992:
5993: va_end (args);
5994: va_start (args, format);
5995:
5996: if (axl_stream_vprintf_len (format, args) != 8)
5997: return axl_false;
5998:
5999: va_end (args);
6000: va_start (args, format);
6001:
6002: if (axl_stream_vprintf_len (format, args) != 8)
6003: return axl_false;
6004:
6005: va_end (args);
6006:
6007: return axl_true;
6008: }
6009:
6010: axl_bool test_01_03_replace_check (const char * _source, const char * string, const char * replacement, int check_size, const char * result_string)
6011: {
6012: char * source;
6013: int res;
6014:
6015: printf ("Test 01-03: Checking %s (%s -> %s)\n", _source, string, replacement);
6016:
6017: source = axl_strdup (_source);
6018: res = axl_stream_replace (&source, -1, string, -1, replacement, -1);
6019: if (res != check_size) {
6020: printf ("ERROR: expected to find %d bytes but found %d at the replacement\n", check_size, res);
6021: return axl_false;
6022: }
6023: /* check replacement */
6024: if (! axl_cmp (source, result_string)) {
6025: printf ("ERROR: expected to find '%s' but found '%s'\n", result_string, source);
6026: return axl_false;
6027: }
6028: axl_free (source);
6029:
6030: return axl_true;
6031: }
6032:
6033: /**
6034: *
6035: * @brief Checks some internal functions that the library provides to
6036: * manage strings.
6037: *
6038: * @return The function must return axl_true if everything is
6039: * ok. Otherwise axl_false is returned.
6040: */
6041: axl_bool test_01_03 (void)
6042: {
6043: char * string;
6044: char ** result;
6045: char * join;
6046: int res;
6047: int real_size;
6048: int trimmed;
6049:
6050: /* check that axl_stream_split works */
6051: result = axl_stream_split ("value/value1/value3/value4", 1, "/");
6052: if (result == NULL) {
6053: printf ("Something have failed while using splitting functions\n");
6054: return axl_false;
6055: }
6056:
6057: if (axl_stream_strv_num (result) != 4) {
6058: printf ("Something have failed while getting current number of pieces inside the split result (%d != %d)\n",
6059: axl_stream_strv_num (result),4);
6060: return axl_false;
6061: }
6062:
6063: if (! axl_cmp (result[0], "value")) {
6064: printf ("Failed to get the first element: (%s != %s)\n", result[0], "value");
6065: return axl_false;
6066: }
6067:
6068: if (! axl_cmp (result[1], "value1")) {
6069: printf ("Failed to get the second element: (%s != %s)\n", result[1], "value1");
6070: return axl_false;
6071: }
6072:
6073: if (! axl_cmp (result[2], "value3")) {
6074: printf ("Failed to get the third element (%s != %s)\n", result[2], "value3");
6075: return axl_false;
6076: }
6077:
6078: if (! axl_cmp (result[3], "value4")) {
6079: printf ("Failed to get the fourth element (%s != %s)\n", result[3], "value4");
6080: return axl_false;
6081: }
6082:
6083: /* release memory used */
6084: axl_stream_freev (result);
6085:
6086: result = axl_stream_split ("value1, value2/ value3* ", 3, ", ", "/ ", "* ");
6087: if (result == NULL) {
6088: printf ("Something have failed while using splitting functions (2)\n");
6089: return axl_false;
6090: }
6091:
6092: if (axl_stream_strv_num (result) != 4) {
6093: printf ("Something have failed while getting current number of pieces inside the split result (%d != %d) (2)\n",
6094: axl_stream_strv_num (result), 4);
6095: return axl_false;
6096: }
6097:
6098: if (! axl_cmp (result[0], "value1")) {
6099: printf ("Failed to get the second element: (%s != %s)\n", result[0], "value1");
6100: return axl_false;
6101: }
6102:
6103: if (! axl_cmp (result[1], "value2")) {
6104: printf ("Failed to get the third element (%s != %s)\n", result[1], "value2");
6105: return axl_false;
6106: }
6107:
6108: if (! axl_cmp (result[2], "value3")) {
6109: printf ("Failed to get the fourth element (%s != %s)\n", result[2], "value3");
6110: return axl_false;
6111: }
6112:
6113: if (! axl_cmp (result[3], "")) {
6114: printf ("Failed to get the fourth element ('%s' != '%s')\n", result[3], "");
6115: return axl_false;
6116: }
6117:
6118:
6119:
6120: /* release memory used */
6121: axl_stream_freev (result);
6122:
6123: /* check empty cases */
6124: result = axl_stream_split ("///", 1, "/");
6125: if (result == NULL) {
6126: printf ("Something have failed while using splitting functions (3)\n");
6127: return axl_false;
6128: }
6129:
6130: if (axl_stream_strv_num (result) != 4) {
6131: printf ("Something have failed while getting current number of pieces inside the split result (%d != %d) (3)\n",
6132: axl_stream_strv_num (result), 4);
6133: return axl_false;
6134: }
6135:
6136: /* release memory used */
6137: axl_stream_freev (result);
6138:
6139:
6140: /* now check the join string support */
6141: result = axl_stream_split ("some test AND some test AND some test", 1, "AND");
6142:
6143: /* now join the data */
6144: join = axl_stream_join (result, "AND");
6145:
6146: if (! axl_cmp (join, "some test AND some test AND some test")) {
6147: printf ("Join operation failed, expected different values '%s' != '%s'",
6148: join, "some test AND some test AND some test");
6149: return axl_false;
6150: }
6151: axl_free (join);
6152: axl_stream_freev (result);
6153:
6154: /* now check the join string support */
6155: result = axl_stream_split ("some test", 1, "AND");
6156:
6157: /* now join the data */
6158: join = axl_stream_join (result, "AND");
6159:
6160: if (! axl_cmp (join, "some test")) {
6161: printf ("Join operation failed, expected different values '%s' != '%s'",
6162: join, "some test");
6163: return axl_false;
6164: }
6165: axl_free (join);
6166: axl_stream_freev (result);
6167:
6168: /* now check the join string support */
6169: result = axl_stream_split ("some test AND some test AND some test AND", 1, "AND");
6170:
6171: /* now join the data */
6172: join = axl_stream_join (result, "AND");
6173:
6174: if (! axl_cmp (join, "some test AND some test AND some test AND")) {
6175: printf ("Join operation failed, expected different values '%s' != '%s'",
6176: join, "some test AND some test AND some test AND");
6177: return axl_false;
6178: }
6179: axl_free (join);
6180: axl_stream_freev (result);
6181:
6182: string = axl_strdup ("AxBcA");
6183: if (! axl_cmp (axl_stream_to_upper (string), "AXBCA")) {
6184: /* report error found */
6185: printf ("failed to upper case letters\n");
6186: return axl_false;
6187: }
6188: axl_free (string);
6189:
6190: string = axl_strdup ("AxBcA");
6191: if (! axl_cmp (axl_stream_to_lower (string), "axbca")) {
6192: /* report error found */
6193: printf ("failed to lower case letters, result found: %s != %s\n", string, "axbca");
6194: return axl_false;
6195: }
6196: axl_free (string);
6197:
6198:
6199: string = axl_strdup ("\t \n \r value \n \r \t \t ");
6200: axl_stream_trim (string);
6201:
6202: if (! axl_cmp (string, "value")) {
6203: printf ("failed to trim the string received, expected '%s' == '%s'\n",
6204: string, "value");
6205: return axl_false;
6206: }
6207:
6208: /* release memory */
6209: axl_free (string);
6210:
6211: string = axl_strdup (" value ");
6212: axl_stream_trim_with_size (string, &trimmed);
6213: if (trimmed != 7) {
6214: printf ("failed, expected to find a trimmed size of 7 but found %d (%s)\n",
6215: trimmed, string);
6216: return axl_false;
6217: }
6218:
6219: /* check axl_stream_vprintf_len implementation */
6220: if (axl_stream_printf_len (NULL, NULL) != 0) {
6221: printf ("failed, expected to find an string value of 0, but it wasn't found\n");
6222: return axl_false;
6223: } /* end if */
6224:
6225: if (axl_stream_printf_len (" this is a test", NULL) != 16) {
6226: printf ("failed, expected to find an string value of 16, but it wasn't found\n");
6227: return axl_false;
6228: }
6229:
6230: if (axl_stream_printf_len (" this %% is a %% test", NULL) != 20) {
6231: printf ("failed, expected to find an string value of 20, but it wasn't found\n");
6232: return axl_false;
6233: }
6234:
6235: if (axl_stream_printf_len ("", NULL) != 1) {
6236: printf ("failed, expected to find an string value of 1, but it wasn't found\n");
6237: return axl_false;
6238: }
6239:
6240: if (axl_stream_printf_len ("%%", NULL) != 2) {
6241: printf ("failed, expected to find an string value of 2, but it wasn't found\n");
6242: return axl_false;
6243: }
6244:
6245: if (axl_stream_printf_len ("\"", NULL) != 2) {
6246: printf ("failed, expected to find an string value of 2, but it wasn't found\n");
6247: return axl_false;
6248: }
6249:
6250: if (axl_stream_printf_len ("\"", NULL) != 2) {
6251: printf ("failed, expected to find an string value of 2, but it wasn't found\n");
6252: return axl_false;
6253: }
6254:
6255: if (axl_stream_printf_len (" this is a test \r \t \n asdf", NULL) != 28) {
6256: printf ("failed, expected to find an string value of 28, but it wasn't found\n");
6257: return axl_false;
6258: } /* end if */
6259:
6260: res = axl_stream_printf_len ("%s", "This is a test");
6261: if ( res != 15) {
6262: printf ("failed, expected to find an string value of 15, but it was found (%d)\n", res);
6263: return axl_false;
6264: }
6265:
6266: res = axl_stream_printf_len (" adfasdf %s asdfasdf", "This is a test");
6267: if ( res != 33) {
6268: printf ("failed, expected to find an string value of 33, but it was found (%d)\n", res);
6269: return axl_false;
6270: }
6271:
6272: res = axl_stream_printf_len (" adfasdf %s asdfasdf %s", "This is a test", "fk2");
6273: if ( res != 37) {
6274: printf ("failed, expected to find an string value of 37, but it was found (%d)\n", res);
6275: return axl_false;
6276: }
6277:
6278: res = axl_stream_printf_len ("%% adfasdf %s asdfasdf %s", "This is a test", "fk2");
6279: if ( res != 38) {
6280: printf ("failed, expected to find an string value of 38, but it was found (%d)\n", res);
6281: return axl_false;
6282: }
6283:
6284: res = axl_stream_printf_len ("%d", 1);
6285: if ( res != 2) {
6286: printf ("failed, expected to find an string value of 2, but it was found (%d)\n", res);
6287: return axl_false;
6288: }
6289:
6290: res = axl_stream_printf_len ("%d", 10);
6291: if ( res != 3) {
6292: printf ("failed, expected to find an string value of 3, but it was found (%d)\n", res);
6293: return axl_false;
6294: }
6295:
6296: res = axl_stream_printf_len ("%d", -1);
6297: if ( res != 3) {
6298: printf ("failed, expected to find an string value of 3, but it was found (%d)\n", res);
6299: return axl_false;
6300: }
6301:
6302: res = axl_stream_printf_len ("%d", -10);
6303: if ( res != 4) {
6304: printf ("failed, expected to find an string value of 4, but it was found (%d)\n", res);
6305: return axl_false;
6306: }
6307:
6308: res = axl_stream_printf_len ("%d", -100);
6309: if ( res != 5) {
6310: printf ("failed, expected to find an string value of 5, but it was found (%d)\n", res);
6311: return axl_false;
6312: }
6313:
6314: res = axl_stream_printf_len ("%d", -10012);
6315: if ( res != 7) {
6316: printf ("failed, expected to find an string value of 7, but it was found (%d)\n", res);
6317: return axl_false;
6318: }
6319:
6320: res = axl_stream_printf_len ("This is a number %d", -10012);
6321: if ( res != 24) {
6322: printf ("failed, expected to find an string value of 24, but it was found (%d)\n", res);
6323: return axl_false;
6324: }
6325:
6326: res = axl_stream_printf_len ("This is a number %d with content ", -10012);
6327: if ( res != 38) {
6328: printf ("failed, expected to find an string value of 38, but it was found (%d)\n", res);
6329: return axl_false;
6330: }
6331:
6332: res = axl_stream_printf_len ("This is a number %d with content %s", -10012, "This more content");
6333: if ( res != 55) {
6334: printf ("failed, expected to find an string value of 55, but it was found (%d)\n", res);
6335: return axl_false;
6336: }
6337:
6338: res = axl_stream_printf_len ("%c", 1);
6339: if ( res != 2) {
6340: printf ("failed, expected to find an string value of 2, but it was found (%d)\n", res);
6341: return axl_false;
6342: }
6343:
6344: res = axl_stream_printf_len (" %c ", 1);
6345: if ( res != 4) {
6346: printf ("failed, expected to find an string value of 4, but it was found (%d)\n", res);
6347: return axl_false;
6348: }
6349:
6350: res = axl_stream_printf_len ("\x0D");
6351: if ( res != 2) {
6352: printf ("failed, expected to find an string value of 2, but it was found (%d)\n", res);
6353: return axl_false;
6354: }
6355:
6356: res = axl_stream_printf_len ("\x0D\x0A");
6357: if ( res != 3) {
6358: printf ("failed, expected to find an string value of 3, but it was found (%d)\n", res);
6359: return axl_false;
6360: }
6361:
6362: res = axl_stream_printf_len ("%ld", 182);
6363: if ( res != 4) {
6364: printf ("failed, expected to find an string value of 4, but it was found (%d)\n", res);
6365: return axl_false;
6366: }
6367:
6368: res = axl_stream_printf_len ("%lu", (unsigned long) 182);
6369: if ( res != 4) {
6370: printf ("failed, expected to find an string value of 4, but it was found (%d)\n", res);
6371: return axl_false;
6372: }
6373:
6374: res = axl_stream_printf_len ("%6d", 182);
6375: if ( res != 7) {
6376: printf ("failed (%%6d), expected to find an string value of 7, but it was found (%d)\n", res);
6377: return axl_false;
6378: }
6379:
6380: res = axl_stream_printf_len ("%f", 182.0);
6381: if ( res != 11) {
6382: printf ("failed (%%f,182), expected to find an string value of 11, but it was found (%d)\n", res);
6383: return axl_false;
6384: }
6385:
6386: res = axl_stream_printf_len ("%.2f", 18228.0);
6387: if ( res != 9) {
6388: printf ("failed (%%.2f), expected to find an string value of 7, but it was found (%d)\n", res);
6389: return axl_false;
6390: }
6391:
6392: res = axl_stream_printf_len ("%8.2f", 182);
6393: if ( res != 9) {
6394: printf ("failed (%%8.2f), expected to find an string value of 12, but it was found (%d)\n", res);
6395: return axl_false;
6396: }
6397:
6398: res = axl_stream_printf_len ("%.5f", 182.10);
6399: if ( res != 10) {
6400: printf ("failed (%%.5f), expected to find an string value of 10, but it was found (%d)\n", res);
6401: return axl_false;
6402: }
6403:
6404: res = axl_stream_printf_len ("%g", (double) 182.23);
6405: if ( res != 7) {
6406: printf ("failed (%%g,182.23), expected to find an string value of 7, but it was found (%d)\n", res);
6407: return axl_false;
6408: }
6409:
6410: res = axl_stream_printf_len ("%g", 182.39);
6411: if ( res != 7) {
6412: printf ("failed (%%g,182.39), expected to find an string value of 7, but it was found (%d)\n", res);
6413: return axl_false;
6414: }
6415:
6416: res = axl_stream_printf_len ("%g", 182.1);
6417: if ( res != 6) {
6418: printf ("failed (%%g,182.1), expected to find an string value of 6, but it was found (%d)\n", res);
6419: return axl_false;
6420: }
6421:
6422: res = axl_stream_printf_len ("%g", 182.102);
6423: if ( res != 8) {
6424: printf ("failed (%%g,182.1), expected to find an string value of 6, but it was found (%d)\n", res);
6425: return axl_false;
6426: }
6427:
6428: if (! test_01_03_vargs ("%g", 182.102)) {
6429: printf ("failed to reuse vargs..\n");
6430: return axl_false;
6431: }
6432:
6433:
6434: /* release the memory */
6435: axl_free (string);
6436:
6437: /* case cmp comparisions */
6438: if (! axl_stream_casecmp ("Content-Type: ", "Content-Type: ", 14)) {
6439: printf ("Expected to find equal comparision for case insensitive check..\n");
6440: return axl_false;
6441: }
6442:
6443: if (! axl_stream_casecmp ("CONTENT-Type: ", "Content-Type: ", 14)) {
6444: printf ("Expected to find equal comparision for case insensitive check..\n");
6445: return axl_false;
6446: }
6447:
6448: if (! axl_stream_casecmp ("CONTENT-Type: ", "Content-TYPE: ", 14)) {
6449: printf ("Expected to find equal comparision for case insensitive check..\n");
6450: return axl_false;
6451: }
6452:
6453: if (! axl_stream_casecmp ("CoNtENT-type: ", "Content-TYPE: ", 14)) {
6454: printf ("Expected to find equal comparision for case insensitive check..\n");
6455: return axl_false;
6456: }
6457:
6458: /* check axl_casecmp */
6459: if (! axl_casecmp ("Content-Type: ", "Content-Type: ")) {
6460: printf ("Expected to find equal comparision for case insensitive check..\n");
6461: return axl_false;
6462: }
6463:
6464: if (! axl_casecmp ("CONTENT-Type: ", "Content-Type: ")) {
6465: printf ("Expected to find equal comparision for case insensitive check..\n");
6466: return axl_false;
6467: }
6468:
6469: if (! axl_casecmp ("CONTENT-Type: ", "Content-TYPE: ")) {
6470: printf ("Expected to find equal comparision for case insensitive check..\n");
6471: return axl_false;
6472: }
6473:
6474: if (! axl_casecmp ("CoNtENT-type: ", "Content-TYPE: ")) {
6475: printf ("Expected to find equal comparision for case insensitive check..\n");
6476: return axl_false;
6477: }
6478:
6479: /* check with additional content not scanned */
6480: if (! axl_stream_casecmp ("Content-Type: ", "Content-Type: asdf", 14)) {
6481: printf ("Expected to find equal comparision for case insensitive check..\n");
6482: return axl_false;
6483: }
6484:
6485: if (! axl_stream_casecmp ("CONTENT-Type: ", "Content-Type: asdf", 14)) {
6486: printf ("Expected to find equal comparision for case insensitive check..\n");
6487: return axl_false;
6488: }
6489:
6490: if (! axl_stream_casecmp ("CONTENT-Type: ", "Content-TYPE: qwer12343", 14)) {
6491: printf ("Expected to find equal comparision for case insensitive check..\n");
6492: return axl_false;
6493: }
6494:
6495: if (! axl_stream_casecmp ("CoNtENT-type: ", "Content-TYPE: 23141234", 14)) {
6496: printf ("Expected to find equal comparision for case insensitive check..\n");
6497: return axl_false;
6498: }
6499:
6500: /* check axl_casecmp */
6501: if (axl_casecmp ("Content-Type: ", "Content-Type: 12321")) {
6502: printf ("Expected to not find equal comparision for case insensitive check..\n");
6503: return axl_false;
6504: }
6505:
6506: if (axl_casecmp ("CONTENT-Type: ", "Content-Type: awdf21")) {
6507: printf ("Expected to not find equal comparision for case insensitive check..\n");
6508: return axl_false;
6509: }
6510:
6511: if (axl_casecmp ("CONTENT-Type: ", "Content-TYPE: adsfasdf")) {
6512: printf ("Expected to not find equal comparision for case insensitive check..\n");
6513: return axl_false;
6514: }
6515:
6516: if (axl_casecmp ("CoNtENT-type: ", "Content-TYPE: asdf21")) {
6517: printf ("Expected to not find equal comparision for case insensitive check..\n");
6518: return axl_false;
6519: }
6520:
6521: /* check remove function */
6522: string = axl_strdup ("iso-8859-15");
6523: axl_stream_remove (string, "-", axl_false);
6524: if (! axl_cmp (string, "iso885915")) {
6525: printf ("Expected %s value but found %s...\n",
6526: string, "iso885915");
6527: return axl_false;
6528: } /* end if */
6529: axl_free (string);
6530:
6531: string = axl_strdup ("iso885915");
6532: axl_stream_remove (string, "-", axl_false);
6533: if (! axl_cmp (string, "iso885915")) {
6534: printf ("Expected %s value but found %s...\n",
6535: string, "iso885915");
6536: return axl_false;
6537: } /* end if */
6538: axl_free (string);
6539:
6540: string = axl_strdup ("--iso885915---");
6541: axl_stream_remove (string, "-", axl_false);
6542: if (! axl_cmp (string, "iso885915")) {
6543: printf ("Expected %s value but found %s...\n",
6544: "iso885915", string);
6545: return axl_false;
6546: } /* end if */
6547: axl_free (string);
6548:
6549: string = axl_strdup_printf ("-----");
6550: axl_stream_remove (string, "-", axl_false);
6551: if (! axl_cmp (string, "")) {
6552: printf ("Expected %s value but found %s...\n",
6553: "", string);
6554: return axl_false;
6555: } /* end if */
6556: axl_free (string);
6557:
6558: string = axl_strdup_printf ("iso-8859---------15");
6559: axl_stream_remove (string, "-", axl_false);
6560: if (! axl_cmp (string, "iso885915")) {
6561: printf ("Expected %s value but found %s...\n",
6562: "iso885915", string);
6563: return axl_false;
6564: } /* end if */
6565: axl_free (string);
6566:
6567: string = axl_strdup_printf ("iso-8859---------15");
6568: axl_stream_remove (string, "-", axl_true);
6569: if (! axl_cmp (string, "iso8859---------15")) {
6570: printf ("Expected %s value but found %s...\n",
6571: "iso8859---------15", string);
6572: return axl_false;
6573: } /* end if */
6574: axl_free (string);
6575:
6576: /* check printf buffer */
6577: string = axl_new (char, 100);
6578: string [21] = 'a';
6579: res = axl_stream_printf_buffer (string, 100, &real_size, "SEQ %d %d %d\x0D\x0A", 10, 1203020, 4096);
6580: if (res != strlen (string)) {
6581: printf ("ERROR(1): expected to find string length %d but found %d..\n",
6582: res, (int) strlen (string));
6583: return axl_false;
6584: }
6585:
6586: if (res != 21) {
6587: printf ("ERROR(2): expected to find string length %d but found %d..\n",
6588: res, 21);
6589: return axl_false;
6590: }
6591: /* check string termination */
6592: if (string [21] != '\0') {
6593: printf ("ERROR(2.1): expected string termination at position %d..\n", 21);
6594: return axl_false;
6595: }
6596:
6597: /* check real size and returned value */
6598: if (real_size != res) {
6599: printf ("ERROR(2.2): expected to find same value returned as real size (%d != %d) but it wasn't found..\n",
6600: real_size, res);
6601: return axl_false;
6602: }
6603:
6604: /* check content */
6605: if (! axl_cmp (string, "SEQ 10 1203020 4096\x0D\x0A")) {
6606: printf ("ERROR: expected to find '%s' but found '%s'..\n",
6607: string, "SEQ 10 1203020 4096\x0D\x0A");
6608: return axl_false;
6609: }
6610:
6611: /* check printf buffer */
6612: string[70] = 'a';
6613: res = axl_stream_printf_buffer (string, 100, &real_size, "SEQ ###############################################3 %d %d %d\x0D\x0A", 10, 1203020, 4096);
6614: /* printf ("Found string (size: %d, real: %d): %s..\n", res, real_size, string); */
6615:
6616: if (res != strlen (string)) {
6617: printf ("ERROR(3): expected to find string length %d but found %d..\n",
6618: res, (int) strlen (string));
6619: return axl_false;
6620: }
6621:
6622: if (res != 70) {
6623: printf ("ERROR(4): expected to find string length %d but found %d..\n",
6624: res, 21);
6625: return axl_false;
6626: }
6627:
6628: /* check string termination */
6629: if (string [70] != '\0') {
6630: printf ("ERROR: expected string termination at position %d..\n", 21);
6631: return axl_false;
6632: }
6633:
6634: /* check real size and returned value */
6635: if (real_size != res) {
6636: printf ("ERROR: expected to find same value returned as real size (%d != %d) but it wasn't found..\n",
6637: real_size, res);
6638: return axl_false;
6639: }
6640:
6641: /* check content */
6642: if (! axl_cmp (string, "SEQ ###############################################3 10 1203020 4096\x0D\x0A")) {
6643: printf ("ERROR: expected to find '%s' but found '%s'..\n",
6644: string, "SEQ ###############################################3 10 1203020 4096\x0D\x0A");
6645: return axl_false;
6646: }
6647:
6648: /* check printf buffer */
6649: string[96] = 'a';
6650: res = axl_stream_printf_buffer (string, 100, &real_size, "SEQ ############################################asdfasdfasdfasdfasdfasdfas###3 %d %d %d\x0D\x0A", 10, 1203020, 4096);
6651: /* printf ("Found string (size: %d, real: %d): %s..\n", res, real_size, string); */
6652:
6653: if (res != strlen (string)) {
6654: printf ("ERROR(5): expected to find string length %d but found %d..\n", res, (int) strlen (string));
6655: return axl_false;
6656: }
6657:
6658: if (res != 96) {
6659: printf ("ERROR(6): expected to find string length %d but found %d..\n", res, 96);
6660: return axl_false;
6661: }
6662:
6663: /* check string termination */
6664: if (string [96] != '\0') {
6665: printf ("ERROR: expected string termination at position %d..\n", 21);
6666: return axl_false;
6667: }
6668:
6669: /* check real size and returned value */
6670: if (real_size != res) {
6671: printf ("ERROR: expected to find same value returned as real size (%d != %d) but it wasn't found..\n",
6672: real_size, res);
6673: return axl_false;
6674: }
6675:
6676: /* check content */
6677: if (! axl_cmp (string, "SEQ ############################################asdfasdfasdfasdfasdfasdfas###3 10 1203020 4096\x0D\x0A")) {
6678: printf ("ERROR: expected to find '%s' but found '%s'..\n",
6679: string, "SEQ ############################################asdfasdfasdfasdfasdfasdfas###3 10 1203020 4096\x0D\x0A");
6680: return axl_false;
6681: }
6682:
6683: /* check printf buffer */
6684: string[99] = 'a';
6685: res = axl_stream_printf_buffer (string, 100, &real_size, "SEQ ###@@@#########################################asdfasdfasdfasdfasdfasdfas###3 %d %d %d\x0D\x0A",
6686: 10, 1203020, 4096);
6687: /* printf ("Found string (size: %d, real: %d): %s..\n", res, real_size, string); */
6688:
6689: if (res != strlen (string)) {
6690: printf ("ERROR(7): expected to find string length %d but found %d (1)..\n", res, (int) strlen (string));
6691: return axl_false;
6692: }
6693:
6694: if (res != 99) {
6695: printf ("ERROR(8): expected to find string length %d but found %d (2)..\n", res, 99);
6696: return axl_false;
6697: }
6698:
6699: /* check string termination */
6700: if (string [99] != '\0') {
6701: printf ("ERROR: expected string termination at position %d..\n", 21);
6702: return axl_false;
6703: }
6704:
6705: /* check real size and returned value */
6706: if (real_size != res) {
6707: printf ("ERROR: expected to find same value returned as real size (%d != %d) but it wasn't found..\n",
6708: real_size, res);
6709: return axl_false;
6710: }
6711:
6712: /* check content */
6713: if (! axl_cmp (string, "SEQ ###@@@#########################################asdfasdfasdfasdfasdfasdfas###3 10 1203020 4096\x0D\x0A")) {
6714: printf ("ERROR: expected to find '%s' but found '%s'..\n",
6715: string, "SEQ ###@@@#########################################asdfasdfasdfasdfasdfasdfas###3 10 1203020 4096\x0D\x0A");
6716: return axl_false;
6717: }
6718:
6719: /* check printf buffer (out of space situation) */
6720: string[99] = 'a';
6721: res = axl_stream_printf_buffer (string, 100, &real_size,
6722: "SEQ ###@@@##fffasdklfjasdlfkjasdlfkjadf#######################################asdfasdfasdfasdfasdfasdfas###3 %d %d %d\x0D\x0A",
6723: 10, 1203020, 4096);
6724: /* printf ("Found string (size: %d, real: %d): %s..\n", res, real_size, string); */
6725:
6726: if (res != strlen (string)) {
6727: printf ("ERROR(9): expected to find string length %d but found %d (1)..\n", res, (int) strlen (string));
6728: return axl_false;
6729: }
6730:
6731: if (res != 99) {
6732: printf ("ERROR(10): expected to find string length %d but found %d (2)..\n", res, 99);
6733: return axl_false;
6734: }
6735:
6736: /* check string termination */
6737: if (string [99] != '\0') {
6738: printf ("ERROR: expected string termination at position %d..\n", 21);
6739: return axl_false;
6740: }
6741:
6742: /* check real size and returned value */
6743: if (real_size != 126) {
6744: printf ("ERROR: expected to find same value returned as real size (%d != %d) but it wasn't found..\n",
6745: real_size, 126);
6746: return axl_false;
6747: }
6748:
6749: /* check content */
6750: if (! axl_cmp (string, "SEQ ###@@@##fffasdklfjasdlfkjasdlfkjadf#######################################asdfasdfasdfasdfasdfa")) {
6751: printf ("ERROR: expected to find '%s' but found '%s'..\n",
6752: string, "SEQ ###@@@##fffasdklfjasdlfkjasdlfkjadf#######################################asdfasdfasdfasdfasdfa");
6753: return axl_false;
6754: }
6755:
6756: axl_free (string);
6757:
6758:
6759: /* check replacement */
6760: if (! test_01_03_replace_check ("1) This is a test", "test", "prueba", 19, "1) This is a prueba"))
6761: return axl_false;
6762:
6763: /* source, string, replace, check_size, result */
6764: if (! test_01_03_replace_check ("test", "test", "prueba", 6, "prueba"))
6765: return axl_false;
6766:
6767: if (! test_01_03_replace_check ("3) We are going to replace o o this is a test", "o", "####", 57, "3) We are g####ing t#### replace #### #### this is a test"))
6768: return axl_false;
6769:
6770: if (! test_01_03_replace_check ("4) We are g####ing t#### replace #### #### this is a test", "####", "o", 45, "4) We are going to replace o o this is a test"))
6771: return axl_false;
6772:
6773: if (! test_01_03_replace_check ("oooo", "o", "i", 4, "iiii"))
6774: return axl_false;
6775:
6776: if (! test_01_03_replace_check ("oooo", "o", "ii", 8, "iiiiiiii"))
6777: return axl_false;
6778:
6779: if (! test_01_03_replace_check (" tes", "test", "asdfsdf", 4, " tes"))
6780: return axl_false;
6781:
6782: return axl_true;
6783: }
6784:
6785: /**
6786: * @brief Intensive axl list implementation.
6787: */
6788: axl_bool test_01_04 (void) {
6789: int iterator = 0;
6790: int value;
6791: axlList * list;
6792: axlListCursor * cursor;
6793:
6794: /* create the list */
6795: list = axl_list_new (axl_list_always_return_1, NULL);
6796:
6797: /* add items */
6798: while (iterator < 10000) {
6799:
6800: /* add integers */
6801: axl_list_add (list, INT_TO_PTR(iterator));
6802:
6803: /* update the iterator */
6804: iterator++;
6805: }
6806:
6807: /* get items using iterator */
6808: cursor = axl_list_cursor_new (list);
6809: iterator = 0;
6810: while (axl_list_cursor_has_item (cursor)) {
6811: /* get the value */
6812: value = PTR_TO_INT (axl_list_cursor_get (cursor));
6813:
6814: /* check value */
6815: if (value != iterator) {
6816: printf ("Values miss match: %d != %d\n", value, iterator);
6817: return axl_false;
6818: }
6819:
6820: /* get the next */
6821: axl_list_cursor_next (cursor);
6822:
6823: /* update the iterator */
6824: iterator++;
6825:
6826: } /* end while */
6827:
6828: /* remove all items */
6829: axl_list_cursor_first (cursor);
6830: iterator = 0;
6831: while (axl_list_cursor_has_item (cursor)) {
6832:
6833: /* get the value */
6834: value = PTR_TO_INT (axl_list_cursor_get (cursor));
6835:
6836: /* check value */
6837: if (value != iterator) {
6838: printf ("Values miss match (2): %d != %d\n", value, iterator);
6839: return axl_false;
6840: }
6841:
6842: /* remove */
6843: axl_list_cursor_remove (cursor);
6844:
6845: if (axl_list_length (list) > 1) {
6846:
6847: /* get the value */
6848: value = PTR_TO_INT (axl_list_cursor_get (cursor));
6849:
6850: /* check value */
6851: if (value != (iterator + 1)) {
6852: printf ("Values miss match (3): %d != %d\n", value, iterator + 1);
6853: return axl_false;
6854: }
6855: }
6856:
6857: /* update the iterator */
6858: iterator++;
6859:
6860: } /* end while */
6861:
6862: if (axl_list_length (list) != 0) {
6863: printf ("List lengths mismatch: %d != 0\n", axl_list_length (list));
6864: return axl_false;
6865: }
6866:
6867: /* free cursor */
6868: axl_list_cursor_free (cursor);
6869:
6870: /* release the list */
6871: axl_list_free (list);
6872:
6873: /* axl_true */
6874: return axl_true;
6875: }
6876:
6877: /**
6878: * @brief Check axl list remove at API.
6879: */
6880: axl_bool test_01_04_a (void) {
6881: axlList * list;
6882: char * value;
6883: char * value2;
6884: char * value3;
6885:
6886: /* create the list */
6887: list = axl_list_new (axl_list_equal_string, axl_free);
6888:
6889: /* add tree items */
6890: axl_list_add (list, axl_strdup ("this is a test 1"));
6891: axl_list_add (list, axl_strdup ("this is a test 2"));
6892: axl_list_add (list, axl_strdup ("this is a test 3"));
6893:
6894: /* remove second position */
6895: axl_list_remove_at (list, 1);
6896: if (axl_list_length (list) != 2) {
6897: printf ("ERROR: Expected to find two items in a list after removal operation..");
6898: return axl_false;
6899: } /* end if */
6900:
6901: /* check content */
6902: if (! axl_cmp ("this is a test 1", axl_list_get_nth (list, 0))) {
6903: printf ("ERROR: Expected to find item '%s' but found '%s'\n",
6904: "this is a test 1", (char*) axl_list_get_nth (list, 0));
6905: return axl_false;
6906: } /* end if */
6907:
6908: /* now remove first position */
6909: axl_list_remove_at (list, 0);
6910: if (axl_list_length (list) != 1) {
6911: printf ("ERROR: Expected to find one item in a list after removal operation..");
6912: return axl_false;
6913: } /* end if */
6914:
6915: /* check content */
6916: if (! axl_cmp ("this is a test 3", axl_list_get_nth (list, 0))) {
6917: printf ("ERROR: Expected to find item '%s' but found '%s'\n",
6918: "this is a test 1", (char*) axl_list_get_nth (list, 0));
6919: return axl_false;
6920: } /* end if */
6921:
6922: /* now remove first position */
6923: axl_list_remove_at (list, 0);
6924: if (axl_list_length (list) != 0) {
6925: printf ("ERROR: Expected to find no item in a list after removal operation..");
6926: return axl_false;
6927: } /* end if */
6928:
6929: axl_list_free (list);
6930:
6931: /* now test unlink_at */
6932: value = axl_strdup ("Funky string");
6933: value2 = axl_strdup ("Funky string 2");
6934: value3 = axl_strdup ("Funky string 3");
6935:
6936: /* check axl_list_equal_string */
6937: if (axl_list_equal_string (value, value2) == 0) {
6938: printf ("ERROR: Expected to find different strings, but reported equal for '%s' == '%s'\n",
6939: value, value2);
6940: return axl_false;
6941: }
6942:
6943: /* create the list */
6944: list = axl_list_new (axl_list_equal_string, axl_free);
6945:
6946: /* add items */
6947: axl_list_add (list, value);
6948: if (axl_list_length (list) != 1) {
6949: printf ("ERROR: Expected to find a list with one item but found: %d\n", axl_list_length (list));
6950: return axl_false;
6951: }
6952: axl_list_add (list, value2);
6953: if (axl_list_length (list) != 2) {
6954: printf ("ERROR: Expected to find a list with two item but found: %d\n", axl_list_length (list));
6955: return axl_false;
6956: }
6957: axl_list_add (list, value3);
6958: if (axl_list_length (list) != 3) {
6959: printf ("ERROR: Expected to find a list with three item but found: %d\n", axl_list_length (list));
6960: return axl_false;
6961: }
6962:
6963: /* unlink items */
6964: axl_list_unlink_at (list, 1);
6965: if (axl_list_length (list) != 2) {
6966: printf ("ERROR: Expected to find two items in a list after removal operation but found:..%d\n", axl_list_length (list));
6967: return axl_false;
6968: } /* end if */
6969:
6970: /* check content */
6971: if (! axl_cmp ("Funky string", axl_list_get_nth (list, 0))) {
6972: printf ("ERROR: Expected to find item '%s' but found '%s'\n",
6973: "Funky string", (char*) axl_list_get_nth (list, 0));
6974: return axl_false;
6975: } /* end if */
6976:
6977: /* now remove first position */
6978: axl_list_unlink_at (list, 0);
6979: if (axl_list_length (list) != 1) {
6980: printf ("ERROR: Expected to find one item in a list after removal operation..");
6981: return axl_false;
6982: } /* end if */
6983:
6984: /* check content */
6985: if (! axl_cmp ("Funky string 3", axl_list_get_nth (list, 0))) {
6986: printf ("ERROR: Expected to find item '%s' but found '%s'\n",
6987: "Funky string 3", (char*) axl_list_get_nth (list, 0));
6988: return axl_false;
6989: } /* end if */
6990:
6991: /* now remove first position */
6992: axl_list_unlink_at (list, 0);
6993: if (axl_list_length (list) != 0) {
6994: printf ("ERROR: Expected to find no item in a list after removal operation..");
6995: return axl_false;
6996: } /* end if */
6997:
6998: axl_list_free (list);
6999:
7000: /* now remove strings */
7001: axl_free (value);
7002: axl_free (value2);
7003: axl_free (value3);
7004:
7005: return axl_true;
7006: }
7007:
7008: /**
7009: * @brief Checks error reporting functions.
7010: *
7011: *
7012: * @return \ref axl_true if ok, \ref axl_false on rainy days.
7013: */
7014: axl_bool test_01_05 (void)
7015: {
7016: axlError * error = NULL;
7017:
7018: if (! axl_error_was_ok (error)) {
7019: printf ("Error: expected to find ok on a non-initialized error\n");
7020: return axl_false;
7021: }
7022:
7023: axl_error_new (-1, "An error to report", NULL, &error);
7024:
7025: if (axl_error_was_ok (error)) {
7026: printf ("Error: expected to find error reported on an initialized error\n");
7027: return axl_false;
7028: }
7029:
7030: axl_error_free (error);
7031:
7032: return axl_true;
7033: }
7034:
7035: int lookups = 0;
7036:
7037: void test_02_02_check_key (axlHash * hash, char * key)
7038: {
7039: char * value = axl_hash_get (hash, key);
7040:
7041: if (! axl_cmp (value, key)) {
7042: printf ("ERROR: unable to find %s value, found %s in the hash!!!\n", key, value);
7043: exit (-1);
7044: }
7045:
7046: lookups++;
7047:
7048: return;
7049: }
7050:
7051: /**
7052: * @brief Test current libaxl hash implementation.
7053: *
7054: * @return axl_true if it works properly or axl_false if not.
7055: */
7056: axl_bool test_02_02 (void)
7057: {
7058: axlHash * hash;
7059: int iterator;
7060: const char * value;
7061:
7062: /* create the hash */
7063: hash = axl_hash_new (axl_hash_string, axl_hash_equal_string);
7064:
7065: /* insert data */
7066: axl_hash_insert (hash, "sword", "sword");
7067: axl_hash_insert (hash, "mace", "mace");
7068: axl_hash_insert (hash, "axe", "axe");
7069: axl_hash_insert (hash, "arrow", "arrow");
7070: axl_hash_insert (hash, "shield", "shield");
7071: axl_hash_insert (hash, "bag", "bag");
7072: axl_hash_insert (hash, "stone", "stone");
7073: axl_hash_insert (hash, "key", "key");
7074: axl_hash_insert (hash, "skull", "skull");
7075: axl_hash_insert (hash, "jar", "jar");
7076: axl_hash_insert (hash, "bottle", "bottle");
7077: axl_hash_insert (hash, "fairy", "fairy");
7078: axl_hash_insert (hash, "potion", "potion");
7079: axl_hash_insert (hash, "water", "water");
7080: axl_hash_insert (hash, "spoon", "spoon");
7081: axl_hash_insert (hash, "book", "book");
7082: axl_hash_insert (hash, "spear", "spear");
7083: axl_hash_insert (hash, "dagger", "dagger");
7084: axl_hash_insert (hash, "katana", "katana");
7085: axl_hash_insert (hash, "helmet", "helmet");
7086: axl_hash_insert (hash, "chain", "chain");
7087: axl_hash_insert (hash, "halberd", "halberd");
7088: axl_hash_insert (hash, "pipe", "pipe");
7089: axl_hash_insert (hash, "hat", "hat");
7090: axl_hash_insert (hash, "eyeofnewt", "eyeofnewt");
7091: axl_hash_insert (hash, "soup", "soup");
7092: axl_hash_insert (hash, "wolfbane", "wolfbane");
7093: axl_hash_insert (hash, "instantcoffee", "instantcoffee");
7094: axl_hash_insert (hash, "bugspray", "bugspray");
7095: axl_hash_insert (hash, "flint", "flint");
7096: axl_hash_insert (hash, "soap", "soap");
7097: axl_hash_insert (hash, "bones", "bones");
7098: axl_hash_insert (hash, "orb", "orb");
7099: axl_hash_insert (hash, "gold", "gold");
7100: axl_hash_insert (hash, "silver", "silver");
7101: axl_hash_insert (hash, "wine", "wine");
7102: axl_hash_insert (hash, "bread", "bread");
7103:
7104: axl_hash_insert (hash, "sword01", "sword01");
7105: axl_hash_insert (hash, "mace01", "mace01");
7106: axl_hash_insert (hash, "axe01", "axe01");
7107: axl_hash_insert (hash, "arrow01", "arrow01");
7108: axl_hash_insert (hash, "shield01", "shield01");
7109: axl_hash_insert (hash, "bag01", "bag01");
7110: axl_hash_insert (hash, "stone01", "stone01");
7111: axl_hash_insert (hash, "key01", "key01");
7112: axl_hash_insert (hash, "skull01", "skull01");
7113: axl_hash_insert (hash, "jar01", "jar01");
7114: axl_hash_insert (hash, "bottle01", "bottle01");
7115: axl_hash_insert (hash, "fairy01", "fairy01");
7116: axl_hash_insert (hash, "potion01", "potion01");
7117: axl_hash_insert (hash, "water01", "water01");
7118: axl_hash_insert (hash, "spoon01", "spoon01");
7119: axl_hash_insert (hash, "book01", "book01");
7120: axl_hash_insert (hash, "spear01", "spear01");
7121: axl_hash_insert (hash, "dagger01", "dagger01");
7122: axl_hash_insert (hash, "katana01", "katana01");
7123: axl_hash_insert (hash, "helmet01", "helmet01");
7124: axl_hash_insert (hash, "chain01", "chain01");
7125: axl_hash_insert (hash, "halberd01", "halberd01");
7126: axl_hash_insert (hash, "pipe01", "pipe01");
7127: axl_hash_insert (hash, "hat01", "hat01");
7128: axl_hash_insert (hash, "eyeofnewt01", "eyeofnewt01");
7129: axl_hash_insert (hash, "soup01", "soup01");
7130: axl_hash_insert (hash, "wolfbane01", "wolfbane01");
7131: axl_hash_insert (hash, "instantcoffee01", "instantcoffee01");
7132: axl_hash_insert (hash, "bugspray01", "bugspray01");
7133: axl_hash_insert (hash, "flint01", "flint01");
7134: axl_hash_insert (hash, "soap01", "soap01");
7135: axl_hash_insert (hash, "bones01", "bones01");
7136: axl_hash_insert (hash, "orb01", "orb01");
7137: axl_hash_insert (hash, "gold01", "gold01");
7138: axl_hash_insert (hash, "silver01", "silver01");
7139: axl_hash_insert (hash, "wine01", "wine01");
7140: axl_hash_insert (hash, "bread01", "bread01");
7141:
7142: axl_hash_insert (hash, "sword02", "sword02");
7143: axl_hash_insert (hash, "mace02", "mace02");
7144: axl_hash_insert (hash, "axe02", "axe02");
7145: axl_hash_insert (hash, "arrow02", "arrow02");
7146: axl_hash_insert (hash, "shield02", "shield02");
7147: axl_hash_insert (hash, "bag02", "bag02");
7148: axl_hash_insert (hash, "stone02", "stone02");
7149: axl_hash_insert (hash, "key02", "key02");
7150: axl_hash_insert (hash, "skull02", "skull02");
7151: axl_hash_insert (hash, "jar02", "jar02");
7152: axl_hash_insert (hash, "bottle02", "bottle02");
7153: axl_hash_insert (hash, "fairy02", "fairy02");
7154: axl_hash_insert (hash, "potion02", "potion02");
7155: axl_hash_insert (hash, "water02", "water02");
7156: axl_hash_insert (hash, "spoon02", "spoon02");
7157: axl_hash_insert (hash, "book02", "book02");
7158: axl_hash_insert (hash, "spear02", "spear02");
7159: axl_hash_insert (hash, "dagger02", "dagger02");
7160: axl_hash_insert (hash, "katana02", "katana02");
7161: axl_hash_insert (hash, "helmet02", "helmet02");
7162: axl_hash_insert (hash, "chain02", "chain02");
7163: axl_hash_insert (hash, "halberd02", "halberd02");
7164: axl_hash_insert (hash, "pipe02", "pipe02");
7165: axl_hash_insert (hash, "hat02", "hat02");
7166: axl_hash_insert (hash, "eyeofnewt02", "eyeofnewt02");
7167: axl_hash_insert (hash, "soup02", "soup02");
7168: axl_hash_insert (hash, "wolfbane02", "wolfbane02");
7169: axl_hash_insert (hash, "instantcoffee02", "instantcoffee02");
7170: axl_hash_insert (hash, "bugspray02", "bugspray02");
7171: axl_hash_insert (hash, "flint02", "flint02");
7172: axl_hash_insert (hash, "soap02", "soap02");
7173: axl_hash_insert (hash, "bones02", "bones02");
7174: axl_hash_insert (hash, "orb02", "orb02");
7175: axl_hash_insert (hash, "gold02", "gold02");
7176: axl_hash_insert (hash, "silver02", "silver02");
7177: axl_hash_insert (hash, "wine02", "wine02");
7178: axl_hash_insert (hash, "bread02", "bread02");
7179:
7180: axl_hash_insert (hash, "sword03", "sword03");
7181: axl_hash_insert (hash, "mace03", "mace03");
7182: axl_hash_insert (hash, "axe03", "axe03");
7183: axl_hash_insert (hash, "arrow03", "arrow03");
7184: axl_hash_insert (hash, "shield03", "shield03");
7185: axl_hash_insert (hash, "bag03", "bag03");
7186: axl_hash_insert (hash, "stone03", "stone03");
7187: axl_hash_insert (hash, "key03", "key03");
7188: axl_hash_insert (hash, "skull03", "skull03");
7189: axl_hash_insert (hash, "jar03", "jar03");
7190: axl_hash_insert (hash, "bottle03", "bottle03");
7191: axl_hash_insert (hash, "fairy03", "fairy03");
7192: axl_hash_insert (hash, "potion03", "potion03");
7193: axl_hash_insert (hash, "water03", "water03");
7194: axl_hash_insert (hash, "spoon03", "spoon03");
7195: axl_hash_insert (hash, "book03", "book03");
7196: axl_hash_insert (hash, "spear03", "spear03");
7197: axl_hash_insert (hash, "dagger03", "dagger03");
7198: axl_hash_insert (hash, "katana03", "katana03");
7199: axl_hash_insert (hash, "helmet03", "helmet03");
7200: axl_hash_insert (hash, "chain03", "chain03");
7201: axl_hash_insert (hash, "halberd03", "halberd03");
7202: axl_hash_insert (hash, "pipe03", "pipe03");
7203: axl_hash_insert (hash, "hat03", "hat03");
7204: axl_hash_insert (hash, "eyeofnewt03", "eyeofnewt03");
7205: axl_hash_insert (hash, "soup03", "soup03");
7206: axl_hash_insert (hash, "wolfbane03", "wolfbane03");
7207: axl_hash_insert (hash, "instantcoffee03", "instantcoffee03");
7208: axl_hash_insert (hash, "bugspray03", "bugspray03");
7209: axl_hash_insert (hash, "flint03", "flint03");
7210: axl_hash_insert (hash, "soap03", "soap03");
7211: axl_hash_insert (hash, "bones03", "bones03");
7212: axl_hash_insert (hash, "orb03", "orb03");
7213: axl_hash_insert (hash, "gold03", "gold03");
7214: axl_hash_insert (hash, "silver03", "silver03");
7215: axl_hash_insert (hash, "wine03", "wine03");
7216: axl_hash_insert (hash, "bread03", "bread03");
7217:
7218: axl_hash_insert (hash, "sword04", "sword04");
7219: axl_hash_insert (hash, "mace04", "mace04");
7220: axl_hash_insert (hash, "axe04", "axe04");
7221: axl_hash_insert (hash, "arrow04", "arrow04");
7222: axl_hash_insert (hash, "shield04", "shield04");
7223: axl_hash_insert (hash, "bag04", "bag04");
7224: axl_hash_insert (hash, "stone04", "stone04");
7225: axl_hash_insert (hash, "key04", "key04");
7226: axl_hash_insert (hash, "skull04", "skull04");
7227: axl_hash_insert (hash, "jar04", "jar04");
7228: axl_hash_insert (hash, "bottle04", "bottle04");
7229: axl_hash_insert (hash, "fairy04", "fairy04");
7230: axl_hash_insert (hash, "potion04", "potion04");
7231: axl_hash_insert (hash, "water04", "water04");
7232: axl_hash_insert (hash, "spoon04", "spoon04");
7233: axl_hash_insert (hash, "book04", "book04");
7234: axl_hash_insert (hash, "spear04", "spear04");
7235: axl_hash_insert (hash, "dagger04", "dagger04");
7236: axl_hash_insert (hash, "katana04", "katana04");
7237: axl_hash_insert (hash, "helmet04", "helmet04");
7238: axl_hash_insert (hash, "chain04", "chain04");
7239: axl_hash_insert (hash, "halberd04", "halberd04");
7240: axl_hash_insert (hash, "pipe04", "pipe04");
7241: axl_hash_insert (hash, "hat04", "hat04");
7242: axl_hash_insert (hash, "eyeofnewt04", "eyeofnewt04");
7243: axl_hash_insert (hash, "soup04", "soup04");
7244: axl_hash_insert (hash, "wolfbane04", "wolfbane04");
7245: axl_hash_insert (hash, "instantcoffee04", "instantcoffee04");
7246: axl_hash_insert (hash, "bugspray04", "bugspray04");
7247: axl_hash_insert (hash, "flint04", "flint04");
7248: axl_hash_insert (hash, "soap04", "soap04");
7249: axl_hash_insert (hash, "bones04", "bones04");
7250: axl_hash_insert (hash, "orb04", "orb04");
7251: axl_hash_insert (hash, "gold04", "gold04");
7252: axl_hash_insert (hash, "silver04", "silver04");
7253: axl_hash_insert (hash, "wine04", "wine04");
7254: axl_hash_insert (hash, "bread04", "bread04");
7255:
7256: axl_hash_insert (hash, "sword05", "sword05");
7257: axl_hash_insert (hash, "mace05", "mace05");
7258: axl_hash_insert (hash, "axe05", "axe05");
7259: axl_hash_insert (hash, "arrow05", "arrow05");
7260: axl_hash_insert (hash, "shield05", "shield05");
7261: axl_hash_insert (hash, "bag05", "bag05");
7262: axl_hash_insert (hash, "stone05", "stone05");
7263: axl_hash_insert (hash, "key05", "key05");
7264: axl_hash_insert (hash, "skull05", "skull05");
7265: axl_hash_insert (hash, "jar05", "jar05");
7266: axl_hash_insert (hash, "bottle05", "bottle05");
7267: axl_hash_insert (hash, "fairy05", "fairy05");
7268: axl_hash_insert (hash, "potion05", "potion05");
7269: axl_hash_insert (hash, "water05", "water05");
7270: axl_hash_insert (hash, "spoon05", "spoon05");
7271: axl_hash_insert (hash, "book05", "book05");
7272: axl_hash_insert (hash, "spear05", "spear05");
7273: axl_hash_insert (hash, "dagger05", "dagger05");
7274: axl_hash_insert (hash, "katana05", "katana05");
7275: axl_hash_insert (hash, "helmet05", "helmet05");
7276: axl_hash_insert (hash, "chain05", "chain05");
7277: axl_hash_insert (hash, "halberd05", "halberd05");
7278: axl_hash_insert (hash, "pipe05", "pipe05");
7279: axl_hash_insert (hash, "hat05", "hat05");
7280: axl_hash_insert (hash, "eyeofnewt05", "eyeofnewt05");
7281: axl_hash_insert (hash, "soup05", "soup05");
7282: axl_hash_insert (hash, "wolfbane05", "wolfbane05");
7283: axl_hash_insert (hash, "instantcoffee05", "instantcoffee05");
7284: axl_hash_insert (hash, "bugspray05", "bugspray05");
7285: axl_hash_insert (hash, "flint05", "flint05");
7286: axl_hash_insert (hash, "soap05", "soap05");
7287: axl_hash_insert (hash, "bones05", "bones05");
7288: axl_hash_insert (hash, "orb05", "orb05");
7289: axl_hash_insert (hash, "gold05", "gold05");
7290: axl_hash_insert (hash, "silver05", "silver05");
7291: axl_hash_insert (hash, "wine05", "wine05");
7292: axl_hash_insert (hash, "bread05", "bread05");
7293:
7294: axl_hash_insert (hash, "sword06", "sword06");
7295: axl_hash_insert (hash, "mace06", "mace06");
7296: axl_hash_insert (hash, "axe06", "axe06");
7297: axl_hash_insert (hash, "arrow06", "arrow06");
7298: axl_hash_insert (hash, "shield06", "shield06");
7299: axl_hash_insert (hash, "bag06", "bag06");
7300: axl_hash_insert (hash, "stone06", "stone06");
7301: axl_hash_insert (hash, "key06", "key06");
7302: axl_hash_insert (hash, "skull06", "skull06");
7303: axl_hash_insert (hash, "jar06", "jar06");
7304: axl_hash_insert (hash, "bottle06", "bottle06");
7305: axl_hash_insert (hash, "fairy06", "fairy06");
7306: axl_hash_insert (hash, "potion06", "potion06");
7307: axl_hash_insert (hash, "water06", "water06");
7308: axl_hash_insert (hash, "spoon06", "spoon06");
7309: axl_hash_insert (hash, "book06", "book06");
7310: axl_hash_insert (hash, "spear06", "spear06");
7311: axl_hash_insert (hash, "dagger06", "dagger06");
7312: axl_hash_insert (hash, "katana06", "katana06");
7313: axl_hash_insert (hash, "helmet06", "helmet06");
7314: axl_hash_insert (hash, "chain06", "chain06");
7315: axl_hash_insert (hash, "halberd06", "halberd06");
7316: axl_hash_insert (hash, "pipe06", "pipe06");
7317: axl_hash_insert (hash, "hat06", "hat06");
7318: axl_hash_insert (hash, "eyeofnewt06", "eyeofnewt06");
7319: axl_hash_insert (hash, "soup06", "soup06");
7320: axl_hash_insert (hash, "wolfbane06", "wolfbane06");
7321: axl_hash_insert (hash, "instantcoffee06", "instantcoffee06");
7322: axl_hash_insert (hash, "bugspray06", "bugspray06");
7323: axl_hash_insert (hash, "flint06", "flint06");
7324: axl_hash_insert (hash, "soap06", "soap06");
7325: axl_hash_insert (hash, "bones06", "bones06");
7326: axl_hash_insert (hash, "orb06", "orb06");
7327: axl_hash_insert (hash, "gold06", "gold06");
7328: axl_hash_insert (hash, "silver06", "silver06");
7329: axl_hash_insert (hash, "wine06", "wine06");
7330: axl_hash_insert (hash, "bread06", "bread06");
7331:
7332: axl_hash_insert (hash, "sword07", "sword07");
7333: axl_hash_insert (hash, "mace07", "mace07");
7334: axl_hash_insert (hash, "axe07", "axe07");
7335: axl_hash_insert (hash, "arrow07", "arrow07");
7336: axl_hash_insert (hash, "shield07", "shield07");
7337: axl_hash_insert (hash, "bag07", "bag07");
7338: axl_hash_insert (hash, "stone07", "stone07");
7339: axl_hash_insert (hash, "key07", "key07");
7340: axl_hash_insert (hash, "skull07", "skull07");
7341: axl_hash_insert (hash, "jar07", "jar07");
7342: axl_hash_insert (hash, "bottle07", "bottle07");
7343: axl_hash_insert (hash, "fairy07", "fairy07");
7344: axl_hash_insert (hash, "potion07", "potion07");
7345: axl_hash_insert (hash, "water07", "water07");
7346: axl_hash_insert (hash, "spoon07", "spoon07");
7347: axl_hash_insert (hash, "book07", "book07");
7348: axl_hash_insert (hash, "spear07", "spear07");
7349: axl_hash_insert (hash, "dagger07", "dagger07");
7350: axl_hash_insert (hash, "katana07", "katana07");
7351: axl_hash_insert (hash, "helmet07", "helmet07");
7352: axl_hash_insert (hash, "chain07", "chain07");
7353: axl_hash_insert (hash, "halberd07", "halberd07");
7354: axl_hash_insert (hash, "pipe07", "pipe07");
7355: axl_hash_insert (hash, "hat07", "hat07");
7356: axl_hash_insert (hash, "eyeofnewt07", "eyeofnewt07");
7357: axl_hash_insert (hash, "soup07", "soup07");
7358: axl_hash_insert (hash, "wolfbane07", "wolfbane07");
7359: axl_hash_insert (hash, "instantcoffee07", "instantcoffee07");
7360: axl_hash_insert (hash, "bugspray07", "bugspray07");
7361: axl_hash_insert (hash, "flint07", "flint07");
7362: axl_hash_insert (hash, "soap07", "soap07");
7363: axl_hash_insert (hash, "bones07", "bones07");
7364: axl_hash_insert (hash, "orb07", "orb07");
7365: axl_hash_insert (hash, "gold07", "gold07");
7366: axl_hash_insert (hash, "silver07", "silver07");
7367: axl_hash_insert (hash, "wine07", "wine07");
7368: axl_hash_insert (hash, "bread07", "bread07");
7369:
7370: axl_hash_insert (hash, "sword08", "sword08");
7371: axl_hash_insert (hash, "mace08", "mace08");
7372: axl_hash_insert (hash, "axe08", "axe08");
7373: axl_hash_insert (hash, "arrow08", "arrow08");
7374: axl_hash_insert (hash, "shield08", "shield08");
7375: axl_hash_insert (hash, "bag08", "bag08");
7376: axl_hash_insert (hash, "stone08", "stone08");
7377: axl_hash_insert (hash, "key08", "key08");
7378: axl_hash_insert (hash, "skull08", "skull08");
7379: axl_hash_insert (hash, "jar08", "jar08");
7380: axl_hash_insert (hash, "bottle08", "bottle08");
7381: axl_hash_insert (hash, "fairy08", "fairy08");
7382: axl_hash_insert (hash, "potion08", "potion08");
7383: axl_hash_insert (hash, "water08", "water08");
7384: axl_hash_insert (hash, "spoon08", "spoon08");
7385: axl_hash_insert (hash, "book08", "book08");
7386: axl_hash_insert (hash, "spear08", "spear08");
7387: axl_hash_insert (hash, "dagger08", "dagger08");
7388: axl_hash_insert (hash, "katana08", "katana08");
7389: axl_hash_insert (hash, "helmet08", "helmet08");
7390: axl_hash_insert (hash, "chain08", "chain08");
7391: axl_hash_insert (hash, "halberd08", "halberd08");
7392: axl_hash_insert (hash, "pipe08", "pipe08");
7393: axl_hash_insert (hash, "hat08", "hat08");
7394: axl_hash_insert (hash, "eyeofnewt08", "eyeofnewt08");
7395: axl_hash_insert (hash, "soup08", "soup08");
7396: axl_hash_insert (hash, "wolfbane08", "wolfbane08");
7397: axl_hash_insert (hash, "instantcoffee08", "instantcoffee08");
7398: axl_hash_insert (hash, "bugspray08", "bugspray08");
7399: axl_hash_insert (hash, "flint08", "flint08");
7400: axl_hash_insert (hash, "soap08", "soap08");
7401: axl_hash_insert (hash, "bones08", "bones08");
7402: axl_hash_insert (hash, "orb08", "orb08");
7403: axl_hash_insert (hash, "gold08", "gold08");
7404: axl_hash_insert (hash, "silver08", "silver08");
7405: axl_hash_insert (hash, "wine08", "wine08");
7406: axl_hash_insert (hash, "bread08", "bread08");
7407:
7408: axl_hash_insert (hash, "sword09", "sword09");
7409: axl_hash_insert (hash, "mace09", "mace09");
7410: axl_hash_insert (hash, "axe09", "axe09");
7411: axl_hash_insert (hash, "arrow09", "arrow09");
7412: axl_hash_insert (hash, "shield09", "shield09");
7413: axl_hash_insert (hash, "bag09", "bag09");
7414: axl_hash_insert (hash, "stone09", "stone09");
7415: axl_hash_insert (hash, "key09", "key09");
7416: axl_hash_insert (hash, "skull09", "skull09");
7417: axl_hash_insert (hash, "jar09", "jar09");
7418: axl_hash_insert (hash, "bottle09", "bottle09");
7419: axl_hash_insert (hash, "fairy09", "fairy09");
7420: axl_hash_insert (hash, "potion09", "potion09");
7421: axl_hash_insert (hash, "water09", "water09");
7422: axl_hash_insert (hash, "spoon09", "spoon09");
7423: axl_hash_insert (hash, "book09", "book09");
7424: axl_hash_insert (hash, "spear09", "spear09");
7425: axl_hash_insert (hash, "dagger09", "dagger09");
7426: axl_hash_insert (hash, "katana09", "katana09");
7427: axl_hash_insert (hash, "helmet09", "helmet09");
7428: axl_hash_insert (hash, "chain09", "chain09");
7429: axl_hash_insert (hash, "halberd09", "halberd09");
7430: axl_hash_insert (hash, "pipe09", "pipe09");
7431: axl_hash_insert (hash, "hat09", "hat09");
7432: axl_hash_insert (hash, "eyeofnewt09", "eyeofnewt09");
7433: axl_hash_insert (hash, "soup09", "soup09");
7434: axl_hash_insert (hash, "wolfbane09", "wolfbane09");
7435: axl_hash_insert (hash, "instantcoffee09", "instantcoffee09");
7436: axl_hash_insert (hash, "bugspray09", "bugspray09");
7437: axl_hash_insert (hash, "flint09", "flint09");
7438: axl_hash_insert (hash, "soap09", "soap09");
7439: axl_hash_insert (hash, "bones09", "bones09");
7440: axl_hash_insert (hash, "orb09", "orb09");
7441: axl_hash_insert (hash, "gold09", "gold09");
7442: axl_hash_insert (hash, "silver09", "silver09");
7443: axl_hash_insert (hash, "wine09", "wine09");
7444: axl_hash_insert (hash, "bread09", "bread09");
7445:
7446: axl_hash_insert (hash, "sword10", "sword10");
7447: axl_hash_insert (hash, "mace10", "mace10");
7448: axl_hash_insert (hash, "axe10", "axe10");
7449: axl_hash_insert (hash, "arrow10", "arrow10");
7450: axl_hash_insert (hash, "shield10", "shield10");
7451: axl_hash_insert (hash, "bag10", "bag10");
7452: axl_hash_insert (hash, "stone10", "stone10");
7453: axl_hash_insert (hash, "key10", "key10");
7454: axl_hash_insert (hash, "skull10", "skull10");
7455: axl_hash_insert (hash, "jar10", "jar10");
7456: axl_hash_insert (hash, "bottle10", "bottle10");
7457: axl_hash_insert (hash, "fairy10", "fairy10");
7458: axl_hash_insert (hash, "potion10", "potion10");
7459: axl_hash_insert (hash, "water10", "water10");
7460: axl_hash_insert (hash, "spoon10", "spoon10");
7461: axl_hash_insert (hash, "book10", "book10");
7462: axl_hash_insert (hash, "spear10", "spear10");
7463: axl_hash_insert (hash, "dagger10", "dagger10");
7464: axl_hash_insert (hash, "katana10", "katana10");
7465: axl_hash_insert (hash, "helmet10", "helmet10");
7466: axl_hash_insert (hash, "chain10", "chain10");
7467: axl_hash_insert (hash, "halberd10", "halberd10");
7468: axl_hash_insert (hash, "pipe10", "pipe10");
7469: axl_hash_insert (hash, "hat10", "hat10");
7470: axl_hash_insert (hash, "eyeofnewt10", "eyeofnewt10");
7471: axl_hash_insert (hash, "soup10", "soup10");
7472: axl_hash_insert (hash, "wolfbane10", "wolfbane10");
7473: axl_hash_insert (hash, "instantcoffee10", "instantcoffee10");
7474: axl_hash_insert (hash, "bugspray10", "bugspray10");
7475: axl_hash_insert (hash, "flint10", "flint10");
7476: axl_hash_insert (hash, "soap10", "soap10");
7477: axl_hash_insert (hash, "bones10", "bones10");
7478: axl_hash_insert (hash, "orb10", "orb10");
7479: axl_hash_insert (hash, "gold10", "gold10");
7480: axl_hash_insert (hash, "silver10", "silver10");
7481: axl_hash_insert (hash, "wine10", "wine10");
7482: axl_hash_insert (hash, "bread10", "bread10");
7483:
7484: axl_hash_insert (hash, "sword11", "sword11");
7485: axl_hash_insert (hash, "mace11", "mace11");
7486: axl_hash_insert (hash, "axe11", "axe11");
7487: axl_hash_insert (hash, "arrow11", "arrow11");
7488: axl_hash_insert (hash, "shield11", "shield11");
7489: axl_hash_insert (hash, "bag11", "bag11");
7490: axl_hash_insert (hash, "stone11", "stone11");
7491: axl_hash_insert (hash, "key11", "key11");
7492: axl_hash_insert (hash, "skull11", "skull11");
7493: axl_hash_insert (hash, "jar11", "jar11");
7494: axl_hash_insert (hash, "bottle11", "bottle11");
7495: axl_hash_insert (hash, "fairy11", "fairy11");
7496: axl_hash_insert (hash, "potion11", "potion11");
7497: axl_hash_insert (hash, "water11", "water11");
7498: axl_hash_insert (hash, "spoon11", "spoon11");
7499: axl_hash_insert (hash, "book11", "book11");
7500: axl_hash_insert (hash, "spear11", "spear11");
7501: axl_hash_insert (hash, "dagger11", "dagger11");
7502: axl_hash_insert (hash, "katana11", "katana11");
7503: axl_hash_insert (hash, "helmet11", "helmet11");
7504: axl_hash_insert (hash, "chain11", "chain11");
7505: axl_hash_insert (hash, "halberd11", "halberd11");
7506: axl_hash_insert (hash, "pipe11", "pipe11");
7507: axl_hash_insert (hash, "hat11", "hat11");
7508: axl_hash_insert (hash, "eyeofnewt11", "eyeofnewt11");
7509: axl_hash_insert (hash, "soup11", "soup11");
7510: axl_hash_insert (hash, "wolfbane11", "wolfbane11");
7511: axl_hash_insert (hash, "instantcoffee11", "instantcoffee11");
7512: axl_hash_insert (hash, "bugspray11", "bugspray11");
7513: axl_hash_insert (hash, "flint11", "flint11");
7514: axl_hash_insert (hash, "soap11", "soap11");
7515: axl_hash_insert (hash, "bones11", "bones11");
7516: axl_hash_insert (hash, "orb11", "orb11");
7517: axl_hash_insert (hash, "gold11", "gold11");
7518: axl_hash_insert (hash, "silver11", "silver11");
7519: axl_hash_insert (hash, "wine11", "wine11");
7520: axl_hash_insert (hash, "bread11", "bread11");
7521:
7522: /* show hash status */
7523: axl_hash_show_status (hash);
7524:
7525: /* perform checks */
7526: iterator = 0;
7527: while (iterator < 1000) {
7528:
7529: /* get values and check them */
7530: test_02_02_check_key (hash, "bag");
7531: test_02_02_check_key (hash, "sword");
7532: test_02_02_check_key (hash, "mace");
7533: test_02_02_check_key (hash, "axe");
7534: test_02_02_check_key (hash, "arrow");
7535: test_02_02_check_key (hash, "shield");
7536: test_02_02_check_key (hash, "bag");
7537: test_02_02_check_key (hash, "stone");
7538: test_02_02_check_key (hash, "key");
7539: test_02_02_check_key (hash, "skull");
7540: test_02_02_check_key (hash, "jar");
7541: test_02_02_check_key (hash, "bottle");
7542: test_02_02_check_key (hash, "fairy");
7543: test_02_02_check_key (hash, "potion");
7544: test_02_02_check_key (hash, "water");
7545: test_02_02_check_key (hash, "spoon");
7546: test_02_02_check_key (hash, "book");
7547: test_02_02_check_key (hash, "spear");
7548: test_02_02_check_key (hash, "dagger");
7549: test_02_02_check_key (hash, "katana");
7550: test_02_02_check_key (hash, "helmet");
7551: test_02_02_check_key (hash, "chain");
7552: test_02_02_check_key (hash, "halberd");
7553: test_02_02_check_key (hash, "pipe");
7554: test_02_02_check_key (hash, "hat");
7555: test_02_02_check_key (hash, "eyeofnewt");
7556: test_02_02_check_key (hash, "soup");
7557: test_02_02_check_key (hash, "wolfbane");
7558: test_02_02_check_key (hash, "instantcoffee");
7559: test_02_02_check_key (hash, "bugspray");
7560: test_02_02_check_key (hash, "flint");
7561: test_02_02_check_key (hash, "soap");
7562: test_02_02_check_key (hash, "bones");
7563: test_02_02_check_key (hash, "orb");
7564: test_02_02_check_key (hash, "gold");
7565: test_02_02_check_key (hash, "silver");
7566: test_02_02_check_key (hash, "wine");
7567: test_02_02_check_key (hash, "bread");
7568:
7569: test_02_02_check_key (hash, "bag01");
7570: test_02_02_check_key (hash, "sword01");
7571: test_02_02_check_key (hash, "mace01");
7572: test_02_02_check_key (hash, "axe01");
7573: test_02_02_check_key (hash, "arrow01");
7574: test_02_02_check_key (hash, "shield01");
7575: test_02_02_check_key (hash, "bag01");
7576: test_02_02_check_key (hash, "stone01");
7577: test_02_02_check_key (hash, "key01");
7578: test_02_02_check_key (hash, "skull01");
7579: test_02_02_check_key (hash, "jar01");
7580: test_02_02_check_key (hash, "bottle01");
7581: test_02_02_check_key (hash, "fairy01");
7582: test_02_02_check_key (hash, "potion01");
7583: test_02_02_check_key (hash, "water01");
7584: test_02_02_check_key (hash, "spoon01");
7585: test_02_02_check_key (hash, "book01");
7586: test_02_02_check_key (hash, "spear01");
7587: test_02_02_check_key (hash, "dagger01");
7588: test_02_02_check_key (hash, "katana01");
7589: test_02_02_check_key (hash, "helmet01");
7590: test_02_02_check_key (hash, "chain01");
7591: test_02_02_check_key (hash, "halberd01");
7592: test_02_02_check_key (hash, "pipe01");
7593: test_02_02_check_key (hash, "hat01");
7594: test_02_02_check_key (hash, "eyeofnewt01");
7595: test_02_02_check_key (hash, "soup01");
7596: test_02_02_check_key (hash, "wolfbane01");
7597: test_02_02_check_key (hash, "instantcoffee01");
7598: test_02_02_check_key (hash, "bugspray01");
7599: test_02_02_check_key (hash, "flint01");
7600: test_02_02_check_key (hash, "soap01");
7601: test_02_02_check_key (hash, "bones01");
7602: test_02_02_check_key (hash, "orb01");
7603: test_02_02_check_key (hash, "gold01");
7604: test_02_02_check_key (hash, "silver01");
7605: test_02_02_check_key (hash, "wine01");
7606: test_02_02_check_key (hash, "bread01");
7607:
7608: test_02_02_check_key (hash, "bag02");
7609: test_02_02_check_key (hash, "sword02");
7610: test_02_02_check_key (hash, "mace02");
7611: test_02_02_check_key (hash, "axe02");
7612: test_02_02_check_key (hash, "arrow02");
7613: test_02_02_check_key (hash, "shield02");
7614: test_02_02_check_key (hash, "bag02");
7615: test_02_02_check_key (hash, "stone02");
7616: test_02_02_check_key (hash, "key02");
7617: test_02_02_check_key (hash, "skull02");
7618: test_02_02_check_key (hash, "jar02");
7619: test_02_02_check_key (hash, "bottle02");
7620: test_02_02_check_key (hash, "fairy02");
7621: test_02_02_check_key (hash, "potion02");
7622: test_02_02_check_key (hash, "water02");
7623: test_02_02_check_key (hash, "spoon02");
7624: test_02_02_check_key (hash, "book02");
7625: test_02_02_check_key (hash, "spear02");
7626: test_02_02_check_key (hash, "dagger02");
7627: test_02_02_check_key (hash, "katana02");
7628: test_02_02_check_key (hash, "helmet02");
7629: test_02_02_check_key (hash, "chain02");
7630: test_02_02_check_key (hash, "halberd02");
7631: test_02_02_check_key (hash, "pipe02");
7632: test_02_02_check_key (hash, "hat02");
7633: test_02_02_check_key (hash, "eyeofnewt02");
7634: test_02_02_check_key (hash, "soup02");
7635: test_02_02_check_key (hash, "wolfbane02");
7636: test_02_02_check_key (hash, "instantcoffee02");
7637: test_02_02_check_key (hash, "bugspray02");
7638: test_02_02_check_key (hash, "flint02");
7639: test_02_02_check_key (hash, "soap02");
7640: test_02_02_check_key (hash, "bones02");
7641: test_02_02_check_key (hash, "orb02");
7642: test_02_02_check_key (hash, "gold02");
7643: test_02_02_check_key (hash, "silver02");
7644: test_02_02_check_key (hash, "wine02");
7645: test_02_02_check_key (hash, "bread02");
7646:
7647: test_02_02_check_key (hash, "bag03");
7648: test_02_02_check_key (hash, "sword03");
7649: test_02_02_check_key (hash, "mace03");
7650: test_02_02_check_key (hash, "axe03");
7651: test_02_02_check_key (hash, "arrow03");
7652: test_02_02_check_key (hash, "shield03");
7653: test_02_02_check_key (hash, "bag03");
7654: test_02_02_check_key (hash, "stone03");
7655: test_02_02_check_key (hash, "key03");
7656: test_02_02_check_key (hash, "skull03");
7657: test_02_02_check_key (hash, "jar03");
7658: test_02_02_check_key (hash, "bottle03");
7659: test_02_02_check_key (hash, "fairy03");
7660: test_02_02_check_key (hash, "potion03");
7661: test_02_02_check_key (hash, "water03");
7662: test_02_02_check_key (hash, "spoon03");
7663: test_02_02_check_key (hash, "book03");
7664: test_02_02_check_key (hash, "spear03");
7665: test_02_02_check_key (hash, "dagger03");
7666: test_02_02_check_key (hash, "katana03");
7667: test_02_02_check_key (hash, "helmet03");
7668: test_02_02_check_key (hash, "chain03");
7669: test_02_02_check_key (hash, "halberd03");
7670: test_02_02_check_key (hash, "pipe03");
7671: test_02_02_check_key (hash, "hat03");
7672: test_02_02_check_key (hash, "eyeofnewt03");
7673: test_02_02_check_key (hash, "soup03");
7674: test_02_02_check_key (hash, "wolfbane03");
7675: test_02_02_check_key (hash, "instantcoffee03");
7676: test_02_02_check_key (hash, "bugspray03");
7677: test_02_02_check_key (hash, "flint03");
7678: test_02_02_check_key (hash, "soap03");
7679: test_02_02_check_key (hash, "bones03");
7680: test_02_02_check_key (hash, "orb03");
7681: test_02_02_check_key (hash, "gold03");
7682: test_02_02_check_key (hash, "silver03");
7683: test_02_02_check_key (hash, "wine03");
7684: test_02_02_check_key (hash, "bread03");
7685:
7686: test_02_02_check_key (hash, "bag04");
7687: test_02_02_check_key (hash, "sword04");
7688: test_02_02_check_key (hash, "mace04");
7689: test_02_02_check_key (hash, "axe04");
7690: test_02_02_check_key (hash, "arrow04");
7691: test_02_02_check_key (hash, "shield04");
7692: test_02_02_check_key (hash, "bag04");
7693: test_02_02_check_key (hash, "stone04");
7694: test_02_02_check_key (hash, "key04");
7695: test_02_02_check_key (hash, "skull04");
7696: test_02_02_check_key (hash, "jar04");
7697: test_02_02_check_key (hash, "bottle04");
7698: test_02_02_check_key (hash, "fairy04");
7699: test_02_02_check_key (hash, "potion04");
7700: test_02_02_check_key (hash, "water04");
7701: test_02_02_check_key (hash, "spoon04");
7702: test_02_02_check_key (hash, "book04");
7703: test_02_02_check_key (hash, "spear04");
7704: test_02_02_check_key (hash, "dagger04");
7705: test_02_02_check_key (hash, "katana04");
7706: test_02_02_check_key (hash, "helmet04");
7707: test_02_02_check_key (hash, "chain04");
7708: test_02_02_check_key (hash, "halberd04");
7709: test_02_02_check_key (hash, "pipe04");
7710: test_02_02_check_key (hash, "hat04");
7711: test_02_02_check_key (hash, "eyeofnewt04");
7712: test_02_02_check_key (hash, "soup04");
7713: test_02_02_check_key (hash, "wolfbane04");
7714: test_02_02_check_key (hash, "instantcoffee04");
7715: test_02_02_check_key (hash, "bugspray04");
7716: test_02_02_check_key (hash, "flint04");
7717: test_02_02_check_key (hash, "soap04");
7718: test_02_02_check_key (hash, "bones04");
7719: test_02_02_check_key (hash, "orb04");
7720: test_02_02_check_key (hash, "gold04");
7721: test_02_02_check_key (hash, "silver04");
7722: test_02_02_check_key (hash, "wine04");
7723: test_02_02_check_key (hash, "bread04");
7724:
7725: test_02_02_check_key (hash, "bag05");
7726: test_02_02_check_key (hash, "sword05");
7727: test_02_02_check_key (hash, "mace05");
7728: test_02_02_check_key (hash, "axe05");
7729: test_02_02_check_key (hash, "arrow05");
7730: test_02_02_check_key (hash, "shield05");
7731: test_02_02_check_key (hash, "bag05");
7732: test_02_02_check_key (hash, "stone05");
7733: test_02_02_check_key (hash, "key05");
7734: test_02_02_check_key (hash, "skull05");
7735: test_02_02_check_key (hash, "jar05");
7736: test_02_02_check_key (hash, "bottle05");
7737: test_02_02_check_key (hash, "fairy05");
7738: test_02_02_check_key (hash, "potion05");
7739: test_02_02_check_key (hash, "water05");
7740: test_02_02_check_key (hash, "spoon05");
7741: test_02_02_check_key (hash, "book05");
7742: test_02_02_check_key (hash, "spear05");
7743: test_02_02_check_key (hash, "dagger05");
7744: test_02_02_check_key (hash, "katana05");
7745: test_02_02_check_key (hash, "helmet05");
7746: test_02_02_check_key (hash, "chain05");
7747: test_02_02_check_key (hash, "halberd05");
7748: test_02_02_check_key (hash, "pipe05");
7749: test_02_02_check_key (hash, "hat05");
7750: test_02_02_check_key (hash, "eyeofnewt05");
7751: test_02_02_check_key (hash, "soup05");
7752: test_02_02_check_key (hash, "wolfbane05");
7753: test_02_02_check_key (hash, "instantcoffee05");
7754: test_02_02_check_key (hash, "bugspray05");
7755: test_02_02_check_key (hash, "flint05");
7756: test_02_02_check_key (hash, "soap05");
7757: test_02_02_check_key (hash, "bones05");
7758: test_02_02_check_key (hash, "orb05");
7759: test_02_02_check_key (hash, "gold05");
7760: test_02_02_check_key (hash, "silver05");
7761: test_02_02_check_key (hash, "wine05");
7762: test_02_02_check_key (hash, "bread05");
7763:
7764: test_02_02_check_key (hash, "bag06");
7765: test_02_02_check_key (hash, "sword06");
7766: test_02_02_check_key (hash, "mace06");
7767: test_02_02_check_key (hash, "axe06");
7768: test_02_02_check_key (hash, "arrow06");
7769: test_02_02_check_key (hash, "shield06");
7770: test_02_02_check_key (hash, "bag06");
7771: test_02_02_check_key (hash, "stone06");
7772: test_02_02_check_key (hash, "key06");
7773: test_02_02_check_key (hash, "skull06");
7774: test_02_02_check_key (hash, "jar06");
7775: test_02_02_check_key (hash, "bottle06");
7776: test_02_02_check_key (hash, "fairy06");
7777: test_02_02_check_key (hash, "potion06");
7778: test_02_02_check_key (hash, "water06");
7779: test_02_02_check_key (hash, "spoon06");
7780: test_02_02_check_key (hash, "book06");
7781: test_02_02_check_key (hash, "spear06");
7782: test_02_02_check_key (hash, "dagger06");
7783: test_02_02_check_key (hash, "katana06");
7784: test_02_02_check_key (hash, "helmet06");
7785: test_02_02_check_key (hash, "chain06");
7786: test_02_02_check_key (hash, "halberd06");
7787: test_02_02_check_key (hash, "pipe06");
7788: test_02_02_check_key (hash, "hat06");
7789: test_02_02_check_key (hash, "eyeofnewt06");
7790: test_02_02_check_key (hash, "soup06");
7791: test_02_02_check_key (hash, "wolfbane06");
7792: test_02_02_check_key (hash, "instantcoffee06");
7793: test_02_02_check_key (hash, "bugspray06");
7794: test_02_02_check_key (hash, "flint06");
7795: test_02_02_check_key (hash, "soap06");
7796: test_02_02_check_key (hash, "bones06");
7797: test_02_02_check_key (hash, "orb06");
7798: test_02_02_check_key (hash, "gold06");
7799: test_02_02_check_key (hash, "silver06");
7800: test_02_02_check_key (hash, "wine06");
7801: test_02_02_check_key (hash, "bread06");
7802:
7803: test_02_02_check_key (hash, "bag07");
7804: test_02_02_check_key (hash, "sword07");
7805: test_02_02_check_key (hash, "mace07");
7806: test_02_02_check_key (hash, "axe07");
7807: test_02_02_check_key (hash, "arrow07");
7808: test_02_02_check_key (hash, "shield07");
7809: test_02_02_check_key (hash, "bag07");
7810: test_02_02_check_key (hash, "stone07");
7811: test_02_02_check_key (hash, "key07");
7812: test_02_02_check_key (hash, "skull07");
7813: test_02_02_check_key (hash, "jar07");
7814: test_02_02_check_key (hash, "bottle07");
7815: test_02_02_check_key (hash, "fairy07");
7816: test_02_02_check_key (hash, "potion07");
7817: test_02_02_check_key (hash, "water07");
7818: test_02_02_check_key (hash, "spoon07");
7819: test_02_02_check_key (hash, "book07");
7820: test_02_02_check_key (hash, "spear07");
7821: test_02_02_check_key (hash, "dagger07");
7822: test_02_02_check_key (hash, "katana07");
7823: test_02_02_check_key (hash, "helmet07");
7824: test_02_02_check_key (hash, "chain07");
7825: test_02_02_check_key (hash, "halberd07");
7826: test_02_02_check_key (hash, "pipe07");
7827: test_02_02_check_key (hash, "hat07");
7828: test_02_02_check_key (hash, "eyeofnewt07");
7829: test_02_02_check_key (hash, "soup07");
7830: test_02_02_check_key (hash, "wolfbane07");
7831: test_02_02_check_key (hash, "instantcoffee07");
7832: test_02_02_check_key (hash, "bugspray07");
7833: test_02_02_check_key (hash, "flint07");
7834: test_02_02_check_key (hash, "soap07");
7835: test_02_02_check_key (hash, "bones07");
7836: test_02_02_check_key (hash, "orb07");
7837: test_02_02_check_key (hash, "gold07");
7838: test_02_02_check_key (hash, "silver07");
7839: test_02_02_check_key (hash, "wine07");
7840: test_02_02_check_key (hash, "bread07");
7841:
7842: test_02_02_check_key (hash, "bag08");
7843: test_02_02_check_key (hash, "sword08");
7844: test_02_02_check_key (hash, "mace08");
7845: test_02_02_check_key (hash, "axe08");
7846: test_02_02_check_key (hash, "arrow08");
7847: test_02_02_check_key (hash, "shield08");
7848: test_02_02_check_key (hash, "bag08");
7849: test_02_02_check_key (hash, "stone08");
7850: test_02_02_check_key (hash, "key08");
7851: test_02_02_check_key (hash, "skull08");
7852: test_02_02_check_key (hash, "jar08");
7853: test_02_02_check_key (hash, "bottle08");
7854: test_02_02_check_key (hash, "fairy08");
7855: test_02_02_check_key (hash, "potion08");
7856: test_02_02_check_key (hash, "water08");
7857: test_02_02_check_key (hash, "spoon08");
7858: test_02_02_check_key (hash, "book08");
7859: test_02_02_check_key (hash, "spear08");
7860: test_02_02_check_key (hash, "dagger08");
7861: test_02_02_check_key (hash, "katana08");
7862: test_02_02_check_key (hash, "helmet08");
7863: test_02_02_check_key (hash, "chain08");
7864: test_02_02_check_key (hash, "halberd08");
7865: test_02_02_check_key (hash, "pipe08");
7866: test_02_02_check_key (hash, "hat08");
7867: test_02_02_check_key (hash, "eyeofnewt08");
7868: test_02_02_check_key (hash, "soup08");
7869: test_02_02_check_key (hash, "wolfbane08");
7870: test_02_02_check_key (hash, "instantcoffee08");
7871: test_02_02_check_key (hash, "bugspray08");
7872: test_02_02_check_key (hash, "flint08");
7873: test_02_02_check_key (hash, "soap08");
7874: test_02_02_check_key (hash, "bones08");
7875: test_02_02_check_key (hash, "orb08");
7876: test_02_02_check_key (hash, "gold08");
7877: test_02_02_check_key (hash, "silver08");
7878: test_02_02_check_key (hash, "wine08");
7879: test_02_02_check_key (hash, "bread08");
7880:
7881: test_02_02_check_key (hash, "bag09");
7882: test_02_02_check_key (hash, "sword09");
7883: test_02_02_check_key (hash, "mace09");
7884: test_02_02_check_key (hash, "axe09");
7885: test_02_02_check_key (hash, "arrow09");
7886: test_02_02_check_key (hash, "shield09");
7887: test_02_02_check_key (hash, "bag09");
7888: test_02_02_check_key (hash, "stone09");
7889: test_02_02_check_key (hash, "key09");
7890: test_02_02_check_key (hash, "skull09");
7891: test_02_02_check_key (hash, "jar09");
7892: test_02_02_check_key (hash, "bottle09");
7893: test_02_02_check_key (hash, "fairy09");
7894: test_02_02_check_key (hash, "potion09");
7895: test_02_02_check_key (hash, "water09");
7896: test_02_02_check_key (hash, "spoon09");
7897: test_02_02_check_key (hash, "book09");
7898: test_02_02_check_key (hash, "spear09");
7899: test_02_02_check_key (hash, "dagger09");
7900: test_02_02_check_key (hash, "katana09");
7901: test_02_02_check_key (hash, "helmet09");
7902: test_02_02_check_key (hash, "chain09");
7903: test_02_02_check_key (hash, "halberd09");
7904: test_02_02_check_key (hash, "pipe09");
7905: test_02_02_check_key (hash, "hat09");
7906: test_02_02_check_key (hash, "eyeofnewt09");
7907: test_02_02_check_key (hash, "soup09");
7908: test_02_02_check_key (hash, "wolfbane09");
7909: test_02_02_check_key (hash, "instantcoffee09");
7910: test_02_02_check_key (hash, "bugspray09");
7911: test_02_02_check_key (hash, "flint09");
7912: test_02_02_check_key (hash, "soap09");
7913: test_02_02_check_key (hash, "bones09");
7914: test_02_02_check_key (hash, "orb09");
7915: test_02_02_check_key (hash, "gold09");
7916: test_02_02_check_key (hash, "silver09");
7917: test_02_02_check_key (hash, "wine09");
7918: test_02_02_check_key (hash, "bread09");
7919:
7920: test_02_02_check_key (hash, "bag10");
7921: test_02_02_check_key (hash, "sword10");
7922: test_02_02_check_key (hash, "mace10");
7923: test_02_02_check_key (hash, "axe10");
7924: test_02_02_check_key (hash, "arrow10");
7925: test_02_02_check_key (hash, "shield10");
7926: test_02_02_check_key (hash, "bag10");
7927: test_02_02_check_key (hash, "stone10");
7928: test_02_02_check_key (hash, "key10");
7929: test_02_02_check_key (hash, "skull10");
7930: test_02_02_check_key (hash, "jar10");
7931: test_02_02_check_key (hash, "bottle10");
7932: test_02_02_check_key (hash, "fairy10");
7933: test_02_02_check_key (hash, "potion10");
7934: test_02_02_check_key (hash, "water10");
7935: test_02_02_check_key (hash, "spoon10");
7936: test_02_02_check_key (hash, "book10");
7937: test_02_02_check_key (hash, "spear10");
7938: test_02_02_check_key (hash, "dagger10");
7939: test_02_02_check_key (hash, "katana10");
7940: test_02_02_check_key (hash, "helmet10");
7941: test_02_02_check_key (hash, "chain10");
7942: test_02_02_check_key (hash, "halberd10");
7943: test_02_02_check_key (hash, "pipe10");
7944: test_02_02_check_key (hash, "hat10");
7945: test_02_02_check_key (hash, "eyeofnewt10");
7946: test_02_02_check_key (hash, "soup10");
7947: test_02_02_check_key (hash, "wolfbane10");
7948: test_02_02_check_key (hash, "instantcoffee10");
7949: test_02_02_check_key (hash, "bugspray10");
7950: test_02_02_check_key (hash, "flint10");
7951: test_02_02_check_key (hash, "soap10");
7952: test_02_02_check_key (hash, "bones10");
7953: test_02_02_check_key (hash, "orb10");
7954: test_02_02_check_key (hash, "gold10");
7955: test_02_02_check_key (hash, "silver10");
7956: test_02_02_check_key (hash, "wine10");
7957: test_02_02_check_key (hash, "bread10");
7958:
7959: test_02_02_check_key (hash, "bag11");
7960: test_02_02_check_key (hash, "sword11");
7961: test_02_02_check_key (hash, "mace11");
7962: test_02_02_check_key (hash, "axe11");
7963: test_02_02_check_key (hash, "arrow11");
7964: test_02_02_check_key (hash, "shield11");
7965: test_02_02_check_key (hash, "bag11");
7966: test_02_02_check_key (hash, "stone11");
7967: test_02_02_check_key (hash, "key11");
7968: test_02_02_check_key (hash, "skull11");
7969: test_02_02_check_key (hash, "jar11");
7970: test_02_02_check_key (hash, "bottle11");
7971: test_02_02_check_key (hash, "fairy11");
7972: test_02_02_check_key (hash, "potion11");
7973: test_02_02_check_key (hash, "water11");
7974: test_02_02_check_key (hash, "spoon11");
7975: test_02_02_check_key (hash, "book11");
7976: test_02_02_check_key (hash, "spear11");
7977: test_02_02_check_key (hash, "dagger11");
7978: test_02_02_check_key (hash, "katana11");
7979: test_02_02_check_key (hash, "helmet11");
7980: test_02_02_check_key (hash, "chain11");
7981: test_02_02_check_key (hash, "halberd11");
7982: test_02_02_check_key (hash, "pipe11");
7983: test_02_02_check_key (hash, "hat11");
7984: test_02_02_check_key (hash, "eyeofnewt11");
7985: test_02_02_check_key (hash, "soup11");
7986: test_02_02_check_key (hash, "wolfbane11");
7987: test_02_02_check_key (hash, "instantcoffee11");
7988: test_02_02_check_key (hash, "bugspray11");
7989: test_02_02_check_key (hash, "flint11");
7990: test_02_02_check_key (hash, "soap11");
7991: test_02_02_check_key (hash, "bones11");
7992: test_02_02_check_key (hash, "orb11");
7993: test_02_02_check_key (hash, "gold11");
7994: test_02_02_check_key (hash, "silver11");
7995: test_02_02_check_key (hash, "wine11");
7996: test_02_02_check_key (hash, "bread11");
7997:
7998: /* update iterator */
7999: iterator++;
8000: }
8001:
8002: /* destroy the hash */
8003: axl_hash_free (hash);
8004:
8005: /* check integer hash */
8006: hash = axl_hash_new (axl_hash_int, axl_hash_equal_int);
8007: axl_hash_insert (hash, INT_TO_PTR (-1), "menos uno");
8008: axl_hash_insert (hash, INT_TO_PTR (8), "ocho");
8009:
8010: /* check values stored */
8011: value = (const char *) axl_hash_get (hash, INT_TO_PTR (-1));
8012: if (! axl_cmp (value, "menos uno")) {
8013: printf ("Expected to find %s but found %s\n", "menos uno", value);
8014: return axl_false;
8015: }
8016:
8017: /* check values stored */
8018: value = (const char *) axl_hash_get (hash, INT_TO_PTR (8));
8019: if (! axl_cmp (value, "ocho")) {
8020: printf ("Expected to find %s but found %s\n", "ocho", value);
8021: return axl_false;
8022: }
8023:
8024: /* free hash */
8025: axl_hash_free (hash);
8026:
8027: /* terminated test */
8028: return axl_true;
8029: }
8030:
8031: axlPointer test_02_01_copy_key (axlPointer key, axlDestroyFunc key_destroy, axlPointer data, axlDestroyFunc data_destroy)
8032: {
8033: if (key_destroy == NULL)
8034: return key;
8035:
8036: return axl_strdup (key);
8037: }
8038:
8039: axlPointer test_02_01_copy_value (axlPointer key, axlDestroyFunc key_destroy, axlPointer data, axlDestroyFunc data_destroy)
8040: {
8041: if (data_destroy == NULL)
8042: return data;
8043:
8044: return axl_strdup (data);
8045: }
8046:
8047:
8048: /**
8049: * @brief Checks normal hash operations.
8050: *
8051: *
8052: * @return \ref axl_true if it was ok.
8053: */
8054: axl_bool test_02_01 (void)
8055: {
8056: axlHash * hash;
8057: axlHash * hash2;
8058: axlPointer * data;
8059:
8060: /* create a hash */
8061: hash = axl_hash_new (axl_hash_string, axl_hash_equal_string);
8062:
8063: /* perform operations on empty state */
8064: if (axl_hash_exists (hash, "value")) {
8065: printf ("Found that the hash returns that item exist but it is empty\n");
8066: return axl_false;
8067: }
8068:
8069: /* perform a remove operation */
8070: axl_hash_remove (hash, "value");
8071:
8072: /* get data associated */
8073: data = axl_hash_get (hash, "value");
8074: if (data != NULL) {
8075: printf ("Found that the hash returns that item exist but it is empty\n");
8076: return axl_false;
8077: }
8078:
8079: /* add items to the hash */
8080: axl_hash_insert_full (hash, "value", NULL, axl_strdup ("value"), axl_free);
8081: axl_hash_insert_full (hash, "value2", NULL, axl_strdup ("value2"), axl_free);
8082: axl_hash_insert_full (hash, "value3", NULL, axl_strdup ("value3"), axl_free);
8083:
8084: /* check items stored */
8085: test_02_02_check_key (hash, "value");
8086: test_02_02_check_key (hash, "value2");
8087: test_02_02_check_key (hash, "value3");
8088:
8089: /* copy the hash */
8090: hash2 = axl_hash_copy (hash, test_02_01_copy_key, test_02_01_copy_value);
8091:
8092: /* check items stored */
8093: test_02_02_check_key (hash2, "value");
8094: test_02_02_check_key (hash2, "value2");
8095: test_02_02_check_key (hash2, "value3");
8096:
8097:
8098: /* destroy the hash */
8099: axl_hash_free (hash);
8100:
8101: /* destroy the hash2 */
8102: axl_hash_free (hash2);
8103:
8104: return axl_true;
8105: }
8106:
8107: /**
8108: * @brief Test current libaxl hash implementation.
8109: *
8110: * @return axl_true if it works properly or axl_false if not.
8111: */
8112: axl_bool test_02_03 (void)
8113: {
8114: axlHash * hash;
8115:
8116: /* create the hash */
8117: hash = axl_hash_new (axl_hash_string, axl_hash_equal_string);
8118:
8119: axl_hash_insert (hash, "value", "value");
8120: axl_hash_insert (hash, "value", "value");
8121: axl_hash_insert (hash, "value", "value");
8122: axl_hash_insert (hash, "value", "value");
8123: axl_hash_insert (hash, "value", "value");
8124: axl_hash_insert (hash, "value", "value");
8125: axl_hash_insert (hash, "value", "value");
8126: axl_hash_insert (hash, "value", "value");
8127: axl_hash_insert (hash, "value", "value");
8128: axl_hash_insert (hash, "value", "value");
8129:
8130: axl_hash_show_status (hash);
8131:
8132: if (axl_hash_items (hash) != 1) {
8133: printf ("ERROR: expected to find a hash size of 1 but found: %d\n",
8134: axl_hash_items (hash));
8135: return axl_false;
8136: }
8137:
8138: /* free the hash */
8139: axl_hash_free (hash);
8140:
8141: return axl_true;
8142: }
8143:
8144: axl_bool test_02_03a (void)
8145: {
8146: axlHash * hash;
8147:
8148: hash = axl_hash_new (axl_hash_int, axl_hash_equal_int);
8149:
8150: axl_hash_insert (hash, INT_TO_PTR (10), INT_TO_PTR (10));
8151:
8152: axl_hash_insert (hash, INT_TO_PTR (1032), INT_TO_PTR (1032));
8153:
8154: axl_hash_insert (hash, INT_TO_PTR (1048), INT_TO_PTR (1048));
8155:
8156: axl_hash_insert (hash, INT_TO_PTR (10320), INT_TO_PTR (10320));
8157:
8158: /* remove */
8159: if (axl_hash_remove (hash, INT_TO_PTR (10321))) {
8160: printf ("ERROR: expected to not find a true result from removing an item that do not exists..");
8161: return axl_false;
8162: }
8163:
8164: if (! axl_hash_remove (hash, INT_TO_PTR (10320))) {
8165: printf ("ERROR: expected to find a true result from removing an item that do not exists..");
8166: return axl_false;
8167: }
8168:
8169: if (axl_hash_remove (hash, INT_TO_PTR (10320))) {
8170: printf ("ERROR: expected to NOT find a true result from removing an item that do not exists..");
8171: return axl_false;
8172: }
8173:
8174: if (! axl_hash_remove (hash, INT_TO_PTR (1048))) {
8175: printf ("ERROR: expected to find a true result from removing an item that do not exists..");
8176: return axl_false;
8177: }
8178:
8179: if (axl_hash_remove (hash, INT_TO_PTR (1048))) {
8180: printf ("ERROR: expected to NOT find a true result from removing an item that do not exists..");
8181: return axl_false;
8182: }
8183:
8184: if (! axl_hash_remove (hash, INT_TO_PTR (1032))) {
8185: printf ("ERROR: expected to find a true result from removing an item that do not exists..");
8186: return axl_false;
8187: }
8188:
8189: if (axl_hash_remove (hash, INT_TO_PTR (1032))) {
8190: printf ("ERROR: expected to NOT find a true result from removing an item that do not exists..");
8191: return axl_false;
8192: }
8193:
8194: if (! axl_hash_remove (hash, INT_TO_PTR (10))) {
8195: printf ("ERROR: expected to find a true result from removing an item that do not exists..");
8196: return axl_false;
8197: }
8198:
8199: if (axl_hash_remove (hash, INT_TO_PTR (10))) {
8200: printf ("ERROR: expected to NOT find a true result from removing an item that do not exists..");
8201: return axl_false;
8202: }
8203:
8204: axl_hash_free (hash);
8205:
8206: return axl_true;
8207: }
8208:
8209: void show_item_test_02_04 (axlPointer key, axlPointer data)
8210: {
8211: __axl_log ("hash-test", AXL_LEVEL_DEBUG, " %s -> %s", (char *) key, (char *) data);
8212: }
8213:
8214: axl_bool test_02_04 (void)
8215: {
8216: axlHash * hash;
8217:
8218: /* create the hash */
8219: hash = axl_hash_new (axl_hash_string, axl_hash_equal_string);
8220:
8221: /* insert data */
8222: axl_hash_insert (hash, "sword", "sword");
8223: axl_hash_insert (hash, "mace", "mace");
8224: axl_hash_insert (hash, "axe", "axe");
8225: axl_hash_insert (hash, "arrow", "arrow");
8226: axl_hash_insert (hash, "shield", "shield");
8227: axl_hash_insert (hash, "bag", "bag");
8228: axl_hash_insert (hash, "stone", "stone");
8229: axl_hash_insert (hash, "key", "key");
8230: axl_hash_insert (hash, "skull", "skull");
8231: axl_hash_insert (hash, "jar", "jar");
8232: axl_hash_insert (hash, "bottle", "bottle");
8233: axl_hash_insert (hash, "fairy", "fairy");
8234: axl_hash_insert (hash, "potion", "potion");
8235: axl_hash_insert (hash, "water", "water");
8236: axl_hash_insert (hash, "spoon", "spoon");
8237: axl_hash_insert (hash, "book", "book");
8238: axl_hash_insert (hash, "spear", "spear");
8239: axl_hash_insert (hash, "dagger", "dagger");
8240: axl_hash_insert (hash, "katana", "katana");
8241: axl_hash_insert (hash, "helmet", "helmet");
8242: axl_hash_insert (hash, "chain", "chain");
8243: axl_hash_insert (hash, "halberd", "halberd");
8244: axl_hash_insert (hash, "pipe", "pipe");
8245: axl_hash_insert (hash, "hat", "hat");
8246: axl_hash_insert (hash, "eyeofnewt", "eyeofnewt");
8247: axl_hash_insert (hash, "soup", "soup");
8248: axl_hash_insert (hash, "wolfbane", "wolfbane");
8249: axl_hash_insert (hash, "instantcoffee", "instantcoffee");
8250: axl_hash_insert (hash, "bugspray", "bugspray");
8251: axl_hash_insert (hash, "flint", "flint");
8252: axl_hash_insert (hash, "soap", "soap");
8253: axl_hash_insert (hash, "bones", "bones");
8254: axl_hash_insert (hash, "orb", "orb");
8255: axl_hash_insert (hash, "gold", "gold");
8256: axl_hash_insert (hash, "silver", "silver");
8257: axl_hash_insert (hash, "wine", "wine");
8258: axl_hash_insert (hash, "bread", "bread");
8259:
8260: axl_hash_show_status_full (hash, show_item_test_02_04);
8261:
8262: axl_hash_free (hash);
8263:
8264: return axl_true;
8265:
8266: }
8267:
8268: axl_bool test_02_04_1 (void)
8269: {
8270: axlHash * hash;
8271: int iterator;
8272:
8273: hash = axl_hash_new (axl_hash_string, axl_hash_equal_string);
8274: iterator = 0;
8275: while (iterator < 1000) {
8276: /* check the value do not exists */
8277: if (axl_hash_exists (hash, "status-ok")) {
8278: printf ("ERROR (1): expected to not find key value 'status-ok', but found..\n");
8279: return axl_false;
8280: } /* end if */
8281:
8282: axl_hash_insert_full (hash, "status-ok", NULL, INT_TO_PTR (1), NULL);
8283:
8284: if (! axl_hash_exists (hash, "status-ok")) {
8285: printf ("ERROR (2): expected to find key value 'status-ok', but not found..\n");
8286: return axl_false;
8287: } /* end if */
8288:
8289: axl_hash_remove (hash, "status-ok");
8290:
8291: if (axl_hash_exists (hash, "status-ok")) {
8292: printf ("ERROR (3): expected to NOT find key value 'status-ok', but found..\n");
8293: return axl_false;
8294: } /* end if */
8295:
8296: /* next iterator */
8297: iterator++;
8298: } /* end while */
8299:
8300: printf ("Test 02-04-1: capacity %d, items stored: %d\n", axl_hash_capacity (hash), axl_hash_items (hash));
8301:
8302: /* now store 10 items */
8303: axl_hash_insert (hash, "value", INT_TO_PTR (1));
8304: axl_hash_insert (hash, "value2", INT_TO_PTR (2));
8305: axl_hash_insert (hash, "value3", INT_TO_PTR (3));
8306: axl_hash_insert (hash, "value4", INT_TO_PTR (4));
8307: axl_hash_insert (hash, "value5", INT_TO_PTR (5));
8308: axl_hash_insert (hash, "value6", INT_TO_PTR (6));
8309: axl_hash_insert (hash, "value7", INT_TO_PTR (7));
8310: axl_hash_insert (hash, "value8", INT_TO_PTR (8));
8311: axl_hash_insert (hash, "value9", INT_TO_PTR (9));
8312: axl_hash_insert (hash, "value10", INT_TO_PTR (10));
8313:
8314: /* check capacity */
8315: printf ("Test 02-04-1: Items stored %d\n", axl_hash_items (hash));
8316: if (axl_hash_items (hash) != 10) {
8317: printf ("ERROR (3): expected to find 10 items but found %d..\n",
8318: axl_hash_items (hash));
8319: return axl_false;
8320: } /* end if */
8321:
8322: /* check here available internal store */
8323: if (__axl_hash_spare_max (hash) != 9 || __axl_hash_spare_next (hash) != -1) {
8324: printf ("ERROR (5): expected to find either max spare 9 or next spare -1 but found %d and %d..\n",
8325: __axl_hash_spare_max (hash), __axl_hash_spare_next (hash));
8326: return axl_false;
8327: } /* end if */
8328:
8329: /* remove items */
8330: printf ("Test 02-04-1: Calling to remove items..\n");
8331: axl_hash_remove (hash, "value");
8332: axl_hash_remove (hash, "value2");
8333: axl_hash_remove (hash, "value3");
8334: axl_hash_remove (hash, "value4");
8335: axl_hash_remove (hash, "value5");
8336: axl_hash_remove (hash, "value6");
8337: axl_hash_remove (hash, "value7");
8338: axl_hash_remove (hash, "value8");
8339: axl_hash_remove (hash, "value9");
8340: axl_hash_remove (hash, "value10");
8341:
8342: if (axl_hash_items (hash) != 0) {
8343: printf ("ERROR (4): expected to find 0 items but found %d..\n",
8344: axl_hash_items (hash));
8345: return axl_false;
8346: } /* end if */
8347:
8348: /* check here available internal store */
8349: if (__axl_hash_spare_max (hash) != 9 || __axl_hash_spare_next (hash) != 9) {
8350: printf ("ERROR (5): expected to find either max spare 9 or next spare 9 but found %d and %d..\n",
8351: __axl_hash_spare_max (hash), __axl_hash_spare_next (hash));
8352: return axl_false;
8353: } /* end if */
8354:
8355: /* check capacity */
8356: printf ("Test 02-04-1: Items stored %d\n", axl_hash_items (hash));
8357:
8358: /* insert lot of items */
8359: axl_hash_insert (hash, "value", INT_TO_PTR (1));
8360: axl_hash_insert (hash, "value2", INT_TO_PTR (2));
8361: axl_hash_insert (hash, "value3", INT_TO_PTR (3));
8362: axl_hash_insert (hash, "value4", INT_TO_PTR (4));
8363: axl_hash_insert (hash, "value5", INT_TO_PTR (5));
8364: axl_hash_insert (hash, "value6", INT_TO_PTR (6));
8365: axl_hash_insert (hash, "value7", INT_TO_PTR (7));
8366: axl_hash_insert (hash, "value8", INT_TO_PTR (8));
8367: axl_hash_insert (hash, "value9", INT_TO_PTR (9));
8368: axl_hash_insert (hash, "value10", INT_TO_PTR (10));
8369: axl_hash_insert (hash, "value11", INT_TO_PTR (1));
8370: axl_hash_insert (hash, "value12", INT_TO_PTR (2));
8371: axl_hash_insert (hash, "value13", INT_TO_PTR (3));
8372: axl_hash_insert (hash, "value14", INT_TO_PTR (4));
8373: axl_hash_insert (hash, "value15", INT_TO_PTR (5));
8374: axl_hash_insert (hash, "value16", INT_TO_PTR (6));
8375: axl_hash_insert (hash, "value17", INT_TO_PTR (7));
8376: axl_hash_insert (hash, "value18", INT_TO_PTR (8));
8377: axl_hash_insert (hash, "value19", INT_TO_PTR (9));
8378: axl_hash_insert (hash, "value20", INT_TO_PTR (10));
8379:
8380: /* check here available internal store */
8381: printf ("Test 02-04-1: Max spares %d, next spares %d..\n",
8382: __axl_hash_spare_max (hash), __axl_hash_spare_next (hash));
8383: if (__axl_hash_spare_max (hash) != 9 || __axl_hash_spare_next (hash) != -1) {
8384: printf ("ERROR (5): expected to find either max spare 9 or next spare -1 but found %d and %d..\n",
8385: __axl_hash_spare_max (hash), __axl_hash_spare_next (hash));
8386: return axl_false;
8387: } /* end if */
8388:
8389: /* insert lot of items */
8390: axl_hash_remove (hash, "value");
8391: axl_hash_remove (hash, "value2");
8392: axl_hash_remove (hash, "value3");
8393: axl_hash_remove (hash, "value4");
8394: axl_hash_remove (hash, "value5");
8395: axl_hash_remove (hash, "value6");
8396: axl_hash_remove (hash, "value7");
8397: axl_hash_remove (hash, "value8");
8398: axl_hash_remove (hash, "value9");
8399: axl_hash_remove (hash, "value10");
8400: axl_hash_remove (hash, "value11");
8401: axl_hash_remove (hash, "value12");
8402: axl_hash_remove (hash, "value13");
8403: axl_hash_remove (hash, "value14");
8404: axl_hash_remove (hash, "value15");
8405: axl_hash_remove (hash, "value16");
8406: axl_hash_remove (hash, "value17");
8407: axl_hash_remove (hash, "value18");
8408: axl_hash_remove (hash, "value19");
8409: axl_hash_remove (hash, "value20");
8410:
8411: printf ("Test 02-04-1: Max spares %d, next spares %d..\n",
8412: __axl_hash_spare_max (hash), __axl_hash_spare_next (hash));
8413:
8414: if (__axl_hash_spare_max (hash) != 27 || __axl_hash_spare_next (hash) != 19) {
8415: printf ("ERROR (6): expected to find either max spare 27 or next spare 19 but found %d and %d..\n",
8416: __axl_hash_spare_max (hash), __axl_hash_spare_next (hash));
8417: return axl_false;
8418: } /* end if */
8419:
8420: /* insert lot of items */
8421: axl_hash_insert (hash, "value", INT_TO_PTR (1));
8422: axl_hash_insert (hash, "value2", INT_TO_PTR (2));
8423: axl_hash_insert (hash, "value3", INT_TO_PTR (3));
8424: axl_hash_insert (hash, "value4", INT_TO_PTR (4));
8425: axl_hash_insert (hash, "value5", INT_TO_PTR (5));
8426: axl_hash_insert (hash, "value6", INT_TO_PTR (6));
8427: axl_hash_insert (hash, "value7", INT_TO_PTR (7));
8428: axl_hash_insert (hash, "value8", INT_TO_PTR (8));
8429: axl_hash_insert (hash, "value9", INT_TO_PTR (9));
8430: axl_hash_insert (hash, "value10", INT_TO_PTR (10));
8431: axl_hash_insert (hash, "value11", INT_TO_PTR (1));
8432: axl_hash_insert (hash, "value12", INT_TO_PTR (2));
8433: axl_hash_insert (hash, "value13", INT_TO_PTR (3));
8434: axl_hash_insert (hash, "value14", INT_TO_PTR (4));
8435: axl_hash_insert (hash, "value15", INT_TO_PTR (5));
8436: axl_hash_insert (hash, "value16", INT_TO_PTR (6));
8437: axl_hash_insert (hash, "value17", INT_TO_PTR (7));
8438: axl_hash_insert (hash, "value18", INT_TO_PTR (8));
8439: axl_hash_insert (hash, "value19", INT_TO_PTR (9));
8440: axl_hash_insert (hash, "value20", INT_TO_PTR (10));
8441:
8442: printf ("Test 02-04-1: Max spares %d, next spares %d..\n",
8443: __axl_hash_spare_max (hash), __axl_hash_spare_next (hash));
8444:
8445: if (__axl_hash_spare_max (hash) != 27 || __axl_hash_spare_next (hash) != -1) {
8446: printf ("ERROR (6): expected to find either max spare 27 or next spare 19 but found %d and %d..\n",
8447: __axl_hash_spare_max (hash), __axl_hash_spare_next (hash));
8448: return axl_false;
8449: } /* end if */
8450:
8451: /* insert lot of items */
8452: axl_hash_remove (hash, "value");
8453: axl_hash_remove (hash, "value2");
8454: axl_hash_remove (hash, "value3");
8455: axl_hash_remove (hash, "value4");
8456: axl_hash_remove (hash, "value5");
8457: axl_hash_remove (hash, "value6");
8458: axl_hash_remove (hash, "value7");
8459: axl_hash_remove (hash, "value8");
8460: axl_hash_remove (hash, "value9");
8461: axl_hash_remove (hash, "value10");
8462: axl_hash_remove (hash, "value11");
8463: axl_hash_remove (hash, "value12");
8464: axl_hash_remove (hash, "value13");
8465: axl_hash_remove (hash, "value14");
8466: axl_hash_remove (hash, "value15");
8467: axl_hash_remove (hash, "value16");
8468: axl_hash_remove (hash, "value17");
8469: axl_hash_remove (hash, "value18");
8470: axl_hash_remove (hash, "value19");
8471: axl_hash_remove (hash, "value20");
8472:
8473: if (__axl_hash_spare_max (hash) != 27 || __axl_hash_spare_next (hash) != 19) {
8474: printf ("ERROR (7): expected to find either max spare 27 or next spare 19 but found %d and %d..\n",
8475: __axl_hash_spare_max (hash), __axl_hash_spare_next (hash));
8476: return axl_false;
8477: } /* end if */
8478:
8479: axl_hash_free (hash);
8480:
8481: return axl_true;
8482: }
8483:
8484: axl_bool test_02_05 (void)
8485: {
8486: axlHash * hash;
8487: axlHashCursor * cursor;
8488: int iterator;
8489: char * key, * value;
8490:
8491: /* create the hash */
8492: hash = axl_hash_new (axl_hash_string, axl_hash_equal_string);
8493:
8494: /* insert data */
8495: axl_hash_insert (hash, "sword", "sword");
8496: axl_hash_insert (hash, "mace", "mace");
8497: axl_hash_insert (hash, "axe", "axe");
8498: axl_hash_insert (hash, "arrow", "arrow");
8499: axl_hash_insert (hash, "shield", "shield");
8500: axl_hash_insert (hash, "bag", "bag");
8501: axl_hash_insert (hash, "stone", "stone");
8502: axl_hash_insert (hash, "key", "key");
8503: axl_hash_insert (hash, "skull", "skull");
8504: axl_hash_insert (hash, "jar", "jar");
8505: axl_hash_insert (hash, "bottle", "bottle");
8506: axl_hash_insert (hash, "fairy", "fairy");
8507: axl_hash_insert (hash, "potion", "potion");
8508: axl_hash_insert (hash, "water", "water");
8509: axl_hash_insert (hash, "spoon", "spoon");
8510: axl_hash_insert (hash, "book", "book");
8511: axl_hash_insert (hash, "spear", "spear");
8512: axl_hash_insert (hash, "dagger", "dagger");
8513: axl_hash_insert (hash, "katana", "katana");
8514: axl_hash_insert (hash, "helmet", "helmet");
8515: axl_hash_insert (hash, "chain", "chain");
8516: axl_hash_insert (hash, "halberd", "halberd");
8517: axl_hash_insert (hash, "pipe", "pipe");
8518: axl_hash_insert (hash, "hat", "hat");
8519: axl_hash_insert (hash, "eyeofnewt", "eyeofnewt");
8520: axl_hash_insert (hash, "soup", "soup");
8521: axl_hash_insert (hash, "wolfbane", "wolfbane");
8522: axl_hash_insert (hash, "instantcoffee", "instantcoffee");
8523: axl_hash_insert (hash, "bugspray", "bugspray");
8524: axl_hash_insert (hash, "flint", "flint");
8525: axl_hash_insert (hash, "soap", "soap");
8526: axl_hash_insert (hash, "bones", "bones");
8527: axl_hash_insert (hash, "orb", "orb");
8528: axl_hash_insert (hash, "gold", "gold");
8529: axl_hash_insert (hash, "silver", "silver");
8530: axl_hash_insert (hash, "wine", "wine");
8531: axl_hash_insert (hash, "bread", "bread");
8532:
8533: /* create a cursor */
8534: cursor = axl_hash_cursor_new (hash);
8535: iterator = 0;
8536: while (axl_hash_cursor_has_item (cursor)) {
8537: /* first item */
8538: if (! axl_cmp (axl_hash_cursor_get_key (cursor),
8539: axl_hash_cursor_get_value (cursor))) {
8540: printf ("error: supposed to find key and value equal (%s==%s), but not found..\n",
8541: (char*)axl_hash_cursor_get_key (cursor),
8542: (char*)axl_hash_cursor_get_value (cursor));
8543: return axl_false;
8544: } /* end if */
8545:
8546: /* get next */
8547: axl_hash_cursor_next (cursor);
8548:
8549: iterator++;
8550:
8551: if (iterator == 38) {
8552: printf ("error: found more items than actually expected..\n");
8553: return axl_false;
8554: }
8555: } /* end while */
8556:
8557: if (iterator != 37) {
8558: printf ("error: found more items than actually expected..\n");
8559: return axl_false;
8560: }
8561:
8562: iterator = 0;
8563: axl_hash_cursor_first (cursor);
8564: while (axl_hash_cursor_has_item (cursor)) {
8565: /* first item */
8566: if (! axl_cmp (axl_hash_cursor_get_key (cursor),
8567: axl_hash_cursor_get_value (cursor))) {
8568: printf ("error: supposed to find key and value equal (%s==%s), but not found..\n",
8569: (char*)axl_hash_cursor_get_key (cursor),
8570: (char*)axl_hash_cursor_get_value (cursor));
8571: return axl_false;
8572: } /* end if */
8573:
8574: iterator++;
8575:
8576: if (iterator < 37) {
8577: if (! axl_hash_cursor_has_next (cursor)) {
8578: printf ("error: expected to find next node on iterator (%d)\n", iterator);
8579: return axl_false;
8580: } /* end if */
8581: } /* end if */
8582:
8583: /* get next */
8584: axl_hash_cursor_next (cursor);
8585:
8586: if (iterator == 38) {
8587: printf ("error: found more items than actually expected..\n");
8588: return axl_false;
8589: }
8590: } /* end while */
8591:
8592: if (iterator != 37) {
8593: printf ("error: found different count of items than actually expected (%d != 37)..\n", iterator);
8594: return axl_false;
8595: }
8596:
8597: /* check last api */
8598: axl_hash_cursor_last (cursor);
8599: if (! axl_hash_cursor_has_item (cursor)) {
8600: printf ("error: expected to find last element defined..\n");
8601: return axl_false;
8602: }
8603:
8604: /* check last */
8605: if (! axl_cmp ("flint", axl_hash_cursor_get_key (cursor))) {
8606: printf ("error: expected to find last element \"flint\"=\"%s\"\n", (char*) axl_hash_cursor_get_key (cursor));
8607: return axl_false;
8608: }
8609:
8610:
8611: if (axl_hash_cursor_has_next (cursor)) {
8612: printf ("error: expected to not find next element defined..\n");
8613: return axl_false;
8614: } /* end if */
8615:
8616: axl_hash_cursor_first (cursor);
8617: while (axl_hash_cursor_has_item (cursor)) {
8618: /* first item */
8619: if (! axl_cmp (axl_hash_cursor_get_key (cursor),
8620: axl_hash_cursor_get_value (cursor))) {
8621: printf ("error: supposed to find key and value equal (%s==%s), but not found..\n",
8622: (char*)axl_hash_cursor_get_key (cursor),
8623: (char*)axl_hash_cursor_get_value (cursor));
8624: return axl_false;
8625: } /* end if */
8626:
8627: /* get value */
8628: key = axl_hash_cursor_get_key (cursor);
8629: value = axl_hash_cursor_get_value (cursor);
8630:
8631: /* check key to exists */
8632: if (! axl_hash_exists (axl_hash_cursor_hash (cursor), key)) {
8633: printf ("error: expected to find key defined=<%s>\n", key);
8634: return axl_false;
8635: }
8636:
8637: /* check value to exists */
8638: if (! axl_cmp (axl_hash_get (axl_hash_cursor_hash (cursor), key), value)) {
8639: printf ("error: expected to find value not found: <%s>!=<%s>\n",
8640: value, (char*) axl_hash_get (axl_hash_cursor_hash (cursor), key));
8641: return axl_false;
8642: } /* end if */
8643:
8644:
8645: /* remove items */
8646: axl_hash_cursor_remove (cursor);
8647:
8648: } /* end while */
8649:
8650: if (axl_hash_items (hash) != 0) {
8651: printf ("error: expected to find hash with 0 size (but found: %d)\n",
8652: axl_hash_items (hash));
8653: return axl_false;
8654: } /* end if */
8655:
8656: /* free cursor */
8657: axl_hash_cursor_free (cursor);
8658:
8659: /* free the hash */
8660: axl_hash_free (hash);
8661:
8662: /* now check the cursor with only one item */
8663: hash = axl_hash_new (axl_hash_string, axl_hash_equal_string);
8664: axl_hash_insert (hash, "12:BB:DD:8A:1D:E5:64:0C:7E:F5:EB:B3:21:C7:67:7E", "test");
8665: cursor = axl_hash_cursor_new (hash);
8666:
8667: iterator = 0;
8668: while (axl_hash_cursor_has_item (cursor) && iterator < 10) {
8669:
8670: axl_hash_cursor_get_value (cursor);
8671:
8672: /* get next cursor */
8673: axl_hash_cursor_next (cursor);
8674: iterator++;
8675: }
8676:
8677: if (iterator != 1) {
8678: printf ("Expected to find only one iteration inside the hash but the limit was found\n");
8679: return axl_false;
8680: }
8681:
8682: axl_hash_free (hash);
8683: axl_hash_cursor_free (cursor);
8684:
8685: /* test ok */
8686: return axl_true;
8687: }
8688:
8689: /**
8690: * @brief Allows to check current binary stack used by the library.
8691: *
8692: *
8693: * @return axl_true if tests are ok.
8694: */
8695: axl_bool test_02_06 (void)
8696: {
8697: axl_bool value;
8698: axlBinaryStack * bstack;
8699: int iterator;
8700:
8701: /* create a bstack */
8702: bstack = axl_binary_stack_new ();
8703:
8704: /* push 10 axl_true values */
8705: axl_binary_stack_push (bstack, axl_true);
8706: axl_binary_stack_push (bstack, axl_true);
8707: axl_binary_stack_push (bstack, axl_true);
8708: axl_binary_stack_push (bstack, axl_true);
8709: axl_binary_stack_push (bstack, axl_true);
8710:
8711: axl_binary_stack_push (bstack, axl_true);
8712: axl_binary_stack_push (bstack, axl_true);
8713: axl_binary_stack_push (bstack, axl_true);
8714: axl_binary_stack_push (bstack, axl_true);
8715: axl_binary_stack_push (bstack, axl_true);
8716:
8717: /* check count */
8718: if (axl_binary_stack_size (bstack) != 10) {
8719: printf ("Expected to find %d items but found: %d",
8720: 10, axl_binary_stack_size (bstack));
8721: return axl_false;
8722: } /* end if */
8723:
8724: /* push values */
8725:
8726: axl_binary_stack_push (bstack, axl_false);
8727: axl_binary_stack_push (bstack, axl_true);
8728: axl_binary_stack_push (bstack, axl_true);
8729:
8730: axl_binary_stack_push (bstack, axl_true);
8731: axl_binary_stack_push (bstack, axl_false);
8732: axl_binary_stack_push (bstack, axl_false);
8733:
8734: /* check count */
8735: if (axl_binary_stack_size (bstack) != 16) {
8736: printf ("Expected to find %d items but found: %d\n",
8737: 16, axl_binary_stack_size (bstack));
8738: return axl_false;
8739: } /* end if */
8740:
8741: /* pop data */
8742: value = axl_binary_stack_pop (bstack);
8743: if (value != axl_false) {
8744: printf ("Expected to find %d, but found %d (1)\n", axl_false, value);
8745: return axl_false;
8746: }
8747:
8748: value = axl_binary_stack_pop (bstack);
8749: if (value != axl_false) {
8750: printf ("Expected to find %d, but found %d (2)\n", axl_false, value);
8751: return axl_false;
8752: }
8753:
8754: value = axl_binary_stack_pop (bstack);
8755: if (value != axl_true) {
8756: printf ("Expected to find %d, but found %d (3)\n", axl_true, value);
8757: return axl_false;
8758: }
8759:
8760: value = axl_binary_stack_pop (bstack);
8761: if (value != axl_true) {
8762: printf ("Expected to find %d, but found %d (4)\n", axl_true, value);
8763: return axl_false;
8764: }
8765:
8766: value = axl_binary_stack_pop (bstack);
8767: if (value != axl_true) {
8768: printf ("Expected to find %d, but found %d (5)\n", axl_true, value);
8769: return axl_false;
8770: }
8771:
8772: value = axl_binary_stack_pop (bstack);
8773: if (value != axl_false) {
8774: printf ("Expected to find %d, but found %d (6)\n", axl_false, value);
8775: return axl_false;
8776: }
8777:
8778: /* check count */
8779: if (axl_binary_stack_size (bstack) != 10) {
8780: printf ("Expected to find %d items but found: %d\n",
8781: 10, axl_binary_stack_size (bstack));
8782: return axl_false;
8783: } /* end if */
8784:
8785: iterator = 0;
8786: while (iterator < 10) {
8787: /* get the value */
8788: value = axl_binary_stack_pop (bstack);
8789: if (value != axl_true) {
8790: printf ("Expected to find %d, but found %d (3)\n", axl_true, value);
8791: return axl_false;
8792: } /* end if */
8793:
8794: iterator++;
8795: } /* end while */
8796:
8797: /* check count */
8798: if (axl_binary_stack_size (bstack) != 0) {
8799: printf ("Expected to find %d items but found: %d\n",
8800: 0, axl_binary_stack_size (bstack));
8801: return axl_false;
8802: } /* end if */
8803:
8804: /* free binary stack */
8805: axl_binary_stack_free (bstack);
8806:
8807: return axl_true;
8808: }
8809:
8810: /**
8811: * Test01: Initial xml header checking.
8812: */
8813: int main (int argc, char ** argv)
8814: {
8815: axlError * error;
8816:
8817: printf ("** LibAxl: Another XML library (regression test).\n");
8818: printf ("** Copyright (C) 2008 Advanced Software Production Line, S.L.\n**\n");
8819: printf ("** Axl regression tests: version=%s\n**\n",
8820: VERSION);
8821: printf ("** To gather information about time performance you can use:\n**\n");
8822: printf ("** >> time ./test_01\n**\n");
8823: printf ("** To gather information about memory consumed (and leaks) use:\n**\n");
8824: printf ("** >> libtool --mode=execute valgrind --leak-check=yes --error-limit=no ./test_01\n**\n");
8825: printf ("**\n");
8826: printf ("** Report bugs to:\n**\n");
8827: printf ("** <axl@lists.aspl.es> Axl mailing list\n**\n");
8828:
8829:
8830: /* initialize axl library */
8831: if (! axl_init ()) {
8832: printf ("Unable to initialize Axl library\n");
8833: return -1;
8834: }
8835:
8836: /* DATA STRUCTURE TESTS */
8837: if (test_01_01 ()) {
8838: printf ("Test 01-01: LibAxl list implementation [ OK ]\n");
8839: }else {
8840: printf ("Test 01-01 ##: LibAxl list implementation [ FAILED ]\n");
8841: return -1;
8842: }
8843:
8844: if (test_01_02 ()) {
8845: printf ("Test 01-02: LibAxl FIFO implementation [ OK ]\n");
8846: }else {
8847: printf ("Test 01-02: LibAxl list implementation [ FAILED ]\n");
8848: return -1;
8849: }
8850:
8851: if (test_01_03 ()) {
8852: printf ("Test 01-03: LibAxl string functions [ OK ]\n");
8853: }else {
8854: printf ("Test 01-03: LibAxl string functions [ FAILED ]\n");
8855: return -1;
8856: }
8857:
8858: if (test_01_04 ()) {
8859: printf ("Test 01-04: LibAxl list implementation (II) [ OK ]\n");
8860: }else {
8861: printf ("Test 01-04: LibAxl list implementation (II) [ FAILED ]\n");
8862: return -1;
8863: }
8864:
8865: if (test_01_04_a ()) {
8866: printf ("Test 01-04-a: LibAxl list implementation (III) [ OK ]\n");
8867: }else {
8868: printf ("Test 01-04-a: LibAxl list implementation (III) [ FAILED ]\n");
8869: return -1;
8870: }
8871:
8872: if (test_01_05 ()) {
8873: printf ("Test 01-05: LibAxl error reporting [ OK ]\n");
8874: }else {
8875: printf ("Test 01-05: LibAxl error reporting [ FAILED ]\n");
8876: return -1;
8877: }
8878:
8879: /* HASH IMPLEMENTATION CHECKS */
8880: if (test_02_01 ()) {
8881: printf ("Test 02-01: LibAxl hash implementation [ OK ]\n");
8882: }else {
8883: printf ("Test 02-01: LibAxl hash implementation [ FAILEDp ]\n");
8884: return -1;
8885: }
8886:
8887: if (test_02_02 ()) {
8888: printf ("Test 02-02: LibAxl hash implementation (lookup) [ OK ]\n");
8889: }else {
8890: printf ("Test 02-02: LibAxl hash implementation (lookup) [ FAILED ]\n");
8891: return -1;
8892: }
8893:
8894: if (test_02_03 ()) {
8895: printf ("Test 02-03: LibAxl hash implementation (replace) [ OK ]\n");
8896: }else {
8897: printf ("Test 02-03: LibAxl hash implementation (replace) [ FAILED ]\n");
8898: return -1;
8899: }
8900:
8901: if (test_02_03a ()) {
8902: printf ("Test 02-03-a: LibAxl hash remove notification [ OK ]\n");
8903: }else {
8904: printf ("Test 02-03-a: LibAxl hash remove notification [ FAILED ]\n");
8905: return -1;
8906: }
8907:
8908: if (test_02_04 ()) {
8909: printf ("Test 02-04: LibAxl hash implementation (remove) [ OK ]\n");
8910: }else {
8911: printf ("Test 02-04: LibAxl hash implementation (remove) [ FAILED ]\n");
8912: return -1;
8913: }
8914:
8915: if (test_02_04_1 ()) {
8916: printf ("Test 02-04-1: LibAxl hash implementation (insert-remove cycle) [ OK ]\n");
8917: }else {
8918: printf ("Test 02-04-1: LibAxl hash implementation (insert-remove cycle) [ FAILED ]\n");
8919: return -1;
8920: }
8921:
8922: if (test_02_05 ()) {
8923: printf ("Test 02-05: LibAxl hash cursor [ OK ]\n");
8924: }else {
8925: printf ("Test 02-05: LibAxl hash cursor [ FAILED ]\n");
8926: return -1;
8927: }
8928:
8929: /* binary stack checks */
8930: if (test_02_06 ()) {
8931: printf ("Test 02-06: LibAxl binary stack [ OK ]\n");
8932: }else {
8933: printf ("Test 02-06: LibAxl binary stack [ FAILED ]\n");
8934: return -1;
8935: }
8936:
8937: /* LIBRARY TESTS */
8938: if (test_01 (&error))
8939: printf ("Test 01: basic xml parsing [ OK ]\n");
8940: else {
8941: printf ("Test 01: basic xml parsing [ FAILED ]\n (code: %d) %s\n",
8942: axl_error_get_code (error), axl_error_get (error));
8943: axl_error_free (error);
8944: return -1;
8945: }
8946:
8947: if (test_01a (&error)) {
8948: printf ("Test 01-a: Axl Stream boundary checks [ OK ]\n");
8949: } else {
8950: printf ("Test 01-a: Axl Stream boundary checks [ FAILED ]\n (CODE: %d) %s\n",
8951: axl_error_get_code (error), axl_error_get (error));
8952: axl_error_free (error);
8953: return -1;
8954: }
8955:
8956: if (test_01b (&error)) {
8957: printf ("Test 01-b: Basic XML parsing, XML document position [ OK ]\n");
8958: } else {
8959: printf ("Test 01-b: Basic XML parsing, XML document position [ FAILED ]\n (CODE: %d) %s\n",
8960: axl_error_get_code (error), axl_error_get (error));
8961: axl_error_free (error);
8962: return -1;
8963: }
8964:
8965: if (test_01c (&error)) {
8966: printf ("Test 01-c: Basic XML parsing, XML document traversing [ OK ]\n");
8967: } else {
8968: printf ("Test 01-c: Basic XML parsing, XML document traversing [ FAILED ]\n (CODE: %d) %s\n",
8969: axl_error_get_code (error), axl_error_get (error));
8970: axl_error_free (error);
8971: return -1;
8972: }
8973:
8974: if (test_01d (&error)) {
8975: printf ("Test 01-d: Basic XML parsing, node nth access [ OK ]\n");
8976: } else {
8977: printf ("Test 01-d: Basic XML parsing, node nth access [ FAILED ]\n (CODE: %d) %s\n",
8978: axl_error_get_code (error), axl_error_get (error));
8979: axl_error_free (error);
8980: return -1;
8981: }
8982:
8983: if (test_01e (&error)) {
8984: printf ("Test 01-e: Basic XML parsing, large content [ OK ]\n");
8985: } else {
8986: printf ("Test 01-e: Basic XML parsing, large content [ FAILED ]\n (CODE: %d) %s\n",
8987: axl_error_get_code (error), axl_error_get (error));
8988: axl_error_free (error);
8989: return -1;
8990: } /* end if */
8991:
8992: if (test_01f (&error)) {
8993: printf ("Test 01-f: Basic XML parsing, white space node content [ OK ]\n");
8994: } else {
8995: printf ("Test 01-f: Basic XML parsing, white space node content [ FAILED ]\n (CODE: %d) %s\n",
8996: axl_error_get_code (error), axl_error_get (error));
8997: axl_error_free (error);
8998: return -1;
8999: } /* end if */
9000:
9001: if (test_02 (&error))
9002: printf ("Test 02: basic xml error detection [ OK ]\n");
9003: else {
9004: printf ("Test 02: basic xml error detection [ FAILED ]\n (CODE: %d) %s\n",
9005: axl_error_get_code (error), axl_error_get (error));
9006: axl_error_free (error);
9007: return -1;
9008: }
9009:
9010: if (test_03 (&error))
9011: printf ("Test 03: complex xml error detection [ OK ]\n");
9012: else {
9013: printf ("Test 03: complex xml error detection [ FAILED ]\n (CODE: %d) %s\n",
9014: axl_error_get_code (error), axl_error_get (error));
9015: axl_error_free (error);
9016: return -1;
9017: }
9018:
9019: if (test_04 (&error))
9020: printf ("Test 04: complex xml parsing [ OK ]\n");
9021: else {
9022: printf ("Test 04: complex xml parsing [ FAILED ]\n (CODE: %d) %s\n",
9023: axl_error_get_code (error), axl_error_get (error));
9024: axl_error_free (error);
9025: return -1;
9026: }
9027:
9028: if (test_05 (&error))
9029: printf ("Test 05: DTD basic parsing [ OK ]\n");
9030: else {
9031: printf ("Test 05: DTD basic parsing [ FAILED ]\n (CODE: %d) %s\n",
9032: axl_error_get_code (error), axl_error_get (error));
9033: axl_error_free (error);
9034: return -1;
9035: }
9036:
9037: if (test_06 (&error))
9038: printf ("Test 06: DTD basic parsing (2) [ OK ]\n");
9039: else {
9040: printf ("Test 06: DTD basic parsing (2) [ FAILED ]\n (CODE: %d) %s\n",
9041: axl_error_get_code (error), axl_error_get (error));
9042: axl_error_free (error);
9043: return -1;
9044: }
9045:
9046: if (test_07 (&error))
9047: printf ("Test 07: DTD validation (I) [ OK ]\n");
9048: else {
9049: printf ("Test 07: DTD validation (I) [ FAILED ]\n (CODE: %d) %s\n",
9050: axl_error_get_code (error), axl_error_get (error));
9051: axl_error_free (error);
9052: return -1;
9053: }
9054:
9055: if (test_08 (&error))
9056: printf ("Test 08: Large XML file loading [ OK ]\n");
9057: else {
9058: printf ("Test 08: Large XML file loading [ FAILED ]\n (CODE: %d) %s\n",
9059: axl_error_get_code (error), axl_error_get (error));
9060: axl_error_free (error);
9061: return -1;
9062: }
9063:
9064:
9065:
9066: if (test_09 (&error))
9067: printf ("Test 09: Complex DTD validation [ OK ]\n");
9068: else {
9069: printf ("Test 09: Complex DTD validation [ FAILED ]\n (CODE: %d) %s\n",
9070: axl_error_get_code (error), axl_error_get (error));
9071: axl_error_free (error);
9072: return -1;
9073: }
9074:
9075:
9076: if (test_10 (&error))
9077: printf ("Test 10: Complex DTD validation (II) [ OK ]\n");
9078: else {
9079: printf ("Test 10: Complex DTD validation (II) [ FAILED ]\n (CODE: %d) %s\n",
9080: axl_error_get_code (error), axl_error_get (error));
9081: axl_error_free (error);
9082: return -1;
9083: }
9084:
9085: if (test_11 (&error))
9086: printf ("Test 11: Complex DTD validation (III) [ OK ]\n");
9087: else {
9088: printf ("Test 11: Complex DTD validation (III) [ FAILED ]\n (CODE: %d) %s\n",
9089: axl_error_get_code (error), axl_error_get (error));
9090: axl_error_free (error);
9091: return -1;
9092: }
9093:
9094: if (test_12 (&error))
9095: printf ("Test 12: Complex DTD validation (IV) [ OK ]\n");
9096: else {
9097: printf ("Test 12: Complex DTD validation (IV) [ FAILED ]\n (CODE: %d) %s\n",
9098: axl_error_get_code (error), axl_error_get (error));
9099: axl_error_free (error);
9100: return -1;
9101: }
9102:
9103: if (test_13 (&error))
9104: printf ("Test 13: XML memory dumping [ OK ]\n");
9105: else {
9106: printf ("Test 13: XML memory dumping [ FAILED ]\n (CODE: %d) %s\n",
9107: axl_error_get_code (error), axl_error_get (error));
9108: axl_error_free (error);
9109: return -1;
9110: }
9111:
9112: if (test_14 (&error)) {
9113: printf ("Test 14: quotation and escape sequences (&,',\",<,>) [ OK ]\n");
9114: } else {
9115: printf ("Test 14: quotation and escape sequences (&,',\",<,>) [ FAILED ]\n (CODE: %d) %s\n",
9116: axl_error_get_code (error), axl_error_get (error));
9117: axl_error_free (error);
9118: return -1;
9119: }
9120:
9121: if (test_15 (&error)) {
9122: printf ("Test 15: DTD validation fail checks (25/04/2006) [ OK ]\n");
9123: } else {
9124: printf ("Test 15: DTD validation fail checks (25/04/2006) [ FAILED ]\n (CODE: %d) %s\n",
9125: axl_error_get_code (error), axl_error_get (error));
9126: axl_error_free (error);
9127: return -1;
9128: }
9129:
9130:
9131: if (test_16 (&error)) {
9132: printf ("Test 16: DTD validation fail checks (03/05/2006) [ OK ]\n");
9133: } else {
9134: printf ("Test 16: DTD validation fail checks (03/05/2006) [ FAILED ]\n (CODE: %d) %s\n",
9135: axl_error_get_code (error), axl_error_get (error));
9136: axl_error_free (error);
9137: return -1;
9138: }
9139:
9140: if (test_17 (&error)) {
9141: printf ("Test 17: DTD validation fail checks (02/07/2006) [ OK ]\n");
9142: } else {
9143: printf ("Test 17: DTD validation fail checks (02/07/2006) [ FAILED ]\n (CODE: %d) %s\n",
9144: axl_error_get_code (error), axl_error_get (error));
9145: axl_error_free (error);
9146: return -1;
9147: }
9148:
9149: if (test_18 (&error)) {
9150: printf ("Test 18: DTD ENTITY support [ OK ]\n");
9151: } else {
9152: printf ("Test 18: DTD ENTITY support [ FAILED ]\n (CODE: %d) %s\n",
9153: axl_error_get_code (error), axl_error_get (error));
9154: axl_error_free (error);
9155: return -1;
9156: }
9157:
9158: if (test_19 (&error)) {
9159: printf ("Test 19: Axl document node replacing [ OK ]\n");
9160: } else {
9161: printf ("Test 19: Axl document node replacing [ FAILED ]\n (CODE: %d) %s\n",
9162: axl_error_get_code (error), axl_error_get (error));
9163: axl_error_free (error);
9164: return -1;
9165: }
9166:
9167:
9168: if (test_20 (&error)) {
9169: printf ("Test 20: Axl node copy and anotation data [ OK ]\n");
9170: } else {
9171: printf ("Test 20: Axl node copy and anotation data [ FAILED ]\n (CODE: %d) %s\n",
9172: axl_error_get_code (error), axl_error_get (error));
9173: axl_error_free (error);
9174: return -1;
9175: }
9176:
9177: if (test_20b (&error)) {
9178: printf ("Test 20b: Axl node copy 2 [ OK ]\n");
9179: } else {
9180: printf ("Test 20b: Axl node copy 2 [ FAILED ]\n (CODE: %d) %s\n",
9181: axl_error_get_code (error), axl_error_get (error));
9182: axl_error_free (error);
9183: return -1;
9184: }
9185:
9186: if (test_21 (&error)) {
9187: printf ("Test 21: Axl node mixed content [ OK ]\n");
9188: } else {
9189: printf ("Test 21: Axl node mixed content [ FAILED ]\n (CODE: %d) %s\n",
9190: axl_error_get_code (error), axl_error_get (error));
9191: axl_error_free (error);
9192: return -1;
9193: }
9194:
9195: if (test_22 (&error)) {
9196: printf ("Test 22: Axl node attributes [ OK ]\n");
9197: } else {
9198: printf ("Test 22: Axl node attributes [ FAILED ]\n (CODE: %d) %s\n",
9199: axl_error_get_code (error), axl_error_get (error));
9200: axl_error_free (error);
9201: return -1;
9202: }
9203:
9204: if (test_23 (&error)) {
9205: printf ("Test 23: Axl item modification [ OK ]\n");
9206: } else {
9207: printf ("Test 23: Axl item modification [ FAILED ]\n (CODE: %d) %s\n",
9208: axl_error_get_code (error), axl_error_get (error));
9209: axl_error_free (error);
9210: return -1;
9211: }
9212:
9213: if (test_24 (&error)) {
9214: printf ("Test 24: Invalid sequences detection [ OK ]\n");
9215: }else {
9216: printf ("Test 24: Invalid sequences detection [ FAILED ]\n (CODE: %d) %s\n",
9217: axl_error_get_code (error), axl_error_get (error));
9218: axl_error_free (error);
9219: return -1;
9220: }
9221:
9222: if (test_25 (&error)) {
9223: printf ("Test 25: Lookup functions [ OK ]\n");
9224: }else {
9225: printf ("Test 25: Lookup [ FAILED ]\n (CODE: %d) %s\n",
9226: axl_error_get_code (error), axl_error_get (error));
9227: axl_error_free (error);
9228: return -1;
9229: }
9230:
9231: #ifdef AXL_NS_SUPPORT
9232: if (test_26 (&error)) {
9233: printf ("Test 26: Namespace support (basic) [ OK ]\n");
9234: }else {
9235: printf ("Test 26: Namespace support (basic) [ FAILED ]\n (CODE: %d) %s\n",
9236: axl_error_get_code (error), axl_error_get (error));
9237: axl_error_free (error);
9238: return -1;
9239: }
9240:
9241: if (test_27 (&error)) {
9242: printf ("Test 27: Namespace support [ OK ]\n");
9243: }else {
9244: printf ("Test 27: Namespace support [ FAILED ]\n (CODE: %d) %s\n",
9245: axl_error_get_code (error), axl_error_get (error));
9246: axl_error_free (error);
9247: return -1;
9248: }
9249:
9250: if (test_28 (&error)) {
9251: printf ("Test 28: Namespace defaulting support [ OK ]\n");
9252: }else {
9253: printf ("Test 28: Namespace defaulting support [ FAILED ]\n (CODE: %d) %s\n",
9254: axl_error_get_code (error), axl_error_get (error));
9255: axl_error_free (error);
9256: return -1;
9257: }
9258:
9259: if (test_29 (&error)) {
9260: printf ("Test 29: Namespace lookup support [ OK ]\n");
9261: }else {
9262: printf ("Test 29: Namespace lookup support [ FAILED ]\n (CODE: %d) %s\n",
9263: axl_error_get_code (error), axl_error_get (error));
9264: axl_error_free (error);
9265: return -1;
9266: }
9267:
9268: #endif /* end #ifdef AXL_NS_SUPPORT */
9269:
9270: if (test_30 (&error)) {
9271: printf ("Test 30: DTD attribute validation support [ OK ]\n");
9272: }else {
9273: printf ("Test 30: DTD attribute validation support [ FAILED ]\n (CODE: %d) %s\n",
9274: axl_error_get_code (error), axl_error_get (error));
9275: axl_error_free (error);
9276: return -1;
9277: }
9278:
9279: if (test_31 (&error)) {
9280: printf ("Test 31: DTD attribute validation (ID support) [ OK ]\n");
9281: }else {
9282: printf ("Test 31: DTD attribute validation (ID support) [ FAILED ]\n (CODE: %d) %s\n",
9283: axl_error_get_code (error), axl_error_get (error));
9284: axl_error_free (error);
9285: return -1;
9286: }
9287:
9288: if (test_32 (&error)) {
9289: printf ("Test 32: DTD attribute validation (IDREF support) [ OK ]\n");
9290: }else {
9291: printf ("Test 32: DTD attribute validation (IDREF support) [ FAILED ]\n (CODE: %d) %s\n",
9292: axl_error_get_code (error), axl_error_get (error));
9293: axl_error_free (error);
9294: return -1;
9295: }
9296:
9297: if (test_33 (&error)) {
9298: printf ("Test 33: Recursive root node replace [ OK ]\n");
9299: }else {
9300: printf ("Test 33: Recursive root node replace [ FAILED ]\n (CODE: %d) %s\n",
9301: axl_error_get_code (error), axl_error_get (error));
9302: axl_error_free (error);
9303: return -1;
9304: }
9305:
9306: if (test_34 (&error)) {
9307: printf ("Test 34: axl trim bug (19/06/2007) [ OK ]\n");
9308: }else {
9309: printf ("Test 34: axl trim bug (19/06/2007) [ FAILED ]\n (CODE: %d) %s\n",
9310: axl_error_get_code (error), axl_error_get (error));
9311: axl_error_free (error);
9312: return -1;
9313: }
9314:
9315: if (test_35 (&error)) {
9316: printf ("Test 35: axl_doc_parse_from_file bug (20/06/2007) [ OK ]\n");
9317: }else {
9318: printf ("Test 35: axl_doc_parse_from_file bug (20/06/2007) [ FAILED ]\n (CODE: %d) %s\n",
9319: axl_error_get_code (error), axl_error_get (error));
9320: axl_error_free (error);
9321: return -1;
9322: }
9323:
9324: if (test_36 (&error)) {
9325: printf ("Test 36: deattach root node [ OK ]\n");
9326: }else {
9327: printf ("Test 36: deattach root node [ FAILED ]\n (CODE: %d) %s\n",
9328: axl_error_get_code (error), axl_error_get (error));
9329: axl_error_free (error);
9330: return -1;
9331: }
9332:
9333: if (test_37 (&error)) {
9334: printf ("Test 37: clearing xml node content [ OK ]\n");
9335: }else {
9336: printf ("Test 37: clearing xml node content [ FAILED ]\n (CODE: %d) %s\n",
9337: axl_error_get_code (error), axl_error_get (error));
9338: axl_error_free (error);
9339: return -1;
9340: }
9341:
9342: if (test_38 (&error)) {
9343: printf ("Test 38: IDREF dtd error found (23/06/2007) [ OK ]\n");
9344: }else {
9345: printf ("Test 38: IDREF dtd error found (23/06/2007) [ FAILED ]\n (CODE: %d) %s\n",
9346: axl_error_get_code (error), axl_error_get (error));
9347: axl_error_free (error);
9348: return -1;
9349: }
9350:
9351: if (test_39 (&error)) {
9352: printf ("Test 39: Inline dtd support [ OK ]\n");
9353: }else {
9354: printf ("Test 39: Inline dtd support [ FAILED ]\n (CODE: %d) %s\n",
9355: axl_error_get_code (error), axl_error_get (error));
9356: axl_error_free (error);
9357: return -1;
9358: }
9359:
9360: if (test_40 (&error)) {
9361: printf ("Test 40: Avoid recursive content inclusion into coments [ OK ]\n");
9362: }else {
9363: printf ("Test 40: Avoid recursive content inclusion into coments [ FAILED ]\n (CODE: %d) %s\n",
9364: axl_error_get_code (error), axl_error_get (error));
9365: axl_error_free (error);
9366: return -1;
9367: }
9368:
9369: if (test_41 (&error)) {
9370: printf ("Test 41: Extended encoding support (through axl-babel) [ OK ]\n");
9371: }else {
9372: printf ("Test 41: Extended encoding support (through axl-babel) [ FAILED ]\n (CODE: %d) %s\n",
9373: axl_error_get_code (error), axl_error_get (error));
9374: axl_error_free (error);
9375: return -1;
9376: }
9377:
9378: if (test_42 (&error)) {
9379: printf ("Test 42: Checking nested CDATA support (including ']]>', '<![CDATA[' or xml documents with '<![CDATA[..]]>' decls) [ OK ]\n");
9380: }else {
9381: printf ("Test 42: Checking nested CDATA support CDATA declaration (including ']]>', '<![CDATA[' or xml documents with '<![CDATA[..]]>' decls) [ FAILED ]\n (CODE: %d) %s\n",
9382: axl_error_get_code (error), axl_error_get (error));
9383: axl_error_free (error);
9384: return -1;
9385: }
9386:
9387: if (test_43 (&error)) {
9388: printf ("Test 43: Memory leak check with root nodes [ OK ]\n");
9389: }else {
9390: printf ("Test 43: Memory leak check with root nodes [ FAILED ]\n (CODE: %d) %s\n",
9391: axl_error_get_code (error), axl_error_get (error));
9392: axl_error_free (error);
9393: return -1;
9394: }
9395:
9396: if (test_44 (&error)) {
9397: printf ("Test 44: DTD fix (optional child after one to many child spec) [ OK ]\n");
9398: }else {
9399: printf ("Test 44: DTD fix (optional child after one to many child spec) [ FAILED ]\n (CODE: %d) %s\n",
9400: axl_error_get_code (error), axl_error_get (error));
9401: axl_error_free (error);
9402: return -1;
9403: }
9404:
9405: if (test_45 (&error)) {
9406: printf ("Test 45: Fix attribute added twice [ OK ]\n");
9407: }else {
9408: printf ("Test 45: Fix attribute added twice [ FAILED ]\n (CODE: %d) %s\n",
9409: axl_error_get_code (error), axl_error_get (error));
9410: axl_error_free (error);
9411: return -1;
9412: }
9413:
9414: /* cleanup axl library */
9415: axl_end ();
9416: return 0;
9417: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>