summaryrefslogtreecommitdiff
path: root/tests/test_api.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_api.py')
-rw-r--r--tests/test_api.py60
1 files changed, 52 insertions, 8 deletions
diff --git a/tests/test_api.py b/tests/test_api.py
index b461c503..b44a5d34 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -1,10 +1,11 @@
# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
-# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
+# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
"""Tests for coverage.py's API."""
import fnmatch
import os
+import os.path
import sys
import textwrap
import warnings
@@ -12,6 +13,7 @@ import warnings
import coverage
from coverage import env
from coverage.backward import StringIO, import_local_file
+from coverage.data import line_counts
from coverage.misc import CoverageException
from coverage.report import Reporter
@@ -356,6 +358,7 @@ class ApiTest(CoverageTest):
cov = coverage.Coverage(data_suffix=True)
self.start_import_stop(cov, "code2")
cov.save()
+ self.assert_file_count(".coverage.*", 2)
def make_bad_data_file(self):
"""Make one bad data file."""
@@ -368,8 +371,12 @@ class ApiTest(CoverageTest):
self.make_bad_data_file()
cov = coverage.Coverage()
warning_regex = (
+ r"(" # JSON message:
r"Couldn't read data from '.*\.coverage\.foo': "
r"CoverageException: Doesn't seem to be a coverage\.py data file"
+ r"|" # SQL message:
+ r"Couldn't use data file '.*\.coverage\.foo': file (is encrypted or )?is not a database"
+ r")"
)
with self.assert_warnings(cov, [warning_regex]):
cov.combine()
@@ -377,8 +384,9 @@ class ApiTest(CoverageTest):
# We got the results from code1 and code2 properly.
self.check_code1_code2(cov)
- # The bad file still exists.
+ # The bad file still exists, but it's the only parallel data file left.
self.assert_exists(".coverage.foo")
+ self.assert_file_count(".coverage.*", 1)
def test_combining_twice(self):
self.make_good_data_files()
@@ -386,6 +394,8 @@ class ApiTest(CoverageTest):
cov1.combine()
cov1.save()
self.check_code1_code2(cov1)
+ self.assert_file_count(".coverage.*", 0)
+ self.assert_exists(".coverage")
cov2 = coverage.Coverage()
with self.assertRaisesRegex(CoverageException, r"No data to combine"):
@@ -502,8 +512,6 @@ class NamespaceModuleTest(UsingModulesMixin, CoverageTest):
class OmitIncludeTestsMixin(UsingModulesMixin, CoverageTestMethodsMixin):
"""Test methods for coverage methods taking include and omit."""
- run_in_temp_dir = False
-
def filenames_in(self, summary, filenames):
"""Assert the `filenames` are in the keys of `summary`."""
for filename in filenames.split():
@@ -571,7 +579,7 @@ class SourceOmitIncludeTest(OmitIncludeTestsMixin, CoverageTest):
import usepkgs # pragma: nested # pylint: disable=import-error, unused-variable
cov.stop() # pragma: nested
data = cov.get_data()
- summary = data.line_counts()
+ summary = line_counts(data)
for k, v in list(summary.items()):
assert k.endswith(".py")
summary[k[:-3]] = v
@@ -581,7 +589,7 @@ class SourceOmitIncludeTest(OmitIncludeTestsMixin, CoverageTest):
cov = coverage.Coverage(source=["pkg1"], include=["pkg2"])
with self.assert_warnings(cov, ["--include is ignored because --source is set"]):
cov.start()
- cov.stop()
+ cov.stop() # pragma: nested
def test_source_package_as_dir(self):
# pkg1 is a directory, since we cd'd into tests/modules in setUp.
@@ -696,8 +704,6 @@ class TestRunnerPluginTest(CoverageTest):
"""
def pretend_to_be_nose_with_cover(self, erase):
"""This is what the nose --with-cover plugin does."""
- cov = coverage.Coverage()
-
self.make_file("no_biggie.py", """\
a = 1
b = 2
@@ -705,6 +711,7 @@ class TestRunnerPluginTest(CoverageTest):
c = 4
""")
+ cov = coverage.Coverage()
if erase:
cov.combine()
cov.erase()
@@ -725,6 +732,43 @@ class TestRunnerPluginTest(CoverageTest):
def test_nose_plugin_with_erase(self):
self.pretend_to_be_nose_with_cover(erase=True)
+ def test_pytestcov_parallel(self):
+ self.pretend_to_be_pytestcov(append=False)
+
+ def test_pytestcov_parallel_append(self):
+ self.pretend_to_be_pytestcov(append=True)
+
+ def pretend_to_be_pytestcov(self, append):
+ self.make_file("prog.py", """\
+ a = 1
+ b = 2
+ if b == 1:
+ c = 4
+ """)
+ self.make_file(".coveragerc", """\
+ [run]
+ parallel = True
+ source = .
+ """)
+
+ cov = coverage.Coverage(source=None, branch=None, config_file='.coveragerc')
+ if append:
+ cov.load()
+ else:
+ cov.erase()
+ self.start_import_stop(cov, "prog")
+ cov.combine()
+ cov.save()
+ report = StringIO()
+ cov.report(show_missing=None, ignore_errors=True, file=report, skip_covered=None)
+ self.assertEqual(report.getvalue(), textwrap.dedent("""\
+ Name Stmts Miss Cover
+ -----------------------------
+ prog.py 4 1 75%
+ """))
+ self.assert_file_count(".coverage", 0)
+ self.assert_file_count(".coverage.*", 1)
+
class ReporterDeprecatedAttributeTest(CoverageTest):
"""Test that Reporter.file_reporters has been deprecated."""