Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame^] | 1 | Backport the following patches to fix the reader2 and runsuite test cases: |
| 2 | |
| 3 | b92768cd tests: Enable "runsuite" test |
| 4 | 0ac8c15e python/tests/reader2: use absolute paths everywhere |
| 5 | b9ba5e1d python/tests/reader2: always exit(1) if a test fails |
| 6 | |
| 7 | Upstream-Status: Backport |
| 8 | Signed-off-by: Ross Burton <ross.burton@arm.com> |
| 9 | |
| 10 | diff --git a/python/tests/reader2.py b/python/tests/reader2.py |
| 11 | index 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 | <!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 | <!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 | <!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 | <!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 | <!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 | <!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 |
| 193 | diff --git a/runsuite.c b/runsuite.c |
| 194 | index 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; |