diff options
Diffstat (limited to 'tests/test_api.py')
-rw-r--r-- | tests/test_api.py | 60 |
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.""" |