summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.rst3
-rw-r--r--coverage/sqldata.py12
-rw-r--r--tests/test_data.py16
3 files changed, 26 insertions, 5 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index cd90a1f4..c483ed39 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -39,7 +39,10 @@ Unreleased
- On Python 3.11, the ``[toml]`` extra no longer installs tomli, instead using
tomllib from the standard library. Thanks `Shantanu <pull 1359_>`_.
+- In-memory CoverageData objects now properly update(), closing `issue 1323`_.
+
.. _issue 1310: https://github.com/nedbat/coveragepy/issues/1310
+.. _issue 1323: https://github.com/nedbat/coveragepy/issues/1323
.. _issue 1351: https://github.com/nedbat/coveragepy/issues/1351
.. _pull 1354: https://github.com/nedbat/coveragepy/pull/1354
.. _pull 1359: https://github.com/nedbat/coveragepy/pull/1359
diff --git a/coverage/sqldata.py b/coverage/sqldata.py
index c8594a45..58b82d2f 100644
--- a/coverage/sqldata.py
+++ b/coverage/sqldata.py
@@ -253,10 +253,10 @@ class CoverageData(SimpleReprMixin):
def _reset(self):
"""Reset our attributes."""
- if self._dbs:
+ if not self._no_disk:
for db in self._dbs.values():
db.close()
- self._dbs = {}
+ self._dbs = {}
self._file_map = {}
self._have_used = False
self._current_context_id = None
@@ -679,6 +679,7 @@ class CoverageData(SimpleReprMixin):
path: id
for id, path in conn.execute("select id, path from file")
}
+ self._file_map.update(file_ids)
conn.executemany(
"insert or ignore into context (context) values (?)",
((context,) for context in contexts)
@@ -752,9 +753,10 @@ class CoverageData(SimpleReprMixin):
((file_ids[filename], tracer) for filename, tracer in tracer_map.items())
)
- # Update all internal cache data.
- self._reset()
- self.read()
+ if not self._no_disk:
+ # Update all internal cache data.
+ self._reset()
+ self.read()
def erase(self, parallel=False):
"""Erase the data in this object.
diff --git a/tests/test_data.py b/tests/test_data.py
index f8bff2eb..d20e3ff0 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -891,3 +891,19 @@ class DumpsLoadsTest(CoverageTest):
)
with pytest.raises(DataError, match=msg):
covdata.loads(bad_data)
+
+
+class NoDiskTest(CoverageTest):
+ """Tests of in-memory CoverageData."""
+
+ run_in_temp_dir = False
+
+ def test_updating(self):
+ # https://github.com/nedbat/coveragepy/issues/1323
+ a = CoverageData(no_disk=True)
+ a.add_lines({'foo.py': [10, 20, 30]})
+ assert a.measured_files() == {'foo.py'}
+
+ b = CoverageData(no_disk=True)
+ b.update(a)
+ assert b.measured_files() == {'foo.py'}