Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions Lib/test/test_trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -590,5 +590,32 @@ def test_no_source_file(self):
self.assertIn(f"{filename}({firstlineno + 4})", out[4])


class TestCoverageResultsInit(unittest.TestCase):
def test_counts_dict_is_copied(self):
# gh-145865: CoverageResults.__init__ should copy the counts dict
from trace import CoverageResults

counts = {}
cr = CoverageResults(counts=counts)
cr.update(CoverageResults(counts={("file.py", 1): 5}))
self.assertEqual(counts, {})

def test_calledfuncs_dict_is_copied(self):
from trace import CoverageResults

calledfuncs = {}
cr = CoverageResults(calledfuncs=calledfuncs)
cr.update(CoverageResults(calledfuncs={("file.py", "mod", "func"): 1}))
self.assertEqual(calledfuncs, {})

def test_callers_dict_is_copied(self):
from trace import CoverageResults

callers = {}
cr = CoverageResults(callers=callers)
cr.update(CoverageResults(callers={(("a.py", "m", "f"), ("b.py", "m", "g")): 1}))
self.assertEqual(callers, {})


if __name__ == '__main__':
unittest.main()
2 changes: 1 addition & 1 deletion Lib/trace.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ def __init__(self, counts=None, calledfuncs=None, infile=None,
self.counts = counts
if self.counts is None:
self.counts = {}
self.counter = self.counts.copy() # map (filename, lineno) to count
self.counts = self.counts.copy() # map (filename, lineno) to count
self.calledfuncs = calledfuncs
if self.calledfuncs is None:
self.calledfuncs = {}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Fix typo in :class:`trace.CoverageResults` where ``self.counter`` was
assigned instead of ``self.counts``, causing the ``counts`` dict to not
be copied and ``update()`` to mutate the caller's original dict.
Loading