eric6/DebugClients/Python/coverage/xmlreport.py

changeset 7702
f8b97639deb5
parent 7427
362cd1b6f81a
equal deleted inserted replaced
7701:25f42e208e08 7702:f8b97639deb5
39 39
40 self.source_paths = set() 40 self.source_paths = set()
41 if self.config.source: 41 if self.config.source:
42 for src in self.config.source: 42 for src in self.config.source:
43 if os.path.exists(src): 43 if os.path.exists(src):
44 self.source_paths.add(files.canonical_filename(src)) 44 if not self.config.relative_files:
45 src = files.canonical_filename(src)
46 self.source_paths.add(src)
45 self.packages = {} 47 self.packages = {}
46 self.xml_out = None 48 self.xml_out = None
47 49
48 def report(self, morfs, outfile=None): 50 def report(self, morfs, outfile=None):
49 """Generate a Cobertura-compatible XML report for `morfs`. 51 """Generate a Cobertura-compatible XML report for `morfs`.
138 return pct 140 return pct
139 141
140 def xml_file(self, fr, analysis, has_arcs): 142 def xml_file(self, fr, analysis, has_arcs):
141 """Add to the XML report for a single file.""" 143 """Add to the XML report for a single file."""
142 144
145 if self.config.skip_empty:
146 if analysis.numbers.n_statements == 0:
147 return
148
143 # Create the 'lines' and 'package' XML elements, which 149 # Create the 'lines' and 'package' XML elements, which
144 # are populated later. Note that a package == a directory. 150 # are populated later. Note that a package == a directory.
145 filename = fr.filename.replace("\\", "/") 151 filename = fr.filename.replace("\\", "/")
146 for source_path in self.source_paths: 152 for source_path in self.source_paths:
153 source_path = files.canonical_filename(source_path)
147 if filename.startswith(source_path.replace("\\", "/") + "/"): 154 if filename.startswith(source_path.replace("\\", "/") + "/"):
148 rel_name = filename[len(source_path)+1:] 155 rel_name = filename[len(source_path)+1:]
149 break 156 break
150 else: 157 else:
151 rel_name = fr.relative_filename() 158 rel_name = fr.relative_filename()
159 self.source_paths.add(fr.filename[:-len(rel_name)].rstrip(r"\/"))
152 160
153 dirname = os.path.dirname(rel_name) or u"." 161 dirname = os.path.dirname(rel_name) or u"."
154 dirname = "/".join(dirname.split("/")[:self.config.xml_package_depth]) 162 dirname = "/".join(dirname.split("/")[:self.config.xml_package_depth])
155 package_name = dirname.replace("/", ".") 163 package_name = dirname.replace("/", ".")
156 164
157 if rel_name != fr.filename:
158 self.source_paths.add(fr.filename[:-len(rel_name)].rstrip(r"\/"))
159 package = self.packages.setdefault(package_name, [{}, 0, 0, 0, 0]) 165 package = self.packages.setdefault(package_name, [{}, 0, 0, 0, 0])
160 166
161 xclass = self.xml_out.createElement("class") 167 xclass = self.xml_out.createElement("class")
162 168
163 xclass.appendChild(self.xml_out.createElement("methods")) 169 xclass.appendChild(self.xml_out.createElement("methods"))

eric ide

mercurial