diff -r f23c43e18046 -r 906485dcd210 src/eric7/Testing/TestingWidget.py --- a/src/eric7/Testing/TestingWidget.py Sun Oct 02 11:44:07 2022 +0200 +++ b/src/eric7/Testing/TestingWidget.py Sat Oct 29 15:24:59 2022 +0200 @@ -15,10 +15,10 @@ from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt, QEvent, QCoreApplication from PyQt6.QtWidgets import QAbstractButton, QComboBox, QDialogButtonBox, QWidget -from EricWidgets import EricMessageBox -from EricWidgets.EricApplication import ericApp -from EricWidgets.EricMainWindow import EricMainWindow -from EricWidgets.EricPathPicker import EricPathPickerModes +from eric7.EricWidgets import EricMessageBox +from eric7.EricWidgets.EricApplication import ericApp +from eric7.EricWidgets.EricMainWindow import EricMainWindow +from eric7.EricWidgets.EricPathPicker import EricPathPickerModes from .Ui_TestingWidget import Ui_TestingWidget @@ -27,10 +27,10 @@ from .Interfaces.TestExecutorBase import TestConfig, TestResult, TestResultCategory from .Interfaces.TestFrameworkRegistry import TestFrameworkRegistry -import Preferences -import UI.PixmapCache +from eric7 import Preferences +from eric7.EricGui import EricPixmapCache -from Globals import ( +from eric7.Globals import ( recentNameTestDiscoverHistory, recentNameTestFileHistory, recentNameTestNameHistory, @@ -80,9 +80,9 @@ self.__resultsTree.goto.connect(self.__showSource) self.resultsGroupBox.layout().addWidget(self.__resultsTree) - self.versionsButton.setIcon(UI.PixmapCache.getIcon("info")) - self.clearHistoriesButton.setIcon(UI.PixmapCache.getIcon("clearPrivateData")) - self.showMarkersButton.setIcon(UI.PixmapCache.getIcon("select")) + self.versionsButton.setIcon(EricPixmapCache.getIcon("info")) + self.clearHistoriesButton.setIcon(EricPixmapCache.getIcon("clearPrivateData")) + self.showMarkersButton.setIcon(EricPixmapCache.getIcon("select")) self.testsuitePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) self.testsuitePicker.setInsertPolicy(QComboBox.InsertPolicy.InsertAtTop) @@ -165,7 +165,7 @@ self.setWindowFlags( self.windowFlags() | Qt.WindowType.WindowContextHelpButtonHint ) - self.setWindowIcon(UI.PixmapCache.getIcon("eric")) + self.setWindowIcon(EricPixmapCache.getIcon("eric")) self.setWindowTitle(self.tr("Testing")) try: @@ -174,9 +174,10 @@ self.__project = ericApp().getObject("Project") self.__project.projectOpened.connect(self.__projectOpened) self.__project.projectClosed.connect(self.__projectClosed) + self.__projectEnvironmentMarker = self.tr("<project>") except KeyError: # we were called as a standalone application - from VirtualEnv.VirtualenvManager import VirtualenvManager + from eric7.VirtualEnv.VirtualenvManager import VirtualenvManager self.__venvManager = VirtualenvManager(self) self.__venvManager.virtualEnvironmentAdded.connect( @@ -191,6 +192,7 @@ ericApp().registerObject("VirtualEnvManager", self.__venvManager) self.__project = None + self.__projectEnvironmentMarker = "" self.__discoverHistory = [] self.__fileHistory = [] @@ -238,6 +240,20 @@ self.tabWidget.setCurrentIndex(0) + def __determineInterpreter(self, venvName): + """ + Private method to determine the interpreter to be used. + + @param venvName name of the virtual environment + @type str + @return path of the interpreter executable + @rtype str + """ + if self.__project and venvName == self.__projectEnvironmentMarker: + return self.__project.getProjectInterpreter() + else: + return self.__venvManager.getVirtualenvInterpreter(venvName) + def __populateVenvComboBox(self): """ Private method to (re-)populate the virtual environments selector. @@ -248,6 +264,8 @@ self.venvComboBox.clear() self.venvComboBox.addItem("") + if self.__project and self.__project.isOpen(): + self.venvComboBox.addItem(self.__projectEnvironmentMarker) self.venvComboBox.addItems(sorted(self.__venvManager.getVirtualenvNames())) self.venvComboBox.setCurrentText(currentText) @@ -262,9 +280,7 @@ self.frameworkComboBox.clear() if bool(self.venvComboBox.currentText()): - interpreter = self.__venvManager.getVirtualenvInterpreter( - self.venvComboBox.currentText() - ) + interpreter = self.__determineInterpreter(self.venvComboBox.currentText()) self.frameworkComboBox.addItem("") for index, (name, executor) in enumerate( sorted(self.__frameworkRegistry.getFrameworks().items()), start=1 @@ -699,7 +715,7 @@ if venvName: framework = self.frameworkComboBox.currentText() if framework: - interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + interpreter = self.__determineInterpreter(venvName) executor = self.__frameworkRegistry.createExecutor(framework, self) hasCoverage = executor.hasCoverage(interpreter) @@ -719,7 +735,7 @@ if venvName: framework = self.frameworkComboBox.currentText() if framework: - interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + interpreter = self.__determineInterpreter(venvName) executor = self.__frameworkRegistry.createExecutor(framework, self) supportsMarkers = executor.supportsMarkers(interpreter) @@ -749,7 +765,7 @@ else: workdir = "" - interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + interpreter = self.__determineInterpreter(venvName) executor = self.__frameworkRegistry.createExecutor(framework, self) markers = executor.getMarkers(interpreter, workdir) @@ -771,7 +787,7 @@ if venvName: framework = self.frameworkComboBox.currentText() if framework: - interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + interpreter = self.__determineInterpreter(venvName) executor = self.__frameworkRegistry.createExecutor(framework, self) supportsPatterns = executor.supportsPatterns(interpreter) @@ -787,7 +803,7 @@ if venvName: headerText = self.tr("<h3>Versions of Frameworks and their" " Plugins</h3>") versionsText = "" - interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + interpreter = self.__determineInterpreter(venvName) for framework in sorted(self.__frameworkRegistry.getFrameworks().keys()): executor = self.__frameworkRegistry.createExecutor(framework, self) versions = executor.getVersions(interpreter) @@ -858,9 +874,7 @@ ) else: coverageFile = "" - interpreter = self.__venvManager.getVirtualenvInterpreter( - self.__recentEnvironment - ) + interpreter = self.__determineInterpreter(self.__recentEnvironment) config = TestConfig( interpreter=interpreter, discover=discover, @@ -1080,7 +1094,7 @@ run. """ if self.__coverageDialog is None: - from DataViews.PyCoverageDialog import PyCoverageDialog + from eric7.DataViews.PyCoverageDialog import PyCoverageDialog self.__coverageDialog = PyCoverageDialog(self) self.__coverageDialog.openFile.connect(self.__openEditor) @@ -1099,7 +1113,7 @@ """ Private slot to show the output of the most recent test run. """ - from EricWidgets.EricPlainTextDialog import EricPlainTextDialog + from eric7.EricWidgets.EricPlainTextDialog import EricPlainTextDialog dlg = EricPlainTextDialog( title=self.tr("Test Run Output"), text=self.__recentLog @@ -1121,7 +1135,8 @@ """ Private slot to handle a project being opened. """ - self.venvComboBox.setCurrentText(self.__project.getProjectVenv()) + self.venvComboBox.insertItem(1, self.__projectEnvironmentMarker) + self.venvComboBox.setCurrentIndex(1) self.frameworkComboBox.setCurrentText( self.__project.getProjectTestingFramework() ) @@ -1132,6 +1147,7 @@ """ Private slot to handle a project being closed. """ + self.venvComboBox.removeItem(1) # <project> is always at index 1 self.venvComboBox.setCurrentText("") self.frameworkComboBox.setCurrentText("") self.__insertDiscovery("") @@ -1164,7 +1180,7 @@ @param linenumber line number to place the cursor at (defaults to 1) @type int (optional) """ - from QScintilla.MiniEditor import MiniEditor + from eric7.QScintilla.MiniEditor import MiniEditor editor = MiniEditor(filename, "Python3", self) editor.gotoLine(linenumber)