iptestall.py
101 lines
| 3.2 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r1970 | #!/usr/bin/env python | ||
"""Master test runner for IPython - EXPERIMENTAL CODE!!! | ||||
This tries | ||||
XXX - Big limitation right now: we don't summarize the total test counts. That | ||||
would require parsing the output of the subprocesses. | ||||
""" | ||||
import os.path as path | ||||
import subprocess as subp | ||||
import time | ||||
class IPTester(object): | ||||
"""Object to call iptest with specific parameters. | ||||
""" | ||||
def __init__(self,runner='iptest',params=None): | ||||
""" """ | ||||
if runner == 'iptest': | ||||
self.runner = ['iptest','-v'] | ||||
else: | ||||
self.runner = ['trial'] | ||||
if params is None: | ||||
params = [] | ||||
if isinstance(params,str): | ||||
params = [params] | ||||
self.params = params | ||||
# Assemble call | ||||
self.call_args = self.runner+self.params | ||||
def run(self): | ||||
"""Run the stored commands""" | ||||
return subp.call(self.call_args) | ||||
def make_runners(): | ||||
top_mod = \ | ||||
['background_jobs.py', 'ColorANSI.py', 'completer.py', 'ConfigLoader.py', | ||||
'CrashHandler.py', 'Debugger.py', 'deep_reload.py', 'demo.py', | ||||
'DPyGetOpt.py', 'dtutils.py', 'excolors.py', 'FakeModule.py', | ||||
'generics.py', 'genutils.py', 'Gnuplot2.py', 'GnuplotInteractive.py', | ||||
'GnuplotRuntime.py', 'history.py', 'hooks.py', 'ipapi.py', | ||||
'iplib.py', 'ipmaker.py', 'ipstruct.py', 'irunner.py', 'Itpl.py', | ||||
'Logger.py', 'macro.py', 'Magic.py', 'numutils.py', 'OInspect.py', | ||||
'OutputTrap.py', 'platutils_dummy.py', 'platutils_posix.py', | ||||
'platutils.py', 'platutils_win32.py', 'prefilter.py', 'Prompts.py', | ||||
'PyColorize.py', 'Release.py', 'rlineimpl.py', 'shadowns.py', | ||||
'shellglobals.py', 'Shell.py', 'strdispatch.py', 'twshell.py', | ||||
'ultraTB.py', 'upgrade_dir.py', 'usage.py', 'wildcard.py', | ||||
'winconsole.py'] | ||||
top_pack = ['config','Extensions','frontend','gui','kernel', | ||||
'testing','tests','tools','UserConfig'] | ||||
modules = ['IPython.%s' % m for m in top_mod ] | ||||
packages = ['IPython.%s' % m for m in top_pack ] | ||||
# Make runners | ||||
runners = dict(zip(top_pack, [IPTester(params=v) for v in packages])) | ||||
runners['trial'] = IPTester('trial',['IPython']) | ||||
return runners | ||||
def main(): | ||||
runners = make_runners() | ||||
# Run all test runners, tracking execution time | ||||
failed = {} | ||||
t_start = time.time() | ||||
for name,runner in runners.iteritems(): | ||||
print '*'*77 | ||||
print 'IPython test set:',name | ||||
res = runner.run() | ||||
if res: | ||||
failed[name] = res | ||||
t_end = time.time() | ||||
t_tests = t_end - t_start | ||||
nrunners = len(runners) | ||||
nfail = len(failed) | ||||
# summarize results | ||||
print '*'*77 | ||||
print 'Ran %s test sets in %.3fs' % (nrunners, t_tests) | ||||
if not failed: | ||||
print 'OK' | ||||
else: | ||||
# If anything went wrong, point out what command to rerun manually to | ||||
# see the actual errors and individual summary | ||||
print 'ERROR - %s out of %s test sets failed.' % (nfail, nrunners) | ||||
for name in failed: | ||||
failed_runner = runners[name] | ||||
print '-'*40 | ||||
print 'Runner failed:',name | ||||
print 'You may wish to rerun this one individually, with:' | ||||
print ' '.join(failed_runner.call_args) | ||||
if __name__ == '__main__': | ||||
main() | ||||