Add 'install-ptest' rule.
Print a standard result line for each test.

Signed-off-by: Mihaela Sendrea <mihaela.sendrea@enea.com>
Signed-off-by: Andrej Valek <andrej.valek@enea.com>
Upstream-Status: Backport

diff -uNr a/Makefile.am b/Makefile.am
--- a/Makefile.am	2016-05-22 03:49:02.000000000 +0200
+++ b/Makefile.am	2017-06-14 10:38:43.381305385 +0200
@@ -202,10 +202,24 @@
 #testOOM_DEPENDENCIES = $(DEPS)
 #testOOM_LDADD= $(LDADDS)
 
+install-ptest:
+	@(if [ -d .libs ] ; then cd .libs; fi; \
+	install $(noinst_PROGRAMS) $(DESTDIR))
+	cp -r $(srcdir)/test $(DESTDIR)
+	cp -r $(srcdir)/result $(DESTDIR)
+	cp -r $(srcdir)/python $(DESTDIR)
+	cp Makefile $(DESTDIR)
+	sed -i -e 's|^Makefile:|_Makefile:|' $(DESTDIR)/Makefile
+
 runtests:
 	[ -d test   ] || $(LN_S) $(srcdir)/test   .
 	[ -d result ] || $(LN_S) $(srcdir)/result .
-	$(CHECKER) ./runtest$(EXEEXT) && $(CHECKER) ./testrecurse$(EXEEXT) &&$(CHECKER) ./testapi$(EXEEXT) && $(CHECKER) ./testchar$(EXEEXT)&& $(CHECKER) ./testdict$(EXEEXT) && $(CHECKER) ./runxmlconf$(EXEEXT)
+	$(CHECKER) ./runtest$(EXEEXT) && \
+	    $(CHECKER) ./testrecurse$(EXEEXT) && \
+	    ASAN_OPTIONS="$$ASAN_OPTIONS:detect_leaks=0" $(CHECKER) ./testapi$(EXEEXT) && \
+	    $(CHECKER) ./testchar$(EXEEXT) && \
+	    $(CHECKER) ./testdict$(EXEEXT) && \
+	    $(CHECKER) ./runxmlconf$(EXEEXT)
 	@(if [ "$(PYTHON_SUBDIR)" != "" ] ; then cd python ; \
 	    $(MAKE) tests ; fi)
 
@@ -229,7 +243,7 @@
 
 APItests: testapi$(EXEEXT)
 	@echo "## Running the API regression tests this may take a little while"
-	-@($(CHECKER) $(top_builddir)/testapi -q)
+	-@(ASAN_OPTIONS="$$ASAN_OPTIONS:detect_leaks=0" $(CHECKER) $(top_builddir)/testapi -q)
 
 HTMLtests : testHTML$(EXEEXT)
 	@(echo > .memdump)
diff -uNr a/runsuite.c b/runsuite.c
--- a/runsuite.c	2013-04-12 16:17:11.462823238 +0200
+++ b/runsuite.c	2013-04-17 14:07:24.352693211 +0200
@@ -1162,6 +1162,7 @@
 
     if (logfile != NULL)
         fclose(logfile);
+    printf("%s: runsuite\n\n", (ret == 0) ? "PASS" : "FAIL");
     return(ret);
 }
 #else /* !SCHEMAS */
diff -uNr a/runtest.c b/runtest.c
--- a/runtest.c	2013-04-16 13:19:15.087997290 +0200
+++ b/runtest.c	2013-04-17 14:08:29.529949655 +0200
@@ -4386,6 +4386,7 @@
 	    err++;
 	}
     }
+    printf("%s: %s\n", (err == 0) ? "PASS" : "FAIL", tst->desc);
     return(err);
 }
 
@@ -4455,6 +4456,7 @@
     xmlCleanupParser();
     xmlMemoryDump();
 
+    printf("%s: runtest\n\n", (ret == 0) ? "PASS" : "FAIL");
     return(ret);
 }
 
