diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Makefile.am | 33 | ||||
-rw-r--r-- | test/Makefile.in | 570 | ||||
-rw-r--r-- | test/tst-dom.c | 164 | ||||
-rw-r--r-- | test/tst-filter.c | 260 | ||||
-rw-r--r-- | test/tst-iks.c | 77 | ||||
-rw-r--r-- | test/tst-ikstack.c | 54 | ||||
-rw-r--r-- | test/tst-jid.c | 63 | ||||
-rw-r--r-- | test/tst-md5.c | 38 | ||||
-rw-r--r-- | test/tst-sax.c | 384 | ||||
-rw-r--r-- | test/tst-sha.c | 38 |
10 files changed, 1681 insertions, 0 deletions
diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 0000000..a82402f --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1,33 @@ +## +## Process this file with automake to produce Makefile.in +## + +INCLUDES = -I$(top_srcdir)/include + +TESTS = tst-ikstack tst-iks tst-sax tst-dom tst-sha tst-md5 tst-filter tst-jid + +noinst_PROGRAMS = tst-ikstack tst-iks tst-sax tst-dom tst-sha tst-md5 tst-filter tst-jid + +tst_ikstack_LDADD = $(top_builddir)/src/libiksemel.la +tst_ikstack_SOURCES = tst-ikstack.c + +tst_iks_LDADD = $(top_builddir)/src/libiksemel.la +tst_iks_SOURCES = tst-iks.c + +tst_sax_LDADD = $(top_builddir)/src/libiksemel.la +tst_sax_SOURCES = tst-sax.c + +tst_dom_LDADD = $(top_builddir)/src/libiksemel.la +tst_dom_SOURCES = tst-dom.c + +tst_sha_LDADD = $(top_builddir)/src/libiksemel.la +tst_sha_SOURCES = tst-sha.c + +tst_md5_LDADD = $(top_builddir)/src/libiksemel.la +tst_md5_SOURCES = tst-md5.c + +tst_filter_LDADD = $(top_builddir)/src/libiksemel.la +tst_filter_SOURCES = tst-filter.c + +tst_jid_LDADD = $(top_builddir)/src/libiksemel.la +tst_jid_SOURCES = tst-jid.c diff --git a/test/Makefile.in b/test/Makefile.in new file mode 100644 index 0000000..a47e568 --- /dev/null +++ b/test/Makefile.in @@ -0,0 +1,570 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = tst-ikstack$(EXEEXT) tst-iks$(EXEEXT) \ + tst-sax$(EXEEXT) tst-dom$(EXEEXT) tst-sha$(EXEEXT) \ + tst-md5$(EXEEXT) tst-filter$(EXEEXT) tst-jid$(EXEEXT) +subdir = test +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/include/config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(noinst_PROGRAMS) +am_tst_dom_OBJECTS = tst-dom.$(OBJEXT) +tst_dom_OBJECTS = $(am_tst_dom_OBJECTS) +tst_dom_DEPENDENCIES = $(top_builddir)/src/libiksemel.la +am_tst_filter_OBJECTS = tst-filter.$(OBJEXT) +tst_filter_OBJECTS = $(am_tst_filter_OBJECTS) +tst_filter_DEPENDENCIES = $(top_builddir)/src/libiksemel.la +am_tst_iks_OBJECTS = tst-iks.$(OBJEXT) +tst_iks_OBJECTS = $(am_tst_iks_OBJECTS) +tst_iks_DEPENDENCIES = $(top_builddir)/src/libiksemel.la +am_tst_ikstack_OBJECTS = tst-ikstack.$(OBJEXT) +tst_ikstack_OBJECTS = $(am_tst_ikstack_OBJECTS) +tst_ikstack_DEPENDENCIES = $(top_builddir)/src/libiksemel.la +am_tst_jid_OBJECTS = tst-jid.$(OBJEXT) +tst_jid_OBJECTS = $(am_tst_jid_OBJECTS) +tst_jid_DEPENDENCIES = $(top_builddir)/src/libiksemel.la +am_tst_md5_OBJECTS = tst-md5.$(OBJEXT) +tst_md5_OBJECTS = $(am_tst_md5_OBJECTS) +tst_md5_DEPENDENCIES = $(top_builddir)/src/libiksemel.la +am_tst_sax_OBJECTS = tst-sax.$(OBJEXT) +tst_sax_OBJECTS = $(am_tst_sax_OBJECTS) +tst_sax_DEPENDENCIES = $(top_builddir)/src/libiksemel.la +am_tst_sha_OBJECTS = tst-sha.$(OBJEXT) +tst_sha_OBJECTS = $(am_tst_sha_OBJECTS) +tst_sha_DEPENDENCIES = $(top_builddir)/src/libiksemel.la +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(tst_dom_SOURCES) $(tst_filter_SOURCES) $(tst_iks_SOURCES) \ + $(tst_ikstack_SOURCES) $(tst_jid_SOURCES) $(tst_md5_SOURCES) \ + $(tst_sax_SOURCES) $(tst_sha_SOURCES) +DIST_SOURCES = $(tst_dom_SOURCES) $(tst_filter_SOURCES) \ + $(tst_iks_SOURCES) $(tst_ikstack_SOURCES) $(tst_jid_SOURCES) \ + $(tst_md5_SOURCES) $(tst_sax_SOURCES) $(tst_sha_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DO_POSIX_FALSE = @DO_POSIX_FALSE@ +DO_POSIX_TRUE = @DO_POSIX_TRUE@ +ECHO = @ECHO@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ +LIBGNUTLS_CONFIG = @LIBGNUTLS_CONFIG@ +LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_F77 = @ac_ct_F77@ +ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +INCLUDES = -I$(top_srcdir)/include +TESTS = tst-ikstack tst-iks tst-sax tst-dom tst-sha tst-md5 tst-filter tst-jid +tst_ikstack_LDADD = $(top_builddir)/src/libiksemel.la +tst_ikstack_SOURCES = tst-ikstack.c +tst_iks_LDADD = $(top_builddir)/src/libiksemel.la +tst_iks_SOURCES = tst-iks.c +tst_sax_LDADD = $(top_builddir)/src/libiksemel.la +tst_sax_SOURCES = tst-sax.c +tst_dom_LDADD = $(top_builddir)/src/libiksemel.la +tst_dom_SOURCES = tst-dom.c +tst_sha_LDADD = $(top_builddir)/src/libiksemel.la +tst_sha_SOURCES = tst-sha.c +tst_md5_LDADD = $(top_builddir)/src/libiksemel.la +tst_md5_SOURCES = tst-md5.c +tst_filter_LDADD = $(top_builddir)/src/libiksemel.la +tst_filter_SOURCES = tst-filter.c +tst_jid_LDADD = $(top_builddir)/src/libiksemel.la +tst_jid_SOURCES = tst-jid.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu test/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; for p in $$list; do \ + f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f $$p $$f"; \ + rm -f $$p $$f ; \ + done +tst-dom$(EXEEXT): $(tst_dom_OBJECTS) $(tst_dom_DEPENDENCIES) + @rm -f tst-dom$(EXEEXT) + $(LINK) $(tst_dom_LDFLAGS) $(tst_dom_OBJECTS) $(tst_dom_LDADD) $(LIBS) +tst-filter$(EXEEXT): $(tst_filter_OBJECTS) $(tst_filter_DEPENDENCIES) + @rm -f tst-filter$(EXEEXT) + $(LINK) $(tst_filter_LDFLAGS) $(tst_filter_OBJECTS) $(tst_filter_LDADD) $(LIBS) +tst-iks$(EXEEXT): $(tst_iks_OBJECTS) $(tst_iks_DEPENDENCIES) + @rm -f tst-iks$(EXEEXT) + $(LINK) $(tst_iks_LDFLAGS) $(tst_iks_OBJECTS) $(tst_iks_LDADD) $(LIBS) +tst-ikstack$(EXEEXT): $(tst_ikstack_OBJECTS) $(tst_ikstack_DEPENDENCIES) + @rm -f tst-ikstack$(EXEEXT) + $(LINK) $(tst_ikstack_LDFLAGS) $(tst_ikstack_OBJECTS) $(tst_ikstack_LDADD) $(LIBS) +tst-jid$(EXEEXT): $(tst_jid_OBJECTS) $(tst_jid_DEPENDENCIES) + @rm -f tst-jid$(EXEEXT) + $(LINK) $(tst_jid_LDFLAGS) $(tst_jid_OBJECTS) $(tst_jid_LDADD) $(LIBS) +tst-md5$(EXEEXT): $(tst_md5_OBJECTS) $(tst_md5_DEPENDENCIES) + @rm -f tst-md5$(EXEEXT) + $(LINK) $(tst_md5_LDFLAGS) $(tst_md5_OBJECTS) $(tst_md5_LDADD) $(LIBS) +tst-sax$(EXEEXT): $(tst_sax_OBJECTS) $(tst_sax_DEPENDENCIES) + @rm -f tst-sax$(EXEEXT) + $(LINK) $(tst_sax_LDFLAGS) $(tst_sax_OBJECTS) $(tst_sax_LDADD) $(LIBS) +tst-sha$(EXEEXT): $(tst_sha_OBJECTS) $(tst_sha_DEPENDENCIES) + @rm -f tst-sha$(EXEEXT) + $(LINK) $(tst_sha_LDFLAGS) $(tst_sha_OBJECTS) $(tst_sha_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-dom.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-filter.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-iks.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-ikstack.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-jid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-md5.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-sax.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tst-sha.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list='$(TESTS)'; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all tests failed"; \ + else \ + banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + skipped="($$skip tests were not run)"; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-generic clean-libtool clean-noinstPROGRAMS ctags \ + distclean distclean-compile distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-exec install-exec-am install-info \ + install-info-am install-man install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/test/tst-dom.c b/test/tst-dom.c new file mode 100644 index 0000000..693509e --- /dev/null +++ b/test/tst-dom.c @@ -0,0 +1,164 @@ +/* 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; +} diff --git a/test/tst-filter.c b/test/tst-filter.c new file mode 100644 index 0000000..64adbd1 --- /dev/null +++ b/test/tst-filter.c @@ -0,0 +1,260 @@ +/* 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 <locale.h> +#include <assert.h> + +#include "iksemel.h" + +struct { + iksfilter *f; + char *xml; + int nr; + iksFilterHook *hook[20]; + int nr_hook; + iksFilterHook *call[20]; + int nr_call; +} tester; + +void +document (char *xml) +{ + tester.nr++; + tester.xml = xml; + tester.nr_hook = 0; +} + +void +hook (iksFilterHook *hk) +{ + tester.hook[tester.nr_hook++] = hk; +} + +void +debug (void) +{ + int i; + + printf ("Filter test %d:\n", tester.nr); + if (tester.nr_hook) { + puts ("Expected hook order:"); + for (i = 0; i < tester.nr_hook; i++) { + printf (" "); + tester.hook[i] (NULL, NULL); + } + } else { + puts("No hooks expected."); + } + if (tester.nr_call) { + puts ("Hook order:"); + for (i = 0; i < tester.nr_call; i++) { + printf (" "); + tester.call[i] (NULL, NULL); + } + } else { + puts("No hooks called."); + } + exit (1); +} + +void +test (void) +{ + iksparser *prs; + iks *x; + int i; + + tester.nr_call = 0; + + prs = iks_dom_new (&x); + iks_parse (prs, tester.xml, strlen (tester.xml), 1); + iks_parser_delete (prs); + iks_filter_packet (tester.f, iks_packet (x)); + iks_delete (x); + + if (tester.nr_call != tester.nr_hook) debug (); + for (i = 0; i < tester.nr_hook; i++) { + if (tester.call[i] != tester.hook[i]) debug (); + } +} + +#define DEBUG(x) if (NULL == pak) { puts ( (x) ); return IKS_FILTER_PASS; } + +int +on_msg (void *user_data, ikspak *pak) +{ + DEBUG ("on_msg"); + assert (IKS_PAK_MESSAGE == pak->type); + tester.call[tester.nr_call++] = on_msg; + return IKS_FILTER_PASS; +} + +int +on_iq (void *user_data, ikspak *pak) +{ + DEBUG ("on_iq"); + assert (IKS_PAK_IQ == pak->type); + tester.call[tester.nr_call++] = on_iq; + return IKS_FILTER_PASS; +} + +int +on_iq_result (void *user_data, ikspak *pak) +{ + DEBUG ("on_iq_result"); + assert (IKS_PAK_IQ == pak->type); + assert (IKS_TYPE_RESULT == pak->subtype); + tester.call[tester.nr_call++] = on_iq_result; + return IKS_FILTER_PASS; +} + +int +on_iq_result_id_auth (void *user_data, ikspak *pak) +{ + DEBUG ("on_iq_result_id_auth"); + assert (IKS_PAK_IQ == pak->type); + assert (IKS_TYPE_RESULT == pak->subtype); + assert (iks_strcmp (pak->id, "auth") == 0); + tester.call[tester.nr_call++] = on_iq_result_id_auth; + return IKS_FILTER_PASS; +} + +int +on_id_auth (void *user_data, ikspak *pak) +{ + DEBUG ("on_id_auth"); + assert (iks_strcmp (pak->id, "auth") == 0); + tester.call[tester.nr_call++] = on_id_auth; + return IKS_FILTER_PASS; +} + +int +on_from_patrician (void *user_data, ikspak *pak) +{ + DEBUG ("on_from_patrician"); + assert (iks_strcmp (pak->from->partial, "patrician@morpork.gov") == 0); + tester.call[tester.nr_call++] = on_from_patrician; + return IKS_FILTER_PASS; +} + +int +on_msg_chat_from_patrician (void *user_data, ikspak *pak) +{ + DEBUG ("on_msg_chat_from_patrician"); + assert (pak->type == IKS_PAK_MESSAGE); + assert (pak->subtype == IKS_TYPE_CHAT); + assert (iks_strcmp (pak->from->partial, "patrician@morpork.gov") == 0); + tester.call[tester.nr_call++] = on_msg_chat_from_patrician; + return IKS_FILTER_PASS; +} + +int +on_id_albatros (void *user_data, ikspak *pak) +{ + DEBUG ("on_id_albatros"); + assert (iks_strcmp (pak->id, "albatros") == 0); + tester.call[tester.nr_call++] = on_id_albatros; + return IKS_FILTER_PASS; +} + +int +on_from_dean (void *user_data, ikspak *pak) +{ + DEBUG ("on_from_dean"); + assert (iks_strcmp (pak->from->partial, "dean@unseen.edu") == 0); + tester.call[tester.nr_call++] = on_from_dean; + return IKS_FILTER_PASS; +} + +int +main (int argc, char *argv[]) +{ + tester.f = iks_filter_new (); + iks_filter_add_rule (tester.f, on_msg, 0, + IKS_RULE_TYPE, IKS_PAK_MESSAGE, + IKS_RULE_DONE); + iks_filter_add_rule (tester.f, on_iq, 0, + IKS_RULE_TYPE, IKS_PAK_IQ, + IKS_RULE_DONE); + iks_filter_add_rule (tester.f, on_iq_result, 0, + IKS_RULE_TYPE, IKS_PAK_IQ, + IKS_RULE_SUBTYPE, IKS_TYPE_RESULT, + IKS_RULE_DONE); + iks_filter_add_rule (tester.f, on_iq_result_id_auth, 0, + IKS_RULE_TYPE, IKS_PAK_IQ, + IKS_RULE_SUBTYPE, IKS_TYPE_RESULT, + IKS_RULE_ID, "auth", + IKS_RULE_DONE); + iks_filter_add_rule (tester.f, on_id_auth, 0, + IKS_RULE_ID, "auth", + IKS_RULE_DONE); + iks_filter_add_rule (tester.f, on_from_dean, 0, + IKS_RULE_FROM_PARTIAL, "dean@unseen.edu", + IKS_RULE_DONE); + iks_filter_add_rule (tester.f, on_from_patrician, 0, + IKS_RULE_FROM_PARTIAL, "patrician@morpork.gov", + IKS_RULE_DONE); + iks_filter_add_rule (tester.f, on_msg_chat_from_patrician, 0, + IKS_RULE_TYPE, IKS_PAK_MESSAGE, + IKS_RULE_SUBTYPE, IKS_TYPE_CHAT, + IKS_RULE_FROM_PARTIAL, "patrician@morpork.gov", + IKS_RULE_DONE); + iks_filter_add_rule (tester.f, on_id_albatros, 0, + IKS_RULE_ID, "albatros", + IKS_RULE_DONE); + + document ("<message from='dean@unseen.edu' id='1234'><body>Born to Rune.</body></message>"); + hook (on_from_dean); + hook (on_msg); + test (); + + document ("<presence from='librarian@unseen.edu' show='away'/>"); + test (); + + document ("<message from='rincewind@unseen.edu' type='chat' id='albatros'><body>yaaargh</body></message>"); + hook (on_id_albatros); + hook (on_msg); + test (); + + document ("<iq type='get' from='rincewind@unseen.edu'><query xmlns='jabber:time'/></iq>"); + hook (on_iq); + test (); + + document ("<message from='patrician@morpork.gov'><body>so you admit it?</body></message>"); + hook (on_from_patrician); + hook (on_msg); + test (); + + document ("<iq type='result' from='rincewind@unseen.edu'><query xmlns='jabber:version'><name>cabbar</name><version>1.0</version></query></iq>"); + hook (on_iq_result); + hook (on_iq); + test (); + + document ("<presence from='dean@unseen.edu/psi' type='unavailable'/>"); + hook (on_from_dean); + test (); + + document ("<message from='patrician@morpork.gov' type='chat' id='albatros'><body>hmm</body></message>"); + hook (on_id_albatros); + hook (on_msg_chat_from_patrician); + hook (on_from_patrician); + hook (on_msg); + test (); + + document ("<iq type='result' id='auth'/>"); + hook (on_iq_result_id_auth); + hook (on_id_auth); + hook (on_iq_result); + hook (on_iq); + test (); + + iks_filter_delete (tester.f); + + return 0; +} diff --git a/test/tst-iks.c b/test/tst-iks.c new file mode 100644 index 0000000..5573b07 --- /dev/null +++ b/test/tst-iks.c @@ -0,0 +1,77 @@ +/* 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 <locale.h> + +#include "iksemel.h" + +int main (int argc, char *argv[]) +{ + static char xml[] = + "<iq type='result' to='ydobon@jabber.org'><query xmlns='jabber:iq:version'>" + "<name>TestClient</name><os>SuxOS 2000</os><version><stable solidity='rock'/>" + "1.2.0 patchlevel 2</version></query></iq>"; + static char xml2[] = + "<Ni><C/>lala<br/><A/>Hello World<B/></Ni>"; + iks *x, *y, *z; + char *t; + + setlocale (LC_ALL, ""); + + x = iks_new ("iq"); + iks_insert_attrib (x, "type", "resultypo"); + iks_insert_attrib (x, "type", "result"); + iks_insert_attrib (x, "to", "ydobon@jabber.org"); + y = iks_new_within ("query", iks_stack (x)); + iks_insert_cdata (iks_insert (y, "name"), "TestClient", 10); + iks_insert_cdata (iks_insert (y, "os"), "SuxOS", 0); + z = iks_insert (y, "version"); + iks_insert (z, "stable"); + iks_insert_cdata (z, "1.2", 3); + iks_insert_cdata (z, ".0 patchlevel 2", 0); + iks_insert_node (x, y); + z = iks_find (y, "os"); + iks_insert_attrib (z, "error", "yes"); + iks_insert_attrib (z, "error", NULL); + iks_insert_cdata (z, " 2000", 5); + z = iks_next (z); + z = iks_find (z, "stable"); + iks_insert_attrib (z, "solidity", "rock"); + z = iks_parent (iks_parent (z)); + iks_insert_attrib (z, "xmlns", "jabber:iq:version"); + + t = iks_string (iks_stack (x), x); + if(!t || strcmp(t, xml) != 0) { + printf("Result: %s\n", t); + printf("Expected: %s\n", xml); + return 1; + } + iks_delete(x); + + + x = iks_new ("Ni"); + y = iks_insert (x, "br"); + z = iks_prepend_cdata (y, "lala", 4); + iks_prepend (z, "C"); + z = iks_insert_cdata (x, "Hello", 5); + y = iks_append (z, "B"); + iks_prepend (z, "A"); + iks_append_cdata (z, " ", 1); + iks_prepend_cdata (y, "World", 5); + + t = iks_string (iks_stack (x), x); + if(!t || strcmp(t, xml2) != 0) { + printf("Result: %s\n", t); + printf("Expected: %s\n", xml2); + return 1; + } + iks_delete(x); + + return 0; +} diff --git a/test/tst-ikstack.c b/test/tst-ikstack.c new file mode 100644 index 0000000..9e8459f --- /dev/null +++ b/test/tst-ikstack.c @@ -0,0 +1,54 @@ +/* iksemel (XML parser for Jabber) +** Copyright (C) 2000-2004 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 "iksemel.h" + +struct align_test { char a; double b; }; +#define DEFAULT_ALIGNMENT ((size_t) ((char *) &((struct align_test *) 0)->b - (char *) 0)) +#define ALIGN_MASK ( DEFAULT_ALIGNMENT - 1 ) + +const char buf[] = "1234567890abcdefghijklmnopqrstuv"; + +void +test_stack (int cs) +{ + ikstack *s; + char *mem, *old; + int i; + + s = iks_stack_new (cs, cs); + old = NULL; + for (i = 0; i < strlen (buf); i++) { + iks_stack_strdup (s, buf, i); + mem = iks_stack_alloc (s, i); + if (((unsigned long) mem) & ALIGN_MASK) { + printf ("ikstack bug, addr %p should be a multiply of %d\n", + mem, DEFAULT_ALIGNMENT); + exit (1); + } + memset (mem, 'x', i); + old = iks_stack_strcat (s, old, 0, buf + i, 1); + } + if (strcmp (old, buf) != 0) { + printf ("ikstack strcat bug:\nExpected: %s\n Result: %s\n", buf, old); + exit (1); + } + iks_stack_delete (s); +} + +int main (int argc, char *argv[]) +{ + test_stack (0); + test_stack (16); + test_stack (237); + test_stack (1024); + + return 0; +} diff --git a/test/tst-jid.c b/test/tst-jid.c new file mode 100644 index 0000000..66406c7 --- /dev/null +++ b/test/tst-jid.c @@ -0,0 +1,63 @@ +/* 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 <locale.h> + +#include "iksemel.h" + +ikstack *my_stack; + +void +print_id (iksid *id) +{ + printf (" Full: [%s]\n Partial: [%s]\n User: [%s]\n Server: [%s]\n Resource: [%s]\n", + id->full, id->partial, id->user, id->server, id->resource); +} + +#define BUG(x) { print_id ( (x) ); exit (1); } + +void +test_id (char *id, char *partial, char *user, char *server, char *resource) +{ + iksid *a; + + a = iks_id_new (my_stack, id); + if ((a->partial || partial) && iks_strcmp (a->partial, partial) != 0) BUG(a); + if ((a->user || user) && iks_strcmp (a->user, user) != 0) BUG(a); + if ((a->server || server) && iks_strcmp (a->server, server) != 0) BUG(a); + if ((a->resource || resource) && iks_strcmp (a->resource, resource) != 0) BUG(a); +} + +void +test_cmp (char *stra, char *strb, int parts, int diff) +{ + iksid *a, *b; + + a = iks_id_new (my_stack, stra); + b = iks_id_new (my_stack, strb); + if (diff != iks_id_cmp (a, b, parts)) exit (1); +} + +int main (int argc, char *argv[]) +{ + my_stack = iks_stack_new (1024, 1024); + + test_id ("jabber:madcat@jabber.org/cabbar", "madcat@jabber.org", "madcat", "jabber.org", "cabbar"); + test_id ("bob@silent.org", "bob@silent.org", "bob", "silent.org", NULL); + + test_cmp ("dante@jabber.org/hell", "dante@jabber.org/heaven", IKS_ID_PARTIAL, 0); + test_cmp ("madcat@jabber.org/cabbar", "madcat@jabber.org/jabberx", IKS_ID_FULL, IKS_ID_RESOURCE); + test_cmp ("dean@unseen.edu/pda", "librarian@unseen.edu/jabberx", IKS_ID_FULL, IKS_ID_USER | IKS_ID_RESOURCE); + test_cmp ("patrician@morpork.gov/gabber", "cohen@guild.org/gsm", IKS_ID_FULL, IKS_ID_FULL); + test_cmp ("peter@family.com", "peter@family.com/clam", IKS_ID_PARTIAL, 0); + + iks_stack_delete (my_stack); + + return 0; +} diff --git a/test/tst-md5.c b/test/tst-md5.c new file mode 100644 index 0000000..82584ae --- /dev/null +++ b/test/tst-md5.c @@ -0,0 +1,38 @@ +/* iksemel (XML parser for Jabber) +** Copyright (C) 2004 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 "iksemel.h" + +int main (int argc, char *argv[]) +{ + struct lala { + char *str; + char *hash; + } known_hashes[] = { + { "abc", "900150983cd24fb0d6963f7d28e17f72" }, + { "12345678901234567890123456789012345678901234567890123456789012345678901234567890", + "57edf4a22be3c955ac49da2e2107b67a" }, + { NULL, NULL } + }; + int i = 0; + char buf[33]; + + while (known_hashes[i].str) { + iks_md5 (known_hashes[i].str, buf); + if (strcmp (buf, known_hashes[i].hash) != 0) { + printf("MD5 hash of \"%s\"\n", known_hashes[i].str); + printf(" Result: %s\n", buf); + printf(" Expected: %s\n", known_hashes[i].hash); + return 1; + } + i++; + } + return 0; +} diff --git a/test/tst-sax.c b/test/tst-sax.c new file mode 100644 index 0000000..77a5c13 --- /dev/null +++ b/test/tst-sax.c @@ -0,0 +1,384 @@ +/* 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" + +struct element_s { + struct element_s *next; + enum ikstype type; + + enum ikstagtype tag; + char *name; + int nr_atts; + char *atts[10]; + char *vals[10]; + + char *cdata; + int len; +}; + +struct { + char *doc; + int len; + struct element_s *elements; + struct element_s *last_element; + struct element_s *cur; + int nr_tests; + int nr_cur; + int blocksize; +} tester; + +void +document (char *xml) +{ + if (tester.elements) { + struct element_s *tmp; + for (; tester.elements; tester.elements = tmp) { + tmp = tester.elements->next; + free (tester.elements); + } + } + tester.doc = xml; + tester.len = strlen (xml); + tester.elements = NULL; + tester.last_element = NULL; + tester.nr_tests++; +} + +void +element (enum ikstype type, ...) +{ + struct element_s *el; + va_list ap; + char *tmp; + + el = malloc (sizeof (struct element_s)); + memset (el, 0, sizeof (struct element_s)); + el->type = type; + + va_start (ap, type); + switch (type) { + case IKS_TAG: + el->tag = va_arg (ap, int); + el->name = va_arg (ap, char*); + if (IKS_CLOSE == el->tag) break; + while (1) { + tmp = va_arg (ap, char*); + if (tmp) { + el->atts[el->nr_atts] = tmp; + el->vals[el->nr_atts] = va_arg (ap, char*); + el->nr_atts++; + } else { + break; + } + } + break; + case IKS_CDATA: + tmp = va_arg (ap, char*); + el->cdata = tmp; + el->len = strlen (tmp); + break; + case IKS_NONE: + case IKS_ATTRIBUTE: + puts ("invalid element() call"); + exit (1); + } + va_end (ap); + + if (NULL == tester.elements) tester.elements = el; + if (tester.last_element) tester.last_element->next = el; + tester.last_element = el; +} + +#define PRINT_TEST printf ("Sax test %d, blocksize %d, element %d:\n", tester.nr_tests, tester.blocksize, tester.nr_cur) +#define NEXT_ELEM { tester.cur = tester.cur->next; tester.nr_cur++; } + +void +debug_tag (enum ikstagtype type, char *name, char **atts) +{ + int i; + + PRINT_TEST; + if (tester.cur && tester.cur->type == IKS_TAG) { + switch (tester.cur->tag) { + case IKS_OPEN: + printf (" Expecting tag <%s>\n", tester.cur->name); + break; + case IKS_CLOSE: + printf (" Expecting tag </%s>\n", tester.cur->name); + break; + case IKS_SINGLE: + printf (" Expecting tag <%s/>\n", tester.cur->name); + break; + } + for (i = 0; i < tester.cur->nr_atts; i++) { + printf (" %s='%s'\n", tester.cur->atts[i], tester.cur->vals[i]); + } + } else { + printf (" Not expecting a tag here.\n"); + } + switch (type) { + case IKS_OPEN: + printf (" Got tag <%s>\n", name); + break; + case IKS_CLOSE: + printf (" Got tag </%s>\n", name); + break; + case IKS_SINGLE: + printf (" Got tag <%s/>\n", name); + break; + } + i = 0; + while (atts && atts[i]) { + printf (" %s='%s'\n", atts[i], atts[i+1]); + i += 2; + } +} + +#define TAG_FAIL { debug_tag (type,name,atts); exit (1); } + +int +tagHook (void *udata, char *name, char **atts, int type) +{ + int nr, i, flag; + + if (!tester.cur) TAG_FAIL; + if (tester.cur->type != IKS_TAG) TAG_FAIL; + if (tester.cur->tag != type) TAG_FAIL; + if (iks_strcmp (tester.cur->name, name) != 0) TAG_FAIL; + if (!atts && tester.cur->nr_atts > 0) TAG_FAIL; + if (atts && tester.cur->nr_atts == 0) TAG_FAIL; + + nr = tester.cur->nr_atts; + while (nr) { + flag = 0; + for (i = 0;atts[i]; i+= 2) { + if (iks_strcmp (atts[i], tester.cur->atts[nr-1]) == 0 && iks_strcmp (atts[i+1], tester.cur->vals[nr-1]) == 0) { + flag = 1; + break; + } + } + if (flag == 0) TAG_FAIL; + nr--; + } + + NEXT_ELEM; + return IKS_OK; +} + +void +debug_cdata (char *data, size_t len, int pos) +{ + int i; + + PRINT_TEST; + if (tester.cur && tester.cur->type == IKS_CDATA) + printf (" Expecting cdata [%s]\n", tester.cur->cdata); + else + printf (" Not expecting cdata here\n"); + printf (" Got cdata ["); + for (i = 0; i < len; i++) putchar (data[i]); + printf ("] at the pos %d.\n", pos); +} + +#define CDATA_FAIL { debug_cdata (data, len, pos); exit (1); } + +int +cdataHook (void *udata, char *data, size_t len) +{ + static int pos = 0; + + if (!tester.cur) CDATA_FAIL; + if (tester.cur->type != IKS_CDATA) CDATA_FAIL; + if (iks_strncmp (tester.cur->cdata + pos, data, len) != 0) CDATA_FAIL; + pos += len; + if (pos > tester.cur->len) CDATA_FAIL; + if (pos == tester.cur->len) { + pos = 0; + NEXT_ELEM; + } + return IKS_OK; +} + +void +test_size (int blocksize) +{ + enum ikserror err; + iksparser *prs; + int i, len; + + tester.cur = tester.elements; + tester.nr_cur = 1; + tester.blocksize = blocksize; + len = tester.len; + + prs = iks_sax_new (NULL, tagHook, cdataHook); + i = 0; + if (0 == blocksize) blocksize = len; + while (i < len) { + if (i + blocksize > len) blocksize = len - i; + err = iks_parse (prs, tester.doc + i, blocksize, 0); + switch (err) { + case IKS_OK: + break; + case IKS_NOMEM: + exit (1); + case IKS_BADXML: + PRINT_TEST; + printf ("Invalid xml at byte %ld in\n[%s]\n", iks_nr_bytes (prs), tester.doc); + exit (1); + case IKS_HOOK: + exit (1); + } + i += blocksize; + } + if (tester.cur) exit (1); + iks_parser_delete (prs); +} + +void +test (void) +{ + int i; + + for (i = 0; i < tester.len; i++) { + test_size (i); + } +} + +void +test_bad (int badbyte) +{ + iksparser *p; + enum ikserror err; + + p = iks_sax_new (NULL, NULL, NULL); + err = iks_parse (p, tester.doc, tester.len, 1); + switch (err) { + case IKS_OK: + break; + case IKS_NOMEM: + exit (1); + case IKS_BADXML: + if (iks_nr_bytes (p) == badbyte) return; + break; + case IKS_HOOK: + exit (1); + } + printf ("Sax test %d:\n", tester.nr_tests); + printf ("Expected bad byte %d, got %ld in\n[%s]\n", badbyte, iks_nr_bytes (p), tester.doc); + exit (1); +} + +int +main (int argc, char *argv[]) +{ + document ("<lonely/>"); + element (IKS_TAG, IKS_SINGLE, "lonely", 0); + test (); + + document ("<?xml version='1.0'?><parent><child/><child/>child</parent>"); + element (IKS_TAG, IKS_OPEN, "parent", 0); + element (IKS_TAG, IKS_SINGLE, "child", 0); + element (IKS_TAG, IKS_SINGLE, "child", 0); + element (IKS_CDATA, "child"); + element (IKS_TAG, IKS_CLOSE, "parent"); + test (); + + document ("<mytag abc='123' id=\"XC72\"></mytag>"); + element (IKS_TAG, IKS_OPEN, "mytag", "abc", "123", "id", "XC72", 0); + element (IKS_TAG, IKS_CLOSE, "mytag"); + test (); + + document ("<body>I'm fixing parser&tester for "<" and ">" chars.</body>"); + element (IKS_TAG, IKS_OPEN, "body", 0); + element (IKS_CDATA, "I'm fixing parser&tester for \"<\" and \">\" chars."); + element (IKS_TAG, IKS_CLOSE, "body"); + test (); + + document ("<tag a='1' b='2' c='3' d='4' e='5' f='6' g='7' id='xyz9'><sub></sub></tag>"); + element (IKS_TAG, IKS_OPEN, "tag", "a", "1", "b", "2", "c", "3", "d", "4", "e", "5", "f", "6", "g", "7", "id", "xyz9", 0); + element (IKS_TAG, IKS_OPEN, "sub", 0); + element (IKS_TAG, IKS_CLOSE, "sub"); + element (IKS_TAG, IKS_CLOSE, "tag"); + test (); + + document ("<item url='http://jabber.org'><!-- little comment -->Jabber Site</item>"); + element (IKS_TAG, IKS_OPEN, "item", "url", "http://jabber.org", 0); + element (IKS_CDATA, "Jabber Site"); + element (IKS_TAG, IKS_CLOSE, "item"); + test (); + + document ("<index><!-- <item> - tag has no childs --><item name='lala' page='42'/></index>"); + element (IKS_TAG, IKS_OPEN, "index", 0); + element (IKS_TAG, IKS_SINGLE, "item", "name", "lala", "page", "42", 0); + element (IKS_TAG, IKS_CLOSE, "index"); + test (); + + document ("<ka>1234<![CDATA[ <ka> lala ] ]] ]]] ]]>4321</ka>"); + element (IKS_TAG, IKS_OPEN, "ka", 0); + element (IKS_CDATA, "1234 <ka> lala ] ]] ]]] 4321"); + element (IKS_TAG, IKS_CLOSE, "ka"); + test (); + + document ("<test><standalone be='happy'/>abcd<br/><escape></test>"); + element (IKS_TAG, IKS_OPEN, "test", 0); + element (IKS_TAG, IKS_SINGLE, "standalone", "be", "happy", 0); + element (IKS_CDATA, "abcd"); + element (IKS_TAG, IKS_SINGLE, "br", 0); + element (IKS_CDATA, "<escape>"); + element (IKS_TAG, IKS_CLOSE, "test"); + test (); + + document ("<a><b>john&mary<c><d e='f' g='123456' h='madcat' klm='nop'/></c></b></a>"); + element (IKS_TAG, IKS_OPEN, "a", 0); + element (IKS_TAG, IKS_OPEN, "b", 0); + element (IKS_CDATA, "john&mary"); + element (IKS_TAG, IKS_OPEN, "c", 0); + element (IKS_TAG, IKS_SINGLE, "d", "e", "f", "g", "123456", "h", "madcat", "klm", "nop", 0); + element (IKS_TAG, IKS_CLOSE, "c", 0); + element (IKS_TAG, IKS_CLOSE, "b", 0); + element (IKS_TAG, IKS_CLOSE, "a", 0); + test (); + + document ("<test>\xFF</test>"); + test_bad (6); + + document ("<t\0></t>"); + tester.len = 8; + test_bad (2); + + document ("<a><b/><c></c/></a>"); + test_bad (13); + + document ("<e><!-- -- --></e>"); + test_bad (10); + + document ("<g><test a='123'/ b='lala'></g>"); + test_bad (17); + + document ("<ha><!-- <lala> --><!- comment -></ha>"); + test_bad (22); + + document ("<lol><<></lol>"); + test_bad (16); + + document ("<a>\xC0\x80</a>"); + test_bad (3); + + document ("<\x8F\x85></\x8F\x85>"); + test_bad (1); + + document ("<utf8>\xC1\x80<br/>\xED\x95\x9C\xEA\xB5\xAD\xEC\x96\xB4<err>\xC1\x65</err></utf8>"); + test_bad (28); + + return 0; +} diff --git a/test/tst-sha.c b/test/tst-sha.c new file mode 100644 index 0000000..ff6b3e3 --- /dev/null +++ b/test/tst-sha.c @@ -0,0 +1,38 @@ +/* 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 "iksemel.h" + +int main (int argc, char *argv[]) +{ + struct lala { + char *str; + char *hash; + } known_hashes[] = { + { "abc", "a9993e364706816aba3e25717850c26c9cd0d89d" }, + { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", + "84983e441c3bd26ebaae4aa1f95129e5e54670f1" }, + { NULL, NULL } + }; + int i = 0; + char buf[42]; + + while (known_hashes[i].str) { + iks_sha (known_hashes[i].str, buf); + if (strcmp (buf, known_hashes[i].hash) != 0) { + printf("SHA1 hash of \"%s\"\n", known_hashes[i].str); + printf(" Result: %s\n", buf); + printf(" Expected: %s\n", known_hashes[i].hash); + return 1; + } + i++; + } + return 0; +} |