558452 fight with reg test and error report
* relaxng.c: tiny fix and provide more context on some errors
* result/relaxng/558452_0* test/relaxng/558452*: add some regression
tests for the bugs
* Makefile.am runtest.c: fight with the fact streaming error messages
can differ due to missing node context
diff --git a/Makefile.am b/Makefile.am
index ebaae31..807e21d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1053,7 +1053,7 @@
> res.$$name 2> err.$$name;\
grep "MORY ALLO" .memdump | grep -v "MEMORY ALLOCATED : 0";\
diff $(srcdir)/result/relaxng/"$$name"_"$$xno" res.$$name;\
- if [ "$$name" != "tutor10_1" -a "$$name" != "tutor10_2" -a "$$name" != "tutor3_2" -a "$$name" != "307377" ] ; then \
+ if [ "$$name" != "tutor10_1" -a "$$name" != "tutor10_2" -a "$$name" != "tutor3_2" -a "$$name" != "307377" -a "$$name" != "tutor8_2" ] ; then \
diff $(srcdir)/result/relaxng/"$$name"_"$$xno".err \
err.$$name | grep -v "error detected at";\
fi ; grep Unimplemented err.$$name`; \
diff --git a/relaxng.c b/relaxng.c
index a0ddcc6..6b83cfd 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -2374,6 +2374,9 @@
} else {
node = seq = NULL;
}
+ if ((node == NULL) && (seq == NULL)) {
+ node = ctxt->pnode;
+ }
xmlRelaxNGShowValidError(ctxt, err, node, seq, arg1, arg2);
}
/*
@@ -4682,6 +4685,7 @@
return(-1);
}
xmlHashScan(grammar->refs, xmlRelaxNGParseImportRef, ctxt);
+ return(0);
}
/**
diff --git a/result/relaxng/558452_0 b/result/relaxng/558452_0
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/558452_0
diff --git a/result/relaxng/558452_0.err b/result/relaxng/558452_0.err
new file mode 100644
index 0000000..fecc3e9
--- /dev/null
+++ b/result/relaxng/558452_0.err
@@ -0,0 +1 @@
+./test/relaxng/558452_0.xml validates
diff --git a/result/relaxng/558452_1 b/result/relaxng/558452_1
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/558452_1
diff --git a/result/relaxng/558452_1.err b/result/relaxng/558452_1.err
new file mode 100644
index 0000000..1e225be
--- /dev/null
+++ b/result/relaxng/558452_1.err
@@ -0,0 +1,2 @@
+./test/relaxng/558452_1.xml:2: element doc: Relax-NG validity error : Expecting an element , got nothing
+./test/relaxng/558452_1.xml fails to validate
diff --git a/result/relaxng/558452_2 b/result/relaxng/558452_2
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/558452_2
diff --git a/result/relaxng/558452_2.err b/result/relaxng/558452_2.err
new file mode 100644
index 0000000..d48287c
--- /dev/null
+++ b/result/relaxng/558452_2.err
@@ -0,0 +1 @@
+./test/relaxng/558452_2.xml validates
diff --git a/result/relaxng/558452_3 b/result/relaxng/558452_3
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/558452_3
diff --git a/result/relaxng/558452_3.err b/result/relaxng/558452_3.err
new file mode 100644
index 0000000..0d33cdb
--- /dev/null
+++ b/result/relaxng/558452_3.err
@@ -0,0 +1 @@
+./test/relaxng/558452_3.xml validates
diff --git a/result/relaxng/558452_4 b/result/relaxng/558452_4
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/558452_4
diff --git a/result/relaxng/558452_4.err b/result/relaxng/558452_4.err
new file mode 100644
index 0000000..22e12fa
--- /dev/null
+++ b/result/relaxng/558452_4.err
@@ -0,0 +1,2 @@
+./test/relaxng/558452_4.xml:6: element elem: Relax-NG validity error : Did not expect element elem there
+./test/relaxng/558452_4.xml fails to validate
diff --git a/result/relaxng/558452_err b/result/relaxng/558452_err
new file mode 100644
index 0000000..b162846
--- /dev/null
+++ b/result/relaxng/558452_err
@@ -0,0 +1 @@
+./test/relaxng/558452.rng validates
diff --git a/result/relaxng/558452_valid b/result/relaxng/558452_valid
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/result/relaxng/558452_valid
diff --git a/runtest.c b/runtest.c
index c821786..1d64695 100644
--- a/runtest.c
+++ b/runtest.c
@@ -3257,7 +3257,8 @@
* hack is also done in the Makefile
*/
if ((!strcmp(prefix, "tutor10_1")) || (!strcmp(prefix, "tutor10_2")) ||
- (!strcmp(prefix, "tutor3_2")) || (!strcmp(prefix, "307377")))
+ (!strcmp(prefix, "tutor3_2")) || (!strcmp(prefix, "307377")) ||
+ (!strcmp(prefix, "tutor8_2")))
disable_err = 1;
snprintf(pattern, 499, "./test/relaxng/%s_?.xml", prefix);
diff --git a/test/relaxng/558452.rng b/test/relaxng/558452.rng
new file mode 100644
index 0000000..80fbf7b
--- /dev/null
+++ b/test/relaxng/558452.rng
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<grammar ns="http://www.example.com/choice"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+ <start>
+ <element name="doc" ns="">
+ <ref name="elem"/>
+ <optional>
+ <ref name="elem"/>
+ <optional>
+ <ref name="elem"/>
+ </optional>
+ </optional>
+ </element>
+ </start>
+
+ <define name="elem">
+ <element name="elem" ns="">
+ <text/>
+ </element>
+ </define>
+</grammar>
diff --git a/test/relaxng/558452_0.xml b/test/relaxng/558452_0.xml
new file mode 100644
index 0000000..70440e2
--- /dev/null
+++ b/test/relaxng/558452_0.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<doc>
+ <elem/>
+ <elem/>
+ <elem/>
+</doc>
diff --git a/test/relaxng/558452_1.xml b/test/relaxng/558452_1.xml
new file mode 100644
index 0000000..2c569f9
--- /dev/null
+++ b/test/relaxng/558452_1.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<doc>
+</doc>
diff --git a/test/relaxng/558452_2.xml b/test/relaxng/558452_2.xml
new file mode 100644
index 0000000..6e24626
--- /dev/null
+++ b/test/relaxng/558452_2.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<doc>
+ <elem/>
+</doc>
diff --git a/test/relaxng/558452_3.xml b/test/relaxng/558452_3.xml
new file mode 100644
index 0000000..5ceb468
--- /dev/null
+++ b/test/relaxng/558452_3.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<doc>
+ <elem/>
+ <elem/>
+</doc>
diff --git a/test/relaxng/558452_4.xml b/test/relaxng/558452_4.xml
new file mode 100644
index 0000000..a1ee72b
--- /dev/null
+++ b/test/relaxng/558452_4.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<doc>
+ <elem/>
+ <elem/>
+ <elem/>
+ <elem/>
+</doc>