222 def analyze (self):
223 filename = sys.modules[self.modname].__file__
224 if filename[-4:] == ".pyc" or filename[-4:] == ".pyo":
225 orig_filename = filename[:-4] + '.py'
226 else:
227 orig_filename = filename
228
229
230 try:
231 lines = open(orig_filename, 'r').readlines()
232 except IOError as err:
233 sys.stderr.write(
234 "%s: Could not open %s for reading because: %s - skipping\n" %
235\
236 ("trace", repr(filename), err.strerror))
237 return
238
239
240
241 blank = re.compile(r'^\s*(#.*)?$')
242
243 executable_linenos = find_executable_linenos(orig_filename)
244
245 lines_hit = self.counts
246 uncovered = 0
247 outlines = []
248 for i in range(len(lines)):
249 line = lines[i]
250
251
252
253 if (i+1) in lines_hit:
254
255 prefix = '%5d: ' % lines_hit[i+1]
256 elif blank.match(line):
257
258 prefix = ' . '
259 else:
260
261
262
263
264 if (i+1) in executable_linenos and \
265 lines[i].
find(
'#pragma: NO COVER') == -1:
266 prefix = '>>>>>> '
267 uncovered = uncovered + 1
268 else:
269 prefix = ' '*7
270 outlines.append (prefix + line.expandtabs(8))
271
272 if uncovered:
273 print(
"*** There were %d uncovered lines." % uncovered)
274 else:
275 return
276
277
278
279 listfilename = self.modname + ".cover"
280 try:
281 outfile = open(listfilename, 'w')
282 except IOError as err:
283 sys.stderr.write(
284 '%s: Could not open %s for writing because: %s - skipping\n' %
285 ("trace", repr(listfilename), err.strerror))
286 return
287
288 for l in outlines:
289 outfile.write (l)
290
291 outfile.close()
292
293 return
294
295
void print(char *figname, TCanvas *c1)
std::string find(const std::string &s)
return a remapped string