summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2018-09-15 08:07:26 -0400
committerNed Batchelder <ned@nedbatchelder.com>2018-09-21 17:56:49 -0400
commitd2f77ab2ffc308e616af0207546ee1bef1cb8c75 (patch)
tree1cfa74a6998eb7bbc08ce28594b5f80dff457d65
parent2f1b8cfcfe184a8fd6f3f2f789530bddb233dda8 (diff)
downloadpython-coveragepy-git-d2f77ab2ffc308e616af0207546ee1bef1cb8c75.tar.gz
measured_contexts() and two simple tests of the global context
-rw-r--r--coverage/data.py5
-rw-r--r--coverage/sqldata.py27
-rw-r--r--tests/test_context.py30
-rw-r--r--tests/test_debug.py4
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"])