diff options
Diffstat (limited to 'tools/runtests.py')
-rwxr-xr-x | tools/runtests.py | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/tools/runtests.py b/tools/runtests.py new file mode 100755 index 00000000..b242fa6d --- /dev/null +++ b/tools/runtests.py @@ -0,0 +1,183 @@ +#!/usr/bin/env python + +import random +import string +import signal +import os +import sys + +true, false = 1, 0 + +options = [ + "--account=TempAccount", + "--actual", + "--add-budget", + "--amount-data", + "--amount=a", + "--ansi", + "--ansi-invert", + "--average", + #"--balance-format", + "--basis", + "--begin=2004/01", + "--budget", + "--by-payee", + #"--cache=/tmp/cache", + "--cleared", + "--collapse", + "--comm-as-payee", + #"--csv-register-format", + "--current", + "--date-format=%Y", + "--descend='$100'", + "--descend-if='t=={$100}'", + "--deviation", + "--display='a>10'", + "--dow", + "--download", + "--effective", + "--empty", + "--end=2005/01", + #"--equity-format", + #"--file=/tmp/file", + "--forecast='d<[2006]'", + "--format=%Y", + #"--full-help", + "--gain", + "--head=10", + #"--help", + #"--help-calc", + #"--help-comm", + #"--help-disp", + #"--init-file=/tmp/init", + #"--input-date-format", + "--limit='a>10'", + "--lots", + "--lot-prices", + "--lot-dates", + "--lot-tags", + "--market", + "--monthly", + "--no-cache", + #"--output=/tmp/output", + #"--pager", + #"--percentage", + "--performance", + "--period-sort=A\\(t\\)", + "--period=oct", + #"--plot-amount-format", + #"--plot-total-format", + "--price", + "--price-exp=1000", + #"--price-db=/tmp/foo", + #"--prices-format", + #"--print-format", + "--quantity", + "--real", + #"--reconcile", + #"--reconcile-date", + #"--register-format", + "--related", + "--sort=A\\(t\\)", + "--subtotal", + "--tail=5", + "--total-data", + "--total=O", + "--totals", + "--unbudgeted", + "--uncleared", + #"--version", + "--weekly", + "--wide", + #"--wide-register-format", + #"--write-hdr-format", + #"--write-xact-format", + "--yearly", +] + +commands = [ + "bal rent", + "bal ira", + "bal auto", + "reg rent", + "reg ira", + "reg expenses:food", + "print rent", + "print irc", + "xml rent", + "xml irc", + "equity rent", + "equity ira", + "prices AAPL", +] + +random.seed () + +loop = true +count = 0 +errors = 0 +if len(sys.argv) > 1: + errors = int(sys.argv[1]) +signals = 0 + +while loop: + try: + n = random.randint (0, len (options)) + opts = random.sample (options, n) + for cmd in commands: + if os.path.exists ("/tmp/out"): + os.unlink ("/tmp/out") + + cmd = "./ledger -f tools/standard.dat " + string.join(opts, " ") + " " + cmd + \ + " >> /tmp/out 2>&1" + + sys.stdout = open ("/tmp/out", "w") + print "::", cmd + sys.stdout.close () + + ret = os.system (cmd) + + sys.stdout = open ("/tmp/out", "a") + + # Convert an odd UNIX return type into the appropriate + # signal indication. + if ret and ret % 256 == 0 and ret / 256 > 127: + ret = 0x100 + (ret / 256 - 128) + + if ret and ret % 256 == 0: + print "ERROR: Return value", ret / 256 + sys.stdout.close () + os.system ("cat /tmp/out >> errors.out") + errors += 1 + elif ret: + if ret % 256 == signal.SIGINT: + loop = false + break + print "SIGNAL: Return value", ret % 256 + sys.stdout.close () + os.system ("cat /tmp/out >> signals.out") + signals += 1 + else: + sys.stdout.close () + os.system ("cat /tmp/out >> results.out") + + sys.stdout = sys.__stdout__ + count += 1 + if count < 10 or \ + (count < 100 and count % 10 == 0) or \ + (count < 1000 and count % 100 == 0) or \ + count % 1000 == 0: + if signals > 0 and errors > 0: + print "%d tests ... (%d signals, %d errors)" % \ + (count, signals, errors) + elif signals > 0: + print "%d tests ... (%d signals)" % \ + (count, signals) + elif errors > 0: + print "%d tests ... (%d errors)" % \ + (count, errors) + else: + print "%d tests ..." % count + + except KeyboardInterrupt: + loop = false |