expat/tests runtests.c,1.36,1.37

"Fred L. Drake" <[email protected]>
Newsgroups gmane.text.xml.expat.cvs
Message-ID <[email protected]>
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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.