diff -uNr a/runxmlconf.c b/runxmlconf.c
--- a/runxmlconf.c	2013-04-16 12:53:49.900982990 +0200
+++ b/runxmlconf.c	2013-04-17 14:09:21.111778104 +0200
@@ -595,6 +595,7 @@
 
     if (logfile != NULL)
         fclose(logfile);
+    printf("%s: runxmlconf\n", (ret == 0) ? "PASS" : "FAIL");
     return(ret);
 }
 
diff -uNr a/testapi.c b/testapi.c
--- a/testapi.c	2013-04-12 16:16:57.763417659 +0200
+++ b/testapi.c	2013-04-17 14:10:28.876924881 +0200
@@ -1245,49 +1245,91 @@
 testlibxml2(void)
 {
     int test_ret = 0;
+    int ret = 0;
 
-    test_ret += test_HTMLparser();
-    test_ret += test_HTMLtree();
-    test_ret += test_SAX2();
-    test_ret += test_c14n();
-    test_ret += test_catalog();
-    test_ret += test_chvalid();
-    test_ret += test_debugXML();
-    test_ret += test_dict();
-    test_ret += test_encoding();
-    test_ret += test_entities();
-    test_ret += test_hash();
-    test_ret += test_list();
-    test_ret += test_nanoftp();
-    test_ret += test_nanohttp();
-    test_ret += test_parser();
-    test_ret += test_parserInternals();
-    test_ret += test_pattern();
-    test_ret += test_relaxng();
-    test_ret += test_schemasInternals();
-    test_ret += test_schematron();
-    test_ret += test_tree();
-    test_ret += test_uri();
-    test_ret += test_valid();
-    test_ret += test_xinclude();
-    test_ret += test_xmlIO();
-    test_ret += test_xmlautomata();
-    test_ret += test_xmlerror();
-    test_ret += test_xmlmodule();
-    test_ret += test_xmlreader();
-    test_ret += test_xmlregexp();
-    test_ret += test_xmlsave();
-    test_ret += test_xmlschemas();
-    test_ret += test_xmlschemastypes();
-    test_ret += test_xmlstring();
-    test_ret += test_xmlunicode();
-    test_ret += test_xmlwriter();
-    test_ret += test_xpath();
-    test_ret += test_xpathInternals();
-    test_ret += test_xpointer();
+    test_ret += (ret = test_HTMLparser());
+    printf("%s: HTMLparser\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_HTMLtree());
+    printf("%s: HTMLtree\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_SAX2());
+    printf("%s: SAX2\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_c14n());
+    printf("%s: c14n\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_catalog());
+    printf("%s: catalog\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_chvalid());
+    printf("%s: chvalid\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_debugXML());
+    printf("%s: debugXML\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_dict());
+    printf("%s: dict\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_encoding());
+    printf("%s: encoding\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_entities());
+    printf("%s: entities\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_hash());
+    printf("%s: hash\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_list());
+    printf("%s: list\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_nanoftp());
+    printf("%s: nanoftp\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_nanohttp());
+    printf("%s: nanohttp\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_parser());
+    printf("%s: parser\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_parserInternals());
+    printf("%s: parserInternals\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_pattern());
+    printf("%s: pattern\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_relaxng());
+    printf("%s: relaxng\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_schemasInternals());
+    printf("%s: schemasInternals\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_schematron());
+    printf("%s: schematron\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_tree());
+    printf("%s: tree\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_uri());
+    printf("%s: uri\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_valid());
+    printf("%s: valid\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xinclude());
+    printf("%s: xinclude\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlIO());
+    printf("%s: xmlIO\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlautomata());
+    printf("%s: xmlautomata\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlerror());
+    printf("%s: xmlerror\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlmodule());
+    printf("%s: xmlmodule\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlreader());
+    printf("%s: xmlreader\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlregexp());
+    printf("%s: xmlregexp\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlsave());
+    printf("%s: xmlsave\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlschemas());
+    printf("%s: xmlschemas\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlschemastypes());
+    printf("%s: xmlschemastypes\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlstring());
+    printf("%s: xmlstring\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlunicode());
+    printf("%s: xmlunicode\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xmlwriter());
+    printf("%s: xmlwriter\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xpath());
+    printf("%s: xpath\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xpathInternals());
+    printf("%s: xpathInternals\n", (ret == 0) ? "PASS" : "FAIL");
+    test_ret += (ret = test_xpointer());
+    printf("%s: xpointer\n", (ret == 0) ? "PASS" : "FAIL");
 
     printf("Total: %d functions, %d tests, %d errors\n",
            function_tests, call_tests, test_ret);
+
+    printf("%s: testapi\n\n", (test_ret == 0) ? "PASS" : "FAIL");
     return(test_ret);
 }
 
diff -uNr a/testchar.c b/testchar.c
--- a/testchar.c	2013-04-17 10:50:30.250147418 +0200
+++ b/testchar.c	2013-04-18 16:11:28.455733800 +0200
@@ -23,7 +23,7 @@
 char document1[100] = "<doc>XXXX</doc>";
 char document2[100] = "<doc foo='XXXX'/>";
 
-static void testDocumentRangeByte1(xmlParserCtxtPtr ctxt, char *document,
+static int testDocumentRangeByte1(xmlParserCtxtPtr ctxt, char *document,
                   int len,  char *data, int forbid1, int forbid2) {
     int i;
     xmlDocPtr res;
@@ -37,33 +37,41 @@
 	res = xmlReadMemory(document, len, "test", NULL, 0);
 
 	if ((i == forbid1) || (i == forbid2)) {
-	    if ((lastError == 0) || (res != NULL))
+	    if ((lastError == 0) || (res != NULL)) {
 	        fprintf(stderr,
 		    "Failed to detect invalid char for Byte 0x%02X: %c\n",
 		        i, i);
+		return(1);
+		}
 	}
 
 	else if ((i == '<') || (i == '&')) {
-	    if ((lastError == 0) || (res != NULL))
+	    if ((lastError == 0) || (res != NULL)) {
 	        fprintf(stderr,
 		    "Failed to detect illegal char %c for Byte 0x%02X\n", i, i);
+			return(1);
+		}
 	}
 	else if (((i < 0x20) || (i >= 0x80)) &&
 	    (i != 0x9) && (i != 0xA) && (i != 0xD)) {
-	    if ((lastError != XML_ERR_INVALID_CHAR) && (res != NULL))
+	    if ((lastError != XML_ERR_INVALID_CHAR) && (res != NULL)) {
 	        fprintf(stderr,
 		    "Failed to detect invalid char for Byte 0x%02X\n", i);
+			return(1);
+		}
 	}
 	else if (res == NULL) {
 	    fprintf(stderr,
 		"Failed to parse valid char for Byte 0x%02X : %c\n", i, i);
+		return(1);
 	}
 	if (res != NULL)
 	    xmlFreeDoc(res);
     }
+	return(0);
 }
 
-static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
+static int testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
                   int len,  char *data) {
     int i, j;
     xmlDocPtr res;
@@ -80,10 +88,12 @@
 
 	/* if first bit of first char is set, then second bit must too */
 	if ((i & 0x80) && ((i & 0x40) == 0)) {
-	    if ((lastError == 0) || (res != NULL))
+	    if ((lastError == 0) || (res != NULL)) {
 		fprintf(stderr,
 		"Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
 			i, j);
+		return(1);
+		}
 	}
 
 	/*
@@ -91,10 +101,12 @@
 	 * bits must be 10
 	 */
 	else if ((i & 0x80) && ((j & 0xC0) != 0x80)) {
-	    if ((lastError == 0) || (res != NULL))
+	    if ((lastError == 0) || (res != NULL)) {
 		fprintf(stderr,
 	    "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
 			i, j);
+		return(1);
+		}
 	}
 
 	/*
@@ -102,10 +114,12 @@
 	 * than 0x80, i.e. one of bits 5 to 1 of i must be set
 	 */
 	else if ((i & 0x80) && ((i & 0x1E) == 0)) {
-	    if ((lastError == 0) || (res != NULL))
+	    if ((lastError == 0) || (res != NULL)) {
 		fprintf(stderr,
 	    "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
 			i, j);
+		return(1);
+		}
 	}
 
 	/*
@@ -113,10 +127,12 @@
 	 * at least 3 bytes, but we give only 2 !
 	 */
 	else if ((i & 0xE0) == 0xE0) {
-	    if ((lastError == 0) || (res != NULL))
+	    if ((lastError == 0) || (res != NULL)) {
 		fprintf(stderr,
 	    "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x00\n",
 			i, j);
+		return(1);
+		}
 	}
 
 	/*
@@ -125,11 +141,13 @@
 	else if ((lastError != 0) || (res == NULL)) {
 	    fprintf(stderr,
 		"Failed to parse document for Bytes 0x%02X 0x%02X\n", i, j);
+		return(1);
 	}
 	if (res != NULL)
 	    xmlFreeDoc(res);
     }
     }
+	return(0);
 }
 
 /**
@@ -141,9 +159,10 @@
  * CDATA in text or in attribute values.
  */
 
-static void testDocumentRanges(void) {
+static int testDocumentRanges(void) {
     xmlParserCtxtPtr ctxt;
     char *data;
+    int test_ret = 0;
 
     /*
      * Set up a parsing context using the first document as
@@ -152,7 +171,7 @@
     ctxt = xmlNewParserCtxt();
     if (ctxt == NULL) {
         fprintf(stderr, "Failed to allocate parser context\n");
-	return;
+	return(1);
     }
 
     printf("testing 1 byte char in document: 1");
@@ -163,7 +182,7 @@
     data[2] = ' ';
     data[3] = ' ';
     /* test 1 byte injection at beginning of area */
-    testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
+    test_ret += testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
                            data, -1, -1);
     printf(" 2");
     fflush(stdout);
@@ -172,7 +191,7 @@
     data[2] = ' ';
     data[3] = ' ';
     /* test 1 byte injection at end of area */
-    testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
+    test_ret += testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
                            data + 3, -1, -1);
 
     printf(" 3");
@@ -183,7 +202,7 @@
     data[2] = ' ';
     data[3] = ' ';
     /* test 1 byte injection at beginning of area */
-    testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
+    test_ret += testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
                            data, '\'', -1);
     printf(" 4");
     fflush(stdout);
@@ -192,7 +211,7 @@
     data[2] = ' ';
     data[3] = ' ';
     /* test 1 byte injection at end of area */
-    testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
+    test_ret += testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
                            data + 3, '\'', -1);
     printf(" done\n");
 
@@ -204,7 +223,7 @@
     data[2] = ' ';
     data[3] = ' ';
     /* test 2 byte injection at beginning of area */
-    testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
+    test_ret += testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
                            data);
     printf(" 2");
     fflush(stdout);
@@ -213,7 +232,7 @@
     data[2] = ' ';
     data[3] = ' ';
     /* test 2 byte injection at end of area */
-    testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
+    test_ret += testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
                            data + 2);
 
     printf(" 3");
@@ -224,7 +243,7 @@
     data[2] = ' ';
     data[3] = ' ';
     /* test 2 byte injection at beginning of area */
-    testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
+    test_ret += testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
                            data);
     printf(" 4");
     fflush(stdout);
@@ -233,14 +252,15 @@
     data[2] = ' ';
     data[3] = ' ';
     /* test 2 byte injection at end of area */
-    testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
+    test_ret += testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
                            data + 2);
     printf(" done\n");
 
     xmlFreeParserCtxt(ctxt);
+    return(test_ret);
 }
 
-static void testCharRangeByte1(xmlParserCtxtPtr ctxt, char *data) {
+static int testCharRangeByte1(xmlParserCtxtPtr ctxt, char *data) {
     int i = 0;
     int len, c;
 
@@ -255,19 +275,25 @@
         c = xmlCurrentChar(ctxt, &len);
 	if ((i == 0) || (i >= 0x80)) {
 	    /* we must see an error there */
-	    if (lastError != XML_ERR_INVALID_CHAR)
+	    if (lastError != XML_ERR_INVALID_CHAR) {
 	        fprintf(stderr,
 		    "Failed to detect invalid char for Byte 0x%02X\n", i);
+			return(1);
+		}
 	} else if (i == 0xD) {
-	    if ((c != 0xA) || (len != 1))
+	    if ((c != 0xA) || (len != 1)) {
 		fprintf(stderr, "Failed to convert char for Byte 0x%02X\n", i);
+		return(1);
+		}
 	} else if ((c != i) || (len != 1)) {
 	    fprintf(stderr, "Failed to parse char for Byte 0x%02X\n", i);
+		return(1);
 	}
     }
+	return(0);
 }
 
-static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
+static int testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
     int i, j;
     int len, c;
 
@@ -284,10 +310,12 @@
 
 	    /* if first bit of first char is set, then second bit must too */
 	    if ((i & 0x80) && ((i & 0x40) == 0)) {
-		if (lastError != XML_ERR_INVALID_CHAR)
+		if (lastError != XML_ERR_INVALID_CHAR) {
 		    fprintf(stderr,
 		    "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
 		            i, j);
+			return(1);
+			}
 	    }
 
 	    /*
@@ -295,10 +323,12 @@
 	     * bits must be 10
 	     */
 	    else if ((i & 0x80) && ((j & 0xC0) != 0x80)) {
-		if (lastError != XML_ERR_INVALID_CHAR)
+		if (lastError != XML_ERR_INVALID_CHAR) {
 		    fprintf(stderr,
 		"Failed to detect invalid char for Bytes 0x%02X 0x%02X: %d\n",
 		            i, j, c);
+			return(1);
+			}
 	    }
 
 	    /*
@@ -306,10 +336,12 @@
 	     * than 0x80, i.e. one of bits 5 to 1 of i must be set
 	     */
 	    else if ((i & 0x80) && ((i & 0x1E) == 0)) {
-		if (lastError != XML_ERR_INVALID_CHAR)
+		if (lastError != XML_ERR_INVALID_CHAR) {
 		    fprintf(stderr,
 		"Failed to detect invalid char for Bytes 0x%02X 0x%02X: %d\n",
 		            i, j, c);
+			return(1);
+			}
 	    }
 
 	    /*
@@ -317,10 +349,12 @@
 	     * at least 3 bytes, but we give only 2 !
 	     */
 	    else if ((i & 0xE0) == 0xE0) {
-		if (lastError != XML_ERR_INVALID_CHAR)
+		if (lastError != XML_ERR_INVALID_CHAR) {
 		    fprintf(stderr,
 		"Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x00\n",
 		            i, j);
+			return(1);
+			}
 	    }
 
             /*
@@ -329,6 +363,7 @@
 	    else if ((lastError != 0) || (len != 2)) {
 		fprintf(stderr,
 		    "Failed to parse char for Bytes 0x%02X 0x%02X\n", i, j);
+		return(1);
 	    }
 
             /*
@@ -338,12 +373,14 @@
 		fprintf(stderr,
 	"Failed to parse char for Bytes 0x%02X 0x%02X: expect %d got %d\n",
 	                i, j, ((j & 0x3F) + ((i & 0x1F) << 6)), c);
+		return(1);
 	    }
         }
     }
+	return(0);
 }
 
-static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
+static int testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
     int i, j, k, K;
     int len, c;
     unsigned char lows[6] = {0, 0x80, 0x81, 0xC1, 0xFF, 0xBF};
@@ -368,20 +405,24 @@
 	 * at least 4 bytes, but we give only 3 !
 	 */
 	if ((i & 0xF0) == 0xF0) {
-	    if (lastError != XML_ERR_INVALID_CHAR)
+	    if (lastError != XML_ERR_INVALID_CHAR) {
 		fprintf(stderr,
 	"Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
 			i, j, K, data[3]);
+		return(1);
+		}
 	}
 
         /*
 	 * The second and the third bytes must start with 10
 	 */
 	else if (((j & 0xC0) != 0x80) || ((K & 0xC0) != 0x80)) {
-	    if (lastError != XML_ERR_INVALID_CHAR)
+	    if (lastError != XML_ERR_INVALID_CHAR) {
 		fprintf(stderr,
 	"Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X\n",
 			i, j, K);
+		return(1);
+		}
 	}
 
 	/*
@@ -390,10 +431,12 @@
 	 * the 6th byte of data[1] must be set
 	 */
 	else if (((i & 0xF) == 0) && ((j & 0x20) == 0)) {
-	    if (lastError != XML_ERR_INVALID_CHAR)
+	    if (lastError != XML_ERR_INVALID_CHAR) {
 		fprintf(stderr,
 	    "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X\n",
 			i, j, K);
+		return(1);
+		}
 	}
 
         /*
@@ -401,10 +444,12 @@
 	 */
 	else if (((value > 0xD7FF) && (value <0xE000)) ||
 	         ((value > 0xFFFD) && (value <0x10000))) {
-	    if (lastError != XML_ERR_INVALID_CHAR)
+	    if (lastError != XML_ERR_INVALID_CHAR) {
 		fprintf(stderr,
 	"Failed to detect invalid char 0x%04X for Bytes 0x%02X 0x%02X 0x%02X\n",
 			value, i, j, K);
+		return(1);
+		}
 	}
 
 	/*
@@ -414,6 +459,7 @@
 	    fprintf(stderr,
 		"Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n",
 		    i, j, K);
+		return(1);
 	}
 
 	/*
@@ -423,13 +469,15 @@
 	    fprintf(stderr,
     "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n",
 		i, j, data[2], value, c);
+		return(1);
 	}
     }
     }
     }
+	return(0);
 }
 
-static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
+static int testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
     int i, j, k, K, l, L;
     int len, c;
     unsigned char lows[6] = {0, 0x80, 0x81, 0xC1, 0xFF, 0xBF};
@@ -458,10 +506,12 @@
 	 * at least 5 bytes, but we give only 4 !
 	 */
 	if ((i & 0xF8) == 0xF8) {
-	    if (lastError != XML_ERR_INVALID_CHAR)
+	    if (lastError != XML_ERR_INVALID_CHAR) {
 		fprintf(stderr,
   "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
 			i, j, K, data[3]);
+		return(1);
+		}
 	}
 
         /*
@@ -469,10 +519,12 @@
 	 */
 	else if (((j & 0xC0) != 0x80) || ((K & 0xC0) != 0x80) ||
 	         ((L & 0xC0) != 0x80)) {
-	    if (lastError != XML_ERR_INVALID_CHAR)
+	    if (lastError != XML_ERR_INVALID_CHAR) {
 		fprintf(stderr,
 	"Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
 			i, j, K, L);
+		return(1);
+		}
 	}
 
 	/*
@@ -481,10 +533,12 @@
 	 * the 6 or 5th byte of j must be set
 	 */
 	else if (((i & 0x7) == 0) && ((j & 0x30) == 0)) {
-	    if (lastError != XML_ERR_INVALID_CHAR)
+	    if (lastError != XML_ERR_INVALID_CHAR) {
 		fprintf(stderr,
 	"Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
 			i, j, K, L);
+		return(1);
+		}
 	}
 
         /*
@@ -493,10 +547,12 @@
 	else if (((value > 0xD7FF) && (value <0xE000)) ||
 	         ((value > 0xFFFD) && (value <0x10000)) ||
 		 (value > 0x10FFFF)) {
-	    if (lastError != XML_ERR_INVALID_CHAR)
+	    if (lastError != XML_ERR_INVALID_CHAR) {
 		fprintf(stderr,
 "Failed to detect invalid char 0x%04X for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
 			value, i, j, K, L);
+		return(1);
+		}
 	}
 
 	/*
@@ -506,6 +562,7 @@
 	    fprintf(stderr,
 		"Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n",
 		    i, j, K);
+		return(1);
 	}
 
 	/*
@@ -515,11 +572,13 @@
 	    fprintf(stderr,
     "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n",
 		i, j, data[2], value, c);
+		return(1);
 	}
     }
     }
     }
     }
+	return(0);
 }
 
 /**
@@ -530,11 +589,12 @@
  * cover the full range of UTF-8 chars accepted by XML-1.0
  */
 
-static void testCharRanges(void) {
+static int testCharRanges(void) {
     char data[5];
     xmlParserCtxtPtr ctxt;
     xmlParserInputBufferPtr buf;
     xmlParserInputPtr input;
+    int test_ret = 0;
 
     memset(data, 0, 5);
 
@@ -545,17 +605,19 @@
     ctxt = xmlNewParserCtxt();
     if (ctxt == NULL) {
         fprintf(stderr, "Failed to allocate parser context\n");
-	return;
+	return(1);
     }
     buf = xmlParserInputBufferCreateStatic(data, sizeof(data),
                                            XML_CHAR_ENCODING_NONE);
     if (buf == NULL) {
         fprintf(stderr, "Failed to allocate input buffer\n");
+        test_ret = 1;
 	goto error;
     }
     input = xmlNewInputStream(ctxt);
     if (input == NULL) {
         xmlFreeParserInputBuffer(buf);
+        test_ret = 1;
 	goto error;
     }
     input->filename = NULL;
@@ -567,25 +629,28 @@
 
     printf("testing char range: 1");
     fflush(stdout);
-    testCharRangeByte1(ctxt, data);
+    test_ret += testCharRangeByte1(ctxt, data);
     printf(" 2");
     fflush(stdout);
-    testCharRangeByte2(ctxt, data);
+    test_ret += testCharRangeByte2(ctxt, data);
     printf(" 3");
     fflush(stdout);
-    testCharRangeByte3(ctxt, data);
+    test_ret += testCharRangeByte3(ctxt, data);
     printf(" 4");
     fflush(stdout);
-    testCharRangeByte4(ctxt, data);
+    test_ret += testCharRangeByte4(ctxt, data);
     printf(" done\n");
     fflush(stdout);
 
 error:
     xmlFreeParserCtxt(ctxt);
+    return(test_ret);
 }
 
 int main(void) {
 
+    int ret = 0;
+
     /*
      * this initialize the library and check potential ABI mismatches
      * between the version it was compiled for and the actual shared
@@ -602,8 +667,9 @@
     /*
      * Run the tests
      */
-    testCharRanges();
-    testDocumentRanges();
+    ret += testCharRanges();
+    ret += testDocumentRanges();
+    printf("%s: testchar\n\n", (ret == 0) ? "PASS" : "FAIL");
 
     /*
      * Cleanup function for the XML library.
diff -uNr a/testdict.c b/testdict.c
--- a/testdict.c	2013-04-16 15:08:42.971177193 +0200
+++ b/testdict.c	2013-04-18 15:59:00.699482439 +0200
@@ -440,5 +440,6 @@
     clean_strings();
     xmlCleanupParser();
     xmlMemoryDump();
+    printf("%s: testdict\n\n", (ret == 0) ? "PASS" : "FAIL");
     return(ret);
 }
diff -uNr a/testlimits.c b/testlimits.c
--- a/testlimits.c	2013-04-12 16:16:36.180354177 +0200
+++ b/testlimits.c	2013-04-17 14:03:17.203092987 +0200
@@ -1630,5 +1630,6 @@
     xmlCleanupParser();
     xmlMemoryDump();
 
+    printf("%s: testlimits\n", (ret == 0) ? "PASS" : "FAIL");
     return(ret);
 }
diff -uNr a/testrecurse.c b/testrecurse.c
--- a/testrecurse.c	2013-04-16 13:19:49.366536295 +0200
+++ b/testrecurse.c	2013-04-17 14:06:27.367091622 +0200
@@ -892,6 +892,7 @@
 	    err++;
 	}
     }
+    printf("%s: %s\n", (err == 0) ? "PASS" : "FAIL", tst->desc);
     return(err);
 }
 
@@ -961,5 +962,6 @@
     xmlCleanupParser();
     xmlMemoryDump();
 
+    printf("%s: testrecurse\n\n", (ret == 0) ? "PASS" : "FAIL");
     return(ret);
 }
