blob: 80678efcfee6c7361c58d6b9b353dbacc3c8a26b [file] [log] [blame]
Andrew Geissler517393d2023-01-13 08:55:19 -06001Backport the following patches to fix the reader2 and runsuite test cases:
2
3b92768cd tests: Enable "runsuite" test
40ac8c15e python/tests/reader2: use absolute paths everywhere
5b9ba5e1d python/tests/reader2: always exit(1) if a test fails
6
7Upstream-Status: Backport
8Signed-off-by: Ross Burton <ross.burton@arm.com>
9
10diff --git a/python/tests/reader2.py b/python/tests/reader2.py
11index 65cecd47..6e6353b4 100755
12--- a/python/tests/reader2.py
13+++ b/python/tests/reader2.py
14@@ -6,7 +6,6 @@
15 import sys
16 import glob
17 import os
18-import string
19 import libxml2
20 try:
21 import StringIO
22@@ -20,103 +19,104 @@ libxml2.debugMemory(1)
23
24 err = ""
25 basedir = os.path.dirname(os.path.realpath(__file__))
26-dir_prefix = os.path.join(basedir, "../../test/valid/")
27+dir_prefix = os.path.realpath(os.path.join(basedir, "..", "..", "test", "valid"))
28+
29 # This dictionary reflects the contents of the files
30 # ../../test/valid/*.xml.err that are not empty, except that
31 # the file paths in the messages start with ../../test/
32
33 expect = {
34 '766956':
35-"""../../test/valid/dtds/766956.dtd:2: parser error : PEReference: expecting ';'
36+"""{0}/dtds/766956.dtd:2: parser error : PEReference: expecting ';'
37 %ä%ent;
38 ^
39-../../test/valid/dtds/766956.dtd:2: parser error : Content error in the external subset
40+{0}/dtds/766956.dtd:2: parser error : Content error in the external subset
41 %ä%ent;
42 ^
43 Entity: line 1:
44 value
45 ^
46-""",
47+""".format(dir_prefix),
48 '781333':
49-"""../../test/valid/781333.xml:4: element a: validity error : Element a content does not follow the DTD, expecting ( ..., got
50+"""{0}/781333.xml:4: element a: validity error : Element a content does not follow the DTD, expecting ( ..., got
51 <a/>
52 ^
53-../../test/valid/781333.xml:5: element a: validity error : Element a content does not follow the DTD, Expecting more child
54+{0}/781333.xml:5: element a: validity error : Element a content does not follow the DTD, Expecting more child
55
56 ^
57-""",
58+""".format(dir_prefix),
59 'cond_sect2':
60-"""../../test/valid/dtds/cond_sect2.dtd:15: parser error : All markup of the conditional section is not in the same entity
61+"""{0}/dtds/cond_sect2.dtd:15: parser error : All markup of the conditional section is not in the same entity
62 %ent;
63 ^
64 Entity: line 1:
65 ]]>
66 ^
67-../../test/valid/dtds/cond_sect2.dtd:17: parser error : Content error in the external subset
68+{0}/dtds/cond_sect2.dtd:17: parser error : Content error in the external subset
69
70 ^
71-""",
72+""".format(dir_prefix),
73 'rss':
74-"""../../test/valid/rss.xml:177: element rss: validity error : Element rss does not carry attribute version
75+"""{0}/rss.xml:177: element rss: validity error : Element rss does not carry attribute version
76 </rss>
77 ^
78-""",
79+""".format(dir_prefix),
80 't8':
81-"""../../test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
82+"""{0}/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
83
84 %defroot; %defmiddle; %deftest;
85 ^
86 Entity: line 1:
87 &lt;!ELEMENT root (middle) >
88 ^
89-../../test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
90+{0}/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
91
92 %defroot; %defmiddle; %deftest;
93 ^
94 Entity: line 1:
95 &lt;!ELEMENT middle (test) >
96 ^
97-../../test/valid/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
98+{0}/t8.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
99
100 %defroot; %defmiddle; %deftest;
101 ^
102 Entity: line 1:
103 &lt;!ELEMENT test (#PCDATA) >
104 ^
105-""",
106+""".format(dir_prefix),
107 't8a':
108-"""../../test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
109+"""{0}/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
110
111 %defroot;%defmiddle;%deftest;
112 ^
113 Entity: line 1:
114 &lt;!ELEMENT root (middle) >
115 ^
116-../../test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
117+{0}/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
118
119 %defroot;%defmiddle;%deftest;
120 ^
121 Entity: line 1:
122 &lt;!ELEMENT middle (test) >
123 ^
124-../../test/valid/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
125+{0}/t8a.xml:6: parser error : internal error: xmlParseInternalSubset: error detected in Markup declaration
126
127 %defroot;%defmiddle;%deftest;
128 ^
129 Entity: line 1:
130 &lt;!ELEMENT test (#PCDATA) >
131 ^
132-""",
133+""".format(dir_prefix),
134 'xlink':
135-"""../../test/valid/xlink.xml:450: element termdef: validity error : ID dt-arc already defined
136+"""{0}/xlink.xml:450: element termdef: validity error : ID dt-arc already defined
137 <p><termdef id="dt-arc" term="Arc">An <ter
138 ^
139 validity error : attribute def line 199 references an unknown ID "dt-xlg"
140-""",
141+""".format(dir_prefix),
142 }
143
144 # Add prefix_dir and extension to the keys
145-expect = {"{}{}.xml".format(dir_prefix, key): val for key, val in expect.items()}
146+expect = {os.path.join(dir_prefix, key + ".xml"): val for key, val in expect.items()}
147
148 def callback(ctx, str):
149 global err
150@@ -124,11 +124,12 @@ def callback(ctx, str):
151 libxml2.registerErrorHandler(callback, "")
152
153 parsing_error_files = ["766956", "cond_sect2", "t8", "t8a"]
154-expect_parsing_error = ["{}{}.xml".format(dir_prefix, f) for f in parsing_error_files]
155+expect_parsing_error = [os.path.join(dir_prefix, f + ".xml") for f in parsing_error_files]
156
157-valid_files = glob.glob(dir_prefix + "*.x*")
158+valid_files = glob.glob(os.path.join(dir_prefix, "*.x*"))
159 assert valid_files, "found no valid files in '{}'".format(dir_prefix)
160 valid_files.sort()
161+failures = 0
162 for file in valid_files:
163 err = ""
164 reader = libxml2.newTextReaderFilename(file)
165@@ -142,9 +143,15 @@ for file in valid_files:
166 #sys.exit(1)
167 if (err):
168 if not(file in expect and err == expect[file]):
169+ failures += 1
170 print("Error: ", err)
171 if file in expect:
172 print("Expected: ", expect[file])
173+
174+if failures:
175+ print("Failed %d tests" % failures)
176+ sys.exit(1)
177+
178 #
179 # another separate test based on Stephane Bidoul one
180 #
181@@ -337,9 +344,11 @@ while reader.Read() == 1:
182 if res != expect:
183 print("test5 failed: unexpected output")
184 print(res)
185+ sys.exit(1)
186 if err != "":
187 print("test5 failed: validation error found")
188 print(err)
189+ sys.exit(1)
190
191 #
192 # cleanup
193diff --git a/runsuite.c b/runsuite.c
194index 483490a2..a522d24b 100644
195--- a/runsuite.c
196+++ b/runsuite.c
197@@ -1054,13 +1054,18 @@ main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
198 old_tests = nb_tests;
199 old_leaks = nb_leaks;
200 xsdTest();
201- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
202- printf("Ran %d tests, no errors\n", nb_tests - old_tests);
203- else
204- printf("Ran %d tests, %d errors, %d leaks\n",
205- nb_tests - old_tests,
206- nb_errors - old_errors,
207- nb_leaks - old_leaks);
208+ printf("Ran %d tests, %d errors, %d leaks\n",
209+ nb_tests - old_tests,
210+ nb_errors - old_errors,
211+ nb_leaks - old_leaks);
212+ if (nb_errors - old_errors == 10) {
213+ printf("10 errors were expected\n");
214+ nb_errors = old_errors;
215+ } else {
216+ printf("10 errors were expected, got %d errors\n",
217+ nb_errors - old_errors);
218+ nb_errors = old_errors + 1;
219+ }
220 old_errors = nb_errors;
221 old_tests = nb_tests;
222 old_leaks = nb_leaks;