diff options
author | Thomas Grainger <tagrain@gmail.com> | 2020-09-13 00:26:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-12 19:26:36 -0400 |
commit | ecd6ab19a43a444bc7fc9dfbc08f3ca5274365ca (patch) | |
tree | 475101c0912dcf031b561acfab88cfaa712401cb | |
parent | 39e6d1de90b9574f8eaa266b289a7efc02b2e9e9 (diff) | |
download | python-coveragepy-git-ecd6ab19a43a444bc7fc9dfbc08f3ca5274365ca.tar.gz |
Create Way to force package even if filepath exists (#1026)
Fixes: #268
-rw-r--r-- | coverage/config.py | 2 | ||||
-rw-r--r-- | coverage/control.py | 4 | ||||
-rw-r--r-- | coverage/inorout.py | 1 | ||||
-rw-r--r-- | tests/modules/ambigious/__init__.py | 0 | ||||
-rw-r--r-- | tests/modules/ambigious/pkg1/__init__.py | 0 | ||||
-rw-r--r-- | tests/modules/ambigious/pkg1/ambigious.py | 0 | ||||
-rw-r--r-- | tests/test_api.py | 22 | ||||
-rw-r--r-- | tests/test_config.py | 2 |
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"]) |