python_coverage.py 2.0 KB
Newer Older
L
Liu Xudong 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
usage: python_coverage.py > python-coverage.info
"""

from os import path
from xml.etree import ElementTree

tree = ElementTree.parse('python-coverage.xml')
root = tree.getroot()

sources = root.findall('sources/source')

if len(sources) > 1:
    exit(1)

source = sources[0].text

for clazz in root.findall('packages/package/classes/class'):
    clazz_filename = clazz.attrib.get('filename')
    clazz_filename = path.join(source, clazz_filename)

    if clazz_filename.startswith('/paddle/build/python/'):
        clazz_filename = '/paddle/python/' + clazz_filename[len(
            '/paddle/build/python/'):]

    if not path.exists(clazz_filename):
        continue

    print 'TN:'
    print 'SF:{}'.format(clazz_filename)

    branch_index = 0

    for line in clazz.findall('lines/line'):
        line_hits = line.attrib.get('hits')
        line_number = line.attrib.get('number')

        line_branch = line.attrib.get('branch')
        line_condition_coverage = line.attrib.get('condition-coverage')
        line_missing_branches = line.attrib.get('missing-branches')

        if line_branch == 'true':
            line_condition_coverage = line_condition_coverage.split()
            line_condition_coverage = line_condition_coverage[1].strip('()')
            line_condition_coverage = line_condition_coverage.split('/')

            taken = line_condition_coverage[0]
            taken = int(taken)

            for _ in range(taken):
                print 'BRDA:{},{},{},{}'.format(line_number, 0, branch_index,
                                                line_hits)
                branch_index += 1

            if line_missing_branches:
                for missing_branch in line_missing_branches.split(','):
                    print 'BRDA:{},{},{},{}'.format(line_number, 0,
                                                    branch_index, 0)
                    branch_index += 1

        print 'DA:{},{}'.format(line_number, line_hits)

    print 'end_of_record'