]> granicus.if.org Git - libexpat/commitdiff
Improve test coverage of XML_ResumeParser
authorRhodri James <rhodri@kynesim.co.uk>
Wed, 8 Feb 2017 13:06:32 +0000 (13:06 +0000)
committerSebastian Pipping <sebastian@pipping.org>
Mon, 13 Mar 2017 14:22:52 +0000 (15:22 +0100)
expat/tests/runtests.c

index 9d9d2126b6afbb15650e54219bf499d51bb74e99..a9268d37425742e065b0ac0e204e0e8f4620607e 100644 (file)
@@ -1762,6 +1762,27 @@ START_TEST(test_resume_invalid_parse)
 }
 END_TEST
 
+/* Test that re-suspended parses are correctly passed through */
+START_TEST(test_resume_resuspended)
+{
+    const char *text = "<doc>Hello<meep/>world</doc>";
+
+    resumable = XML_TRUE;
+    XML_SetCharacterDataHandler(parser,
+                                clearing_aborting_character_handler);
+    if (XML_Parse(parser, text, strlen(text), XML_TRUE) == XML_STATUS_ERROR)
+        xml_failure(parser);
+    resumable = XML_TRUE;
+    XML_SetCharacterDataHandler(parser,
+                                clearing_aborting_character_handler);
+    if (XML_ResumeParser(parser) != XML_STATUS_SUSPENDED)
+        fail("Resumption not suspended");
+    /* This one should succeed and finish up */
+    if (XML_ResumeParser(parser) != XML_STATUS_OK)
+        xml_failure(parser);
+}
+END_TEST
+
 /* Test resetting a subordinate parser does exactly nothing */
 static int XMLCALL
 external_entity_resetter(XML_Parser parser,
@@ -3252,6 +3273,7 @@ make_suite(void)
     tcase_add_test(tc_basic, test_attributes);
     tcase_add_test(tc_basic, test_reset_in_entity);
     tcase_add_test(tc_basic, test_resume_invalid_parse);
+    tcase_add_test(tc_basic, test_resume_resuspended);
     tcase_add_test(tc_basic, test_subordinate_reset);
     tcase_add_test(tc_basic, test_subordinate_suspend);
     tcase_add_test(tc_basic, test_explicit_encoding);