summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Szotten <davidszotten@gmail.com>2019-12-20 16:03:09 +0000
committerNed Batchelder <ned@nedbatchelder.com>2019-12-21 10:28:40 -0500
commitade1f2c534d1b85c8b465ce302ab345b316ec3ef (patch)
tree427add523f3760d6eba40b67e7f5e93dda0c8a26
parent7dc37728d3ddddd12115bb94c58ad0dc67dcfb3e (diff)
downloadpython-coveragepy-git-ade1f2c534d1b85c8b465ce302ab345b316ec3ef.tar.gz
fix context reporting for relative_files
fix reporting of contexts when `relative_files = True` fixes #900
-rw-r--r--coverage/html.py2
-rw-r--r--coverage/jsonreport.py5
-rw-r--r--tests/test_html.py17
-rw-r--r--tests/test_json.py81
4 files changed, 65 insertions, 40 deletions
diff --git a/coverage/html.py b/coverage/html.py
index 4aa018e3..596e1143 100644
--- a/coverage/html.py
+++ b/coverage/html.py
@@ -95,7 +95,7 @@ class HtmlDataGeneration(object):
arcs_executed = analysis.arcs_executed()
if self.config.show_contexts:
- contexts_by_lineno = analysis.data.contexts_by_lineno(fr.filename)
+ contexts_by_lineno = analysis.data.contexts_by_lineno(analysis.filename)
lines = []
diff --git a/coverage/jsonreport.py b/coverage/jsonreport.py
index e44cbf08..0c3f313d 100644
--- a/coverage/jsonreport.py
+++ b/coverage/jsonreport.py
@@ -43,7 +43,6 @@ class JsonReporter(object):
for file_reporter, analysis in get_analysis_to_report(self.coverage, morfs):
measured_files[file_reporter.relative_filename()] = self.report_one_file(
coverage_data,
- file_reporter,
analysis
)
@@ -71,7 +70,7 @@ class JsonReporter(object):
return self.total.n_statements and self.total.pc_covered
- def report_one_file(self, coverage_data, file_reporter, analysis):
+ def report_one_file(self, coverage_data, analysis):
"""Extract the relevant report data for a single file"""
nums = analysis.numbers
self.total += nums
@@ -90,7 +89,7 @@ class JsonReporter(object):
}
if self.config.json_show_contexts:
reported_file['contexts'] = analysis.data.contexts_by_lineno(
- file_reporter.filename
+ analysis.filename,
)
if coverage_data.has_arcs():
reported_file['summary'].update({
diff --git a/tests/test_html.py b/tests/test_html.py
index 6c4c706c..b543fa08 100644
--- a/tests/test_html.py
+++ b/tests/test_html.py
@@ -1127,3 +1127,20 @@ class HtmlWithContextsTest(HtmlTestHelpers, CoverageTest):
self.start_import_stop(cov, "two_tests")
with self.assert_warnings(cov, ["No contexts were measured"]):
cov.html_report()
+
+ def test_dynamic_contexts_relative_files(self):
+ self.make_file("two_tests.py", self.SOURCE)
+ self.make_file("config", "[run]\nrelative_files = True")
+ cov = coverage.Coverage(source=["."], config_file="config")
+ cov.set_option("run:dynamic_context", "test_function")
+ cov.set_option("html:show_contexts", True)
+ mod = self.start_import_stop(cov, "two_tests")
+ d = self.html_data_from_cov(cov, mod)
+ context_labels = [self.EMPTY, 'two_tests.test_one', 'two_tests.test_two']
+ expected_lines = [self.OUTER_LINES, self.TEST_ONE_LINES, self.TEST_TWO_LINES]
+ for label, expected in zip(context_labels, expected_lines):
+ actual = [
+ ld.number for ld in d.lines
+ if label == ld.contexts_label or label in (ld.contexts or ())
+ ]
+ assert sorted(expected) == sorted(actual)
diff --git a/tests/test_json.py b/tests/test_json.py
index 1ae5764e..64de9292 100644
--- a/tests/test_json.py
+++ b/tests/test_json.py
@@ -103,42 +103,51 @@ class JsonReportTest(UsingModulesMixin, CoverageTest):
self._assert_expected_json_report(cov, expected_result)
def test_context(self):
- cov = coverage.Coverage(context="cool_test")
- cov.config.json_show_contexts = True
- expected_result = {
- 'meta': {
- "version": coverage.__version__,
- "branch_coverage": False,
- "show_contexts": True,
- },
- 'files': {
- 'a.py': {
- 'executed_lines': [1, 2],
- 'missing_lines': [3],
- 'excluded_lines': [],
- "contexts": {
- "1": [
- "cool_test"
- ],
- "2": [
- "cool_test"
- ]
- },
- 'summary': {
- 'excluded_lines': 0,
- 'missing_lines': 1,
- 'covered_lines': 2,
- 'num_statements': 3,
- 'percent_covered': 66.66666666666667
+ for relative_files in [False, True]:
+ config_file = os.path.join(self.temp_dir, "config")
+ with open(config_file, 'w') as handle:
+ handle.write(
+ "[run]\nrelative_files = {}".format(relative_files)
+ )
+ cov = coverage.Coverage(
+ context="cool_test",
+ config_file=config_file
+ )
+ cov.config.json_show_contexts = True
+ expected_result = {
+ 'meta': {
+ "version": coverage.__version__,
+ "branch_coverage": False,
+ "show_contexts": True,
+ },
+ 'files': {
+ 'a.py': {
+ 'executed_lines': [1, 2],
+ 'missing_lines': [3],
+ 'excluded_lines': [],
+ "contexts": {
+ "1": [
+ "cool_test"
+ ],
+ "2": [
+ "cool_test"
+ ]
+ },
+ 'summary': {
+ 'excluded_lines': 0,
+ 'missing_lines': 1,
+ 'covered_lines': 2,
+ 'num_statements': 3,
+ 'percent_covered': 66.66666666666667
+ }
}
+ },
+ 'totals': {
+ 'excluded_lines': 0,
+ 'missing_lines': 1,
+ 'covered_lines': 2,
+ 'num_statements': 3,
+ 'percent_covered': 66.66666666666667
}
- },
- 'totals': {
- 'excluded_lines': 0,
- 'missing_lines': 1,
- 'covered_lines': 2,
- 'num_statements': 3,
- 'percent_covered': 66.66666666666667
}
- }
- self._assert_expected_json_report(cov, expected_result)
+ self._assert_expected_json_report(cov, expected_result)