1 import string, sys, cgi, time
2
3 from xml.sax import handler
4
5 -class CheckGood(handler.ContentHandler, handler.ErrorHandler):
7 handler.ContentHandler.__init__(self)
8 self.good_parse = 0
13
14
27
29 if s[-1:] == "\n":
30 s = s[:-1]
31 lines = string.split(s, "\n")
32 for i in range(len(lines)):
33 self.add_test(name + " %d" % (i+1), exp, lines[i] + "\n")
34
35 - def test(self, show_timings = 0, debug_level = 0):
36 good = CheckGood()
37 for name, exp, s in self.data:
38 t1 = time.time()
39 parser = exp.make_parser(debug_level = debug_level)
40 t2 = time.time()
41 parser.setContentHandler(good)
42 try:
43 t3 = t4 = time.time()
44 parser.parseString(s)
45 t4 = time.time()
46 except KeyboardInterrupt:
47 raise
48 except:
49 print "Cannot parse!!"
50 print s
51 print repr(str(exp))
52 print "-" * 70
53 raise
54 else:
55 if show_timings:
56
57 t = "gen %.4f run %.4f gen takes %3.1f%%" % \
58 (t2-t1, t4-t3, 100*(t2-t1) / (t4-t3+t2-t1))
59 print "Good parse", name, t
60 else:
61 print "Good parse", name
62
63 - def dump(self, debug_level = 0):
64 h = Dump(sys.stdout)
65 for name, exp, s in self.data:
66 print "****************************", name, "********************"
67 parser = exp.make_parser(debug_level = debug_level)
68 parser.setContentHandler(h)
69 parser.setErrorHandler(h)
70 parser.parseString(s)
71
72
73 -class Dump(handler.ContentHandler, handler.ErrorHandler):
75 handler.ContentHandler.__init__(self)
76 if outfile is None:
77 outfile = sys.stdout
78 self.write = outfile.write
85
87 self.write("-------> Start\n")
89 self.write("\n-------> End\n")
90
92 self.write("\n-------> error " + str(exc) + "\n")
94 self.write("\n-------> fatal error - " + str(exc) + "\n")
95
96 -def test_file(format, infile, outfile = sys.stdout):
103
111
112 -def time_file(format, infile, debug_level = 0):
120