summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt3
-rw-r--r--coverage/control.py7
-rw-r--r--test/test_api.py18
3 files changed, 27 insertions, 1 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 45dc1dc5..7d71d019 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -19,6 +19,9 @@ Version 3.5
If it does not, it is interpreted relative to the current directory.
Closes `issue 121`.
+- The ``coverage()`` constructor accepts single strings for the ``omit=`` and
+ ``include=`` arguments, adapting to a common error in programmatic use.
+
- Modules can now be run directly using ``coverage run -m modulename``, to
mirror Python's ``-m`` flag. Closes `issue 95_`, thanks, Brandon Rhodes.
diff --git a/coverage/control.py b/coverage/control.py
index dd656616..cee073e4 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -64,7 +64,8 @@ class coverage(object):
measured.
`include` and `omit` are lists of filename patterns. Files that match
- `include` will be measured, files that match `omit` will not.
+ `include` will be measured, files that match `omit` will not. Each
+ will also accept a single string argument.
"""
from coverage import __version__
@@ -95,6 +96,10 @@ class coverage(object):
self.config.data_file = env_data_file
# 4: from constructor arguments:
+ if isinstance(omit, string_class):
+ omit = [omit]
+ if isinstance(include, string_class):
+ include = [include]
self.config.from_args(
data_file=data_file, cover_pylib=cover_pylib, timid=timid,
branch=branch, parallel=bool_or_none(data_suffix),
diff --git a/test/test_api.py b/test/test_api.py
index 31d8988b..0a0aabfd 100644
--- a/test/test_api.py
+++ b/test/test_api.py
@@ -388,6 +388,15 @@ class SourceOmitIncludeTest(CoverageTest):
"p1b.py p1c.py p2b.py otherb.py osb.py"
)
+ def test_include_as_string(self):
+ lines = self.coverage_usepkgs_summary(include="*a.py")
+ self.filenames_in_summary(lines,
+ "p1a.py p2a.py othera.py osa.py"
+ )
+ self.filenames_not_in_summary(lines,
+ "p1b.py p1c.py p2b.py otherb.py osb.py"
+ )
+
def test_omit(self):
lines = self.coverage_usepkgs_summary(omit=["*/p1a.py"])
self.filenames_in_summary(lines,
@@ -406,6 +415,15 @@ class SourceOmitIncludeTest(CoverageTest):
"p1a.py p1c.py p2a.py othera.py osa.py"
)
+ def test_omit_as_string(self):
+ lines = self.coverage_usepkgs_summary(omit="*a.py")
+ self.filenames_in_summary(lines,
+ "p1b.py p2b.py otherb.py osb.py"
+ )
+ self.filenames_not_in_summary(lines,
+ "p1a.py p1c.py p2a.py othera.py osa.py"
+ )
+
def test_omit_and_include(self):
lines = self.coverage_usepkgs_summary(
include=["*/p1*"], omit=["*/p1a.py"]