better debug output
[cython.git] / runtests.py
index d52b7d1bed6562736b1f63dcd1614183799f3e0e..d4921d5bacddfa5a239260f642a10983df31717f 100644 (file)
@@ -35,7 +35,8 @@ TEST_RUN_DIRS = ['run', 'wrappers', 'pyregr']
 # which should be excluded if the module is not present.
 EXT_DEP_MODULES = {
     'numpy' : re.compile('.*\.numpy_.*').match,
-    'pstats' : re.compile('.*\.pstats_.*').match
+    'pstats' : re.compile('.*\.pstats_.*').match,
+    'posix' : re.compile('.*\.posix_.*').match,
 }
 
 def get_numpy_include_dirs():
@@ -50,9 +51,13 @@ EXT_DEP_INCLUDES = [
 VER_DEP_MODULES = {
     # tests are excluded if 'CurrentPythonVersion OP VersionTuple', i.e.
     # (2,4) : (operator.le, ...) excludes ... when PyVer <= 2.4.x
+    (2,5) : (operator.lt, lambda x: x in ['run.any',
+                                          'run.all',
+                                          ]),
     (2,4) : (operator.le, lambda x: x in ['run.extern_builtins_T258'
                                           ]),
-    (2,6) : (operator.lt, lambda x: x in ['run.print_function'
+    (2,6) : (operator.lt, lambda x: x in ['run.print_function',
+                                          'run.cython3',
                                           ]),
     (3,): (operator.ge, lambda x: x in ['run.non_future_division',
                                         'compile.extsetslice',
@@ -178,7 +183,10 @@ class TestBuilder(object):
 
     def build_tests(self, test_class, path, workdir, module, expect_errors):
         if expect_errors:
-            languages = self.languages[:1]
+            if 'cpp' in module and 'cpp' in self.languages:
+                languages = ['cpp']
+            else:
+                languages = self.languages[:1]
         else:
             languages = self.languages
         if 'cpp' in module and 'c' in languages:
@@ -321,7 +329,8 @@ class CythonCompileTestCase(unittest.TestCase):
             use_listing_file = False,
             cplus = self.language == 'cpp',
             generate_pxi = False,
-            evaluate_tree_assertions = True,
+#            evaluate_tree_assertions = True,
+            evaluate_tree_assertions = False,
             )
         cython_compile(source, options=options,
                        full_module_name=module)
@@ -752,6 +761,9 @@ if __name__ == '__main__':
     parser.add_option("-C", "--coverage", dest="coverage",
                       action="store_true", default=False,
                       help="collect source coverage data for the Compiler")
+    parser.add_option("--coverage-xml", dest="coverage_xml",
+                      action="store_true", default=False,
+                      help="collect source coverage data for the Compiler in XML format")
     parser.add_option("-A", "--annotate", dest="annotate_source",
                       action="store_true", default=True,
                       help="generate annotated HTML versions of the test source files")
@@ -778,7 +790,6 @@ if __name__ == '__main__':
 
     if sys.version_info[0] >= 3:
         options.doctests = False
-        options.pyregr   = False
         if options.with_cython:
             try:
                 # try if Cython is installed in a Py3 version
@@ -799,11 +810,12 @@ if __name__ == '__main__':
 
     WITH_CYTHON = options.with_cython
 
-    if options.coverage:
+    if options.coverage or options.coverage_xml:
         if not WITH_CYTHON:
-            options.coverage = False
+            options.coverage = options.coverage_xml = False
         else:
-            import coverage
+            from coverage import coverage as _coverage
+            coverage = _coverage(branch=True)
             coverage.erase()
             coverage.start()
 
@@ -924,14 +936,17 @@ if __name__ == '__main__':
 
     result = test_runner.run(test_suite)
 
-    if options.coverage:
+    if options.coverage or options.coverage_xml:
         coverage.stop()
         ignored_modules = ('Options', 'Version', 'DebugFlags', 'CmdLine')
         modules = [ module for name, module in sys.modules.items()
                     if module is not None and
                     name.startswith('Cython.Compiler.') and 
                     name[len('Cython.Compiler.'):] not in ignored_modules ]
-        coverage.report(modules, show_missing=0)
+        if options.coverage:
+            coverage.report(modules, show_missing=0)
+        if options.coverage_xml:
+            coverage.xml_report(modules, outfile="coverage-report.xml")
 
     if missing_dep_excluder.tests_missing_deps:
         sys.stderr.write("Following tests excluded because of missing dependencies on your system:\n")