VirtualBox

source: vbox/trunk/src/libs/libxml2-2.6.30/check-xinclude-test-suite.py@ 8760

Last change on this file since 8760 was 6076, checked in by vboxsync, 17 years ago

Merged dmik/s2 branch (r25959:26751) to the trunk.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Revision Author Id
File size: 5.2 KB
Line 
1#!/usr/bin/python
2import sys
3import time
4import os
5import string
6sys.path.insert(0, "python")
7import libxml2
8
9#
10# the testsuite description
11#
12DIR="xinclude-test-suite"
13CONF="testdescr.xml"
14LOG="check-xinclude-test-suite.log"
15
16log = open(LOG, "w")
17
18os.chdir(DIR)
19
20test_nr = 0
21test_succeed = 0
22test_failed = 0
23test_error = 0
24#
25# Error and warning handlers
26#
27error_nr = 0
28error_msg = ''
29
30def 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
42libxml2.registerErrorHandler(errorHandler, None)
43
44def 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
55def 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
172def 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
188conf = libxml2.parseFile(CONF)
189if conf == None:
190 print "Unable to load %s" % CONF
191 sys.exit(1)
192
193testsuite = conf.getRootElement()
194if testsuite.name != 'testsuite':
195 print "Expecting TESTSUITE root element: aborting"
196 sys.exit(1)
197
198profile = testsuite.prop('PROFILE')
199if profile != None:
200 print profile
201
202start = time.time()
203
204case = testsuite.children
205while 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
217conf.freeDoc()
218log.close()
219
220print "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)
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette