[libxml2] Added regression tests for xmlReadFd() and htmlReadFd()



commit 87a99270423967eb49a865ca78bc31c01050ce2f
Author: Finn Barber <finnbarber protonmail com>
Date:   Thu Aug 26 11:50:41 2021 +0100

    Added regression tests for xmlReadFd() and htmlReadFd()

 runtest.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)
---
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",


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]