Package Martel :: Package test :: Module support
[hide private]
[frames] | no frames]

Source Code for Module Martel.test.support

  1  import string, sys, cgi, time 
  2   
  3  from xml.sax import handler 
  4   
5 -class CheckGood(handler.ContentHandler, handler.ErrorHandler):
6 - def __init__(self):
7 handler.ContentHandler.__init__(self) 8 self.good_parse = 0
9 - def startDocument(self):
10 self.good_parse = 0
11 - def endDocument(self):
12 self.good_parse = 1
13 14
15 -class Storage:
16 - def __init__(self):
17 self.data = []
18 - def __getitem__(self, want_name):
19 for name, exp, s in self.data: 20 if name == want_name: 21 x = Storage() 22 x.add_test(name, exp, s) 23 return x 24 raise KeyError, want_name
25 - def add_test(self, name, exp, s):
26 self.data.append( (name, exp, s) )
27
28 - def add_test_lines(self, name, exp, s):
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 # Why are the times sometimes inverted??? 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):
74 - def __init__(self, outfile = None):
75 handler.ContentHandler.__init__(self) 76 if outfile is None: 77 outfile = sys.stdout 78 self.write = outfile.write
79 - def startElement(self, name, attrs):
80 self.write('<%s>' % name)
81 - def characters(self, content):
82 self.write(cgi.escape(content))
83 - def endElement(self, name):
84 self.write('</%s>' % name)
85
86 - def startDocument(self):
87 self.write("-------> Start\n")
88 - def endDocument(self):
89 self.write("\n-------> End\n")
90
91 - def error(self, exc):
92 self.write("\n-------> error " + str(exc) + "\n")
93 - def fatalError(self, exc):
94 self.write("\n-------> fatal error - " + str(exc) + "\n")
95
96 -def test_file(format, infile, outfile = sys.stdout):
97 h = Dump(outfile) 98 99 parser = format.make_parser() 100 parser.setContentHandler(h) 101 parser.setErrorHandler(h) 102 parser.parseFile(infile)
103
104 -def test_string(format, str):
105 h = Dump(sys.stdout) 106 107 parser = format.make_parser() 108 parser.setContentHandler(h) 109 parser.setErrorHandler(h) 110 parser.parseString(str)
111
112 -def time_file(format, infile, debug_level = 0):
113 good = CheckGood() 114 parser = format.make_parser(debug_level) 115 parser.setContentHandler(good) 116 t1 = time.time() 117 parser.parseFile(infile) 118 t2 = time.time() 119 print "Total time", t2-t1
120