From 0c90ae2b97504ae96d7c424b7148e6b7333fec1d Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Thu, 26 Nov 2009 08:37:21 -0500 Subject: When reporting, don't fall over if there's no data to report on. Fixes issue #37. --- coverage/control.py | 8 ++++++-- coverage/report.py | 5 ++++- coverage/xmlreport.py | 7 ++++--- 3 files changed, 14 insertions(+), 6 deletions(-) (limited to 'coverage') diff --git a/coverage/control.py b/coverage/control.py index e041cde..4bcb4ed 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -304,8 +304,12 @@ class coverage(object): """ if outfile: outfile = open(outfile, "w") - reporter = XmlReporter(self, ignore_errors) - reporter.report(morfs, omit_prefixes=omit_prefixes, outfile=outfile) + try: + reporter = XmlReporter(self, ignore_errors) + reporter.report( + morfs, omit_prefixes=omit_prefixes, outfile=outfile) + finally: + outfile.close() def sysinfo(self): """Return a list of key,value pairs showing internal information.""" diff --git a/coverage/report.py b/coverage/report.py index 7f3e3e0..c221552 100644 --- a/coverage/report.py +++ b/coverage/report.py @@ -2,7 +2,7 @@ import os from coverage.codeunit import code_unit_factory -from coverage.misc import NoSource +from coverage.misc import CoverageException, NoSource class Reporter(object): """A base class for all reporters.""" @@ -45,6 +45,9 @@ class Reporter(object): """ self.find_code_units(morfs, omit_prefixes) + if not self.code_units: + raise CoverageException("No data to report.") + self.directory = directory if self.directory and not os.path.exists(self.directory): os.makedirs(self.directory) diff --git a/coverage/xmlreport.py b/coverage/xmlreport.py index 0fe4371..2e31d9e 100644 --- a/coverage/xmlreport.py +++ b/coverage/xmlreport.py @@ -30,7 +30,6 @@ class XmlReporter(Reporter): """ # Initial setup. outfile = outfile or sys.stdout - self.find_code_units(morfs, omit_prefixes) # Create the DOM that will store the data. impl = xml.dom.minidom.getDOMImplementation() @@ -39,8 +38,9 @@ class XmlReporter(Reporter): "http://cobertura.sourceforge.net/xml/coverage-03.dtd" ) self.xml_out = impl.createDocument(None, "coverage", docType) + + # Write header stuff. xcoverage = self.xml_out.documentElement - xcoverage.setAttribute("version", __version__) xcoverage.setAttribute("timestamp", str(int(time.time()*1000))) xcoverage.appendChild(self.xml_out.createComment( @@ -48,8 +48,9 @@ class XmlReporter(Reporter): )) xpackages = self.xml_out.createElement("packages") xcoverage.appendChild(xpackages) - self.packages = {} + # Call xml_file for each file in the data. + self.packages = {} self.report_files(self.xml_file, morfs, omit_prefixes=omit_prefixes) lnum_tot, lhits_tot = 0, 0 -- cgit v1.2.1