blob: 11a337552569fb0347359f9bc5e5ccc987fe41b6 [file] [log] [blame]
Daniel Veillarde9751d92003-02-10 23:08:28 +00001#!/usr/bin/python
2import sys
3import time
4import os
5import string
6sys.path.append("python")
7import libxml2
8
9#
10# the testsuite description
11#
12CONF="xinclude-test-suite/testdescr.xml"
13LOG="check-xinclude-test-suite.log"
14
15log = open(LOG, "w")
16
17#
18# Error and warning handlers
19#
20error_nr = 0
21error_msg = ''
22def errorHandler(ctx, str):
23 global error_nr
24 global error_msg
25
26 if string.find(str, "error:") >= 0:
27 error_nr = error_nr + 1
28 if len(error_msg) < 300:
29 if len(error_msg) == 0 or error_msg[-1] == '\n':
30 error_msg = error_msg + " >>" + str
31 else:
32 error_msg = error_msg + str
33
34libxml2.registerErrorHandler(errorHandler, None)
35
36def testXInclude(filename, id):
37 global error_nr
38 global error_msg
39 global log
40
41 error_nr = 0
42 error_msg = ''
43
44 print "testXInclude(%s, %s)" % (filename, id)
45 return 1
46
47test_nr = 0
48test_succeed = 0
49test_failed = 0
50test_error = 0
51def runTest(test, basedir):
52 global test_nr
53 global test_failed
54 global test_error
55 global test_succeed
56 global error_msg
57 global log
58
59 uri = test.prop('href')
60 id = test.prop('id')
61 if uri == None:
62 print "Test without ID:", uri
63 return -1
64 if id == None:
65 print "Test without URI:", id
66 return -1
67 if basedir != None:
68 URI = basedir + "/" + uri
69 else:
70 URI = uri
71 if os.access(URI, os.R_OK) == 0:
72 print "Test %s missing: base %s uri %s" % (URI, basedir, uri)
73 return -1
74
75 # output =
76
77 test_nr = test_nr + 1
78 if res > 0:
79 test_succeed = test_succeed + 1
80 elif res == 0:
81 test_failed = test_failed + 1
82 elif res < 0:
83 test_error = test_error + 1
84
85 # Log the ontext
86 if res != 1:
87 log.write(" File: %s\n" % (URI))
88 content = string.strip(test.content)
89 while content[-1] == '\n':
90 content = content[0:-1]
91 if extra != None:
92 log.write(" %s:%s:%s\n" % (type, extra, content))
93 else:
94 log.write(" %s:%s\n\n" % (type, content))
95 if error_msg != '':
96 log.write(" ----\n%s ----\n" % (error_msg))
97 error_msg = ''
98 log.write("\n")
99
100 return 0
101
102
103def runTestCases(case):
104 creator = case.prop('creator')
105 if creator != None:
106 print "=>", creator
107 base = case.getBase(None)
108 basedir = case.prop('basedir')
109 if basedir != None:
110 base = libxml2.buildURI(basedir, base)
111 test = case.children
112 while test != None:
113 if test.name == 'testcase':
114 runTest(test, base)
115 if test.name == 'testcases':
116 runTestCases(test)
117 test = test.next
118
119conf = libxml2.parseFile(CONF)
120if conf == None:
121 print "Unable to load %s" % CONF
122 sys.exit(1)
123
124testsuite = conf.getRootElement()
125if testsuite.name != 'testsuite':
126 print "Expecting TESTSUITE root element: aborting"
127 sys.exit(1)
128
129profile = testsuite.prop('PROFILE')
130if profile != None:
131 print profile
132
133start = time.time()
134
135case = testsuite.children
136while case != None:
137 global test_nr
138 global test_succeed
139 global test_failed
140 global test_error
141
142 if case.name == 'testcases':
143 old_test_nr = test_nr
144 old_test_succeed = test_succeed
145 old_test_failed = test_failed
146 old_test_error = test_error
147 runTestCases(case)
148 print " Ran %d tests: %d suceeded, %d failed and %d generated an error" % (
149 test_nr - old_test_nr, test_succeed - old_test_succeed,
150 test_failed - old_test_failed, test_error - old_test_error)
151 case = case.next
152
153conf.freeDoc()
154log.close()
155
156print "Ran %d tests: %d suceeded, %d failed and %d generated an error in %.2f s." % (
157 test_nr, test_succeed, test_failed, test_error, time.time() - start)