# -*- coding: utf-8 -*- """IPython Test Suite Runner. This module provides a main entry point to a user script to test IPython itself from the command line. The main() routine can be used in a similar manner to the ``nosetests`` script, and it takes similar arguments, but if no arguments are given it defaults to testing all of IPython. This should be preferred to using plain ``nosetests`` because a number of nose plugins necessary to test IPython correctly are automatically configured by this code. """ #----------------------------------------------------------------------------- # Module imports #----------------------------------------------------------------------------- # stdlib import sys import warnings # third-party import nose.plugins.builtin from nose.core import TestProgram # Our own imports from IPython.testing.plugin.ipdoctest import IPythonDoctest #----------------------------------------------------------------------------- # Constants and globals #----------------------------------------------------------------------------- # For the IPythonDoctest plugin, we need to exclude certain patterns that cause # testing problems. We should strive to minimize the number of skipped # modules, since this means untested code. As the testing machinery # solidifies, this list should eventually become empty. EXCLUDE = ['IPython/external/', 'IPython/platutils_win32', 'IPython/frontend/cocoa', 'IPython/frontend/process/winprocess.py', 'IPython_doctest_plugin', 'IPython/Gnuplot', 'IPython/Extensions/ipy_', 'IPython/Extensions/clearcmd', 'IPython/Extensions/PhysicalQIn', 'IPython/Extensions/scitedirector', 'IPython/Extensions/numeric_formats', 'IPython/testing/attic', ] #----------------------------------------------------------------------------- # Functions and classes #----------------------------------------------------------------------------- def main(): """Run the IPython test suite. """ warnings.filterwarnings('ignore', 'This will be removed soon. Use IPython.testing.util instead') argv = sys.argv + [ # Loading ipdoctest causes problems with Twisted. # I am removing this as a temporary fix to get the # test suite back into working shape. Our nose # plugin needs to be gone through with a fine # toothed comb to find what is causing the problem. # '--with-ipdoctest', '--ipdoctest-tests','--ipdoctest-extension=txt', '--detailed-errors', # We add --exe because of setuptools' imbecility (it # blindly does chmod +x on ALL files). Nose does the # right thing and it tries to avoid executables, # setuptools unfortunately forces our hand here. This # has been discussed on the distutils list and the # setuptools devs refuse to fix this problem! '--exe', ] # Detect if any tests were required by explicitly calling an IPython # submodule or giving a specific path has_tests = False for arg in sys.argv: if 'IPython' in arg or arg.endswith('.py') or \ (':' in arg and '.py' in arg): has_tests = True break # If nothing was specifically requested, test full IPython if not has_tests: argv.append('IPython') # Construct list of plugins, omitting the existing doctest plugin, which # ours replaces (and extends). plugins = [IPythonDoctest(EXCLUDE)] for p in nose.plugins.builtin.plugins: plug = p() if plug.name == 'doctest': continue #print '*** adding plugin:',plug.name # dbg plugins.append(plug) TestProgram(argv=argv,plugins=plugins)