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) |
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 |
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) |