[Expat-checkins] CVS: expat/tests .cvsignore,NONE,1.1 Makefile.in,NONE,1.1 README.txt,NONE,1.1 runtests.c,NONE,1.1

Fred L. Drake fdrake@users.sourceforge.net
Fri, 17 Aug 2001 12:16:44 -0700


Update of /cvsroot/expat/expat/tests
In directory usw-pr-cvs1:/tmp/cvs-serv5767

Added Files:
	.cvsignore Makefile.in README.txt runtests.c 
Log Message:

Tell CVS to ignore the intermediate files generated by building the test
suite.


--- NEW FILE: .cvsignore ---
Makefile
runtests

--- NEW FILE: Makefile.in ---
SHELL = @SHELL@

srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@

CC=@CC@
CPPFLAGS = @CPPFLAGS@ -I../lib
LDFLAGS = @LDFLAGS@ -L../lib
LIBS = @LIBS@ -lexpat -lcheck
CFLAGS = @CFLAGS@


check:	runtests
	@./runtests

runtests.o:  runtests.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

runtests:  runtests.o
	$(CC) $(LDFLAGS) $< -o $@ $(LIBS)

--- NEW FILE: README.txt ---
This directory contains the (fledgling) test suite for Expat.  The
tests provide general unit testing and regression coverage.  The tests
are not expected to be useful examples of Expat usage; see the
examples/ directory for that.

The Expat tests use the "Check" unit testing framework for C.  More
information on Check can be found at:

	http://check.sourceforge.net/

Check must be installed before the unit tests can be compiled & run.

Since both Check and this test suite are young, it can all change in a
later version.

--- NEW FILE: runtests.c ---
#include <check.h>
#include <stdlib.h>

#include "expat.h"


static XML_Parser parser;


static void
basic_setup(void)
{
    parser = XML_ParserCreate("us-ascii");
}

static void
basic_teardown(void)
{
    if (parser != NULL) {
        XML_ParserFree(parser);
    }
}


START_TEST(test_nul_byte)
{
    char *text = "<doc>\0</doc>";

    if (parser == NULL)
        fail("Parser not created.");

    /* test that a NUL byte (in US-ASCII data) is an error */
    if (XML_Parse(parser, text, 12, 1))
        fail("Parser did not report error on NUL-byte.");
    fail_unless(XML_GetErrorCode(parser) == XML_ERROR_INVALID_TOKEN,
                "Got wrong error code for NUL-byte in US-ASCII encoding.");
}
END_TEST


START_TEST(test_u0000_char)
{
    char *text = "<doc>&#0;</doc>";

    if (parser == NULL)
        fail("Parser not created.");

    /* test that a NUL byte (in US-ASCII data) is an error */
    if (XML_Parse(parser, text, strlen(text), 1))
        fail("Parser did not report error on NUL-byte.");
    fail_unless(XML_GetErrorCode(parser) == XML_ERROR_BAD_CHAR_REF,
                "Got wrong error code for &#0;.");
}
END_TEST


static Suite *
make_basic_suite(void)
{
    Suite *s = suite_create("basic");
    TCase *tc_nulls = tcase_create("null characters");

    suite_add_tcase(s, tc_nulls);
    tcase_set_fixture(tc_nulls, basic_setup, basic_teardown);
    tcase_add_test(tc_nulls, test_nul_byte);
    tcase_add_test(tc_nulls, test_u0000_char);

    return s;
}


int
main(int argc, char *argv[])
{
    int nf;
    int verbosity = CRNORMAL;
    Suite *s = make_basic_suite();
    SRunner *sr = srunner_create(s);

    if (argc >= 2) {
        char *opt = argv[1];
        if (strcmp(opt, "-v") == 0 || strcmp(opt, "--verbose") == 0)
            verbosity = CRVERBOSE;
        else if (strcmp(opt, "-q") == 0 || strcmp(opt, "--quiet") == 0)
            verbosity = CRSILENT;
    }
    srunner_run_all(sr, verbosity);
    nf = srunner_ntests_failed(sr);
    srunner_free(sr);
    suite_free(s);

    return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
}