improved the behaviour a bit as well as the logs fixed a few more bugs

* check-xml-test-suite.py: improved the behaviour a bit as
  well as the logs
* parser.c valid.c SAX.c: fixed a few more bugs
  "Ran 1819 tests: 1778 suceeded, 41 failed, and 0 generated an error"
Daniel
diff --git a/ChangeLog b/ChangeLog
index 037d9ef..b192662 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sun Feb 17 23:45:40 CET 2002 Daniel Veillard <daniel@veillard.com>
+
+	* check-xml-test-suite.py: improved the behaviour a bit as
+	  well as the logs
+	* parser.c valid.c SAX.c: fixed a few more bugs 
+	  "Ran 1819 tests: 1778 suceeded, 41 failed, and 0 generated an error"
+
 Sun Feb 17 20:41:37 CET 2002 Daniel Veillard <daniel@veillard.com>
 
 	* check-xml-test-suite.py: python script to run regression tests
diff --git a/SAX.c b/SAX.c
index da13370..022c0fb 100644
--- a/SAX.c
+++ b/SAX.c
@@ -479,6 +479,7 @@
             elem, fullname, type, def, defaultValue);
 #endif
     name = xmlSplitQName(ctxt, fullname, &prefix);
+    ctxt->vctxt.valid = 1;
     if (ctxt->inSubset == 1)
 	attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->intSubset, elem,
 	       name, prefix, (xmlAttributeType) type,
@@ -493,7 +494,8 @@
 	     "SAX.attributeDecl(%s) called while not in subset\n", name);
 	return;
     }
-    /* if (attr == 0) ctxt->valid = 0; */
+    if (ctxt->vctxt.valid == 0)
+	ctxt->valid = 0;
     if (ctxt->validate && ctxt->wellFormed &&
         ctxt->myDoc && ctxt->myDoc->intSubset)
 	ctxt->valid &= xmlValidateAttributeDecl(&ctxt->vctxt, ctxt->myDoc,
@@ -892,10 +894,25 @@
 	    val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
 		                          0,0,0);
 	    ctxt->depth--;
+	    
 	    if (val == NULL)
 		ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
 				ctxt->myDoc, ctxt->node, ret, value);
 	    else {
+		xmlChar *nvalnorm;
+
+		/*
+		 * Do the last stage of the attribute normalization
+		 * It need to be done twice ... it's an extra burden related
+		 * to the ability to keep references in attributes
+		 */
+		nvalnorm = xmlValidNormalizeAttributeValue(ctxt->myDoc,
+					    ctxt->node, fullname, val);
+		if (nvalnorm != NULL) {
+		    xmlFree(val);
+		    val = nvalnorm;
+		}
+
 		ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
 			        ctxt->myDoc, ctxt->node, ret, val);
                 xmlFree(val);
diff --git a/check-xml-test-suite.py b/check-xml-test-suite.py
index 3bf9f9e..83546e4 100755
--- a/check-xml-test-suite.py
+++ b/check-xml-test-suite.py
@@ -17,10 +17,17 @@
 # Error and warning handlers
 #
 error_nr = 0
+error_msg = ''
 def errorHandler(ctx, str):
     global error_nr
+    global error_msg
 
     error_nr = error_nr + 1
+    if len(error_msg) < 300:
+        if len(error_msg) == 0 or error_msg[-1] == '\n':
+	    error_msg = error_msg + "   >>" + str
+	else:
+	    error_msg = error_msg + str
 
 libxml2.registerErrorHandler(errorHandler, None)
 
@@ -56,9 +63,11 @@
 
 def testNotWf(filename, id):
     global error_nr
+    global error_msg
     global log
 
     error_nr = 0
+    error_msg = ''
 
     ctxt = libxml2.createFileParserCtxt(filename)
     if ctxt == None:
@@ -75,9 +84,11 @@
 
 def testNotWfEnt(filename, id):
     global error_nr
