DataViews/PyCoverageDialog.py

changeset 945
8cd4d08fa9f6
parent 791
9ec2ac20e54e
child 1112
8a7d1b9d18db
equal deleted inserted replaced
944:1b59c4ba121e 945:8cd4d08fa9f6
14 14
15 from .Ui_PyCoverageDialog import Ui_PyCoverageDialog 15 from .Ui_PyCoverageDialog import Ui_PyCoverageDialog
16 16
17 import Utilities 17 import Utilities
18 from DebugClients.Python3.coverage import coverage 18 from DebugClients.Python3.coverage import coverage
19
19 20
20 class PyCoverageDialog(QDialog, Ui_PyCoverageDialog): 21 class PyCoverageDialog(QDialog, Ui_PyCoverageDialog):
21 """ 22 """
22 Class implementing a dialog to display the collected code coverage data. 23 Class implementing a dialog to display the collected code coverage data.
23 """ 24 """
24 def __init__(self, parent = None): 25 def __init__(self, parent=None):
25 """ 26 """
26 Constructor 27 Constructor
27 28
28 @param parent parent widget (QWidget) 29 @param parent parent widget (QWidget)
29 """ 30 """
41 self.reload = False 42 self.reload = False
42 43
43 self.excludeList = ['# *pragma[: ]*[nN][oO] *[cC][oO][vV][eE][rR]'] 44 self.excludeList = ['# *pragma[: ]*[nN][oO] *[cC][oO][vV][eE][rR]']
44 45
45 self.__menu = QMenu(self) 46 self.__menu = QMenu(self)
46 self.annotate = self.__menu.addAction(self.trUtf8('Annotate'), 47 self.annotate = self.__menu.addAction(self.trUtf8('Annotate'),
47 self.__annotate) 48 self.__annotate)
48 self.__menu.addAction(self.trUtf8('Annotate all'), self.__annotateAll) 49 self.__menu.addAction(self.trUtf8('Annotate all'), self.__annotateAll)
49 self.__menu.addAction(self.trUtf8('Delete annotated files'), 50 self.__menu.addAction(self.trUtf8('Delete annotated files'),
50 self.__deleteAnnotated) 51 self.__deleteAnnotated)
51 self.__menu.addSeparator() 52 self.__menu.addSeparator()
52 self.__menu.addAction(self.trUtf8('Erase Coverage Info'), self.__erase) 53 self.__menu.addAction(self.trUtf8('Erase Coverage Info'), self.__erase)
53 self.resultList.setContextMenuPolicy(Qt.CustomContextMenu) 54 self.resultList.setContextMenuPolicy(Qt.CustomContextMenu)
54 self.resultList.customContextMenuRequested.connect(self.__showContextMenu) 55 self.resultList.customContextMenuRequested.connect(self.__showContextMenu)
76 except ValueError: 77 except ValueError:
77 pairs.append((start, end)) 78 pairs.append((start, end))
78 start = None 79 start = None
79 if ind + 1 >= len(lines): 80 if ind + 1 >= len(lines):
80 break 81 break
81 i = lines[ind+1] 82 i = lines[ind + 1]
82 if start: 83 if start:
83 pairs.append((start, end)) 84 pairs.append((start, end))
84 85
85 def stringify(pair): 86 def stringify(pair):
86 """ 87 """
106 @param coverage percent of coverage (integer) 107 @param coverage percent of coverage (integer)
107 @param excluded list of excluded lines (string) 108 @param excluded list of excluded lines (string)
108 @param missing list of lines without coverage (string) 109 @param missing list of lines without coverage (string)
109 """ 110 """
110 itm = QTreeWidgetItem(self.resultList, [ 111 itm = QTreeWidgetItem(self.resultList, [
111 file, 112 file,
112 str(statements), 113 str(statements),
113 str(executed), 114 str(executed),
114 "{0:.0f}%".format(coverage), 115 "{0:.0f}%".format(coverage),
115 excluded, 116 excluded,
116 missing 117 missing
117 ]) 118 ])
118 for col in range(1, 4): 119 for col in range(1, 4):
119 itm.setTextAlignment(col, Qt.AlignRight) 120 itm.setTextAlignment(col, Qt.AlignRight)
120 121
142 else: 143 else:
143 files = [fn] 144 files = [fn]
144 self.path = os.path.dirname(cfn) 145 self.path = os.path.dirname(cfn)
145 files.sort() 146 files.sort()
146 147
147 cover = coverage(data_file = self.cfn) 148 cover = coverage(data_file=self.cfn)
148 cover.use_cache(True) 149 cover.use_cache(True)
149 cover.load() 150 cover.load()
150 151
151 # set the exclude pattern 152 # set the exclude pattern
152 self.excludeCombo.clear() 153 self.excludeCombo.clear()
169 # now go through all the files 170 # now go through all the files
170 for file in files: 171 for file in files:
171 if self.cancelled: 172 if self.cancelled:
172 return 173 return
173 174
174 statements, excluded, missing, readable = cover.analysis2(file)[1:] 175 statements, excluded, missing, readable = cover.analysis2(file)[1:]
175 readableEx = excluded and self.__format_lines(excluded) or '' 176 readableEx = excluded and self.__format_lines(excluded) or ''
176 n = len(statements) 177 n = len(statements)
177 m = n - len(missing) 178 m = n - len(missing)
178 if n > 0: 179 if n > 0:
179 pc = 100.0 * m / n 180 pc = 100.0 * m / n
198 if total_statements > 0: 199 if total_statements > 0:
199 pc = 100.0 * total_executed / total_statements 200 pc = 100.0 * total_executed / total_statements
200 else: 201 else:
201 pc = 100.0 202 pc = 100.0
202 itm = QTreeWidgetItem(self.summaryList, [ 203 itm = QTreeWidgetItem(self.summaryList, [
203 str(total_statements), 204 str(total_statements),
204 str(total_executed), 205 str(total_executed),
205 "{0:.0f}%".format(pc) 206 "{0:.0f}%".format(pc)
206 ]) 207 ])
207 for col in range(0, 3): 208 for col in range(0, 3):
208 itm.setTextAlignment(col, Qt.AlignRight) 209 itm.setTextAlignment(col, Qt.AlignRight)
255 selected file. 256 selected file.
256 """ 257 """
257 itm = self.resultList.currentItem() 258 itm = self.resultList.currentItem()
258 fn = itm.text(0) 259 fn = itm.text(0)
259 260
260 cover = coverage(data_file = self.cfn) 261 cover = coverage(data_file=self.cfn)
261 cover.use_cache(True) 262 cover.use_cache(True)
262 cover.exclude(self.excludeList[0]) 263 cover.exclude(self.excludeList[0])
263 cover.load() 264 cover.load()
264 cover.annotate([fn], None, True) 265 cover.annotate([fn], None, True)
265 266
278 files = [] 279 files = []
279 for index in range(amount): 280 for index in range(amount):
280 itm = self.resultList.topLevelItem(index) 281 itm = self.resultList.topLevelItem(index)
281 files.append(itm.text(0)) 282 files.append(itm.text(0))
282 283
283 cover = coverage(data_file = self.cfn) 284 cover = coverage(data_file=self.cfn)
284 cover.use_cache(True) 285 cover.use_cache(True)
285 cover.exclude(self.excludeList[0]) 286 cover.exclude(self.excludeList[0])
286 cover.load() 287 cover.load()
287 288
288 # now process them 289 # now process them
289 progress = QProgressDialog(self.trUtf8("Annotating files..."), 290 progress = QProgressDialog(self.trUtf8("Annotating files..."),
290 self.trUtf8("Abort"), 0, len(files), self) 291 self.trUtf8("Abort"), 0, len(files), self)
291 progress.setMinimumDuration(0) 292 progress.setMinimumDuration(0)
292 count = 0 293 count = 0
293 294
294 for file in files: 295 for file in files:
295 progress.setValue(count) 296 progress.setValue(count)
296 if progress.wasCanceled(): 297 if progress.wasCanceled():
297 break 298 break
298 cover.annotate([file], None)#, True) 299 cover.annotate([file], None) # , True)
299 count += 1 300 count += 1
300 301
301 progress.setValue(len(files)) 302 progress.setValue(len(files))
302 303
303 def __erase(self): 304 def __erase(self):
305 Private slot to handle the erase context menu action. 306 Private slot to handle the erase context menu action.
306 307
307 This method erases the collected coverage data that is 308 This method erases the collected coverage data that is
308 stored in the .coverage file. 309 stored in the .coverage file.
309 """ 310 """
310 cover = coverage(data_file = self.cfn) 311 cover = coverage(data_file=self.cfn)
311 cover.use_cache(True) 312 cover.use_cache(True)
312 cover.load() 313 cover.load()
313 cover.erase() 314 cover.erase()
314 315
315 self.reloadButton.setEnabled(False) 316 self.reloadButton.setEnabled(False)

eric ide

mercurial