#!/usr/bin/env python """ doctester.py - Test Pluvo Embedded in Documentation Author: Sean B. Palmer, inamidst.com """ import sys, cStringIO as StringIO import compiler import interpreter def main(): tests = [] intest = False f = open(sys.argv[1]) for line in f: if line.startswith('
'): 
         tests.append([[], []])
         intest = True
      elif line.startswith('
'): if intest: intest = False elif intest: if line.startswith('=> '): tests[-1][1].append(line[3:]) else: tests[-1][0].append(line) f.close() # for input, output in tests: # print ''.join(input) # print '->' # print ''.join(output) # print '* * *' stdout = sys.stdout stdout.write('# ' + sys.argv[1] + ' ') sys.stdout = StringIO.StringIO() fail = False for input, output in tests: input = ''.join(input) output = ''.join(output) c = compiler.Compiler() c.compileString(input) # program = compiler.compileString(input) i = interpreter.Interpreter(c.program) i.run() sys.stdout.seek(0) got = sys.stdout.read() sys.stdout = StringIO.StringIO() # print >> stdout, 'GOT: %r' % got if got == output: stdout.write('.') else: stdout.write('X') fail = True # print >> stdout, 'EXPECTED: %r' % output print >> stdout, '' if fail is False: print >> stdout, 'pass: ' + sys.argv[1] else: print >> stdout, 'FAIL: ' + sys.argv[1] if __name__ == '__main__': main()