[Expat-checkins] expat/tests runtests.c,1.36,1.37
Fred L. Drake
fdrake@users.sourceforge.net
Thu Nov 7 23:02:31 2002
Update of /cvsroot/expat/expat/tests
In directory usw-pr-cvs1:/tmp/cvs-serv8252
Modified Files:
runtests.c
Log Message:
Added regression test for SF bug #616863.
Cleaned up some indentation.
Report the version of the Expat library if not in "silent" mode.
Index: runtests.c
===================================================================
RCS file: /cvsroot/expat/expat/tests/runtests.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- runtests.c 8 Oct 2002 17:04:55 -0000 1.36
+++ runtests.c 7 Nov 2002 23:02:26 -0000 1.37
@@ -794,7 +794,7 @@
/* Regression test for SF bug #620343. */
static void
start_element_fail(void *userData,
- const XML_Char *name, const XML_Char **atts)
+ const XML_Char *name, const XML_Char **atts)
{
/* We should never get here. */
fail("should never reach start_element_fail()");
@@ -802,8 +802,8 @@
static void
start_ns_clearing_start_element(void *userData,
- const XML_Char *prefix,
- const XML_Char *uri)
+ const XML_Char *prefix,
+ const XML_Char *uri)
{
XML_SetStartElementHandler((XML_Parser) userData, NULL);
}
@@ -824,6 +824,63 @@
}
END_TEST
+/* Regression test for SF bug #616863. */
+static int
+external_entity_handler(XML_Parser parser,
+ const XML_Char *context,
+ const XML_Char *base,
+ const XML_Char *systemId,
+ const XML_Char *publicId)
+{
+ int callno = 1 + (int)XML_GetUserData(parser);
+ char *text;
+ XML_Parser p2;
+
+ if (callno == 1)
+ text = ("<!ELEMENT doc (e+)>\n"
+ "<!ATTLIST doc xmlns CDATA #IMPLIED>\n"
+ "<!ELEMENT e EMPTY>\n");
+ else
+ text = ("<?xml version='1.0' encoding='us-ascii'?>"
+ "<e/>");
+
+ XML_SetUserData(parser, (void *) callno);
+ p2 = XML_ExternalEntityParserCreate(parser, context, NULL);
+ if (XML_Parse(p2, text, strlen(text), 1) == XML_STATUS_ERROR) {
+ xml_failure(p2);
+ return 0;
+ }
+ XML_ParserFree(p2);
+ return 1;
+}
+
+static void
+start_element_dummy(void *userData,
+ const XML_Char *name, const XML_Char **atts)
+{
+ return;
+}
+
+START_TEST(test_default_ns_from_ext_subset_and_ext_ge)
+{
+ char *text =
+ "<?xml version='1.0'?>\n"
+ "<!DOCTYPE doc SYSTEM 'http://xml.libexpat.org/doc.dtd' [\n"
+ " <!ENTITY en SYSTEM 'http://xml.libexpat.org/entity.ent'>\n"
+ "]>\n"
+ "<doc xmlns='http://xml.libexpat.org/ns1'>\n"
+ "&en;\n"
+ "</doc>";
+
+ XML_SetParamEntityParsing(parser, XML_PARAM_ENTITY_PARSING_ALWAYS);
+ XML_SetExternalEntityRefHandler(parser, external_entity_handler);
+ /* We actually need to set this handler to tickle this bug. */
+ XML_SetStartElementHandler(parser, start_element_dummy);
+ XML_SetUserData(parser, NULL);
+ if (XML_Parse(parser, text, strlen(text), 1) == XML_STATUS_ERROR)
+ xml_failure(parser);
+}
+END_TEST
static Suite *
make_basic_suite(void)
@@ -871,6 +928,7 @@
tcase_add_test(tc_namespace, test_ns_tagname_overwrite);
tcase_add_test(tc_namespace, test_ns_tagname_overwrite_triplet);
tcase_add_test(tc_namespace, test_start_ns_clears_start_element);
+ tcase_add_test(tc_namespace, test_default_ns_from_ext_subset_and_ext_ge);
return s;
}
@@ -909,6 +967,8 @@
}
if (forking_set)
srunner_set_fork_status(sr, forking ? CK_FORK : CK_NOFORK);
+ if (verbosity != CK_SILENT)
+ printf("Expat version: %s\n", XML_ExpatVersion());
srunner_run_all(sr, verbosity);
nf = srunner_ntests_failed(sr);
srunner_free(sr);
More information about the Expat-checkins
mailing list