From 87a99270423967eb49a865ca78bc31c01050ce2f Mon Sep 17 00:00:00 2001 From: Finn Barber Date: Thu, 26 Aug 2021 11:50:41 +0100 Subject: Added regression tests for xmlReadFd() and htmlReadFd() --- runtest.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'runtest.c') diff --git a/runtest.c b/runtest.c index 0f178cb0..463bdbdd 100644 --- a/runtest.c +++ b/runtest.c @@ -2132,6 +2132,75 @@ errParseTest(const char *filename, const char *result, const char *err, return(0); } +/** + * fdParseTest: + * @filename: the file to parse + * @result: the file with expected result + * @err: the file with error messages + * + * Parse a file using the xmlReadFd API and check for errors. + * + * Returns 0 in case of success, an error code otherwise + */ +static int +fdParseTest(const char *filename, const char *result, const char *err, + int options) { + xmlDocPtr doc; + const char *base = NULL; + int size, res = 0; + + nb_tests++; + int fd = open(filename, RD_FLAGS); +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) { + doc = htmlReadFd(fd, filename, NULL, options); + } else +#endif + { + xmlGetWarningsDefaultValue = 1; + doc = xmlReadFd(fd, filename, NULL, options); + } + close(fd); + xmlGetWarningsDefaultValue = 0; + if (result) { + if (doc == NULL) { + base = ""; + size = 0; + } else { +#ifdef LIBXML_HTML_ENABLED + if (options & XML_PARSE_HTML) { + htmlDocDumpMemory(doc, (xmlChar **) &base, &size); + } else +#endif + xmlDocDumpMemory(doc, (xmlChar **) &base, &size); + } + res = compareFileMem(result, base, size); + } + if (doc != NULL) { + if (base != NULL) + xmlFree((char *)base); + xmlFreeDoc(doc); + } + if (res != 0) { + fprintf(stderr, "Result for %s failed in %s\n", filename, result); + return(-1); + } + if (err != NULL) { + res = compareFileMem(err, testErrors, testErrorsSize); + if (res != 0) { + fprintf(stderr, "Error for %s failed\n", filename); + return(-1); + } + } else if (options & XML_PARSE_DTDVALID) { + if (testErrorsSize != 0) + fprintf(stderr, "Validation for %s failed\n", filename); + } + + return(0); +} + + + #ifdef LIBXML_READER_ENABLED /************************************************************************ * * @@ -4249,6 +4318,9 @@ testDesc testDescriptions[] = { { "Error cases regression tests", errParseTest, "./test/errors/*.xml", "result/errors/", "", ".err", 0 }, + { "Error cases regression tests from file descriptor", + fdParseTest, "./test/errors/*.xml", "result/errors/", "", ".err", + 0 }, { "Error cases regression tests with entity substitution", errParseTest, "./test/errors/*.xml", "result/errors/", NULL, ".ent", XML_PARSE_NOENT }, @@ -4292,6 +4364,9 @@ testDesc testDescriptions[] = { { "HTML regression tests" , errParseTest, "./test/HTML/*", "result/HTML/", "", ".err", XML_PARSE_HTML }, + { "HTML regression tests from file descriptor", + fdParseTest, "./test/HTML/*", "result/HTML/", "", ".err", + XML_PARSE_HTML }, #ifdef LIBXML_PUSH_ENABLED { "Push HTML regression tests" , pushParseTest, "./test/HTML/*", "result/HTML/", "", ".err", -- cgit v1.2.1