X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=runtests.py;h=9f3259f879e827f0ee332631363f7131a6be0eaa;hb=dafd5e0e29ac340f8f35e7a119b90ba60a2cc002;hp=4dcac43ef857794b1fffa077dcbfb704e76e6187;hpb=40545bdaaf8814124b28bff651ce0f112b3df864;p=cython.git diff --git a/runtests.py b/runtests.py index 4dcac43e..9f3259f8 100644 --- a/runtests.py +++ b/runtests.py @@ -68,25 +68,23 @@ if sys.platform == 'win32': except ValueError: pass distutils_distro.parse_config_files(cfgfiles) -# Lists external modules, and a matcher matching tests -# which should be excluded if the module is not present. -# TODO: use tags for these EXT_DEP_MODULES = { - 'numpy' : re.compile('.*\.numpy_.*').match, - 'pstats' : re.compile('.*\.pstats_.*').match, - 'posix' : re.compile('.*\.posix_.*').match, + 'numpy' : 'tag:numpy', + 'pstats' : 'tag:pstats', + 'posix' : 'tag:posix', } def get_numpy_include_dirs(): import numpy return [numpy.get_include()] - +# TODO: use tags EXT_DEP_INCLUDES = [ # test name matcher , callable returning list (re.compile('numpy_.*').match, get_numpy_include_dirs), ] +# TODO: use tags VER_DEP_MODULES = { # tests are excluded if 'CurrentPythonVersion OP VersionTuple', i.e. # (2,4) : (operator.lt, ...) excludes ... when PyVer < 2.4.x @@ -95,11 +93,16 @@ VER_DEP_MODULES = { ]), (2,5) : (operator.lt, lambda x: x in ['run.any', 'run.all', + 'run.relativeimport_T542', + 'run.relativeimport_star_T542', ]), (2,6) : (operator.lt, lambda x: x in ['run.print_function', 'run.cython3', + 'run.generators_py', # generators, with statement 'run.pure_py', # decorators, with statement ]), + (2,7) : (operator.lt, lambda x: x in ['run.withstat_py', # multi context with statement + ]), # The next line should start (3,); but this is a dictionary, so # we can only have one (3,) key. Since 2.7 is supposed to be the # last 2.x release, things would have to change drastically for this @@ -292,6 +295,11 @@ class TestBuilder(object): return suite def build_tests(self, test_class, path, workdir, module, expect_errors, tags): + if 'werror' in tags['tags']: + warning_errors = True + else: + warning_errors = False + if expect_errors: if 'cpp' in tags['tag'] and 'cpp' in self.languages: languages = ['cpp'] @@ -303,12 +311,12 @@ class TestBuilder(object): languages = list(languages) languages.remove('c') tests = [ self.build_test(test_class, path, workdir, module, - language, expect_errors) + language, expect_errors, warning_errors) for language in languages ] return tests def build_test(self, test_class, path, workdir, module, - language, expect_errors): + language, expect_errors, warning_errors): workdir = os.path.join(workdir, language) if not os.path.exists(workdir): os.makedirs(workdir) @@ -320,13 +328,14 @@ class TestBuilder(object): cleanup_sharedlibs=self.cleanup_sharedlibs, cython_only=self.cython_only, fork=self.fork, - language_level=self.language_level) + language_level=self.language_level, + warning_errors=warning_errors) class CythonCompileTestCase(unittest.TestCase): def __init__(self, test_directory, workdir, module, language='c', expect_errors=False, annotate=False, cleanup_workdir=True, cleanup_sharedlibs=True, cython_only=False, fork=True, - language_level=2): + language_level=2, warning_errors=False): self.test_directory = test_directory self.workdir = workdir self.module = module @@ -338,16 +347,26 @@ class CythonCompileTestCase(unittest.TestCase): self.cython_only = cython_only self.fork = fork self.language_level = language_level + self.warning_errors = warning_errors unittest.TestCase.__init__(self) def shortDescription(self): return "compiling (%s) %s" % (self.language, self.module) def setUp(self): + from Cython.Compiler import Options + self._saved_options = [ (name, getattr(Options, name)) + for name in ('warning_errors', 'error_on_unknown_names') ] + Options.warning_errors = self.warning_errors + if self.workdir not in sys.path: sys.path.insert(0, self.workdir) def tearDown(self): + from Cython.Compiler import Options + for name, value in self._saved_options: + setattr(Options, name, value) + try: sys.path.remove(self.workdir) except ValueError: @@ -724,6 +743,11 @@ class CythonUnitTestCase(CythonRunTestCase): class CythonPyregrTestCase(CythonRunTestCase): + def setUp(self): + CythonRunTestCase.setUp(self) + from Cython.Compiler import Options + Options.error_on_unknown_names = False + def _run_unittest(self, result, *classes): """Run tests from unittest.TestCase-derived classes.""" valid_types = (unittest.TestSuite, unittest.TestCase) @@ -971,11 +995,11 @@ class MissingDependencyExcluder: try: __import__(mod) except ImportError: - self.exclude_matchers.append(matcher) + self.exclude_matchers.append(string_selector(matcher)) self.tests_missing_deps = [] def __call__(self, testname, tags=None): for matcher in self.exclude_matchers: - if matcher(testname): + if matcher(testname, tags): self.tests_missing_deps.append(testname) return True return False @@ -1272,7 +1296,7 @@ def main(): if options.tickets: for ticket_number in options.tickets: test_bugs = True - cmd_args.append('.*T%s$' % ticket_number) + cmd_args.append('ticket:%s' % ticket_number) if not test_bugs: for selector in cmd_args: if selector.startswith('bugs'): @@ -1325,15 +1349,15 @@ def main(): test_suite.addTest(filetests.build_suite()) if options.system_pyregr and languages: - filetests = TestBuilder(ROOTDIR, WORKDIR, selectors, exclude_selectors, - options.annotate_source, options.cleanup_workdir, - options.cleanup_sharedlibs, True, - options.cython_only, languages, test_bugs, - options.fork, options.language_level) - test_suite.addTest( - filetests.handle_directory( - os.path.join(sys.prefix, 'lib', 'python'+sys.version[:3], 'test'), - 'pyregr')) + sys_pyregr_dir = os.path.join(sys.prefix, 'lib', 'python'+sys.version[:3], 'test') + if os.path.isdir(sys_pyregr_dir): + filetests = TestBuilder(ROOTDIR, WORKDIR, selectors, exclude_selectors, + options.annotate_source, options.cleanup_workdir, + options.cleanup_sharedlibs, True, + options.cython_only, languages, test_bugs, + options.fork, sys.version_info[0]) + sys.stderr.write("Including CPython regression tests in %s\n" % sys_pyregr_dir) + test_suite.addTest(filetests.handle_directory(sys_pyregr_dir, 'pyregr')) if options.xml_output_dir: from Cython.Tests.xmlrunner import XMLTestRunner