summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-09-13 18:31:26 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-09-13 18:31:26 -0400
commit092d0971f3eb0f091d0bb9338e89b2d2996295d3 (patch)
tree91f1ffc8c6aa8476888859f04b1f8fd3bce3e051
parentba23869011d12616ee253334374dec89eb86895c (diff)
downloadpython-coveragepy-git-092d0971f3eb0f091d0bb9338e89b2d2996295d3.tar.gz
XML reporting hooked up, but not everything is right: a test_farm test fails now??
--HG-- rename : coverage/xml.py => coverage/xmlreport.py
-rw-r--r--coverage/cmdline.py9
-rw-r--r--coverage/control.py2
-rw-r--r--coverage/xmlreport.py (renamed from coverage/xml.py)41
3 files changed, 24 insertions, 28 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index fd697344..f6eb052d 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -248,7 +248,7 @@ CMDS = {
Opts.ignore_errors,
Opts.omit,
Opts.help,
- ]
+ ],
cmd = "xml",
usage = "[options]",
description = "Generate an XML report of coverage results."
@@ -354,13 +354,14 @@ class CoverageScript:
"You must specify at least one of -e, -x, -c, -r, -a, or -b."
)
return ERR
- args_needed = (
+ args_allowed = (
'execute' in options.actions or
'annotate' in options.actions or
'html' in options.actions or
- 'report' in options.actions
+ 'report' in options.actions or
+ 'xml' in options.actions
)
- if not args_needed and args:
+ if not args_allowed and args:
self.help_fn("Unexpected arguments: %s" % " ".join(args))
return ERR
diff --git a/coverage/control.py b/coverage/control.py
index 519be1bb..19675cf6 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -10,7 +10,7 @@ from coverage.files import FileLocator
from coverage.html import HtmlReporter
from coverage.misc import format_lines, CoverageException
from coverage.summary import SummaryReporter
-from coverage.xml import XmlReporter
+from coverage.xmlreport import XmlReporter
class coverage:
"""Programmatic access to Coverage.
diff --git a/coverage/xml.py b/coverage/xmlreport.py
index 55fdc973..82d06f6b 100644
--- a/coverage/xml.py
+++ b/coverage/xmlreport.py
@@ -1,4 +1,4 @@
-"""Cobertura reporting for coverage.py"""
+"""XML reporting for coverage.py"""
import os, sys
import xml.dom.minidom
@@ -13,16 +13,14 @@ class XmlReporter(Reporter):
super(XmlReporter, self).__init__(coverage, ignore_errors)
def report(self, morfs, omit_prefixes=None, outfile=None):
- """Generate a Cobertura report for `morfs`.
+ """Generate a Cobertura-compatible XML report for `morfs`.
- `morfs` is a list of modules or filenames. `directory` is where to put
- the Cobertura XML file. `omit_prefixes` is a list of strings, prefixes of
- modules to omit from the report.
+ `morfs` is a list of modules or filenames. `omit_prefixes` is a list
+ of strings, prefixes of modules to omit from the report.
"""
# Initial setup.
- if not outfile:
- outfile = sys.stdout
+ outfile = outfile or sys.stdout
self.find_code_units(morfs, omit_prefixes)
# Create the DOM that will store the data.
@@ -41,13 +39,10 @@ class XmlReporter(Reporter):
for cu in self.code_units:
# Create the 'lines' and 'package' XML elements, which
# are populated later. Note that a package == a directory.
- (dir, fname) = os.path.split(cu.name)
- print "HERE",dir,":",fname
- if dir is '':
- dir = '.'
+ dirname, fname = os.path.split(cu.name)
+ dirname = dirname or '.'
package = packages.setdefault(
- dir, [ doc.createElement("package"), {},
- 0, 0, 0, 0 ] )
+ dirname, [ doc.createElement("package"), {}, 0, 0, 0, 0 ] )
c = doc.createElement("class")
lines = doc.createElement("lines")
c.appendChild(lines)
@@ -56,9 +51,8 @@ class XmlReporter(Reporter):
c.setAttribute("filename", cu.name)
c.setAttribute("complexity", "0.0")
-
try:
- statements, _, missing, readable = self.coverage._analyze(cu)
+ statements, _, missing, _ = self.coverage._analyze(cu)
# For each statement, create an XML 'line' element.
for line in statements:
@@ -76,15 +70,16 @@ class XmlReporter(Reporter):
# used here.
l.setAttribute("branch", "false")
lines.appendChild(l)
- class_lines = 1.0*len(statements)
+ class_lines = 1.0 * len(statements)
class_hits = class_lines - len(missing)
class_branches = 0.0
class_branch_hits = 0.0
- # Finalize the statistics that are collected
- # in the XML DOM.
- c.setAttribute("line-rate", str(class_hits / (class_lines or 1.0)))
- c.setAttribute( "branch-rate", str(class_branch_hits / (class_branches or 1.0)) )
+ # Finalize the statistics that are collected in the XML DOM.
+ line_rate = class_hits / (class_lines or 1.0)
+ branch_rate = class_branch_hits / (class_branches or 1.0)
+ c.setAttribute("line-rate", str(line_rate))
+ c.setAttribute("branch-rate", str(branch_rate))
package[1][className] = c
package[2] += class_hits
package[3] += class_lines
@@ -97,7 +92,7 @@ class XmlReporter(Reporter):
typ, msg = sys.exc_info()[:2]
fmt_err = "%s %s: %s\n"
outfile.write(fmt_err % (cu.name, typ.__name__, msg))
- errors=True
+ errors = True
# Don't write the XML data if we've encountered errors.
if errors:
@@ -105,7 +100,7 @@ class XmlReporter(Reporter):
# Populate the XML DOM with the package info.
for packageName, packageData in packages.items():
- package = packageData[0];
+ package = packageData[0]
packageXml.appendChild(package)
classes = doc.createElement("classes")
package.appendChild(classes)
@@ -115,7 +110,7 @@ class XmlReporter(Reporter):
classes.appendChild(packageData[1][className])
package.setAttribute("name", packageName.replace(os.sep, '.'))
package.setAttribute("line-rate", str(packageData[2]/(packageData[3] or 1.0)))
- package.setAttribute( "branch-rate", str(packageData[4] / (packageData[5] or 1.0) ))
+ package.setAttribute("branch-rate", str(packageData[4] / (packageData[5] or 1.0) ))
package.setAttribute("complexity", "0.0")
# Use the DOM to write the output file.