xref: /btstack/test/coverage_filter.py (revision 6ccd8248590f666db07dd7add13fecb4f5664fb5)
1*6ccd8248SMilanka Ringwald#!/usr/bin/env python3
207d7e392SMatthias Ringwald#
307d7e392SMatthias Ringwald# Filter coverage reported by lcov/genhtml
407d7e392SMatthias Ringwald#
507d7e392SMatthias Ringwald# Copyright 2012 BlueKitchen GmbH
607d7e392SMatthias Ringwald#
707d7e392SMatthias Ringwaldfrom lxml import html
807d7e392SMatthias Ringwaldimport sys
907d7e392SMatthias Ringwaldimport os
1007d7e392SMatthias Ringwald
1107d7e392SMatthias Ringwaldcoverage_html_path = "coverage-html/index.html"
1207d7e392SMatthias Ringwald
1307d7e392SMatthias Ringwaldsummary = {}
1407d7e392SMatthias Ringwald
1507d7e392SMatthias Ringwalddef update_category(name, value):
1607d7e392SMatthias Ringwald    old = 0
1707d7e392SMatthias Ringwald    if name in summary:
1807d7e392SMatthias Ringwald        old = summary[name]
1907d7e392SMatthias Ringwald    summary[name] = old + value
2007d7e392SMatthias Ringwald
2107d7e392SMatthias Ringwalddef list_category_table():
2207d7e392SMatthias Ringwald    row = "%-11s |%11s |%11s |%11s"
2307d7e392SMatthias Ringwald
2407d7e392SMatthias Ringwald    print( row % ('', 'Hit', 'Total', 'Coverage'))
2507d7e392SMatthias Ringwald    print("------------|------------|------------|------------")
2607d7e392SMatthias Ringwald
2707d7e392SMatthias Ringwald    categories = [ 'Line', 'Function', 'Branch'];
2807d7e392SMatthias Ringwald    for category in categories:
2907d7e392SMatthias Ringwald        hit   = summary[category + "_hit"]
3007d7e392SMatthias Ringwald        total = summary[category + "_total"]
3107d7e392SMatthias Ringwald        coverage = 100.0 * hit / total
3207d7e392SMatthias Ringwald        print ( row % ( category, hit, total, "%.1f" % coverage))
3307d7e392SMatthias Ringwald
3407d7e392SMatthias Ringwaldfilter = sys.argv[1:]
3507d7e392SMatthias Ringwald
3607d7e392SMatthias Ringwaldprint("\nParsing HTML Coverage Report")
3707d7e392SMatthias Ringwald
3807d7e392SMatthias Ringwaldtree = html.parse(coverage_html_path)
3907d7e392SMatthias Ringwaldfiles = tree.xpath("//td[@class='coverFile']")
4007d7e392SMatthias Ringwaldfor file in files:
4107d7e392SMatthias Ringwald    row = file.getparent()
4207d7e392SMatthias Ringwald    children = row.getchildren()
4307d7e392SMatthias Ringwald    path = children[0].text_content()
4407d7e392SMatthias Ringwald    lineCov     = children[3].text_content()
4507d7e392SMatthias Ringwald    functionCov = children[5].text_content()
4607d7e392SMatthias Ringwald    branchCov   = children[7].text_content()
4707d7e392SMatthias Ringwald    (lineHit,     lineTotal)     = [int(x) for x in lineCov.split("/")]
4807d7e392SMatthias Ringwald    (functionHit, functionTotal) = [int(x) for x in functionCov.split("/")]
4907d7e392SMatthias Ringwald    (branchHit,   branchTotal)   = [int(x) for x in branchCov.split("/")]
5007d7e392SMatthias Ringwald    # print(path, lineHit, lineTotal, functionHit, functionTotal, branchHit, branchTotal)
5107d7e392SMatthias Ringwald
5207d7e392SMatthias Ringwald    # filter
5307d7e392SMatthias Ringwald    if path in filter:
5407d7e392SMatthias Ringwald        print("- Skipping " + path)
5507d7e392SMatthias Ringwald        continue
5607d7e392SMatthias Ringwald
5707d7e392SMatthias Ringwald    print("- Adding   " + path)
5807d7e392SMatthias Ringwald    update_category('Line_hit', lineHit)
5907d7e392SMatthias Ringwald    update_category('Line_total', lineTotal)
6007d7e392SMatthias Ringwald    update_category('Function_hit', functionHit)
6107d7e392SMatthias Ringwald    update_category('Function_total', functionTotal)
6207d7e392SMatthias Ringwald    update_category('Branch_hit', branchHit)
6307d7e392SMatthias Ringwald    update_category('Branch_total', branchTotal)
6407d7e392SMatthias Ringwald
6507d7e392SMatthias Ringwaldprint("")
6607d7e392SMatthias Ringwaldlist_category_table()
67