summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Grainger <tagrain@gmail.com>2020-09-13 00:26:36 +0100
committerGitHub <noreply@github.com>2020-09-12 19:26:36 -0400
commitecd6ab19a43a444bc7fc9dfbc08f3ca5274365ca (patch)
tree475101c0912dcf031b561acfab88cfaa712401cb
parent39e6d1de90b9574f8eaa266b289a7efc02b2e9e9 (diff)
downloadpython-coveragepy-git-ecd6ab19a43a444bc7fc9dfbc08f3ca5274365ca.tar.gz
Create Way to force package even if filepath exists (#1026)
Fixes: #268
-rw-r--r--coverage/config.py2
-rw-r--r--coverage/control.py4
-rw-r--r--coverage/inorout.py1
-rw-r--r--tests/modules/ambigious/__init__.py0
-rw-r--r--tests/modules/ambigious/pkg1/__init__.py0
-rw-r--r--tests/modules/ambigious/pkg1/ambigious.py0
-rw-r--r--tests/test_api.py22
-rw-r--r--tests/test_config.py2
8 files changed, 29 insertions, 2 deletions
diff --git a/coverage/config.py b/coverage/config.py
index 84d9758b..2af4a1cc 100644
--- a/coverage/config.py
+++ b/coverage/config.py
@@ -195,6 +195,7 @@ class CoverageConfig(object):
self.run_include = None
self.run_omit = None
self.source = None
+ self.source_pkgs = []
self.timid = False
self._crash = None
@@ -361,6 +362,7 @@ class CoverageConfig(object):
('run_include', 'run:include', 'list'),
('run_omit', 'run:omit', 'list'),
('source', 'run:source', 'list'),
+ ('source_pkgs', 'run:source_pkgs', 'list'),
('timid', 'run:timid', 'boolean'),
('_crash', 'run:_crash'),
diff --git a/coverage/control.py b/coverage/control.py
index d60db212..ebc38009 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -99,7 +99,7 @@ class Coverage(object):
def __init__(
self, data_file=_DEFAULT_DATAFILE, data_suffix=None, cover_pylib=None,
auto_data=False, timid=None, branch=None, config_file=True,
- source=None, omit=None, include=None, debug=None,
+ source=None, source_pkgs=None, omit=None, include=None, debug=None,
concurrency=None, check_preimported=False, context=None,
):
"""
@@ -188,7 +188,7 @@ class Coverage(object):
config_file=config_file,
data_file=data_file, cover_pylib=cover_pylib, timid=timid,
branch=branch, parallel=bool_or_none(data_suffix),
- source=source, run_omit=omit, run_include=include, debug=debug,
+ source=source, source_pkgs=source_pkgs, run_omit=omit, run_include=include, debug=debug,
report_omit=omit, report_include=include,
concurrency=concurrency, context=context,
)
diff --git a/coverage/inorout.py b/coverage/inorout.py
index ec5f2c1a..fbd1a95e 100644
--- a/coverage/inorout.py
+++ b/coverage/inorout.py
@@ -132,6 +132,7 @@ class InOrOut(object):
def configure(self, config):
"""Apply the configuration to get ready for decision-time."""
+ self.source_pkgs.extend(config.source_pkgs)
for src in config.source or []:
if os.path.isdir(src):
self.source.append(canonical_filename(src))
diff --git a/tests/modules/ambigious/__init__.py b/tests/modules/ambigious/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/modules/ambigious/__init__.py
diff --git a/tests/modules/ambigious/pkg1/__init__.py b/tests/modules/ambigious/pkg1/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/modules/ambigious/pkg1/__init__.py
diff --git a/tests/modules/ambigious/pkg1/ambigious.py b/tests/modules/ambigious/pkg1/ambigious.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/modules/ambigious/pkg1/ambigious.py
diff --git a/tests/test_api.py b/tests/test_api.py
index ab4b8a8f..7311073a 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -935,6 +935,28 @@ class SourceIncludeOmitTest(IncludeOmitTestsMixin, CoverageTest):
self.filenames_not_in(lines, "p1b")
self.assertEqual(lines['p1c'], 0)
+ def test_ambigious_source_package_as_dir(self):
+ # pkg1 is a directory and a pkg, since we cd into tests/modules/ambigious
+ self.chdir(self.nice_file(TESTS_DIR, 'modules', "ambigious"))
+ # pkg1 defaults to directory because tests/modules/ambigious/pkg1 exists
+ lines = self.coverage_usepkgs(source=["pkg1"])
+ self.assertEqual(
+ self.coverage_usepkgs(source=["pkg1"]),
+ {
+ u"__init__.py": 0, u"__init__": 0,
+ u"ambigious.py": 0, u"ambigious": 0,
+ },
+ )
+
+ def test_ambigious_source_package_as_package(self):
+ # pkg1 is a directory and a pkg, since we cd into tests/modules/ambigious
+ self.chdir(self.nice_file(TESTS_DIR, 'modules', "ambigious"))
+ lines = self.coverage_usepkgs(source_pkgs=["pkg1"])
+ self.filenames_in(lines, "p1a p1b")
+ self.filenames_not_in(lines, "p2a p2b othera otherb osa osb ambigious")
+ # Because source= was specified, we do search for unexecuted files.
+ self.assertEqual(lines['p1c'], 0)
+
class ReportIncludeOmitTest(IncludeOmitTestsMixin, CoverageTest):
"""Tests of the report include/omit functionality."""
diff --git a/tests/test_config.py b/tests/test_config.py
index 89ecb17c..dd86303f 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -462,6 +462,7 @@ class ConfigFileTest(UsingModulesMixin, CoverageTest):
; this omit is overriden by the omit from [report]
omit = twenty
source = myapp
+ source_pkgs = ned
plugins =
plugins.a_plugin
plugins.another
@@ -553,6 +554,7 @@ class ConfigFileTest(UsingModulesMixin, CoverageTest):
self.assertTrue(cov.config.parallel)
self.assertEqual(cov.config.concurrency, ["thread"])
self.assertEqual(cov.config.source, ["myapp"])
+ self.assertEqual(cov.config.source_pkgs, ["ned"])
self.assertEqual(cov.config.disable_warnings, ["abcd", "efgh"])
self.assertEqual(cov.get_exclude_list(), ["if 0:", r"pragma:?\s+no cover", "another_tab"])