##// END OF EJS Templates
New 'master' test runner....
Fernando Perez -
Show More
@@ -0,0 +1,101
1 #!/usr/bin/env python
2 """Master test runner for IPython - EXPERIMENTAL CODE!!!
3
4 This tries
5
6 XXX - Big limitation right now: we don't summarize the total test counts. That
7 would require parsing the output of the subprocesses.
8 """
9 import os.path as path
10 import subprocess as subp
11 import time
12
13 class IPTester(object):
14 """Object to call iptest with specific parameters.
15 """
16 def __init__(self,runner='iptest',params=None):
17 """ """
18 if runner == 'iptest':
19 self.runner = ['iptest','-v']
20 else:
21 self.runner = ['trial']
22 if params is None:
23 params = []
24 if isinstance(params,str):
25 params = [params]
26 self.params = params
27
28 # Assemble call
29 self.call_args = self.runner+self.params
30
31 def run(self):
32 """Run the stored commands"""
33 return subp.call(self.call_args)
34
35
36 def make_runners():
37 top_mod = \
38 ['background_jobs.py', 'ColorANSI.py', 'completer.py', 'ConfigLoader.py',
39 'CrashHandler.py', 'Debugger.py', 'deep_reload.py', 'demo.py',
40 'DPyGetOpt.py', 'dtutils.py', 'excolors.py', 'FakeModule.py',
41 'generics.py', 'genutils.py', 'Gnuplot2.py', 'GnuplotInteractive.py',
42 'GnuplotRuntime.py', 'history.py', 'hooks.py', 'ipapi.py',
43 'iplib.py', 'ipmaker.py', 'ipstruct.py', 'irunner.py', 'Itpl.py',
44 'Logger.py', 'macro.py', 'Magic.py', 'numutils.py', 'OInspect.py',
45 'OutputTrap.py', 'platutils_dummy.py', 'platutils_posix.py',
46 'platutils.py', 'platutils_win32.py', 'prefilter.py', 'Prompts.py',
47 'PyColorize.py', 'Release.py', 'rlineimpl.py', 'shadowns.py',
48 'shellglobals.py', 'Shell.py', 'strdispatch.py', 'twshell.py',
49 'ultraTB.py', 'upgrade_dir.py', 'usage.py', 'wildcard.py',
50 'winconsole.py']
51
52 top_pack = ['config','Extensions','frontend','gui','kernel',
53 'testing','tests','tools','UserConfig']
54
55 modules = ['IPython.%s' % m for m in top_mod ]
56 packages = ['IPython.%s' % m for m in top_pack ]
57
58 # Make runners
59 runners = dict(zip(top_pack, [IPTester(params=v) for v in packages]))
60 runners['trial'] = IPTester('trial',['IPython'])
61
62 return runners
63
64
65 def main():
66 runners = make_runners()
67 # Run all test runners, tracking execution time
68 failed = {}
69 t_start = time.time()
70 for name,runner in runners.iteritems():
71 print '*'*77
72 print 'IPython test set:',name
73 res = runner.run()
74 if res:
75 failed[name] = res
76 t_end = time.time()
77 t_tests = t_end - t_start
78 nrunners = len(runners)
79 nfail = len(failed)
80 # summarize results
81 print
82 print '*'*77
83 print 'Ran %s test sets in %.3fs' % (nrunners, t_tests)
84 print
85 if not failed:
86 print 'OK'
87 else:
88 # If anything went wrong, point out what command to rerun manually to
89 # see the actual errors and individual summary
90 print 'ERROR - %s out of %s test sets failed.' % (nfail, nrunners)
91 for name in failed:
92 failed_runner = runners[name]
93 print '-'*40
94 print 'Runner failed:',name
95 print 'You may wish to rerun this one individually, with:'
96 print ' '.join(failed_runner.call_args)
97 print
98
99
100 if __name__ == '__main__':
101 main()
General Comments 0
You need to be logged in to leave comments. Login now