summaryrefslogtreecommitdiff
path: root/coverage/xmlreport.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2016-01-23 14:25:17 -0500
committerNed Batchelder <ned@nedbatchelder.com>2016-01-23 14:25:17 -0500
commit851cad1819958893ac44208510e8d3ab86c0d77d (patch)
tree4048a9638e65e7de853ba7f3ca00a9ddce88bbf0 /coverage/xmlreport.py
parentf9f70709ef14812aea64cb450c67f99bac6ef6ac (diff)
downloadpython-coveragepy-git-851cad1819958893ac44208510e8d3ab86c0d77d.tar.gz
Do a better job with sources in the XML report
Diffstat (limited to 'coverage/xmlreport.py')
-rw-r--r--coverage/xmlreport.py28
1 files changed, 16 insertions, 12 deletions
diff --git a/coverage/xmlreport.py b/coverage/xmlreport.py
index 50a46841..1408bec6 100644
--- a/coverage/xmlreport.py
+++ b/coverage/xmlreport.py
@@ -11,6 +11,7 @@ import xml.dom.minidom
from coverage import env
from coverage import __url__, __version__, files
+from coverage.backward import iitems
from coverage.misc import isolate_module
from coverage.report import Reporter
@@ -91,15 +92,14 @@ class XmlReporter(Reporter):
xcoverage.appendChild(xpackages)
# Populate the XML DOM with the package info.
- for pkg_name in sorted(self.packages.keys()):
- pkg_data = self.packages[pkg_name]
+ for pkg_name, pkg_data in sorted(iitems(self.packages)):
class_elts, lhits, lnum, bhits, bnum = pkg_data
xpackage = self.xml_out.createElement("package")
xpackages.appendChild(xpackage)
xclasses = self.xml_out.createElement("classes")
xpackage.appendChild(xclasses)
- for class_name in sorted(class_elts.keys()):
- xclasses.appendChild(class_elts[class_name])
+ for class_name, class_elt in sorted(iitems(class_elts)):
+ xclasses.appendChild(class_elt)
xpackage.setAttribute("name", pkg_name.replace(os.sep, '.'))
xpackage.setAttribute("line-rate", rate(lhits, lnum))
if self.has_arcs:
@@ -140,13 +140,17 @@ class XmlReporter(Reporter):
# Create the 'lines' and 'package' XML elements, which
# are populated later. Note that a package == a directory.
- filename = fr.relative_filename()
- filename = filename.replace("\\", "/")
- dirname = os.path.dirname(filename) or "."
- parts = dirname.split("/")
- dirname = "/".join(parts[:self.config.xml_package_depth])
+ filename = fr.filename.replace("\\", "/")
+ for source_path in self.source_paths:
+ if filename.startswith(source_path+"/"):
+ rel_name = fr.filename[len(source_path)+1:]
+ break
+ else:
+ rel_name = fr.relative_filename()
+
+ dirname = os.path.dirname(rel_name) or "."
+ dirname = "/".join(dirname.split("/")[:self.config.xml_package_depth])
package_name = dirname.replace("/", ".")
- rel_name = fr.relative_filename()
if rel_name != fr.filename:
self.source_paths.add(fr.filename[:-len(rel_name)].rstrip(r"\/"))
@@ -159,8 +163,8 @@ class XmlReporter(Reporter):
xlines = self.xml_out.createElement("lines")
xclass.appendChild(xlines)
- xclass.setAttribute("name", os.path.relpath(filename, dirname))
- xclass.setAttribute("filename", filename)
+ xclass.setAttribute("name", os.path.relpath(rel_name, dirname))
+ xclass.setAttribute("filename", fr.relative_filename())
xclass.setAttribute("complexity", "0")
branch_stats = analysis.branch_stats()