aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Veillard <veillard@src.gnome.org>2005-06-27 13:42:57 +0000
committerDaniel Veillard <veillard@src.gnome.org>2005-06-27 13:42:57 +0000
commitdbee0f19898734a172e40eb7d8a7169bbb5b3165 (patch)
treee13524ddb8336065944dc12a5eb1d25d15cb68b8
parentfc319af531511eddaaa8617cd66f49995f6e2612 (diff)
downloadandroid_external_libxml2-dbee0f19898734a172e40eb7d8a7169bbb5b3165.tar.gz
android_external_libxml2-dbee0f19898734a172e40eb7d8a7169bbb5b3165.tar.bz2
android_external_libxml2-dbee0f19898734a172e40eb7d8a7169bbb5b3165.zip
working some weird error reporting problem for DTD validation. augmented
* error.c valid.c: working some weird error reporting problem for DTD validation. * runtest.c: augmented with DTD validation tests * result/VC/OneID*: slight change in validation output. Daniel
-rw-r--r--ChangeLog7
-rw-r--r--error.c4
-rw-r--r--result/VC/OneID1
-rw-r--r--result/VC/OneID21
-rw-r--r--result/VC/OneID31
-rw-r--r--runtest.c38
-rw-r--r--valid.c11
7 files changed, 43 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index b812509b..13ccaa80 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon Jun 27 14:41:14 CEST 2005 Daniel Veillard <daniel@veillard.com>
+
+ * error.c valid.c: working some weird error reporting problem for
+ DTD validation.
+ * runtest.c: augmented with DTD validation tests
+ * result/VC/OneID*: slight change in validation output.
+
Mon Jun 27 13:44:41 CEST 2005 Daniel Veillard <daniel@veillard.com>
* runtest.c: added most HTML tests
diff --git a/error.c b/error.c
index d9505e41..1c2024be 100644
--- a/error.c
+++ b/error.c
@@ -512,8 +512,10 @@ __xmlRaiseError(xmlStructuredErrorFunc schannel,
} else if ((node != NULL) && (file == NULL)) {
int i;
- if ((node->doc != NULL) && (node->doc->URL != NULL))
+ if ((node->doc != NULL) && (node->doc->URL != NULL)) {
baseptr = node;
+ file = node->doc->URL;
+ }
for (i = 0;
((i < 10) && (node != NULL) && (node->type != XML_ELEMENT_NODE));
i++)
diff --git a/result/VC/OneID b/result/VC/OneID
index 4a73cbe5..a2c894f8 100644
--- a/result/VC/OneID
+++ b/result/VC/OneID
@@ -1,7 +1,6 @@
./test/VC/OneID:4: validity error : Element doc has too may ID attributes defined : id
<!ATTLIST doc id ID #IMPLIED>
^
-./test/VC/OneID:0: validity error : Element doc has too many ID attributes defined : id
./test/VC/OneID:4: validity error : Element doc has 2 ID attribute defined in the internal subset : id
<!ATTLIST doc id ID #IMPLIED>
^
diff --git a/result/VC/OneID2 b/result/VC/OneID2
index b2021b3d..2af04f1e 100644
--- a/result/VC/OneID2
+++ b/result/VC/OneID2
@@ -1,7 +1,6 @@
./test/VC/OneID2:3: validity error : Element doc has too may ID attributes defined : id
<!ATTLIST doc id ID #IMPLIED>
^
-validity error : Element doc has too many ID attributes defined : id
./test/VC/OneID2:3: validity error : Element doc has 2 ID attribute defined in the internal subset : id
<!ATTLIST doc id ID #IMPLIED>
^
diff --git a/result/VC/OneID3 b/result/VC/OneID3
index 994051a2..9accecee 100644
--- a/result/VC/OneID3
+++ b/result/VC/OneID3
@@ -1,7 +1,6 @@
test/VC/dtds/doc.dtd:2: validity error : Element doc has too may ID attributes defined : val
<!ATTLIST doc val ID #IMPLIED>
^
-./test/VC/OneID3:0: validity error : Element doc has too many ID attributes defined : val
test/VC/dtds/doc.dtd:2: validity error : Element doc has 2 ID attribute defined in the external subset : val
<!ATTLIST doc val ID #IMPLIED>
^
diff --git a/runtest.c b/runtest.c
index 2a42d1f7..978b2e0b 100644
--- a/runtest.c
+++ b/runtest.c
@@ -1537,7 +1537,7 @@ errParseTest(const char *filename, const char *result, const char *err,
int options) {
xmlDocPtr doc;
const char *base;
- int size, res;
+ int size, res = 0;
#ifdef LIBXML_HTML_ENABLED
if (options & XML_PARSE_HTML) {
@@ -1548,19 +1548,21 @@ errParseTest(const char *filename, const char *result, const char *err,
xmlGetWarningsDefaultValue = 1;
doc = xmlReadFile(filename, NULL, options);
}
- if (doc == NULL) {
- base = "";
- size = 0;
- } else {
+ 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
+ if (options & XML_PARSE_HTML) {
+ htmlDocDumpMemory(doc, (xmlChar **) &base, &size);
+ } else
#endif
- xmlDocDumpMemory(doc, (xmlChar **) &base, &size);
+ xmlDocDumpMemory(doc, (xmlChar **) &base, &size);
+ }
+ res = compareFileMem(result, base, size);
}
- xmlGetWarningsDefaultValue = 0;
- res = compareFileMem(result, base, size);
if (doc != NULL) {
if (base != NULL)
xmlFree((char *)base);
@@ -1576,6 +1578,9 @@ errParseTest(const char *filename, const char *result, const char *err,
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);
@@ -1872,6 +1877,17 @@ testDesc testDescriptions[] = {
saxParseTest, "./test/HTML/*", "result/HTML/", ".sax", NULL,
XML_PARSE_HTML },
#endif
+#ifdef LIBXML_VALID_ENABLED
+ { "Valid documents regression tests" ,
+ errParseTest, "./test/VCM/*", NULL, NULL, NULL,
+ XML_PARSE_DTDVALID },
+ { "Validity checking regression tests" ,
+ errParseTest, "./test/VC/*", "result/VC/", NULL, "",
+ XML_PARSE_DTDVALID },
+ { "General documents valid regression tests" ,
+ errParseTest, "./test/valid/*", "result/valid/", "", ".err",
+ XML_PARSE_DTDVALID },
+#endif
{NULL, NULL, NULL, NULL, NULL, NULL, 0}
};
diff --git a/valid.c b/valid.c
index f1d0db4d..96e3de6e 100644
--- a/valid.c
+++ b/valid.c
@@ -1868,6 +1868,7 @@ xmlScanAttributeDecl(xmlDtdPtr dtd, const xmlChar *elem) {
* xmlScanIDAttributeDecl:
* @ctxt: the validation context
* @elem: the element name
+ * @err: whether to raise errors here
*
* Verify that the element don't have too many ID attributes
* declared.
@@ -1875,7 +1876,7 @@ xmlScanAttributeDecl(xmlDtdPtr dtd, const xmlChar *elem) {
* Returns the number of ID attributes found.
*/
static int
-xmlScanIDAttributeDecl(xmlValidCtxtPtr ctxt, xmlElementPtr elem) {
+xmlScanIDAttributeDecl(xmlValidCtxtPtr ctxt, xmlElementPtr elem, int err) {
xmlAttributePtr cur;
int ret = 0;
@@ -1884,7 +1885,7 @@ xmlScanIDAttributeDecl(xmlValidCtxtPtr ctxt, xmlElementPtr elem) {
while (cur != NULL) {
if (cur->atype == XML_ATTRIBUTE_ID) {
ret ++;
- if (ret > 1)
+ if ((ret > 1) && (err))
xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_MULTIPLE_ID,
"Element %s has too many ID attributes defined : %s\n",
elem->name, cur->name, NULL);
@@ -2106,7 +2107,7 @@ xmlAddAttributeDecl(xmlValidCtxtPtr ctxt,
#ifdef LIBXML_VALID_ENABLED
if ((type == XML_ATTRIBUTE_ID) &&
- (xmlScanIDAttributeDecl(NULL, elemDef) != 0)) {
+ (xmlScanIDAttributeDecl(NULL, elemDef, 1) != 0)) {
xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_MULTIPLE_ID,
"Element %s has too may ID attributes defined : %s\n",
elem, name, NULL);
@@ -4042,7 +4043,7 @@ xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
xmlElementPtr elem = xmlGetDtdElementDesc(doc->intSubset,
attr->elem);
if (elem != NULL) {
- nbId = xmlScanIDAttributeDecl(NULL, elem);
+ nbId = xmlScanIDAttributeDecl(NULL, elem, 0);
} else {
xmlAttributeTablePtr table;
@@ -4064,7 +4065,7 @@ xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
int extId = 0;
elem = xmlGetDtdElementDesc(doc->extSubset, attr->elem);
if (elem != NULL) {
- extId = xmlScanIDAttributeDecl(NULL, elem);
+ extId = xmlScanIDAttributeDecl(NULL, elem, 0);
}
if (extId > 1) {
xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,