#!/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()