--- a/eric7/UI/UserInterface.py Mon May 16 17:22:43 2022 +0200 +++ b/eric7/UI/UserInterface.py Mon May 16 19:46:51 2022 +0200 @@ -341,7 +341,7 @@ # set a few dialog members for non-modal dialogs created on demand self.programsDialog = None self.shortcutsDialog = None - self.__unittestWidget = None + self.__testingWidget = None self.findFileNameDialog = None self.diffDlg = None self.compareDlg = None @@ -372,8 +372,8 @@ self.viewmanager.openSourceFile) self.projectBrowser.psBrowser.closeSourceWindow.connect( self.viewmanager.closeWindow) - self.projectBrowser.psBrowser.unittestOpen.connect( - self.__unittestScript) + self.projectBrowser.psBrowser.testFile.connect( + self.__startTestScript) self.projectBrowser.pfBrowser.designerFile.connect(self.__designer) self.projectBrowser.pfBrowser.sourceFile.connect( @@ -531,7 +531,7 @@ self.browser.svgFile.connect(self.__showSvg) self.browser.umlFile.connect(self.__showUml) self.browser.binaryFile.connect(self.__openHexEditor) - self.browser.unittestOpen.connect(self.__unittestScript) + self.browser.testFile.connect(self.__startTestScript) self.browser.trpreview.connect(self.__TRPreviewer) self.debuggerUI.debuggingStarted.connect( @@ -661,6 +661,7 @@ # Initialize the instance variables. self.currentProg = None self.isProg = False + # TODO: rename/eliminate/rework these two related to unittest self.utEditorOpen = False self.utProjectOpen = False @@ -2510,82 +2511,81 @@ self.requestFeatureAct.triggered.connect(self.__requestFeature) self.actions.append(self.requestFeatureAct) - self.utActGrp = createActionGroup(self) - - self.utDialogAct = EricAction( - self.tr('Unittest'), + self.testingActGrp = createActionGroup(self) + + self.testingDialogAct = EricAction( + self.tr('Testing'), UI.PixmapCache.getIcon("unittest"), - self.tr('&Unittest...'), - 0, 0, self.utActGrp, 'unittest') - self.utDialogAct.setStatusTip(self.tr('Start unittest dialog')) - self.utDialogAct.setWhatsThis(self.tr( - """<b>Unittest</b>""" - """<p>Perform unit tests. The dialog gives the""" - """ ability to select and run a unittest suite or""" + self.tr('&Testing...'), + 0, 0, self.testingActGrp, 'unittest') + self.testingDialogAct.setStatusTip(self.tr('Start the testing dialog')) + self.testingDialogAct.setWhatsThis(self.tr( + """<b>Testing</b>""" + """<p>Perform test runss. The dialog gives the""" + """ ability to select and run a test suite or""" """auto discover them.</p>""" )) - self.utDialogAct.triggered.connect(self.__unittest) - self.actions.append(self.utDialogAct) + self.testingDialogAct.triggered.connect(self.__startTesting) + self.actions.append(self.testingDialogAct) - self.utRestartAct = EricAction( - self.tr('Unittest Restart'), + self.restartTestAct = EricAction( + self.tr('Restart Last Test'), UI.PixmapCache.getIcon("unittestRestart"), - self.tr('&Restart Unittest...'), - 0, 0, self.utActGrp, 'unittest_restart') - self.utRestartAct.setStatusTip(self.tr('Restart last unittest')) - self.utRestartAct.setWhatsThis(self.tr( - """<b>Restart Unittest</b>""" - """<p>Restart the unittest performed last.</p>""" + self.tr('&Restart Last Test...'), + 0, 0, self.testingActGrp, 'unittest_restart') + self.restartTestAct.setStatusTip(self.tr('Restarts the last test')) + self.restartTestAct.setWhatsThis(self.tr( + """<b>Restart Last Test</b>""" + """<p>Restarts the test performed last.</p>""" )) - self.utRestartAct.triggered.connect(self.__unittestRestart) - self.utRestartAct.setEnabled(False) - self.actions.append(self.utRestartAct) - - self.utRerunFailedAct = EricAction( - self.tr('Unittest Rerun Failed'), + self.restartTestAct.triggered.connect(self.__restartTest) + self.restartTestAct.setEnabled(False) + self.actions.append(self.restartTestAct) + + self.rerunFailedTestsAct = EricAction( + self.tr('Rerun Failed Tests'), UI.PixmapCache.getIcon("unittestRerunFailed"), self.tr('Rerun Failed Tests...'), - 0, 0, self.utActGrp, 'unittest_rerun_failed') - self.utRerunFailedAct.setStatusTip(self.tr( + 0, 0, self.testingActGrp, 'unittest_rerun_failed') + self.rerunFailedTestsAct.setStatusTip(self.tr( 'Rerun failed tests of the last run')) - self.utRerunFailedAct.setWhatsThis(self.tr( + self.rerunFailedTestsAct.setWhatsThis(self.tr( """<b>Rerun Failed Tests</b>""" - """<p>Rerun all tests that failed during the last unittest""" - """ run.</p>""" + """<p>Rerun all tests that failed during the last test run.</p>""" )) - self.utRerunFailedAct.triggered.connect(self.__unittestRerunFailed) - self.utRerunFailedAct.setEnabled(False) - self.actions.append(self.utRerunFailedAct) - - self.utScriptAct = EricAction( - self.tr('Unittest Script'), + self.rerunFailedTestsAct.triggered.connect(self.__rerunFailedTests) + self.rerunFailedTestsAct.setEnabled(False) + self.actions.append(self.rerunFailedTestsAct) + + self.testScriptAct = EricAction( + self.tr('Test Script'), UI.PixmapCache.getIcon("unittestScript"), - self.tr('Unittest &Script...'), - 0, 0, self.utActGrp, 'unittest_script') - self.utScriptAct.setStatusTip(self.tr( - 'Run unittest with current script')) - self.utScriptAct.setWhatsThis(self.tr( - """<b>Unittest Script</b>""" - """<p>Run unittest with current script.</p>""" + self.tr('Test &Script...'), + 0, 0, self.testingActGrp, 'unittest_script') + self.testScriptAct.setStatusTip(self.tr( + 'Run tests of the current script')) + self.testScriptAct.setWhatsThis(self.tr( + """<b>Test Script</b>""" + """<p>Run tests with the current script.</p>""" )) - self.utScriptAct.triggered.connect(self.__unittestScript) - self.utScriptAct.setEnabled(False) - self.actions.append(self.utScriptAct) - - self.utProjectAct = EricAction( - self.tr('Unittest Project'), + self.testScriptAct.triggered.connect(self.__startTestScript) + self.testScriptAct.setEnabled(False) + self.actions.append(self.testScriptAct) + + self.testProjectAct = EricAction( + self.tr('Test Project'), UI.PixmapCache.getIcon("unittestProject"), - self.tr('Unittest &Project...'), - 0, 0, self.utActGrp, 'unittest_project') - self.utProjectAct.setStatusTip(self.tr( - 'Run unittest with current project')) - self.utProjectAct.setWhatsThis(self.tr( - """<b>Unittest Project</b>""" - """<p>Run unittest with current project.</p>""" + self.tr('Test &Project...'), + 0, 0, self.testingActGrp, 'unittest_project') + self.testProjectAct.setStatusTip(self.tr( + 'Run tests of the current project')) + self.testProjectAct.setWhatsThis(self.tr( + """<b>Test Project</b>""" + """<p>Run test of the current project.</p>""" )) - self.utProjectAct.triggered.connect(self.__unittestProject) - self.utProjectAct.setEnabled(False) - self.actions.append(self.utProjectAct) + self.testProjectAct.triggered.connect(self.__startTestProject) + self.testProjectAct.setEnabled(False) + self.actions.append(self.testProjectAct) # check for Qt5 designer and linguist if Utilities.isWindowsPlatform(): @@ -3400,17 +3400,17 @@ ## Extras/Unittest menu ############################################################## - self.__menus["unittest"] = QMenu(self.tr('&Unittest'), self) - self.__menus["unittest"].setTearOffEnabled(True) - self.__menus["unittest"].addAction(self.utDialogAct) - self.__menus["unittest"].addSeparator() - self.__menus["unittest"].addAction(self.utRestartAct) - self.__menus["unittest"].addAction(self.utRerunFailedAct) - self.__menus["unittest"].addSeparator() - self.__menus["unittest"].addAction(self.utScriptAct) - self.__menus["unittest"].addAction(self.utProjectAct) - - self.__menus["extras"].addMenu(self.__menus["unittest"]) + self.__menus["testing"] = QMenu(self.tr('&Testing'), self) + self.__menus["testing"].setTearOffEnabled(True) + self.__menus["testing"].addAction(self.testingDialogAct) + self.__menus["testing"].addSeparator() + self.__menus["testing"].addAction(self.restartTestAct) + self.__menus["testing"].addAction(self.rerunFailedTestsAct) + self.__menus["testing"].addSeparator() + self.__menus["testing"].addAction(self.testScriptAct) + self.__menus["testing"].addAction(self.testProjectAct) + + self.__menus["extras"].addMenu(self.__menus["testing"]) self.__menus["extras"].addSeparator() ############################################################## @@ -3598,7 +3598,7 @@ multiprojecttb = self.multiProject.initToolbar(self.toolbarManager) projecttb, vcstb = self.project.initToolbars(self.toolbarManager) toolstb = QToolBar(self.tr("Tools"), self) - unittesttb = QToolBar(self.tr("Unittest"), self) + testingtb = QToolBar(self.tr("Testing"), self) bookmarktb = self.viewmanager.initBookmarkToolbar(self.toolbarManager) spellingtb = self.viewmanager.initSpellingToolbar(self.toolbarManager) settingstb = QToolBar(self.tr("Settings"), self) @@ -3607,21 +3607,21 @@ pluginstb = QToolBar(self.tr("Plugins"), self) toolstb.setIconSize(Config.ToolBarIconSize) - unittesttb.setIconSize(Config.ToolBarIconSize) + testingtb.setIconSize(Config.ToolBarIconSize) settingstb.setIconSize(Config.ToolBarIconSize) helptb.setIconSize(Config.ToolBarIconSize) profilestb.setIconSize(Config.ToolBarIconSize) pluginstb.setIconSize(Config.ToolBarIconSize) toolstb.setObjectName("ToolsToolbar") - unittesttb.setObjectName("UnittestToolbar") + testingtb.setObjectName("UnittestToolbar") settingstb.setObjectName("SettingsToolbar") helptb.setObjectName("HelpToolbar") profilestb.setObjectName("ProfilesToolbar") pluginstb.setObjectName("PluginsToolbar") toolstb.setToolTip(self.tr("Tools")) - unittesttb.setToolTip(self.tr("Unittest")) + testingtb.setToolTip(self.tr("Unittest")) settingstb.setToolTip(self.tr("Settings")) helptb.setToolTip(self.tr("Help")) profilestb.setToolTip(self.tr("Profiles")) @@ -3635,15 +3635,15 @@ filetb.insertAction(sep, self.newWindowAct) self.toolbarManager.addToolBar(filetb, filetb.windowTitle()) - # setup the unittest toolbar - unittesttb.addAction(self.utDialogAct) - unittesttb.addSeparator() - unittesttb.addAction(self.utRestartAct) - unittesttb.addAction(self.utRerunFailedAct) - unittesttb.addSeparator() - unittesttb.addAction(self.utScriptAct) - unittesttb.addAction(self.utProjectAct) - self.toolbarManager.addToolBar(unittesttb, unittesttb.windowTitle()) + # setup the testing toolbar + testingtb.addAction(self.testingDialogAct) + testingtb.addSeparator() + testingtb.addAction(self.restartTestAct) + testingtb.addAction(self.rerunFailedTestsAct) + testingtb.addSeparator() + testingtb.addAction(self.testScriptAct) + testingtb.addAction(self.testProjectAct) + self.toolbarManager.addToolBar(testingtb, testingtb.windowTitle()) # setup the tools toolbar if self.designer4Act is not None: @@ -3723,7 +3723,7 @@ self.addToolBar(helptb) self.addToolBar(bookmarktb) self.addToolBar(spellingtb) - self.addToolBar(unittesttb) + self.addToolBar(testingtb) self.addToolBar(profilestb) self.addToolBar(pluginstb) @@ -3734,7 +3734,7 @@ multiprojecttb.hide() helptb.hide() spellingtb.hide() - unittesttb.hide() + testingtb.hide() pluginstb.hide() # just add new toolbars to the end of the list @@ -3752,8 +3752,7 @@ ""] self.__toolbars["bookmarks"] = [bookmarktb.windowTitle(), bookmarktb, ""] - self.__toolbars["unittest"] = [unittesttb.windowTitle(), unittesttb, - ""] + self.__toolbars["testing"] = [testingtb.windowTitle(), testingtb, ""] self.__toolbars["view_profiles"] = [profilestb.windowTitle(), profilestb, ""] self.__toolbars["plugins"] = [pluginstb.windowTitle(), pluginstb, ""] @@ -5333,42 +5332,42 @@ if dlg.exec() == QDialog.DialogCode.Accepted: self.toolGroups, self.currentToolGroup = dlg.getToolGroups() - def __createUnitTestDialog(self): - """ - Private slot to generate the unit test dialog on demand. - """ - if self.__unittestWidget is None: - from Unittest.UnittestWidget import UnittestWidget - self.__unittestWidget = UnittestWidget() - self.__unittestWidget.unittestFile.connect( + def __createTestingDialog(self): + """ + Private slot to generate the testing dialog on demand. + """ + if self.__testingWidget is None: + from Testing.TestingWidget import TestingWidget + self.__testingWidget = TestingWidget() + self.__testingWidget.testFile.connect( self.viewmanager.setFileLine) - self.__unittestWidget.unittestStopped.connect( - self.__unittestStopped) - - def __unittestStopped(self): - """ - Private slot to handle the end of a unit test run. - """ - self.utRerunFailedAct.setEnabled( - self.__unittestWidget.hasFailedTests()) - self.utRestartAct.setEnabled(True) - - def __unittest(self): - """ - Private slot for displaying the unittest dialog. - """ - self.__createUnitTestDialog() - self.__unittestWidget.show() - self.__unittestWidget.raise_() + self.__testingWidget.testRunStopped.connect( + self.__testingStopped) + + def __testingStopped(self): + """ + Private slot to handle the end of a test run. + """ + self.rerunFailedTestsAct.setEnabled( + self.__testingWidget.hasFailedTests()) + self.restartTestAct.setEnabled(True) + + def __startTesting(self): + """ + Private slot for displaying the testing dialog. + """ + self.__createTestingDialog() + self.__testingWidget.show() + self.__testingWidget.raise_() @pyqtSlot() @pyqtSlot(str) - def __unittestScript(self, testFile=None): - """ - Private slot for displaying the unittest dialog and run the current + def __startTestScript(self, testFile=None): + """ + Private slot for displaying the testing dialog and run the current script. - @param testFile file containing the unit tests to be run + @param testFile file containing the tests to be run @type str """ if testFile is None: @@ -5380,16 +5379,16 @@ else: testFile = fn - self.__unittest() - self.__unittestWidget.setTestFile(testFile) - self.utRestartAct.setEnabled(False) - self.utRerunFailedAct.setEnabled(False) + self.__startTesting() + self.__testingWidget.setTestFile(testFile) + self.restartTestAct.setEnabled(False) + self.rerunFailedTestsAct.setEnabled(False) @pyqtSlot() - def __unittestProject(self): - """ - Private slot for displaying the unittest dialog and run the current - project. + def __startTestProject(self): + """ + Private slot for displaying the testing dialog and run the test for + the current project. """ testFile = None fn = self.project.getMainScript(True) @@ -5398,26 +5397,26 @@ if os.path.exists(tfn): testFile = tfn - self.__unittest() - self.__unittestWidget.setTestFile(testFile) - self.utRestartAct.setEnabled(False) - self.utRerunFailedAct.setEnabled(False) - - def __unittestRestart(self): - """ - Private slot to display the unittest dialog and rerun the last - unit test. - """ - self.__unittest() - self.__unittestWidget.startTests() - - def __unittestRerunFailed(self): - """ - Private slot to display the unittest dialog and rerun all failed tests + self.__startTesting() + self.__testingWidget.setTestFile(testFile) + self.restartTestAct.setEnabled(False) + self.rerunFailedTestsAct.setEnabled(False) + + def __restartTest(self): + """ + Private slot to display the testing dialog and rerun the last + test run. + """ + self.__startTesting() + self.__testingWidget.startTests() + + def __rerunFailedTests(self): + """ + Private slot to display the testing dialog and rerun all failed tests of the last run. """ - self.__unittest() - self.__unittestWidget.startTests(failedOnly=True) + self.__startTesting() + self.__testingWidget.startTests(failedOnly=True) @pyqtSlot() @pyqtSlot(str) @@ -6816,7 +6815,7 @@ if dlg.exec() == QDialog.DialogCode.Accepted: # recent files, recent projects, recent multi projects, # debug histories, shell histories - (files, projects, multiProjects, debug, shell, unittests, vcs, + (files, projects, multiProjects, debug, shell, testing, vcs, plugins) = dlg.getData() if files: # clear list of recently opened files @@ -6833,13 +6832,13 @@ if shell: # clear the shell histories self.shell.clearAllHistories() - if unittests: + if testing: # clear the unit test histories - if self.__unittestWidget is None: - from Unittest.UnittestWidget import clearSavedHistories + if self.__testingWidget is None: + from Testing.UnittestWidget import clearSavedHistories clearSavedHistories() else: - self.__unittestWidget.clearRecent() + self.__testingWidget.clearRecent() if vcs: # clear the VCS related histories self.pluginManager.clearPluginsPrivateData("version_control") @@ -6863,7 +6862,7 @@ self.__setWindowCaption(project=self.project.name) cap = self.__debugServer.getClientCapabilities( self.project.getProjectLanguage()) - self.utProjectAct.setEnabled(cap & HasUnittest) + self.testProjectAct.setEnabled(cap & HasUnittest) self.utProjectOpen = cap & HasUnittest def __projectClosed(self): @@ -6871,10 +6870,10 @@ Private slot to handle the projectClosed signal. """ self.__setWindowCaption(project="") - self.utProjectAct.setEnabled(False) + self.testProjectAct.setEnabled(False) if not self.utEditorOpen: - self.utRestartAct.setEnabled(False) - self.utRerunFailedAct.setEnabled(False) + self.restartTestAct.setEnabled(False) + self.rerunFailedTestsAct.setEnabled(False) self.utProjectOpen = False def __programChange(self, fn): @@ -6896,11 +6895,11 @@ Private slot to handle the lastEditorClosed signal. """ self.wizardsMenuAct.setEnabled(False) - self.utScriptAct.setEnabled(False) + self.testScriptAct.setEnabled(False) self.utEditorOpen = False if not self.utProjectOpen: - self.utRestartAct.setEnabled(False) - self.utRerunFailedAct.setEnabled(False) + self.restartTestAct.setEnabled(False) + self.rerunFailedTestsAct.setEnabled(False) self.__setWindowCaption(editor="") def __editorOpened(self, fn): @@ -6919,12 +6918,12 @@ if fn.endswith(exts): from Debugger.DebugClientCapabilities import HasUnittest cap = dbs.getClientCapabilities(language) - self.utScriptAct.setEnabled(cap & HasUnittest) + self.testScriptAct.setEnabled(cap & HasUnittest) self.utEditorOpen = cap & HasUnittest return if self.viewmanager.getOpenEditor(fn).isPyFile(): - self.utScriptAct.setEnabled(True) + self.testScriptAct.setEnabled(True) self.utEditorOpen = True def __checkActions(self, editor): @@ -6942,16 +6941,16 @@ if fn.endswith(exts): from Debugger.DebugClientCapabilities import HasUnittest cap = dbs.getClientCapabilities(language) - self.utScriptAct.setEnabled(cap & HasUnittest) + self.testScriptAct.setEnabled(cap & HasUnittest) self.utEditorOpen = cap & HasUnittest return if editor.isPyFile(): - self.utScriptAct.setEnabled(True) + self.testScriptAct.setEnabled(True) self.utEditorOpen = True return - self.utScriptAct.setEnabled(False) + self.testScriptAct.setEnabled(False) def __writeTasks(self): """