import os import sys import glob import html import fnmatch from os import path import coverage OUTPUT_TEMPLATE = """
%body
%lineno| %source"
def write_report(data, source_file, output_file):
module_name, executable_lines, excluded_lines, missing_lines, _ = data
missing_lines = set(missing_lines)
with open(output_file, "w") as output, open(source_file, "r") as source:
lines = source.readlines()
file_report = []
padding = len(str(len(lines)))
for index, line in enumerate(lines):
line = line[0:-1]
lineno = index + 1
line_number = str(lineno).rjust(padding)
covered = lineno not in missing_lines
line_class = 'covered' if covered else 'missed'
formatted_line = (LINE_TEMPLATE.replace('%class', line_class)
.replace('%lineno', line_number)
.replace('%source', html.escape(line)))
file_report.append(formatted_line)
report_body = ''.join(file_report)
report_header = ''
report = (OUTPUT_TEMPLATE.replace('%head', report_header)
.replace('%body', report_body))
output.write(report)
def main(argv):
parsing_path = path.normpath(path.join(path.dirname(__file__), ".."))
files = argv[1:]
if not files:
files = [os.path.join(root, file) for root, _, files in os.walk(parsing_path)
for file in fnmatch.filter(files, '*.vtt')]
cov = coverage.Coverage()
cov.start()
for file_path in files:
with open(file_path, "r") as file:
source = file.read()
import parser
p = parser.VTTParser(source)
p.parse()
cov.stop()
data = cov.analysis2(parser.__file__)
write_report(data, parser.__file__, "report.html")
if __name__ == '__main__':
main(sys.argv)