diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2018-09-15 08:07:26 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2018-09-21 17:56:49 -0400 |
commit | d2f77ab2ffc308e616af0207546ee1bef1cb8c75 (patch) | |
tree | 1cfa74a6998eb7bbc08ce28594b5f80dff457d65 | |
parent | 2f1b8cfcfe184a8fd6f3f2f789530bddb233dda8 (diff) | |
download | python-coveragepy-git-d2f77ab2ffc308e616af0207546ee1bef1cb8c75.tar.gz |
measured_contexts() and two simple tests of the global context
-rw-r--r-- | coverage/data.py | 5 | ||||
-rw-r--r-- | coverage/sqldata.py | 27 | ||||
-rw-r--r-- | tests/test_context.py | 30 | ||||
-rw-r--r-- | tests/test_debug.py | 4 |
4 files changed, 53 insertions, 13 deletions
diff --git a/coverage/data.py b/coverage/data.py index 3250196d..3a2432b3 100644 --- a/coverage/data.py +++ b/coverage/data.py @@ -445,6 +445,11 @@ class CoverageJsonData(object): self._validate() + def set_context(self, context): + """Set the context. Not implemented for JSON storage.""" + if context: + raise CoverageException("JSON storage doesn't support contexts") + def write(self): """Write the collected coverage data to a file. diff --git a/coverage/sqldata.py b/coverage/sqldata.py index b9488557..45c1570c 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -179,18 +179,16 @@ class CoverageSqliteData(SimpleRepr): return self._file_map.get(filename) def set_context(self, context): - """Get the context id for `context`.""" + """Set the current context for future `add_lines` etc.""" self._start_using() - if not context: - self._context_id = 0 - else: - with self._connect() as con: - row = con.execute("select id from context where context = ?", (context,)).fetchone() - if row is not None: - self._context_id = row[0] - else: - cur = con.execute("insert into context (context) values (?)", (context,)) - self._context_id = cur.lastrowid + context = context or "" + with self._connect() as con: + row = con.execute("select id from context where context = ?", (context,)).fetchone() + if row is not None: + self._context_id = row[0] + else: + cur = con.execute("insert into context (context) values (?)", (context,)) + self._context_id = cur.lastrowid def add_lines(self, line_data): """Add measured line data. @@ -384,6 +382,13 @@ class CoverageSqliteData(SimpleRepr): """A set of all files that had been measured.""" return set(self._file_map) + def measured_contexts(self): + """A set of all contexts that have been measured.""" + self._start_using() + with self._connect() as con: + contexts = set(row[0] for row in con.execute("select distinct(context) from context")) + return contexts + def file_tracer(self, filename): """Get the plugin name of the file tracer for a file. diff --git a/tests/test_context.py b/tests/test_context.py new file mode 100644 index 00000000..ec1e4885 --- /dev/null +++ b/tests/test_context.py @@ -0,0 +1,30 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +"""Tests for context support.""" + +import coverage + +from tests.coveragetest import CoverageTest + + +class GlobalContextTest(CoverageTest): + """Tests of the global context.""" + + def setUp(self): + super(GlobalContextTest, self).setUp() + self.skip_unless_data_storage_is("sql") + + def test_no_context(self): + self.make_file("main.py", "a = 1") + cov = coverage.Coverage() + self.start_import_stop(cov, "main") + data = cov.get_data() + self.assertCountEqual(data.measured_contexts(), [""]) + + def test_global_context(self): + self.make_file("main.py", "a = 1") + cov = coverage.Coverage(context="gooey") + self.start_import_stop(cov, "main") + data = cov.get_data() + self.assertCountEqual(data.measured_contexts(), ["gooey"]) diff --git a/tests/test_debug.py b/tests/test_debug.py index 284d9567..63edc84f 100644 --- a/tests/test_debug.py +++ b/tests/test_debug.py @@ -144,8 +144,8 @@ class DebugTraceTest(CoverageTest): self.assertRegex(real_messages[-1], r"^\s*\d+\.\w{4}: Writing data") self.assertRegex(last_line, r"\s+_write_file : .*coverage[/\\]data.py @\d+$") else: - self.assertRegex(real_messages[-1], r"^\s*\d+\.\w{4}: Creating data file") - self.assertRegex(last_line, r"\s+_create_db : .*coverage[/\\]sqldata.py @\d+$") + self.assertRegex(real_messages[-1], r"^\s*\d+\.\w{4}: Adding lines") + self.assertRegex(last_line, r"\s+add_lines : .*coverage[/\\]sqldata.py @\d+$") def test_debug_config(self): out_lines = self.f1_debug_output(["config"]) |