--- a/src/eric7/Testing/TestingWidget.py Fri Sep 02 14:10:44 2022 +0200 +++ b/src/eric7/Testing/TestingWidget.py Sat Oct 01 13:06:10 2022 +0200 @@ -82,6 +82,7 @@ self.versionsButton.setIcon(UI.PixmapCache.getIcon("info")) self.clearHistoriesButton.setIcon(UI.PixmapCache.getIcon("clearPrivateData")) + self.showMarkersButton.setIcon(UI.PixmapCache.getIcon("select")) self.testsuitePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) self.testsuitePicker.setInsertPolicy(QComboBox.InsertPolicy.InsertAtTop) @@ -205,6 +206,8 @@ self.__testExecutor = None self.__recentLog = "" + self.__markersWindow = None + # connect some signals self.discoveryPicker.editTextChanged.connect(self.__resetResults) self.testsuitePicker.editTextChanged.connect(self.__resetResults) @@ -681,6 +684,8 @@ """ self.__resetResults() self.__updateCoverage() + self.__updateMarkerSupport() + self.__updatePatternSupport() @pyqtSlot() def __updateCoverage(self): @@ -703,6 +708,77 @@ self.coverageCheckBox.setChecked(False) @pyqtSlot() + def __updateMarkerSupport(self): + """ + Private slot to update the state of the marker related widgets depending on + the selected framework's capabilities. + """ + supportsMarkers = False + + venvName = self.venvComboBox.currentText() + if venvName: + framework = self.frameworkComboBox.currentText() + if framework: + interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + executor = self.__frameworkRegistry.createExecutor(framework, self) + supportsMarkers = executor.supportsMarkers(interpreter) + + # 1. marker expression line edit + self.markerExpressionEdit.setEnabled(supportsMarkers) + if not supportsMarkers: + self.markerExpressionEdit.clear() + + # 2. show markers button + self.showMarkersButton.setEnabled(supportsMarkers) + if self.__markersWindow is not None: + self.__markersWindow.close() + + @pyqtSlot() + def on_showMarkersButton_clicked(self): + """ + Private slot to show a window containing the list of defined markers. + """ + venvName = self.venvComboBox.currentText() + if venvName: + framework = self.frameworkComboBox.currentText() + if framework: + if self.discoverCheckBox.isChecked(): + workdir = self.discoveryPicker.currentText() + elif self.testsuitePicker.currentText(): + workdir = os.path.dirname(self.testsuitePicker.currentText()) + else: + workdir = "" + + interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + executor = self.__frameworkRegistry.createExecutor(framework, self) + markers = executor.getMarkers(interpreter, workdir) + + if self.__markersWindow is None: + from .MarkersWindow import MarkersWindow + + self.__markersWindow = MarkersWindow() + self.__markersWindow.showMarkers(markers) + + @pyqtSlot() + def __updatePatternSupport(self): + """ + Private slot to update the state of the test name pattern line edit depending on + the selected framework's capabilities. + """ + supportsPatterns = False + + venvName = self.venvComboBox.currentText() + if venvName: + framework = self.frameworkComboBox.currentText() + if framework: + interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + executor = self.__frameworkRegistry.createExecutor(framework, self) + supportsPatterns = executor.supportsPatterns(interpreter) + + self.testNamePatternEdit.setEnabled(supportsPatterns) + self.testNamePatternEdit.clear() + + @pyqtSlot() def on_versionsButton_clicked(self): """ Private slot to show the versions of available plugins. @@ -791,6 +867,8 @@ discoveryStart=discoveryStart, testFilename=testFileName, testName=testName, + testNamePattern=self.testNamePatternEdit.text(), + testMarkerExpression=self.markerExpressionEdit.text(), failFast=self.failfastCheckBox.isChecked(), failedOnly=failedOnly, collectCoverage=self.coverageCheckBox.isChecked(),