123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- /* iksemel (XML parser for Jabber)
- ** Copyright (C) 2000-2003 Gurer Ozen <madcat@e-kolay.net>
- ** This code is free software; you can redistribute it and/or
- ** modify it under the terms of GNU Lesser General Public License.
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <stdarg.h>
- #include "iksemel.h"
- iks *my_x;
- int nr_tests;
- #define PR_TEST printf ("DOM test %d:\n", nr_tests)
- void
- document (char *xml)
- {
- enum ikserror err;
- iksparser *p;
- nr_tests++;
- if (my_x) iks_delete (my_x);
- p = iks_dom_new (&my_x);
- err = iks_parse (p, xml, 0, 1);
- switch (err) {
- case IKS_OK:
- break;
- case IKS_NOMEM:
- PR_TEST;
- puts ("Not enough memory.");
- exit (1);
- case IKS_BADXML:
- PR_TEST;
- printf ("Invalid xml at byte %ld in\n[%s]\n", iks_nr_bytes (p), xml);
- exit (1);
- case IKS_HOOK:
- PR_TEST;
- puts ("Hook.");
- }
- iks_parser_delete (p);
- }
- void
- tag (char *name, ...)
- {
- iks *x;
- va_list ap;
- x = my_x;
- va_start (ap, name);
- while (1) {
- char *name = iks_name (x);
- char *tmp = va_arg (ap, char*);
- if (NULL == tmp) break;
- x = iks_find (x, tmp);
- if (!x) {
- PR_TEST;
- printf ("Tag <%s> is not a child of tag <%s>\n", tmp, name);
- exit (1);
- }
- }
- if (!x || NULL == iks_find (x, name)) {
- PR_TEST;
- printf ("Tag <%s> is not a child of tag <%s>\n", name, iks_name (x));
- exit (1);
- }
- va_end (ap);
- }
- void
- cdata (char *data, ...)
- {
- iks *x;
- va_list ap;
- x = my_x;
- va_start (ap, data);
- while (1) {
- char *name = iks_name (x);
- char *tmp = va_arg (ap, char*);
- if (NULL == tmp) break;
- x = iks_find (x, tmp);
- if (!x) {
- PR_TEST;
- printf ("Tag <%s> is not a child of tag <%s>\n", tmp, name);
- exit (1);
- }
- }
- if (iks_strcmp ( iks_cdata (iks_child (x)), data) != 0) {
- PR_TEST;
- printf ("CDATA [%s] not found.\n", data);
- exit (1);
- }
- va_end (ap);
- }
- void
- attrib (char *att, char *val, ...)
- {
- iks *x;
- va_list ap;
- x = my_x;
- va_start (ap, val);
- while (1) {
- char *name = iks_name (x);
- char *tmp = va_arg (ap, char*);
- if (NULL == tmp) break;
- x = iks_find (x, tmp);
- if (!x) {
- PR_TEST;
- printf ("Tag <%s> is not a child of tag <%s>\n", tmp, name);
- exit (1);
- }
- }
- if (iks_strcmp (val, iks_find_attrib (x, att)) != 0) {
- PR_TEST;
- printf ("Attribute '%s' not found.\n", att);
- exit (1);
- }
- va_end (ap);
- }
- void
- string (char *xml)
- {
- char *tmp;
- tmp = iks_string (iks_stack (my_x), my_x);
- if (iks_strcmp (tmp, xml) != 0) {
- PR_TEST;
- printf ("Result: %s\n", tmp);
- printf ("Expected: %s\n", xml);
- exit (1);
- }
- }
- static char buf[] =
- "<presence id='JCOM_11' to='lala@j.org' type='available'><status>"
- "" <online&dangerous> "</status>meow<a><b c='d'/>"
- "</a><test/></presence>";
- int main (int argc, char *argv[])
- {
- document ("<atag></atag>");
- string ("<atag/>");
- document ("<test>lala<b>bold</b>blablabla<a><c/></a></test>");
- tag ("b", 0);
- tag ("c", "a", 0);
- string ("<test>lala<b>bold</b>blablabla<a><c/></a></test>");
- document (buf);
- cdata ("\" <online&dangerous> \"", "status", 0);
- attrib ("c", "d", "a", "b", 0);
- tag ("test", 0);
- string (buf);
- return 0;
- }
|