+    global error_msg
     global log
 
     error_nr = 0
+    error_msg = ''
 
     ctxt = libxml2.createFileParserCtxt(filename)
     if ctxt == None:
@@ -95,10 +106,11 @@
 
 def testNotWfEntDtd(filename, id):
     global error_nr
+    global error_msg
     global log
 
-    error = ''
     error_nr = 0
+    error_msg = ''
 
     ctxt = libxml2.createFileParserCtxt(filename)
     if ctxt == None:
@@ -117,10 +129,11 @@
 
 def testWfEntDtd(filename, id):
     global error_nr
+    global error_msg
     global log
 
-    error = ''
     error_nr = 0
+    error_msg = ''
 
     ctxt = libxml2.createFileParserCtxt(filename)
     if ctxt == None:
@@ -144,9 +157,11 @@
 
 def testInvalid(filename, id):
     global error_nr
+    global error_msg
     global log
 
     error_nr = 0
+    error_msg = ''
 
     ctxt = libxml2.createFileParserCtxt(filename)
     if ctxt == None:
@@ -176,8 +191,10 @@
 
 def testValid(filename, id):
     global error_nr
+    global error_msg
 
     error_nr = 0
+    error_msg = ''
 
     ctxt = libxml2.createFileParserCtxt(filename)
     if ctxt == None:
@@ -213,6 +230,7 @@
     global test_failed
     global test_error
     global test_succeed
+    global error_msg
     global log
 
     uri = test.prop('URI')
@@ -269,11 +287,17 @@
     # Log the ontext
     if res != 1:
 	log.write("   File: %s\n" % (URI))
-	content = test.content
+	content = string.strip(test.content)
+	while content[-1] == '\n':
+	    content = content[0:-1]
 	if extra != None:
-	    log.write("   %s:%s:%s\n\n" % (type, extra, content))
+	    log.write("   %s:%s:%s\n" % (type, extra, content))
 	else:
 	    log.write("   %s:%s\n\n" % (type, content))
+	if error_msg != '':
+	    log.write("   ----\n%s   ----\n" % (error_msg))
+	    error_msg = ''
+	log.write("\n")
 
     return 0
 	    
diff --git a/parser.c b/parser.c
index fcb9e85..c0d1348 100644
--- a/parser.c
+++ b/parser.c
@@ -7625,7 +7625,10 @@
 	(!ctxt->disableSAX))
         ctxt->sax->endDocument(ctxt->userData);
 
-    if (! ctxt->wellFormed) return(-1);
+    if (! ctxt->wellFormed) {
+	ctxt->valid = 0;
+	return(-1);
+    }
     return(0);
 }
 
diff --git a/valid.c b/valid.c
index 55b8212..de44a55 100644
--- a/valid.c
+++ b/valid.c
@@ -1356,10 +1356,13 @@
     if (elemDef != NULL) {
 
         if ((type == XML_ATTRIBUTE_ID) &&
-	    (xmlScanIDAttributeDecl(NULL, elemDef) != 0))
+	    (xmlScanIDAttributeDecl(NULL, elemDef) != 0)) {
 	    VERROR(ctxt->userData, 
 	   "Element %s has too may ID attributes defined : %s\n",
 		   elem, name);
+	    ctxt->valid = 0;
+	}
+
 	/*
 	 * Insert namespace default def first they need to be
 	 * processed first.
@@ -4466,6 +4469,7 @@
 			    VERROR(ctxt->userData,
    "Element %s namespace name for default namespace does not match the DTD\n",
 				   elem->name);
+			    ret = 0;
 			}
 			goto found;
 		    }
@@ -4481,6 +4485,7 @@
 			    VERROR(ctxt->userData,
 		   "Element %s namespace name for %s doesn't match the DTD\n",
 				   elem->name, ns->prefix);
+			    ret = 0;
 			}
 			goto found;
 		    }