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
#!/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')

C
chalsliu 已提交
15
source = sources[-1].text
L
Liu Xudong 已提交
16 17 18 19 20 21 22 23 24 25 26 27

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

C
chalsliu 已提交
28 29
    print('TN:')
    print('SF:{}'.format(clazz_filename))
L
Liu Xudong 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

    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):
C
chalsliu 已提交
50 51
                print('BRDA:{},{},{},{}'.format(line_number, 0, branch_index,
                                                line_hits))
L
Liu Xudong 已提交
52 53 54 55
                branch_index += 1

            if line_missing_branches:
                for missing_branch in line_missing_branches.split(','):
C
chalsliu 已提交
56 57
                    print('BRDA:{},{},{},{}'.format(line_number, 0,
                                                    branch_index, 0))
L
Liu Xudong 已提交
58 59
                    branch_index += 1

C
chalsliu 已提交
60
        print('DA:{},{}'.format(line_number, line_hits))
L
Liu Xudong 已提交
61

C
chalsliu 已提交
62
    print('end_of_record')