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