#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function import sys import os import nose from nose.plugins.manager import PluginManager from nose.plugins.doctests import Doctest from nose.plugins import builtin NLTK_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) sys.path.insert(0, NLTK_ROOT) NLTK_TEST_DIR = os.path.join(NLTK_ROOT, 'nltk') if __name__ == '__main__': # there shouldn't be import from NLTK for coverage to work properly from doctest_nose_plugin import DoctestFix try: # Import RedNose plugin for colored test output from rednose import RedNose rednose_available = True except ImportError: rednose_available = False class NltkPluginManager(PluginManager): """ Nose plugin manager that replaces standard doctest plugin with a patched version and adds RedNose plugin for colored test output. """ def loadPlugins(self): for plug in builtin.plugins: if plug != Doctest: self.addPlugin(plug()) self.addPlugin(DoctestFix()) if rednose_available: self.addPlugin(RedNose()) super(NltkPluginManager, self).loadPlugins() manager = NltkPluginManager() manager.loadPlugins() # allow passing extra options and running individual tests # Examples: # # python runtests.py semantics.doctest # python runtests.py --with-id -v # python runtests.py --with-id -v nltk.featstruct args = sys.argv[1:] if not args: args = [NLTK_TEST_DIR] if all(arg.startswith('-') for arg in args): # only extra options were passed args += [NLTK_TEST_DIR] # Activate RedNose and hide skipped test messages from output if rednose_available: args += [ '--rednose', '--hide-skips' ] arguments = [ '--exclude=', # why is this needed? #'--with-xunit', #'--xunit-file=$WORKSPACE/nosetests.xml', #'--nocapture', '--with-doctest', #'--doctest-tests', #'--debug=nose,nose.importer,nose.inspector,nose.plugins,nose.result,nose.selector', '--doctest-extension=.doctest', '--doctest-fixtures=_fixt', '--doctest-options=+ELLIPSIS,+NORMALIZE_WHITESPACE,+IGNORE_EXCEPTION_DETAIL,+ALLOW_UNICODE,doctestencoding=utf-8', #'--verbosity=3', ] + args nose.main(argv=arguments, plugins=manager.plugins)