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;
}