diff --git a/IPython/testing/iptestcontroller.py b/IPython/testing/iptestcontroller.py index f3ac8e0..7c2a7ec 100644 --- a/IPython/testing/iptestcontroller.py +++ b/IPython/testing/iptestcontroller.py @@ -28,7 +28,6 @@ import subprocess import time from .iptest import have, test_group_names, test_sections -from IPython.utils import py3compat from IPython.utils.sysinfo import sys_info from IPython.utils.tempdir import TemporaryDirectory @@ -67,6 +66,10 @@ class IPTestController(object): # This means we won't get odd effects from our own matplotlib config self.env['MPLCONFIGDIR'] = workingdir.name + @property + def will_run(self): + return test_sections[self.section].will_run + def add_xunit(self): xunit_file = os.path.abspath(self.section + '.xunit.xml') self.cmd.extend(['--with-xunit', '--xunit-file', xunit_file]) @@ -133,21 +136,23 @@ class IPTestController(object): __del__ = cleanup -def test_controllers_to_run(inc_slow=False, xunit=False, coverage=False): +def prepare_test_controllers(inc_slow=False, xunit=False, coverage=False): """Returns an ordered list of IPTestController instances to be run.""" - res = [] + to_run, not_run = [], [] if not inc_slow: test_sections['parallel'].enabled = False for name in test_group_names: - if test_sections[name].will_run: - controller = IPTestController(name) - if xunit: - controller.add_xunit() - if coverage: - controller.add_coverage() - res.append(controller) - return res + controller = IPTestController(name) + if xunit: + controller.add_xunit() + if coverage: + controller.add_coverage() + if controller.will_run: + to_run.append(controller) + else: + not_run.append(controller) + return to_run, not_run def do_run(controller): try: @@ -214,16 +219,21 @@ def run_iptestall(inc_slow=False, jobs=1, xunit_out=False, coverage_out=False): if jobs != 1: IPTestController.buffer_output = True - controllers = test_controllers_to_run(inc_slow=inc_slow, xunit=xunit_out, + to_run, not_run = prepare_test_controllers(inc_slow=inc_slow, xunit=xunit_out, coverage=coverage_out) + def justify(ltext, rtext, width=70, fill='-'): + ltext += ' ' + rtext = (' ' + rtext).rjust(width - len(ltext), fill) + return ltext + rtext + # Run all test runners, tracking execution time failed = [] t_start = time.time() print('*'*70) if jobs == 1: - for controller in controllers: + for controller in to_run: print('IPython test group:', controller.section) controller, res = do_run(controller) if res: @@ -236,11 +246,9 @@ def run_iptestall(inc_slow=False, jobs=1, xunit_out=False, coverage_out=False): else: try: pool = multiprocessing.pool.ThreadPool(jobs) - for (controller, res) in pool.imap_unordered(do_run, controllers): - tgroup = 'IPython test group: ' + controller.section + ' ' - res_string = ' OK' if res == 0 else ' FAILED' - res_string = res_string.rjust(70 - len(tgroup), '.') - print(tgroup + res_string) + for (controller, res) in pool.imap_unordered(do_run, to_run): + res_string = 'OK' if res == 0 else 'FAILED' + print(justify('IPython test group: ' + controller.section, res_string)) if res: print(controller.stdout) failed.append(controller) @@ -250,9 +258,12 @@ def run_iptestall(inc_slow=False, jobs=1, xunit_out=False, coverage_out=False): except KeyboardInterrupt: return + for controller in not_run: + print(justify('IPython test group: ' + controller.section, 'NOT RUN')) + t_end = time.time() t_tests = t_end - t_start - nrunners = len(controllers) + nrunners = len(to_run) nfail = len(failed) # summarize results print('*'*70)