| import os |
| import xml.etree.ElementTree as ET |
| |
| def html_tree_from_env(): |
| # return parsed HTML content as an ET from an HTML_PATH file |
| html_filename = os.environ['HTML_PATH'] |
| html_filename += '.html' |
| print('html_filename: %r' % html_filename) |
| return ET.parse(html_filename) |
| |
| XHTML = 'http://www.w3.org/1999/xhtml' |
| SVG = 'http://www.w3.org/2000/svg' |
| ns = {'xhtml': XHTML, |
| 'svg' : SVG} |
| |
| def make_tag(local_name): |
| return f'{{{XHTML}}}' + local_name |
| |
| def assert_tag(element, expected): |
| assert element.tag == make_tag(expected) |
| |
| def assert_class(element, expected): |
| assert element.attrib['class'] == expected |
| |
| def assert_quoted_line(tr, expected_line_num, expected_src): |
| """Verify that tr is a line of quoted source.""" |
| tds = tr.findall('xhtml:td', ns) |
| assert len(tds) == 3 |
| assert_class(tds[0], 'linenum') |
| assert tds[0].text == expected_line_num |
| assert_class(tds[1], 'left-margin') |
| assert tds[1].text == ' ' |
| assert_class(tds[2], 'source') |
| assert tds[2].text == expected_src |
| |
| def assert_annotation_line(tr, expected_src, |
| expected_line_num=' ', |
| expected_left_margin=' '): |
| """Verify that tr is an annotation line.""" |
| tds = tr.findall('xhtml:td', ns) |
| assert len(tds) == 3 |
| assert_class(tds[0], 'linenum') |
| assert tds[0].text == expected_line_num |
| assert_class(tds[1], 'left-margin') |
| assert tds[1].text == expected_left_margin |
| assert_class(tds[2], 'annotation') |
| assert tds[2].text == expected_src |
| |
| def assert_frame(frame, expected_fnname): |
| """ |
| Assert that frame is of class 'stack-frame' |
| and has a child showing the expected fnname. |
| """ |
| assert_class(frame, 'stack-frame') |
| funcname = frame[0] |
| assert_class(funcname, 'frame-funcname') |
| span = funcname[0] |
| assert_tag(span, 'span') |
| assert span.text == expected_fnname |
| |
| def assert_event_range_with_margin(element): |
| """ |
| Verify that "element" is an event-range-with-margin |
| """ |
| assert_tag(element, 'table') |
| assert_class(element, 'event-range-with-margin') |
| tr = element.find('xhtml:tr', ns) |
| assert tr is not None |
| td = tr.find('xhtml:td', ns) |
| assert_class(td, 'event-range') |
| |
| events_hdr = td.find('xhtml:div', ns) |
| assert_class(events_hdr, 'events-hdr') |
| |
| #...etc |
| |
| def get_diag_by_index(html_tree, index): |
| root = html_tree.getroot () |
| assert root.tag == make_tag('html') |
| |
| body = root.find('xhtml:body', ns) |
| assert body is not None |
| |
| diag_list = body.find('xhtml:div', ns) |
| assert diag_list is not None |
| assert_class(diag_list, 'gcc-diagnostic-list') |
| |
| diag = diag_list.find(f"xhtml:div[@id='gcc-diag-{index}']", ns) |
| return diag |
| |
| def get_message_within_diag(diag_element): |
| msg = diag_element.find("xhtml:div[@class='gcc-message']", ns) |
| return msg |
| |
| def get_locus_within_diag(diag_element): |
| src = diag_element.find('xhtml:table', ns) |
| assert_class(src, 'locus') |
| return src |