summaryrefslogtreecommitdiff
path: root/tests/test_context.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2018-09-18 07:49:54 -0400
committerNed Batchelder <ned@nedbatchelder.com>2018-09-21 17:56:49 -0400
commit5ff763737475f8fa1a587f6903de1329b41090ae (patch)
tree99fca35d66bfd1a018b50368af783a460d59744c /tests/test_context.py
parentd2f77ab2ffc308e616af0207546ee1bef1cb8c75 (diff)
downloadpython-coveragepy-git-5ff763737475f8fa1a587f6903de1329b41090ae.tar.gz
Combining contexts works
Diffstat (limited to 'tests/test_context.py')
-rw-r--r--tests/test_context.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/tests/test_context.py b/tests/test_context.py
index ec1e4885..e20eb9bb 100644
--- a/tests/test_context.py
+++ b/tests/test_context.py
@@ -3,7 +3,10 @@
"""Tests for context support."""
+import os.path
+
import coverage
+from coverage.data import CoverageData, combine_parallel_data
from tests.coveragetest import CoverageTest
@@ -28,3 +31,59 @@ class GlobalContextTest(CoverageTest):
self.start_import_stop(cov, "main")
data = cov.get_data()
self.assertCountEqual(data.measured_contexts(), ["gooey"])
+
+ def run_red_blue(self, **options):
+ self.make_file("red.py", """\
+ a = 1
+ if a > 2:
+ a = 3
+ assert a == 1
+ """)
+ red_cov = coverage.Coverage(context="red", data_suffix="r", source=["."], **options)
+ self.start_import_stop(red_cov, "red")
+ red_cov.save()
+
+ self.make_file("blue.py", """\
+ b = 1
+ if b > 2:
+ b = 3
+ assert b == 1
+ """)
+ blue_cov = coverage.Coverage(context="blue", data_suffix="b", source=["."], **options)
+ self.start_import_stop(blue_cov, "blue")
+ blue_cov.save()
+
+ def test_combining_line_contexts(self):
+ self.run_red_blue()
+ combined = CoverageData()
+ combine_parallel_data(combined)
+
+ self.assertEqual(combined.measured_contexts(), {'red', 'blue'})
+
+ full_names = {os.path.basename(f): f for f in combined.measured_files()}
+ self.assertCountEqual(full_names, ['red.py', 'blue.py'])
+
+ self.assertEqual(combined.lines(full_names['red.py'], context='red'), [1, 2, 4])
+ self.assertEqual(combined.lines(full_names['red.py'], context='blue'), [])
+ self.assertEqual(combined.lines(full_names['blue.py'], context='red'), [])
+ self.assertEqual(combined.lines(full_names['blue.py'], context='blue'), [1, 2, 4])
+
+ def test_combining_arc_contexts(self):
+ self.run_red_blue(branch=True)
+ combined = CoverageData()
+ combine_parallel_data(combined)
+
+ self.assertEqual(combined.measured_contexts(), {'red', 'blue'})
+
+ full_names = {os.path.basename(f): f for f in combined.measured_files()}
+ self.assertCountEqual(full_names, ['red.py', 'blue.py'])
+
+ self.assertEqual(combined.lines(full_names['red.py'], context='red'), [1, 2, 4])
+ self.assertEqual(combined.lines(full_names['red.py'], context='blue'), [])
+ self.assertEqual(combined.lines(full_names['blue.py'], context='red'), [])
+ self.assertEqual(combined.lines(full_names['blue.py'], context='blue'), [1, 2, 4])
+
+ self.assertEqual(combined.arcs(full_names['red.py'], context='red'), [(-1, 1), (1, 2), (2, 4), (4, -1)])
+ self.assertEqual(combined.arcs(full_names['red.py'], context='blue'), [])
+ self.assertEqual(combined.arcs(full_names['blue.py'], context='red'), [])
+ self.assertEqual(combined.arcs(full_names['blue.py'], context='blue'), [(-1, 1), (1, 2), (2, 4), (4, -1)])