diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2019-01-17 18:19:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-17 18:19:54 +0100 |
commit | 40ddd70915c33d6f2a9491085941fe2886e81cd0 (patch) | |
tree | b854bb00b8ef3cf83bc4018610e1f0f59520c393 | |
parent | 99d273059b11a6ab354549c8f52a11e919e4e626 (diff) | |
parent | bd44de56407ab970fc65a631a856b9956613a21a (diff) | |
download | cython-40ddd70915c33d6f2a9491085941fe2886e81cd0.tar.gz |
Merge pull request #2784 from wjsi/master
Fix inconsistency between traced files and reported files
-rw-r--r-- | Cython/Coverage.py | 6 | ||||
-rw-r--r-- | tests/run/coverage_installed_pkg.srctree | 71 |
2 files changed, 75 insertions, 2 deletions
diff --git a/Cython/Coverage.py b/Cython/Coverage.py index f05e2b650..fa2f0ede1 100644 --- a/Cython/Coverage.py +++ b/Cython/Coverage.py @@ -74,7 +74,7 @@ class Plugin(CoveragePlugin): if c_file is None: c_file, py_file = self._find_source_files(filename) if not c_file: - return None + return None # unknown file # parse all source file paths and lines from C file # to learn about all relevant source files right away (pyx/pxi/pxd) @@ -82,7 +82,9 @@ class Plugin(CoveragePlugin): # is not from the main .pyx file but a file with a different # name than the .c file (which prevents us from finding the # .c file) - self._parse_lines(c_file, filename) + _, code = self._parse_lines(c_file, filename) + if code is None: + return None # no source found if self._file_path_map is None: self._file_path_map = {} diff --git a/tests/run/coverage_installed_pkg.srctree b/tests/run/coverage_installed_pkg.srctree new file mode 100644 index 000000000..7d70f7a45 --- /dev/null +++ b/tests/run/coverage_installed_pkg.srctree @@ -0,0 +1,71 @@ +# mode: run +# tag: coverage,trace + +""" +PYTHON setup.py build_ext -i +PYTHON -c "import shutil; shutil.move('ext_src/ext_pkg', 'ext_pkg')" +PYTHON -m coverage run coverage_test.py +PYTHON -m coverage report +""" + +######## setup.py ######## +from distutils.core import setup, Extension +from Cython.Build import cythonize + +setup(ext_modules = cythonize([ + 'pkg/*.pyx', +])) + +setup( + name='ext_pkg', + package_dir={'': 'ext_src'}, + ext_modules = cythonize([ + Extension('ext_pkg._mul', ['ext_src/ext_pkg/mul.py']) + ]), +) + + +######## .coveragerc ######## +[run] +plugins = Cython.Coverage + + +######## pkg/__init__.py ######## +from .test_ext_import import test_add + + +######## pkg/test_ext_import.pyx ######## +# cython: linetrace=True +# distutils: define_macros=CYTHON_TRACE=1 + +import ext_pkg + + +cpdef test_add(int a, int b): + return a + ext_pkg.test_mul(b, 2) + + +######## ext_src/ext_pkg/__init__.py ######## +from .mul import test_mul + + +######## ext_src/ext_pkg/mul.py ######## +from __future__ import absolute_import + + +def test_mul(a, b): + return a * b + + +try: + from ._mul import * +except ImportError: + pass + + +######## coverage_test.py ######## + +from pkg import test_add + + +assert 5 == test_add(1, 2) |