Annotation of embedaddon/libxml2/check-xinclude-test-suite.py, revision 1.1.1.1
1.1 misho 1: #!/usr/bin/python
2: import sys
3: import time
4: import os
5: import string
6: sys.path.insert(0, "python")
7: import libxml2
8:
9: #
10: # the testsuite description
11: #
12: DIR="xinclude-test-suite"
13: CONF="testdescr.xml"
14: LOG="check-xinclude-test-suite.log"
15:
16: log = open(LOG, "w")
17:
18: os.chdir(DIR)
19:
20: test_nr = 0
21: test_succeed = 0
22: test_failed = 0
23: test_error = 0
24: #
25: # Error and warning handlers
26: #
27: error_nr = 0
28: error_msg = ''
29:
30: def errorHandler(ctx, str):
31: global error_nr
32: global error_msg
33:
34: if string.find(str, "error:") >= 0:
35: error_nr = error_nr + 1
36: if len(error_msg) < 300:
37: if len(error_msg) == 0 or error_msg[-1] == '\n':
38: error_msg = error_msg + " >>" + str
39: else:
40: error_msg = error_msg + str
41:
42: libxml2.registerErrorHandler(errorHandler, None)
43:
44: def testXInclude(filename, id):
45: global error_nr
46: global error_msg
47: global log
48:
49: error_nr = 0
50: error_msg = ''
51:
52: print "testXInclude(%s, %s)" % (filename, id)
53: return 1
54:
55: def runTest(test, basedir):
56: global test_nr
57: global test_failed
58: global test_error
59: global test_succeed
60: global error_msg
61: global log
62:
63: fatal_error = 0
64: uri = test.prop('href')
65: id = test.prop('id')
66: type = test.prop('type')
67: if uri == None:
68: print "Test without ID:", uri
69: return -1
70: if id == None:
71: print "Test without URI:", id
72: return -1
73: if type == None:
74: print "Test without URI:", id
75: return -1
76: if basedir != None:
77: URI = basedir + "/" + uri
78: else:
79: URI = uri
80: if os.access(URI, os.R_OK) == 0:
81: print "Test %s missing: base %s uri %s" % (URI, basedir, uri)
82: return -1
83:
84: expected = None
85: outputfile = None
86: diff = None
87: if type != 'error':
88: output = test.xpathEval('string(output)')
89: if output == 'No output file.':
90: output = None
91: if output == '':
92: output = None
93: if output != None:
94: if basedir != None:
95: output = basedir + "/" + output
96: if os.access(output, os.R_OK) == 0:
97: print "Result for %s missing: %s" % (id, output)
98: output = None
99: else:
100: try:
101: f = open(output)
102: expected = f.read()
103: outputfile = output
104: except:
105: print "Result for %s unreadable: %s" % (id, output)
106:
107: try:
108: # print "testing %s" % (URI)
109: doc = libxml2.parseFile(URI)
110: except:
111: doc = None
112: if doc != None:
113: res = doc.xincludeProcess()
114: if res >= 0 and expected != None:
115: result = doc.serialize()
116: if result != expected:
117: print "Result for %s differs" % (id)
118: open("xinclude.res", "w").write(result)
119: diff = os.popen("diff %s xinclude.res" % outputfile).read()
120:
121: doc.freeDoc()
122: else:
123: print "Failed to parse %s" % (URI)
124: res = -1
125:
126:
127:
128: test_nr = test_nr + 1
129: if type == 'success':
130: if res > 0:
131: test_succeed = test_succeed + 1
132: elif res == 0:
133: test_failed = test_failed + 1
134: print "Test %s: no substitution done ???" % (id)
135: elif res < 0:
136: test_error = test_error + 1
137: print "Test %s: failed valid XInclude processing" % (id)
138: elif type == 'error':
139: if res > 0:
140: test_error = test_error + 1
141: print "Test %s: failed to detect invalid XInclude processing" % (id)
142: elif res == 0:
143: test_failed = test_failed + 1
144: print "Test %s: Invalid but no substitution done" % (id)
145: elif res < 0:
146: test_succeed = test_succeed + 1
147: elif type == 'optional':
148: if res > 0:
149: test_succeed = test_succeed + 1
150: else:
151: print "Test %s: failed optional test" % (id)
152:
153: # Log the ontext
154: if res != 1:
155: log.write("Test ID %s\n" % (id))
156: log.write(" File: %s\n" % (URI))
157: content = string.strip(test.content)
158: while content[-1] == '\n':
159: content = content[0:-1]
160: log.write(" %s:%s\n\n" % (type, content))
161: if error_msg != '':
162: log.write(" ----\n%s ----\n" % (error_msg))
163: error_msg = ''
164: log.write("\n")
165: if diff != None:
166: log.write("diff from test %s:\n" %(id))
167: log.write(" -----------\n%s\n -----------\n" % (diff));
168:
169: return 0
170:
171:
172: def runTestCases(case):
173: creator = case.prop('creator')
174: if creator != None:
175: print "=>", creator
176: base = case.getBase(None)
177: basedir = case.prop('basedir')
178: if basedir != None:
179: base = libxml2.buildURI(basedir, base)
180: test = case.children
181: while test != None:
182: if test.name == 'testcase':
183: runTest(test, base)
184: if test.name == 'testcases':
185: runTestCases(test)
186: test = test.next
187:
188: conf = libxml2.parseFile(CONF)
189: if conf == None:
190: print "Unable to load %s" % CONF
191: sys.exit(1)
192:
193: testsuite = conf.getRootElement()
194: if testsuite.name != 'testsuite':
195: print "Expecting TESTSUITE root element: aborting"
196: sys.exit(1)
197:
198: profile = testsuite.prop('PROFILE')
199: if profile != None:
200: print profile
201:
202: start = time.time()
203:
204: case = testsuite.children
205: while case != None:
206: if case.name == 'testcases':
207: old_test_nr = test_nr
208: old_test_succeed = test_succeed
209: old_test_failed = test_failed
210: old_test_error = test_error
211: runTestCases(case)
212: print " Ran %d tests: %d suceeded, %d failed and %d generated an error" % (
213: test_nr - old_test_nr, test_succeed - old_test_succeed,
214: test_failed - old_test_failed, test_error - old_test_error)
215: case = case.next
216:
217: conf.freeDoc()
218: log.close()
219:
220: print "Ran %d tests: %d suceeded, %d failed and %d generated an error in %.2f s." % (
221: test_nr, test_succeed, test_failed, test_error, time.time() - start)
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>