diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2021-10-31 12:14:27 +0100 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2021-10-31 12:14:27 +0100 |
commit | c69992aa4eb0f7b4529f776820d20b8c66486972 (patch) | |
tree | 5d4053d84cf8e2c429b5551f5edf8cc863dee84f | |
parent | cc6d6310c002c745fbc16f1c96dc567973a8daba (diff) | |
download | cython-c69992aa4eb0f7b4529f776820d20b8c66486972.tar.gz |
Repair coverage tests to make them work with coverage 6.1, which changed the HTML output format that the tests parse.
-rw-r--r-- | tests/run/coverage_cmd.srctree | 16 | ||||
-rw-r--r-- | tests/run/coverage_cmd_src_layout.srctree | 21 |
2 files changed, 23 insertions, 14 deletions
diff --git a/tests/run/coverage_cmd.srctree b/tests/run/coverage_cmd.srctree index 70408409c..0f80c586e 100644 --- a/tests/run/coverage_cmd.srctree +++ b/tests/run/coverage_cmd.srctree @@ -222,17 +222,21 @@ def run_html_report(): from collections import defaultdict stdout = run_coverage_command('html', '-d', 'html') - _parse_lines = re.compile( - r'<p[^>]* id=["\'][^0-9"\']*(?P<id>[0-9]+)[^0-9"\']*["\'][^>]*' - r' class=["\'][^"\']*(?P<run>mis|run|exc)[^"\']*["\']').findall + # coverage 6.1+ changed the order of the attributes => need to parse them separately + _parse_id = re.compile(r'id=["\'][^0-9"\']*(?P<id>[0-9]+)[^0-9"\']*["\']').search + _parse_state = re.compile(r'class=["\'][^"\']*(?P<state>mis|run|exc)[^"\']*["\']').search files = {} for file_path in iglob('html/*.html'): with open(file_path) as f: page = f.read() report = defaultdict(set) - for line, state in _parse_lines(page): - report[state].add(int(line)) + for line in re.split(r'id=["\']source["\']', page)[-1].splitlines(): + lineno = _parse_id(line) + state = _parse_state(line) + if not lineno or not state: + continue + report[state.group('state')].add(int(lineno.group('id'))) files[file_path] = report for filename, report in files.items(): @@ -241,7 +245,7 @@ def run_html_report(): executed = report["run"] missing = report["mis"] excluded = report["exc"] - assert executed + assert executed, (filename, report) assert 5 in executed, executed assert 6 in executed, executed assert 7 in executed, executed diff --git a/tests/run/coverage_cmd_src_layout.srctree b/tests/run/coverage_cmd_src_layout.srctree index 831ba489b..e79d3acba 100644 --- a/tests/run/coverage_cmd_src_layout.srctree +++ b/tests/run/coverage_cmd_src_layout.srctree @@ -133,20 +133,25 @@ def run_xml_report(): def run_html_report(): + from collections import defaultdict + stdout = run_coverage_command('html', '-d', 'html') - _parse_lines = re.compile( - r'<p[^>]* id=["\'][^0-9"\']*(?P<id>[0-9]+)[^0-9"\']*["\'][^>]*' - r' class=["\'][^"\']*(?P<run>mis|run)[^"\']*["\']').findall + # coverage 6.1+ changed the order of the attributes => need to parse them separately + _parse_id = re.compile(r'id=["\'][^0-9"\']*(?P<id>[0-9]+)[^0-9"\']*["\']').search + _parse_state = re.compile(r'class=["\'][^"\']*(?P<state>mis|run|exc)[^"\']*["\']').search files = {} for file_path in iglob('html/*.html'): with open(file_path) as f: page = f.read() - executed = set() - missing = set() - for line, has_run in _parse_lines(page): - (executed if has_run == 'run' else missing).add(int(line)) - files[file_path] = (executed, missing) + report = defaultdict(set) + for line in re.split(r'id=["\']source["\']', page)[-1].splitlines(): + lineno = _parse_id(line) + state = _parse_state(line) + if not lineno or not state: + continue + report[state.group('state')].add(int(lineno.group('id'))) + files[file_path] = (report['run'], report['mis']) executed, missing = [data for path, data in files.items() if 'trivial_module' in path][0] assert executed |