Updated source documentation. eric7

Mon, 23 May 2022 18:15:10 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 23 May 2022 18:15:10 +0200
branch
eric7
changeset 9097
213951c41dcd
parent 9096
f6f7d8f364c3
child 9098
fb9351497cea

Updated source documentation.

eric7/APIs/Python3/eric7.api file | annotate | diff | comparison | revisions
eric7/APIs/Python3/eric7.bas file | annotate | diff | comparison | revisions
eric7/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric7/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.DataViews.PyCoverageDialog.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.DataViews.PyCoverageHtmlReportDialog.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.DataViews.PyCoverageJsonReportDialog.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.DebugClients.Python.DebugClientBase.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.DebugClients.Python.DebugClientCapabilities.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Debugger.DebugClientCapabilities.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Debugger.DebugServer.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Debugger.DebuggerInterfaceNone.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Debugger.DebuggerInterfacePython.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.DocumentationTools.TemplatesListsStyle.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.EricNetwork.EricJsonClient.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.EricNetwork.EricJsonServer.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.EricNetwork.EricJsonStreamReader.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.EricNetwork.EricJsonStreamWriter.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.EricWidgets.EricPlainTextDialog.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Globals.__init__.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Project.Project.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Project.PropertiesDialog.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.QScintilla.Editor.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Testing.Interfaces.PytestExecutor.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Testing.Interfaces.PytestRunner.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Testing.Interfaces.TestExecutorBase.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Testing.Interfaces.TestFrameworkRegistry.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Testing.Interfaces.UnittestExecutor.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Testing.Interfaces.UnittestRunner.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Testing.TestResultsTree.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Testing.TestingWidget.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Testing.__init__.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Tools.TrayStarter.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.UI.Browser.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.UI.ClearPrivateDataDialog.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.UI.UserInterface.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.Utilities.__init__.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.eric7_testing.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/eric7.eric7_unittest.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/index-eric7.DataViews.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/index-eric7.DebugClients.Python.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/index-eric7.EricNetwork.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/index-eric7.Testing.Interfaces.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/index-eric7.Testing.html file | annotate | diff | comparison | revisions
eric7/Documentation/Source/index-eric7.html file | annotate | diff | comparison | revisions
--- a/eric7/APIs/Python3/eric7.api	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/APIs/Python3/eric7.api	Mon May 23 18:15:10 2022 +0200
@@ -192,9 +192,16 @@
 eric7.DataViews.PyCoverageDialog.PyCoverageDialog.on_buttonBox_clicked?4(button)
 eric7.DataViews.PyCoverageDialog.PyCoverageDialog.on_reloadButton_clicked?4()
 eric7.DataViews.PyCoverageDialog.PyCoverageDialog.on_resultList_itemActivated?4(item, column)
+eric7.DataViews.PyCoverageDialog.PyCoverageDialog.openFile?7
 eric7.DataViews.PyCoverageDialog.PyCoverageDialog.start?4(cfn, fn)
 eric7.DataViews.PyCoverageDialog.PyCoverageDialog.stringify?4()
 eric7.DataViews.PyCoverageDialog.PyCoverageDialog?1(parent=None)
+eric7.DataViews.PyCoverageHtmlReportDialog.PyCoverageHtmlReportDialog.getData?4()
+eric7.DataViews.PyCoverageHtmlReportDialog.PyCoverageHtmlReportDialog.on_outputDirectoryPicker_textChanged?4(directory)
+eric7.DataViews.PyCoverageHtmlReportDialog.PyCoverageHtmlReportDialog?1(defaultDirectory, parent=None)
+eric7.DataViews.PyCoverageJsonReportDialog.PyCoverageJsonReportDialog.getData?4()
+eric7.DataViews.PyCoverageJsonReportDialog.PyCoverageJsonReportDialog.on_outputFilePicker_textChanged?4(filename)
+eric7.DataViews.PyCoverageJsonReportDialog.PyCoverageJsonReportDialog?1(defaultDirectory, parent=None)
 eric7.DataViews.PyProfileDialog.PyProfileDialog.on_buttonBox_clicked?4(button)
 eric7.DataViews.PyProfileDialog.PyProfileDialog.start?4(pfn, fn=None)
 eric7.DataViews.PyProfileDialog.PyProfileDialog?1(parent=None)
@@ -243,15 +250,6 @@
 eric7.DebugClients.Python.BreakpointWatch.Watch.get_watch?4()
 eric7.DebugClients.Python.BreakpointWatch.Watch.watches?7
 eric7.DebugClients.Python.BreakpointWatch.Watch?1(cond, compiledCond, flag, temporary=False)
-eric7.DebugClients.Python.DCTestResult.DCTestResult.addError?4(test, err)
-eric7.DebugClients.Python.DCTestResult.DCTestResult.addExpectedFailure?4(test, err)
-eric7.DebugClients.Python.DCTestResult.DCTestResult.addFailure?4(test, err)
-eric7.DebugClients.Python.DCTestResult.DCTestResult.addSkip?4(test, reason)
-eric7.DebugClients.Python.DCTestResult.DCTestResult.addSubTest?4(test, subtest, err)
-eric7.DebugClients.Python.DCTestResult.DCTestResult.addUnexpectedSuccess?4(test)
-eric7.DebugClients.Python.DCTestResult.DCTestResult.startTest?4(test)
-eric7.DebugClients.Python.DCTestResult.DCTestResult.stopTest?4(test)
-eric7.DebugClients.Python.DCTestResult.DCTestResult?1(dbgClient, failfast)
 eric7.DebugClients.Python.DebugBase.DebugBase._fnCache?8
 eric7.DebugClients.Python.DebugBase.DebugBase._set_stopinfo?5(stopframe, returnframe, stoplineno=0)
 eric7.DebugClients.Python.DebugBase.DebugBase.bootstrap?4(target, args, kwargs)
@@ -332,7 +330,6 @@
 eric7.DebugClients.Python.DebugClientCapabilities.HasInterpreter?7
 eric7.DebugClients.Python.DebugClientCapabilities.HasProfiler?7
 eric7.DebugClients.Python.DebugClientCapabilities.HasShell?7
-eric7.DebugClients.Python.DebugClientCapabilities.HasUnittest?7
 eric7.DebugClients.Python.DebugConfig.BatchSize?7
 eric7.DebugClients.Python.DebugConfig.ConfigKnownQtTypes?7
 eric7.DebugClients.Python.DebugConfig.ConfigQtNames?7
@@ -535,7 +532,6 @@
 eric7.Debugger.DebugClientCapabilities.HasInterpreter?7
 eric7.Debugger.DebugClientCapabilities.HasProfiler?7
 eric7.Debugger.DebugClientCapabilities.HasShell?7
-eric7.Debugger.DebugClientCapabilities.HasUnittest?7
 eric7.Debugger.DebugServer.DebugServer.appendStdout?7
 eric7.Debugger.DebugServer.DebugServer.callTraceInfo?7
 eric7.Debugger.DebugServer.DebugServer.clientBanner?7
@@ -563,16 +559,6 @@
 eric7.Debugger.DebugServer.DebugServer.clientSyntaxError?7
 eric7.Debugger.DebugServer.DebugServer.clientThreadList?7
 eric7.Debugger.DebugServer.DebugServer.clientThreadSet?7
-eric7.Debugger.DebugServer.DebugServer.clientUtDiscovered?4(testCases, exceptionType, exceptionValue)
-eric7.Debugger.DebugServer.DebugServer.clientUtFinished?4(status)
-eric7.Debugger.DebugServer.DebugServer.clientUtPrepared?4(result, exceptionType, exceptionValue)
-eric7.Debugger.DebugServer.DebugServer.clientUtStartTest?4(testname, doc)
-eric7.Debugger.DebugServer.DebugServer.clientUtStopTest?4()
-eric7.Debugger.DebugServer.DebugServer.clientUtTestErrored?4(testname, traceback, testId)
-eric7.Debugger.DebugServer.DebugServer.clientUtTestFailed?4(testname, traceback, testId)
-eric7.Debugger.DebugServer.DebugServer.clientUtTestFailedExpected?4(testname, traceback, testId)
-eric7.Debugger.DebugServer.DebugServer.clientUtTestSkipped?4(testname, reason, testId)
-eric7.Debugger.DebugServer.DebugServer.clientUtTestSucceededUnexpected?4(testname, testId)
 eric7.Debugger.DebugServer.DebugServer.clientVariable?7
 eric7.Debugger.DebugServer.DebugServer.clientVariables?7
 eric7.Debugger.DebugServer.DebugServer.clientWatchConditionError?7
@@ -621,10 +607,6 @@
 eric7.Debugger.DebugServer.DebugServer.remoteStepOver?4(debuggerId)
 eric7.Debugger.DebugServer.DebugServer.remoteStepQuit?4(debuggerId)
 eric7.Debugger.DebugServer.DebugServer.remoteThreadList?4(debuggerId)
-eric7.Debugger.DebugServer.DebugServer.remoteUTDiscover?4(clientType, forProject, venvName, syspath, workdir, discoveryStart)
-eric7.Debugger.DebugServer.DebugServer.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, clientType="", forProject=False, venvName="", syspath=None, workdir="", discover=False, discoveryStart="", testCases=None, debug=False)
-eric7.Debugger.DebugServer.DebugServer.remoteUTRun?4(debug=False, failfast=False)
-eric7.Debugger.DebugServer.DebugServer.remoteUTStop?4()
 eric7.Debugger.DebugServer.DebugServer.setCallTraceEnabled?4(debuggerId, on)
 eric7.Debugger.DebugServer.DebugServer.setDebugging?4(on)
 eric7.Debugger.DebugServer.DebugServer.shutdownServer?4()
@@ -656,16 +638,6 @@
 eric7.Debugger.DebugServer.DebugServer.signalMainClientExit?4()
 eric7.Debugger.DebugServer.DebugServer.startClient?4(unplanned=True, clType=None, forProject=False, runInConsole=False, venvName="", workingDir=None, configOverride=None)
 eric7.Debugger.DebugServer.DebugServer.unregisterDebuggerInterface?4(interfaceName)
-eric7.Debugger.DebugServer.DebugServer.utDiscovered?7
-eric7.Debugger.DebugServer.DebugServer.utFinished?7
-eric7.Debugger.DebugServer.DebugServer.utPrepared?7
-eric7.Debugger.DebugServer.DebugServer.utStartTest?7
-eric7.Debugger.DebugServer.DebugServer.utStopTest?7
-eric7.Debugger.DebugServer.DebugServer.utTestErrored?7
-eric7.Debugger.DebugServer.DebugServer.utTestFailed?7
-eric7.Debugger.DebugServer.DebugServer.utTestFailedExpected?7
-eric7.Debugger.DebugServer.DebugServer.utTestSkipped?7
-eric7.Debugger.DebugServer.DebugServer.utTestSucceededUnexpected?7
 eric7.Debugger.DebugServer.DebugServer?1(originalPathString, preventPassiveDebugging=False, project=None, parent=None)
 eric7.Debugger.DebugServer.DebuggerInterfaces?7
 eric7.Debugger.DebugUI.DebugUI.appendStdout?7
@@ -766,10 +738,6 @@
 eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepOver?4(debuggerId)
 eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteStepQuit?4(debuggerId)
 eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteThreadList?4(debuggerId)
-eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTDiscover?4(syspath, workdir, discoveryStart)
-eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug)
-eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTRun?4(debug, failfast)
-eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteUTStop?4()
 eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpoint?4(debuggerId, cond, setWatch, temp=False)
 eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpointEnable?4(debuggerId, cond, enable)
 eric7.Debugger.DebuggerInterfaceNone.DebuggerInterfaceNone.remoteWatchpointIgnore?4(debuggerId, cond, count)
@@ -813,10 +781,6 @@
 eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepOver?4(debuggerId)
 eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteStepQuit?4(debuggerId)
 eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteThreadList?4(debuggerId)
-eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTDiscover?4(syspath, workdir, discoveryStart)
-eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTPrepare?4(fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug)
-eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTRun?4(debug, failfast)
-eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteUTStop?4()
 eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpoint?4(debuggerId, cond, setWatch, temp=False)
 eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpointEnable?4(debuggerId, cond, enable)
 eric7.Debugger.DebuggerInterfacePython.DebuggerInterfacePython.remoteWatchpointIgnore?4(debuggerId, cond, count)
@@ -1081,6 +1045,14 @@
 eric7.EricNetwork.EricJsonServer.EricJsonServer.stopAllClients?4()
 eric7.EricNetwork.EricJsonServer.EricJsonServer.stopClient?4(idString="")
 eric7.EricNetwork.EricJsonServer.EricJsonServer?1(name="", multiplex=False, parent=None)
+eric7.EricNetwork.EricJsonStreamReader.EricJsonReader.address?4()
+eric7.EricNetwork.EricJsonStreamReader.EricJsonReader.dataReceived?7
+eric7.EricNetwork.EricJsonStreamReader.EricJsonReader.handleNewConnection?4()
+eric7.EricNetwork.EricJsonStreamReader.EricJsonReader.port?4()
+eric7.EricNetwork.EricJsonStreamReader.EricJsonReader?1(name="", ip=None, parent=None)
+eric7.EricNetwork.EricJsonStreamWriter.EricJsonWriter.close?4()
+eric7.EricNetwork.EricJsonStreamWriter.EricJsonWriter.write?4(data)
+eric7.EricNetwork.EricJsonStreamWriter.EricJsonWriter?1(host, port)
 eric7.EricNetwork.EricNetworkIcon.EricNetworkIcon.isOnline?4()
 eric7.EricNetwork.EricNetworkIcon.EricNetworkIcon.onlineStateChanged?7
 eric7.EricNetwork.EricNetworkIcon.EricNetworkIcon.reachabilityStateChanged?7
@@ -1560,7 +1532,8 @@
 eric7.EricWidgets.EricPathPickerDialog.EricPathPickerDialog?1(parent=None)
 eric7.EricWidgets.EricPathPickerDialog.getPath?4(parent, title, label, mode=EricPathPickerModes.OPEN_FILE_MODE, path="", defaultDirectory="", filters=None)
 eric7.EricWidgets.EricPlainTextDialog.EricPlainTextDialog.on_copyButton_clicked?4()
-eric7.EricWidgets.EricPlainTextDialog.EricPlainTextDialog?1(title="", text="", parent=None)
+eric7.EricWidgets.EricPlainTextDialog.EricPlainTextDialog.toPlainText?4()
+eric7.EricWidgets.EricPlainTextDialog.EricPlainTextDialog?1(title="", text="", readOnly=True, parent=None)
 eric7.EricWidgets.EricProcessDialog.EricProcessDialog.keyPressEvent?4(evt)
 eric7.EricWidgets.EricProcessDialog.EricProcessDialog.normalExit?4()
 eric7.EricWidgets.EricProcessDialog.EricProcessDialog.normalExitWithoutErrors?4()
@@ -1916,9 +1889,11 @@
 eric7.Globals.recentNameHosts?7
 eric7.Globals.recentNameMultiProject?7
 eric7.Globals.recentNameProject?7
-eric7.Globals.recentNameUnittestDiscoverHistory?7
-eric7.Globals.recentNameUnittestFileHistory?7
-eric7.Globals.recentNameUnittestTestnameHistory?7
+eric7.Globals.recentNameTestDiscoverHistory?7
+eric7.Globals.recentNameTestEnvironment?7
+eric7.Globals.recentNameTestFileHistory?7
+eric7.Globals.recentNameTestFramework?7
+eric7.Globals.recentNameTestNameHistory?7
 eric7.Globals.sessionType?4()
 eric7.Globals.setConfigDir?4(d)
 eric7.Globals.settingsNameGlobal?7
@@ -6534,7 +6509,6 @@
 eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.InputDialogWizardDialog.getCode?4(indLevel, indString)
 eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.InputDialogWizardDialog.on_bTest_clicked?4()
 eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.InputDialogWizardDialog.on_buttonBox_clicked?4(button)
-eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.InputDialogWizardDialog.on_rItem_toggled?4(checked)
 eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.InputDialogWizardDialog?1(parent=None)
 eric7.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog.MessageBoxWizardDialog.getCode?4(indLevel, indString)
 eric7.Plugins.WizardPlugins.MessageBoxWizard.MessageBoxWizardDialog.MessageBoxWizardDialog.on_bTest_clicked?4()
@@ -7475,15 +7449,19 @@
 eric7.Project.Project.Project.getProjectAuthorEmail?4()
 eric7.Project.Project.Project.getProjectDescription?4()
 eric7.Project.Project.Project.getProjectDictionaries?4()
+eric7.Project.Project.Project.getProjectExecPath?4()
 eric7.Project.Project.Project.getProjectFile?4()
 eric7.Project.Project.Project.getProjectFiles?4(fileType, normalized=False)
+eric7.Project.Project.Project.getProjectInterpreter?4(resolveGlobal=True)
 eric7.Project.Project.Project.getProjectLanguage?4()
 eric7.Project.Project.Project.getProjectManagementDir?4()
 eric7.Project.Project.Project.getProjectName?4()
 eric7.Project.Project.Project.getProjectPath?4()
 eric7.Project.Project.Project.getProjectSpellLanguage?4()
+eric7.Project.Project.Project.getProjectTestingFramework?4()
 eric7.Project.Project.Project.getProjectType?4()
 eric7.Project.Project.Project.getProjectTypes?4(progLanguage="")
+eric7.Project.Project.Project.getProjectVenv?4(resolveDebugger=True)
 eric7.Project.Project.Project.getProjectVersion?4()
 eric7.Project.Project.Project.getRelativePath?4(path)
 eric7.Project.Project.Project.getRelativeUniversalPath?4(path)
@@ -7773,7 +7751,7 @@
 eric7.Project.PropertiesDialog.PropertiesDialog.getPPath?4()
 eric7.Project.PropertiesDialog.PropertiesDialog.getProjectType?4()
 eric7.Project.PropertiesDialog.PropertiesDialog.on_dirPicker_textChanged?4(txt)
-eric7.Project.PropertiesDialog.PropertiesDialog.on_languageComboBox_currentIndexChanged?4(index)
+eric7.Project.PropertiesDialog.PropertiesDialog.on_languageComboBox_currentTextChanged?4(language)
 eric7.Project.PropertiesDialog.PropertiesDialog.on_mainscriptPicker_aboutToShowPathPickerDialog?4()
 eric7.Project.PropertiesDialog.PropertiesDialog.on_mainscriptPicker_pathSelected?4(script)
 eric7.Project.PropertiesDialog.PropertiesDialog.on_makeButton_clicked?4()
@@ -7825,55 +7803,6 @@
 eric7.Project.UserProjectFile.UserProjectFile?1(project: Project, parent: QObject = None)
 eric7.Project.UserPropertiesDialog.UserPropertiesDialog.storeData?4()
 eric7.Project.UserPropertiesDialog.UserPropertiesDialog?1(project, parent=None, name=None)
-eric7.PyUnit.UnittestDialog.QtTestResult.addError?4(test, err)
-eric7.PyUnit.UnittestDialog.QtTestResult.addExpectedFailure?4(test, err)
-eric7.PyUnit.UnittestDialog.QtTestResult.addFailure?4(test, err)
-eric7.PyUnit.UnittestDialog.QtTestResult.addSkip?4(test, reason)
-eric7.PyUnit.UnittestDialog.QtTestResult.addSubTest?4(test, subtest, err)
-eric7.PyUnit.UnittestDialog.QtTestResult.addUnexpectedSuccess?4(test)
-eric7.PyUnit.UnittestDialog.QtTestResult.startTest?4(test)
-eric7.PyUnit.UnittestDialog.QtTestResult.stopTest?4(test)
-eric7.PyUnit.UnittestDialog.QtTestResult?1(parent, failfast)
-eric7.PyUnit.UnittestDialog.UnittestDialog.ErrorsInfoRole?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.FailedExpectedColorDarkTheme?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.FailedExpectedColorLightTheme?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.SkippedColorDarkTheme?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.SkippedColorLightTheme?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.SucceededUnexpectedColorDarkTheme?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.SucceededUnexpectedColorLightTheme?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.TestCaseFileRole?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.TestCaseNameRole?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.clearRecent?4()
-eric7.PyUnit.UnittestDialog.UnittestDialog.closeEvent?4(event)
-eric7.PyUnit.UnittestDialog.UnittestDialog.hasFailedTests?4()
-eric7.PyUnit.UnittestDialog.UnittestDialog.insertDiscovery?4(start)
-eric7.PyUnit.UnittestDialog.UnittestDialog.insertProg?4(prog)
-eric7.PyUnit.UnittestDialog.UnittestDialog.insertTestName?4(testName)
-eric7.PyUnit.UnittestDialog.UnittestDialog.keyPressEvent?4(evt)
-eric7.PyUnit.UnittestDialog.UnittestDialog.on_buttonBox_clicked?4(button)
-eric7.PyUnit.UnittestDialog.UnittestDialog.on_discoverCheckBox_toggled?4(checked)
-eric7.PyUnit.UnittestDialog.UnittestDialog.on_discoveryList_itemChanged?4(item, column)
-eric7.PyUnit.UnittestDialog.UnittestDialog.on_discoveryList_itemDoubleClicked?4(item, column)
-eric7.PyUnit.UnittestDialog.UnittestDialog.on_errorsListWidget_currentTextChanged?4(text)
-eric7.PyUnit.UnittestDialog.UnittestDialog.on_errorsListWidget_itemDoubleClicked?4(lbitem)
-eric7.PyUnit.UnittestDialog.UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog?4()
-eric7.PyUnit.UnittestDialog.UnittestDialog.on_testsuitePicker_editTextChanged?4(path)
-eric7.PyUnit.UnittestDialog.UnittestDialog.on_testsuitePicker_pathSelected?4(suite)
-eric7.PyUnit.UnittestDialog.UnittestDialog.setProjectMode?4(forProject)
-eric7.PyUnit.UnittestDialog.UnittestDialog.startTests?4(failedOnly=False)
-eric7.PyUnit.UnittestDialog.UnittestDialog.testErrored?4(test, exc, testId)
-eric7.PyUnit.UnittestDialog.UnittestDialog.testFailed?4(test, exc, testId)
-eric7.PyUnit.UnittestDialog.UnittestDialog.testFailedExpected?4(test, exc, testId)
-eric7.PyUnit.UnittestDialog.UnittestDialog.testFinished?4()
-eric7.PyUnit.UnittestDialog.UnittestDialog.testSkipped?4(test, reason, testId)
-eric7.PyUnit.UnittestDialog.UnittestDialog.testStarted?4(test, doc)
-eric7.PyUnit.UnittestDialog.UnittestDialog.testSucceededUnexpected?4(test, testId)
-eric7.PyUnit.UnittestDialog.UnittestDialog.unittestFile?7
-eric7.PyUnit.UnittestDialog.UnittestDialog.unittestStopped?7
-eric7.PyUnit.UnittestDialog.UnittestDialog?1(prog=None, dbs=None, ui=None, parent=None, name=None)
-eric7.PyUnit.UnittestDialog.UnittestWindow.eventFilter?4(obj, event)
-eric7.PyUnit.UnittestDialog.UnittestWindow?1(prog=None, parent=None)
-eric7.PyUnit.UnittestDialog.clearSavedHistories?4(self)
 eric7.QScintilla.APIsManager.APIs.apiPreparationCancelled?7
 eric7.QScintilla.APIsManager.APIs.apiPreparationFinished?7
 eric7.QScintilla.APIsManager.APIs.apiPreparationStarted?7
@@ -7973,7 +7902,7 @@
 eric7.QScintilla.Editor.Editor.clearWarnings?4()
 eric7.QScintilla.Editor.Editor.close?4(alsoDelete=False)
 eric7.QScintilla.Editor.Editor.closeIt?4()
-eric7.QScintilla.Editor.Editor.codeCoverageShowAnnotations?4(silent=False)
+eric7.QScintilla.Editor.Editor.codeCoverageShowAnnotations?4(silent=False, coverageFile=None)
 eric7.QScintilla.Editor.Editor.collapseFoldWithChildren?4(line=-1)
 eric7.QScintilla.Editor.Editor.commentLine?4()
 eric7.QScintilla.Editor.Editor.commentLineOrSelection?4()
@@ -9246,6 +9175,136 @@
 eric7.Templates.TemplatesFile.TemplatesFile.readFile?4(filename: str)
 eric7.Templates.TemplatesFile.TemplatesFile.writeFile?4(filename: str)
 eric7.Templates.TemplatesFile.TemplatesFile?1(viewer: TemplateViewer, parent: QObject = None)
+eric7.Testing.Interfaces.FrameworkNames?7
+eric7.Testing.Interfaces.Frameworks?7
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.createArguments?4(config)
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.finished?4()
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.getVersions?4(interpreter)
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.hasCoverage?4(interpreter)
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.module?7
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.name?7
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.runner?7
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor.start?4(config, pythonpath)
+eric7.Testing.Interfaces.PytestExecutor.PytestExecutor?1(testWidget)
+eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_collectreport?4(report)
+eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_itemcollected?4(item)
+eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_report_header?4(config, startdir)
+eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_runtest_logfinish?4(nodeid, location)
+eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_runtest_logreport?4(report)
+eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_runtest_logstart?4(nodeid, location)
+eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_sessionfinish?4(session, exitstatus)
+eric7.Testing.Interfaces.PytestRunner.EricPlugin.pytest_sessionstart?4(session)
+eric7.Testing.Interfaces.PytestRunner.EricPlugin?1(writer)
+eric7.Testing.Interfaces.PytestRunner.GetPluginVersionsPlugin.getVersions?4()
+eric7.Testing.Interfaces.PytestRunner.GetPluginVersionsPlugin.pytest_cmdline_main?4(config)
+eric7.Testing.Interfaces.PytestRunner.GetPluginVersionsPlugin?1()
+eric7.Testing.Interfaces.PytestRunner.getVersions?4()
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase._prepareProcess?5(workDir, pythonpath)
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.collectError?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.collected?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.coverageDataSaved?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.createArguments?4(config)
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.finished?4()
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.getVersions?4(interpreter)
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.hasCoverage?4(interpreter)
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.isInstalled?4(interpreter)
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.module?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.name?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.readAllOutput?4(process=None)
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.runner?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.start?4(config, pythonpath)
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.startTest?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.stop?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.stopIfRunning?4()
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testFinished?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testResult?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testRunAboutToBeStarted?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testRunFinished?7
+eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase?1(testWidget)
+eric7.Testing.Interfaces.TestExecutorBase.TestResultCategory.FAIL?7
+eric7.Testing.Interfaces.TestExecutorBase.TestResultCategory.OK?7
+eric7.Testing.Interfaces.TestExecutorBase.TestResultCategory.PENDING?7
+eric7.Testing.Interfaces.TestExecutorBase.TestResultCategory.RUNNING?7
+eric7.Testing.Interfaces.TestExecutorBase.TestResultCategory.SKIP?7
+eric7.Testing.Interfaces.TestFrameworkRegistry.TestFrameworkRegistry.createExecutor?4(framework, widget)
+eric7.Testing.Interfaces.TestFrameworkRegistry.TestFrameworkRegistry.getFrameworks?4()
+eric7.Testing.Interfaces.TestFrameworkRegistry.TestFrameworkRegistry.register?4(executorClass)
+eric7.Testing.Interfaces.TestFrameworkRegistry.TestFrameworkRegistry?1()
+eric7.Testing.Interfaces.UnittestExecutor.UnittestExecutor.createArguments?4(config)
+eric7.Testing.Interfaces.UnittestExecutor.UnittestExecutor.finished?4()
+eric7.Testing.Interfaces.UnittestExecutor.UnittestExecutor.getVersions?4(interpreter)
+eric7.Testing.Interfaces.UnittestExecutor.UnittestExecutor.hasCoverage?4(interpreter)
+eric7.Testing.Interfaces.UnittestExecutor.UnittestExecutor.module?7
+eric7.Testing.Interfaces.UnittestExecutor.UnittestExecutor.name?7
+eric7.Testing.Interfaces.UnittestExecutor.UnittestExecutor.runner?7
+eric7.Testing.Interfaces.UnittestExecutor.UnittestExecutor.start?4(config, pythonpath)
+eric7.Testing.Interfaces.UnittestExecutor.UnittestExecutor?1(testWidget)
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.addError?4(test, err)
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.addExpectedFailure?4(test, err)
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.addFailure?4(test, err)
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.addSkip?4(test, reason)
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.addSubTest?4(test, subtest, err)
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.addUnexpectedSuccess?4(test)
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.startTest?4(test)
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.startTestRun?4()
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.stopTest?4(test)
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult.stopTestRun?4()
+eric7.Testing.Interfaces.UnittestRunner.EricTestResult?1(writer, failfast)
+eric7.Testing.Interfaces.UnittestRunner._assembleTestCasesList?5(suite)
+eric7.Testing.Interfaces.UnittestRunner.runtest?4(argv)
+eric7.Testing.TestResultsTree.TestResultsModel.DurationColumn?7
+eric7.Testing.TestResultsTree.TestResultsModel.Headers?7
+eric7.Testing.TestResultsTree.TestResultsModel.MessageColumn?7
+eric7.Testing.TestResultsTree.TestResultsModel.NameColumn?7
+eric7.Testing.TestResultsTree.TestResultsModel.StatusColumn?7
+eric7.Testing.TestResultsTree.TestResultsModel.addTestResults?4(testResults)
+eric7.Testing.TestResultsTree.TestResultsModel.clear?4()
+eric7.Testing.TestResultsTree.TestResultsModel.columnCount?4(parent=QModelIndex())
+eric7.Testing.TestResultsTree.TestResultsModel.data?4(index, role)
+eric7.Testing.TestResultsTree.TestResultsModel.durationKey?4()
+eric7.Testing.TestResultsTree.TestResultsModel.getFailedTests?4()
+eric7.Testing.TestResultsTree.TestResultsModel.getTestResults?4()
+eric7.Testing.TestResultsTree.TestResultsModel.headerData?4(section, orientation, role=Qt.ItemDataRole.DisplayRole)
+eric7.Testing.TestResultsTree.TestResultsModel.index?4(row, column, parent=QModelIndex())
+eric7.Testing.TestResultsTree.TestResultsModel.parent?4(index)
+eric7.Testing.TestResultsTree.TestResultsModel.rowCount?4(parent=QModelIndex())
+eric7.Testing.TestResultsTree.TestResultsModel.setTestResults?4(testResults)
+eric7.Testing.TestResultsTree.TestResultsModel.sort?4(column, order)
+eric7.Testing.TestResultsTree.TestResultsModel.summary?7
+eric7.Testing.TestResultsTree.TestResultsModel.updateTestResults?4(testResults)
+eric7.Testing.TestResultsTree.TestResultsModel?1(parent=None)
+eric7.Testing.TestResultsTree.TestResultsTreeView.dataChanged?4(topLeft, bottomRight, roles=[])
+eric7.Testing.TestResultsTree.TestResultsTreeView.goto?7
+eric7.Testing.TestResultsTree.TestResultsTreeView.reset?4()
+eric7.Testing.TestResultsTree.TestResultsTreeView.resizeColumns?4()
+eric7.Testing.TestResultsTree.TestResultsTreeView.rowsInserted?4(parent, startRow, endRow)
+eric7.Testing.TestResultsTree.TestResultsTreeView.spanFirstColumn?4(startRow, endRow)
+eric7.Testing.TestResultsTree.TestResultsTreeView?1(parent=None)
+eric7.Testing.TestResultsTree.TopLevelId?7
+eric7.Testing.TestingWidget.TestingWidget.clearRecent?4()
+eric7.Testing.TestingWidget.TestingWidget.closeEvent?4(event)
+eric7.Testing.TestingWidget.TestingWidget.getFailedTests?4()
+eric7.Testing.TestingWidget.TestingWidget.getResultsModel?4()
+eric7.Testing.TestingWidget.TestingWidget.hasFailedTests?4()
+eric7.Testing.TestingWidget.TestingWidget.on_buttonBox_clicked?4(button)
+eric7.Testing.TestingWidget.TestingWidget.on_discoverCheckBox_toggled?4(checked)
+eric7.Testing.TestingWidget.TestingWidget.on_frameworkComboBox_currentIndexChanged?4(index)
+eric7.Testing.TestingWidget.TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog?4()
+eric7.Testing.TestingWidget.TestingWidget.on_venvComboBox_currentIndexChanged?4(index)
+eric7.Testing.TestingWidget.TestingWidget.on_versionsButton_clicked?4()
+eric7.Testing.TestingWidget.TestingWidget.setTestFile?4(testFile, forProject=False)
+eric7.Testing.TestingWidget.TestingWidget.startTests?4(failedOnly=False)
+eric7.Testing.TestingWidget.TestingWidget.testFile?7
+eric7.Testing.TestingWidget.TestingWidget.testRunStopped?7
+eric7.Testing.TestingWidget.TestingWidget?1(testfile=None, parent=None)
+eric7.Testing.TestingWidget.TestingWidgetModes.IDLE?7
+eric7.Testing.TestingWidget.TestingWidgetModes.RUNNING?7
+eric7.Testing.TestingWidget.TestingWidgetModes.STOPPED?7
+eric7.Testing.TestingWidget.TestingWindow.eventFilter?4(obj, event)
+eric7.Testing.TestingWidget.TestingWindow?1(testfile=None, parent=None)
+eric7.Testing.TestingWidget.clearSavedHistories?4(self)
+eric7.Testing.isLanguageSupported?4(language)
+eric7.Testing.supportedLanguages?4()
 eric7.Toolbox.SingleApplication.SingleApplicationClient.connect?4(timeout=10000)
 eric7.Toolbox.SingleApplication.SingleApplicationClient.disconnect?4()
 eric7.Toolbox.SingleApplication.SingleApplicationClient.errstr?4()
@@ -9336,7 +9395,7 @@
 eric7.UI.Browser.Browser.handleInterpreterChanged?4(interpreter)
 eric7.UI.Browser.Browser.handlePreferencesChanged?4()
 eric7.UI.Browser.Browser.handleProgramChange?4(fn)
-eric7.UI.Browser.Browser.handleUnittest?4()
+eric7.UI.Browser.Browser.handleTesting?4()
 eric7.UI.Browser.Browser.keyboardSearch?4(search)
 eric7.UI.Browser.Browser.layoutDisplay?4()
 eric7.UI.Browser.Browser.linguistFile?7
@@ -9348,9 +9407,9 @@
 eric7.UI.Browser.Browser.saveToplevelDirs?4()
 eric7.UI.Browser.Browser.sourceFile?7
 eric7.UI.Browser.Browser.svgFile?7
+eric7.UI.Browser.Browser.testFile?7
 eric7.UI.Browser.Browser.trpreview?7
 eric7.UI.Browser.Browser.umlFile?7
-eric7.UI.Browser.Browser.unittestOpen?7
 eric7.UI.Browser.Browser.wantedItem?4(itm, filterList=None)
 eric7.UI.Browser.Browser?1(parent=None)
 eric7.UI.BrowserModel.BrowserClassAttributeItem.attributeObject?4()
@@ -10136,6 +10195,8 @@
 eric7.Utilities.generatePySideToolPath?4(toolname, variant=2)
 eric7.Utilities.generateQtToolName?4(toolname)
 eric7.Utilities.generateVersionInfo?4(linesep='\n')
+eric7.Utilities.getCoverageFileName?4(fn, mustExist=True)
+eric7.Utilities.getCoverageFileNames?4(fn)
 eric7.Utilities.getDirs?4(path, excludeDirs)
 eric7.Utilities.getEnvironmentEntry?4(key, default=None)
 eric7.Utilities.getExecutablePath?4(file)
@@ -10143,12 +10204,14 @@
 eric7.Utilities.getHomeDir?4()
 eric7.Utilities.getPercentReplacement?4(code)
 eric7.Utilities.getPercentReplacementHelp?4()
+eric7.Utilities.getProfileFileName?4(fn, mustExist=True)
+eric7.Utilities.getProfileFileNames?4(fn)
 eric7.Utilities.getPythonLibPath?4()
 eric7.Utilities.getPythonVersion?4()
 eric7.Utilities.getQtMacBundle?4(toolname)
 eric7.Utilities.getRealName?4()
 eric7.Utilities.getSysPath?4(interpreter)
-eric7.Utilities.getTestFileName?4(fn)
+eric7.Utilities.getTestFileNames?4(fn)
 eric7.Utilities.getUserName?4()
 eric7.Utilities.getVolumeName?4(diskName)
 eric7.Utilities.getWindowsExecutablePath?4(file)
@@ -12462,6 +12525,8 @@
 eric7.eric7_snap.main?4()
 eric7.eric7_sqlbrowser.createMainWidget?4(argv)
 eric7.eric7_sqlbrowser.main?4()
+eric7.eric7_testing.createMainWidget?4(argv)
+eric7.eric7_testing.main?4()
 eric7.eric7_tray.SettingsDir?7
 eric7.eric7_tray.createMainWidget?4(argv)
 eric7.eric7_tray.main?4()
@@ -12470,8 +12535,6 @@
 eric7.eric7_trpreviewer.main?4()
 eric7.eric7_uipreviewer.createMainWidget?4(argv)
 eric7.eric7_uipreviewer.main?4()
-eric7.eric7_unittest.createMainWidget?4(argv)
-eric7.eric7_unittest.main?4()
 eric7.eric7_virtualenv.createMainWidget?4(argv)
 eric7.eric7_virtualenv.main?4()
 eric7.eric7config._pkg_config?8
--- a/eric7/APIs/Python3/eric7.bas	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/APIs/Python3/eric7.bas	Mon May 23 18:15:10 2022 +0200
@@ -130,7 +130,6 @@
 CreateDialogCodeDialog QDialog Ui_CreateDialogCodeDialog
 CustomHelpFormatter argparse.HelpFormatter
 CustomNamespace argparse.Namespace
-DCTestResult TestResult
 DateTimeVisitor ast.NodeVisitor
 DebugClient DebugBase DebugClientBase ThreadExtension
 DebugServer QTcpServer
@@ -231,6 +230,7 @@
 EricGraphicsView QGraphicsView
 EricHorizontalToolBox EricTabWidget
 EricIconBar QWidget
+EricJsonReader QTcpServer
 EricJsonServer QTcpServer
 EricLed QWidget
 EricLedType enum.Enum
@@ -285,6 +285,7 @@
 EricStringListEditWidget QWidget Ui_EricStringListEditWidget
 EricTabWidget QTabWidget
 EricTableView QTableView
+EricTestResult unittest.TestResult
 EricTextEditSearchWidget QWidget
 EricTextEditType enum.Enum
 EricTextInputDialog QDialog
@@ -780,6 +781,8 @@
 PurgeProjectHelper HgExtensionProjectHelper
 PyBoardDevice MicroPythonDevice
 PyCoverageDialog QDialog Ui_PyCoverageDialog
+PyCoverageHtmlReportDialog QDialog Ui_PyCoverageHtmlReportDialog
+PyCoverageJsonReportDialog QDialog Ui_PyCoverageJsonReportDialog
 PyDocstringGenerator BaseDocstringGenerator
 PyFunctionInfo FunctionInfo
 PyProfile profile.Profile
@@ -792,6 +795,7 @@
 PyRegExpWizardWindow EricMainWindow
 PySvnProjectHelper VcsProjectHelper
 PypiSearchResultsParser html.parser.HTMLParser
+PytestExecutor TestExecutorBase
 PythonAstViewer QWidget
 PythonDisViewer QWidget Ui_PythonDisViewer
 PythonDisViewerModes enum.Enum
@@ -813,7 +817,6 @@
 QtHelpSchemeReply QIODevice
 QtPage ConfigurationPageBase Ui_QtPage
 QtResolver BaseResolver
-QtTestResult unittest.TestResult
 Queues HgExtension
 QueuesProjectHelper HgExtensionProjectHelper
 QuickFindFileDialog QWidget Ui_QuickFindFile
@@ -979,6 +982,13 @@
 TemplatesFile QObject
 TemplatesPage ConfigurationPageBase Ui_TemplatesPage
 TemplatesReader XMLStreamReaderBase
+TestExecutorBase QObject
+TestResultCategory IntEnum
+TestResultsModel QAbstractItemModel
+TestResultsTreeView QTreeView
+TestingWidget QWidget Ui_TestingWidget
+TestingWidgetModes enum.Enum
+TestingWindow EricMainWindow
 TextVisitor ast.NodeVisitor
 ThemeManager QObject
 ThreadWrapper module.Thread
@@ -1006,8 +1016,7 @@
 UMLItem QGraphicsRectItem
 UMLSceneSizeDialog QDialog Ui_UMLSceneSizeDialog
 UicCompilerOptionsDialog QDialog Ui_UicCompilerOptionsDialog
-UnittestDialog QWidget Ui_UnittestDialog
-UnittestWindow EricMainWindow
+UnittestExecutor TestExecutorBase
 UnknownDevicesDialog QDialog Ui_UnknownDevicesDialog
 UrlBar EricClearableLineEdit
 UrlInterceptor QObject
Binary file eric7/Documentation/Help/source.qch has changed
--- a/eric7/Documentation/Help/source.qhp	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Help/source.qhp	Mon May 23 18:15:10 2022 +0200
@@ -32,13 +32,14 @@
             <section title="eric7.DataViews.CodeMetrics" ref="eric7.DataViews.CodeMetrics.html" />
             <section title="eric7.DataViews.CodeMetricsDialog" ref="eric7.DataViews.CodeMetricsDialog.html" />
             <section title="eric7.DataViews.PyCoverageDialog" ref="eric7.DataViews.PyCoverageDialog.html" />
+            <section title="eric7.DataViews.PyCoverageHtmlReportDialog" ref="eric7.DataViews.PyCoverageHtmlReportDialog.html" />
+            <section title="eric7.DataViews.PyCoverageJsonReportDialog" ref="eric7.DataViews.PyCoverageJsonReportDialog.html" />
             <section title="eric7.DataViews.PyProfileDialog" ref="eric7.DataViews.PyProfileDialog.html" />
           </section>
           <section title="eric7.DebugClients" ref="index-eric7.DebugClients.html">
             <section title="eric7.DebugClients.Python" ref="index-eric7.DebugClients.Python.html">
               <section title="eric7.DebugClients.Python.AsyncFile" ref="eric7.DebugClients.Python.AsyncFile.html" />
               <section title="eric7.DebugClients.Python.BreakpointWatch" ref="eric7.DebugClients.Python.BreakpointWatch.html" />
-              <section title="eric7.DebugClients.Python.DCTestResult" ref="eric7.DebugClients.Python.DCTestResult.html" />
               <section title="eric7.DebugClients.Python.DebugBase" ref="eric7.DebugClients.Python.DebugBase.html" />
               <section title="eric7.DebugClients.Python.DebugClient" ref="eric7.DebugClients.Python.DebugClient.html" />
               <section title="eric7.DebugClients.Python.DebugClientBase" ref="eric7.DebugClients.Python.DebugClientBase.html" />
@@ -110,6 +111,8 @@
             <section title="eric7.EricNetwork.EricGoogleMailHelpers" ref="eric7.EricNetwork.EricGoogleMailHelpers.html" />
             <section title="eric7.EricNetwork.EricJsonClient" ref="eric7.EricNetwork.EricJsonClient.html" />
             <section title="eric7.EricNetwork.EricJsonServer" ref="eric7.EricNetwork.EricJsonServer.html" />
+            <section title="eric7.EricNetwork.EricJsonStreamReader" ref="eric7.EricNetwork.EricJsonStreamReader.html" />
+            <section title="eric7.EricNetwork.EricJsonStreamWriter" ref="eric7.EricNetwork.EricJsonStreamWriter.html" />
             <section title="eric7.EricNetwork.EricNetworkIcon" ref="eric7.EricNetwork.EricNetworkIcon.html" />
             <section title="eric7.EricNetwork.EricNetworkProxyFactory" ref="eric7.EricNetwork.EricNetworkProxyFactory.html" />
             <section title="eric7.EricNetwork.EricSslCertificateSelectionDialog" ref="eric7.EricNetwork.EricSslCertificateSelectionDialog.html" />
@@ -907,9 +910,6 @@
             <section title="eric7.Project.UserProjectFile" ref="eric7.Project.UserProjectFile.html" />
             <section title="eric7.Project.UserPropertiesDialog" ref="eric7.Project.UserPropertiesDialog.html" />
           </section>
-          <section title="eric7.PyUnit" ref="index-eric7.PyUnit.html">
-            <section title="eric7.PyUnit.UnittestDialog" ref="eric7.PyUnit.UnittestDialog.html" />
-          </section>
           <section title="eric7.QScintilla" ref="index-eric7.QScintilla.html">
             <section title="eric7.QScintilla.DocstringGenerator" ref="index-eric7.QScintilla.DocstringGenerator.html">
               <section title="eric7.QScintilla.DocstringGenerator.BaseDocstringGenerator" ref="eric7.QScintilla.DocstringGenerator.BaseDocstringGenerator.html" />
@@ -1045,6 +1045,19 @@
             <section title="eric7.Templates.TemplateViewer" ref="eric7.Templates.TemplateViewer.html" />
             <section title="eric7.Templates.TemplatesFile" ref="eric7.Templates.TemplatesFile.html" />
           </section>
+          <section title="eric7.Testing" ref="index-eric7.Testing.html">
+            <section title="eric7.Testing.Interfaces" ref="index-eric7.Testing.Interfaces.html">
+              <section title="eric7.Testing.Interfaces.PytestExecutor" ref="eric7.Testing.Interfaces.PytestExecutor.html" />
+              <section title="eric7.Testing.Interfaces.PytestRunner" ref="eric7.Testing.Interfaces.PytestRunner.html" />
+              <section title="eric7.Testing.Interfaces.TestExecutorBase" ref="eric7.Testing.Interfaces.TestExecutorBase.html" />
+              <section title="eric7.Testing.Interfaces.TestFrameworkRegistry" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html" />
+              <section title="eric7.Testing.Interfaces.UnittestExecutor" ref="eric7.Testing.Interfaces.UnittestExecutor.html" />
+              <section title="eric7.Testing.Interfaces.UnittestRunner" ref="eric7.Testing.Interfaces.UnittestRunner.html" />
+            </section>
+            <section title="eric7.Testing.TestResultsTree" ref="eric7.Testing.TestResultsTree.html" />
+            <section title="eric7.Testing.TestingWidget" ref="eric7.Testing.TestingWidget.html" />
+            <section title="eric7.Testing.__init__" ref="eric7.Testing.__init__.html" />
+          </section>
           <section title="eric7.Toolbox" ref="index-eric7.Toolbox.html">
             <section title="eric7.Toolbox.SingleApplication" ref="eric7.Toolbox.SingleApplication.html" />
             <section title="eric7.Toolbox.Startup" ref="eric7.Toolbox.Startup.html" />
@@ -1428,10 +1441,10 @@
           <section title="eric7.eric7_shell" ref="eric7.eric7_shell.html" />
           <section title="eric7.eric7_snap" ref="eric7.eric7_snap.html" />
           <section title="eric7.eric7_sqlbrowser" ref="eric7.eric7_sqlbrowser.html" />
+          <section title="eric7.eric7_testing" ref="eric7.eric7_testing.html" />
           <section title="eric7.eric7_tray" ref="eric7.eric7_tray.html" />
           <section title="eric7.eric7_trpreviewer" ref="eric7.eric7_trpreviewer.html" />
           <section title="eric7.eric7_uipreviewer" ref="eric7.eric7_uipreviewer.html" />
-          <section title="eric7.eric7_unittest" ref="eric7.eric7_unittest.html" />
           <section title="eric7.eric7_virtualenv" ref="eric7.eric7_virtualenv.html" />
           <section title="eric7.eric7config" ref="eric7.eric7config.html" />
         </section>
@@ -2285,7 +2298,7 @@
       <keyword name="Browser.handleInterpreterChanged" id="Browser.handleInterpreterChanged" ref="eric7.UI.Browser.html#Browser.handleInterpreterChanged" />
       <keyword name="Browser.handlePreferencesChanged" id="Browser.handlePreferencesChanged" ref="eric7.UI.Browser.html#Browser.handlePreferencesChanged" />
       <keyword name="Browser.handleProgramChange" id="Browser.handleProgramChange" ref="eric7.UI.Browser.html#Browser.handleProgramChange" />
-      <keyword name="Browser.handleUnittest" id="Browser.handleUnittest" ref="eric7.UI.Browser.html#Browser.handleUnittest" />
+      <keyword name="Browser.handleTesting" id="Browser.handleTesting" ref="eric7.UI.Browser.html#Browser.handleTesting" />
       <keyword name="Browser.keyboardSearch" id="Browser.keyboardSearch" ref="eric7.UI.Browser.html#Browser.keyboardSearch" />
       <keyword name="Browser.layoutDisplay" id="Browser.layoutDisplay" ref="eric7.UI.Browser.html#Browser.layoutDisplay" />
       <keyword name="Browser.mouseDoubleClickEvent" id="Browser.mouseDoubleClickEvent" ref="eric7.UI.Browser.html#Browser.mouseDoubleClickEvent" />
@@ -3274,17 +3287,6 @@
       <keyword name="CustomHelpFormatter._format_action" id="CustomHelpFormatter._format_action" ref="eric7.PipInterface.piplicenses.html#CustomHelpFormatter._format_action" />
       <keyword name="CustomHelpFormatter._split_lines" id="CustomHelpFormatter._split_lines" ref="eric7.PipInterface.piplicenses.html#CustomHelpFormatter._split_lines" />
       <keyword name="CustomNamespace" id="CustomNamespace" ref="eric7.PipInterface.piplicenses.html#CustomNamespace" />
-      <keyword name="DCTestResult" id="DCTestResult" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult" />
-      <keyword name="DCTestResult (Constructor)" id="DCTestResult (Constructor)" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult.__init__" />
-      <keyword name="DCTestResult (Module)" id="DCTestResult (Module)" ref="eric7.DebugClients.Python.DCTestResult.html" />
-      <keyword name="DCTestResult.addError" id="DCTestResult.addError" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult.addError" />
-      <keyword name="DCTestResult.addExpectedFailure" id="DCTestResult.addExpectedFailure" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult.addExpectedFailure" />
-      <keyword name="DCTestResult.addFailure" id="DCTestResult.addFailure" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult.addFailure" />
-      <keyword name="DCTestResult.addSkip" id="DCTestResult.addSkip" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult.addSkip" />
-      <keyword name="DCTestResult.addSubTest" id="DCTestResult.addSubTest" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult.addSubTest" />
-      <keyword name="DCTestResult.addUnexpectedSuccess" id="DCTestResult.addUnexpectedSuccess" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult.addUnexpectedSuccess" />
-      <keyword name="DCTestResult.startTest" id="DCTestResult.startTest" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult.startTest" />
-      <keyword name="DCTestResult.stopTest" id="DCTestResult.stopTest" ref="eric7.DebugClients.Python.DCTestResult.html#DCTestResult.stopTest" />
       <keyword name="DataViews (Package)" id="DataViews (Package)" ref="index-eric7.DataViews.html" />
       <keyword name="DateTimeVisitor" id="DateTimeVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#DateTimeVisitor" />
       <keyword name="DateTimeVisitor (Constructor)" id="DateTimeVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#DateTimeVisitor.__init__" />
@@ -3337,7 +3339,6 @@
       <keyword name="DebugClientBase" id="DebugClientBase" ref="eric7.DebugClients.Python.DebugClientBase.html#DebugClientBase" />
       <keyword name="DebugClientBase (Constructor)" id="DebugClientBase (Constructor)" ref="eric7.DebugClients.Python.DebugClientBase.html#DebugClientBase.__init__" />
       <keyword name="DebugClientBase (Module)" id="DebugClientBase (Module)" ref="eric7.DebugClients.Python.DebugClientBase.html" />
-      <keyword name="DebugClientBase.__assembleTestCasesList" id="DebugClientBase.__assembleTestCasesList" ref="eric7.DebugClients.Python.DebugClientBase.html#DebugClientBase.__assembleTestCasesList" />
       <keyword name="DebugClientBase.__clientCapabilities" id="DebugClientBase.__clientCapabilities" ref="eric7.DebugClients.Python.DebugClientBase.html#DebugClientBase.__clientCapabilities" />
       <keyword name="DebugClientBase.__compileCommand" id="DebugClientBase.__compileCommand" ref="eric7.DebugClients.Python.DebugClientBase.html#DebugClientBase.__compileCommand" />
       <keyword name="DebugClientBase.__compileFileSource" id="DebugClientBase.__compileFileSource" ref="eric7.DebugClients.Python.DebugClientBase.html#DebugClientBase.__compileFileSource" />
@@ -3421,16 +3422,6 @@
       <keyword name="DebugServer.__setClientType" id="DebugServer.__setClientType" ref="eric7.Debugger.DebugServer.html#DebugServer.__setClientType" />
       <keyword name="DebugServer.__splitWatchCondition" id="DebugServer.__splitWatchCondition" ref="eric7.Debugger.DebugServer.html#DebugServer.__splitWatchCondition" />
       <keyword name="DebugServer.__watchPointDataAboutToBeChanged" id="DebugServer.__watchPointDataAboutToBeChanged" ref="eric7.Debugger.DebugServer.html#DebugServer.__watchPointDataAboutToBeChanged" />
-      <keyword name="DebugServer.clientUtDiscovered" id="DebugServer.clientUtDiscovered" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtDiscovered" />
-      <keyword name="DebugServer.clientUtFinished" id="DebugServer.clientUtFinished" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtFinished" />
-      <keyword name="DebugServer.clientUtPrepared" id="DebugServer.clientUtPrepared" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtPrepared" />
-      <keyword name="DebugServer.clientUtStartTest" id="DebugServer.clientUtStartTest" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtStartTest" />
-      <keyword name="DebugServer.clientUtStopTest" id="DebugServer.clientUtStopTest" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtStopTest" />
-      <keyword name="DebugServer.clientUtTestErrored" id="DebugServer.clientUtTestErrored" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtTestErrored" />
-      <keyword name="DebugServer.clientUtTestFailed" id="DebugServer.clientUtTestFailed" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtTestFailed" />
-      <keyword name="DebugServer.clientUtTestFailedExpected" id="DebugServer.clientUtTestFailedExpected" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtTestFailedExpected" />
-      <keyword name="DebugServer.clientUtTestSkipped" id="DebugServer.clientUtTestSkipped" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtTestSkipped" />
-      <keyword name="DebugServer.clientUtTestSucceededUnexpected" id="DebugServer.clientUtTestSucceededUnexpected" ref="eric7.Debugger.DebugServer.html#DebugServer.clientUtTestSucceededUnexpected" />
       <keyword name="DebugServer.getBreakPointModel" id="DebugServer.getBreakPointModel" ref="eric7.Debugger.DebugServer.html#DebugServer.getBreakPointModel" />
       <keyword name="DebugServer.getClientCapabilities" id="DebugServer.getClientCapabilities" ref="eric7.Debugger.DebugServer.html#DebugServer.getClientCapabilities" />
       <keyword name="DebugServer.getClientInterpreter" id="DebugServer.getClientInterpreter" ref="eric7.Debugger.DebugServer.html#DebugServer.getClientInterpreter" />
@@ -3473,10 +3464,6 @@
       <keyword name="DebugServer.remoteStepOver" id="DebugServer.remoteStepOver" ref="eric7.Debugger.DebugServer.html#DebugServer.remoteStepOver" />
       <keyword name="DebugServer.remoteStepQuit" id="DebugServer.remoteStepQuit" ref="eric7.Debugger.DebugServer.html#DebugServer.remoteStepQuit" />
       <keyword name="DebugServer.remoteThreadList" id="DebugServer.remoteThreadList" ref="eric7.Debugger.DebugServer.html#DebugServer.remoteThreadList" />
-      <keyword name="DebugServer.remoteUTDiscover" id="DebugServer.remoteUTDiscover" ref="eric7.Debugger.DebugServer.html#DebugServer.remoteUTDiscover" />
-      <keyword name="DebugServer.remoteUTPrepare" id="DebugServer.remoteUTPrepare" ref="eric7.Debugger.DebugServer.html#DebugServer.remoteUTPrepare" />
-      <keyword name="DebugServer.remoteUTRun" id="DebugServer.remoteUTRun" ref="eric7.Debugger.DebugServer.html#DebugServer.remoteUTRun" />
-      <keyword name="DebugServer.remoteUTStop" id="DebugServer.remoteUTStop" ref="eric7.Debugger.DebugServer.html#DebugServer.remoteUTStop" />
       <keyword name="DebugServer.setCallTraceEnabled" id="DebugServer.setCallTraceEnabled" ref="eric7.Debugger.DebugServer.html#DebugServer.setCallTraceEnabled" />
       <keyword name="DebugServer.setDebugging" id="DebugServer.setDebugging" ref="eric7.Debugger.DebugServer.html#DebugServer.setDebugging" />
       <keyword name="DebugServer.shutdownServer" id="DebugServer.shutdownServer" ref="eric7.Debugger.DebugServer.html#DebugServer.shutdownServer" />
@@ -3679,10 +3666,6 @@
       <keyword name="DebuggerInterfaceNone.remoteStepOver" id="DebuggerInterfaceNone.remoteStepOver" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteStepOver" />
       <keyword name="DebuggerInterfaceNone.remoteStepQuit" id="DebuggerInterfaceNone.remoteStepQuit" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteStepQuit" />
       <keyword name="DebuggerInterfaceNone.remoteThreadList" id="DebuggerInterfaceNone.remoteThreadList" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteThreadList" />
-      <keyword name="DebuggerInterfaceNone.remoteUTDiscover" id="DebuggerInterfaceNone.remoteUTDiscover" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteUTDiscover" />
-      <keyword name="DebuggerInterfaceNone.remoteUTPrepare" id="DebuggerInterfaceNone.remoteUTPrepare" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteUTPrepare" />
-      <keyword name="DebuggerInterfaceNone.remoteUTRun" id="DebuggerInterfaceNone.remoteUTRun" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteUTRun" />
-      <keyword name="DebuggerInterfaceNone.remoteUTStop" id="DebuggerInterfaceNone.remoteUTStop" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteUTStop" />
       <keyword name="DebuggerInterfaceNone.remoteWatchpoint" id="DebuggerInterfaceNone.remoteWatchpoint" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteWatchpoint" />
       <keyword name="DebuggerInterfaceNone.remoteWatchpointEnable" id="DebuggerInterfaceNone.remoteWatchpointEnable" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteWatchpointEnable" />
       <keyword name="DebuggerInterfaceNone.remoteWatchpointIgnore" id="DebuggerInterfaceNone.remoteWatchpointIgnore" ref="eric7.Debugger.DebuggerInterfaceNone.html#DebuggerInterfaceNone.remoteWatchpointIgnore" />
@@ -3736,10 +3719,6 @@
       <keyword name="DebuggerInterfacePython.remoteStepOver" id="DebuggerInterfacePython.remoteStepOver" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteStepOver" />
       <keyword name="DebuggerInterfacePython.remoteStepQuit" id="DebuggerInterfacePython.remoteStepQuit" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteStepQuit" />
       <keyword name="DebuggerInterfacePython.remoteThreadList" id="DebuggerInterfacePython.remoteThreadList" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteThreadList" />
-      <keyword name="DebuggerInterfacePython.remoteUTDiscover" id="DebuggerInterfacePython.remoteUTDiscover" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteUTDiscover" />
-      <keyword name="DebuggerInterfacePython.remoteUTPrepare" id="DebuggerInterfacePython.remoteUTPrepare" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteUTPrepare" />
-      <keyword name="DebuggerInterfacePython.remoteUTRun" id="DebuggerInterfacePython.remoteUTRun" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteUTRun" />
-      <keyword name="DebuggerInterfacePython.remoteUTStop" id="DebuggerInterfacePython.remoteUTStop" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteUTStop" />
       <keyword name="DebuggerInterfacePython.remoteWatchpoint" id="DebuggerInterfacePython.remoteWatchpoint" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteWatchpoint" />
       <keyword name="DebuggerInterfacePython.remoteWatchpointEnable" id="DebuggerInterfacePython.remoteWatchpointEnable" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteWatchpointEnable" />
       <keyword name="DebuggerInterfacePython.remoteWatchpointIgnore" id="DebuggerInterfacePython.remoteWatchpointIgnore" ref="eric7.Debugger.DebuggerInterfacePython.html#DebuggerInterfacePython.remoteWatchpointIgnore" />
@@ -5005,6 +4984,13 @@
       <keyword name="EricJsonClient.poll" id="EricJsonClient.poll" ref="eric7.EricNetwork.EricJsonClient.html#EricJsonClient.poll" />
       <keyword name="EricJsonClient.run" id="EricJsonClient.run" ref="eric7.EricNetwork.EricJsonClient.html#EricJsonClient.run" />
       <keyword name="EricJsonClient.sendJson" id="EricJsonClient.sendJson" ref="eric7.EricNetwork.EricJsonClient.html#EricJsonClient.sendJson" />
+      <keyword name="EricJsonReader" id="EricJsonReader" ref="eric7.EricNetwork.EricJsonStreamReader.html#EricJsonReader" />
+      <keyword name="EricJsonReader (Constructor)" id="EricJsonReader (Constructor)" ref="eric7.EricNetwork.EricJsonStreamReader.html#EricJsonReader.__init__" />
+      <keyword name="EricJsonReader.__handleDisconnect" id="EricJsonReader.__handleDisconnect" ref="eric7.EricNetwork.EricJsonStreamReader.html#EricJsonReader.__handleDisconnect" />
+      <keyword name="EricJsonReader.__receiveJson" id="EricJsonReader.__receiveJson" ref="eric7.EricNetwork.EricJsonStreamReader.html#EricJsonReader.__receiveJson" />
+      <keyword name="EricJsonReader.address" id="EricJsonReader.address" ref="eric7.EricNetwork.EricJsonStreamReader.html#EricJsonReader.address" />
+      <keyword name="EricJsonReader.handleNewConnection" id="EricJsonReader.handleNewConnection" ref="eric7.EricNetwork.EricJsonStreamReader.html#EricJsonReader.handleNewConnection" />
+      <keyword name="EricJsonReader.port" id="EricJsonReader.port" ref="eric7.EricNetwork.EricJsonStreamReader.html#EricJsonReader.port" />
       <keyword name="EricJsonServer" id="EricJsonServer" ref="eric7.EricNetwork.EricJsonServer.html#EricJsonServer" />
       <keyword name="EricJsonServer (Constructor)" id="EricJsonServer (Constructor)" ref="eric7.EricNetwork.EricJsonServer.html#EricJsonServer.__init__" />
       <keyword name="EricJsonServer (Module)" id="EricJsonServer (Module)" ref="eric7.EricNetwork.EricJsonServer.html" />
@@ -5017,6 +5003,12 @@
       <keyword name="EricJsonServer.startClient" id="EricJsonServer.startClient" ref="eric7.EricNetwork.EricJsonServer.html#EricJsonServer.startClient" />
       <keyword name="EricJsonServer.stopAllClients" id="EricJsonServer.stopAllClients" ref="eric7.EricNetwork.EricJsonServer.html#EricJsonServer.stopAllClients" />
       <keyword name="EricJsonServer.stopClient" id="EricJsonServer.stopClient" ref="eric7.EricNetwork.EricJsonServer.html#EricJsonServer.stopClient" />
+      <keyword name="EricJsonStreamReader (Module)" id="EricJsonStreamReader (Module)" ref="eric7.EricNetwork.EricJsonStreamReader.html" />
+      <keyword name="EricJsonStreamWriter (Module)" id="EricJsonStreamWriter (Module)" ref="eric7.EricNetwork.EricJsonStreamWriter.html" />
+      <keyword name="EricJsonWriter" id="EricJsonWriter" ref="eric7.EricNetwork.EricJsonStreamWriter.html#EricJsonWriter" />
+      <keyword name="EricJsonWriter (Constructor)" id="EricJsonWriter (Constructor)" ref="eric7.EricNetwork.EricJsonStreamWriter.html#EricJsonWriter.__init__" />
+      <keyword name="EricJsonWriter.close" id="EricJsonWriter.close" ref="eric7.EricNetwork.EricJsonStreamWriter.html#EricJsonWriter.close" />
+      <keyword name="EricJsonWriter.write" id="EricJsonWriter.write" ref="eric7.EricNetwork.EricJsonStreamWriter.html#EricJsonWriter.write" />
       <keyword name="EricLed" id="EricLed" ref="eric7.EricWidgets.EricLed.html#EricLed" />
       <keyword name="EricLed (Constructor)" id="EricLed (Constructor)" ref="eric7.EricWidgets.EricLed.html#EricLed.__init__" />
       <keyword name="EricLed (Module)" id="EricLed (Module)" ref="eric7.EricWidgets.EricLed.html" />
@@ -5305,6 +5297,18 @@
       <keyword name="EricPlainTextDialog (Constructor)" id="EricPlainTextDialog (Constructor)" ref="eric7.EricWidgets.EricPlainTextDialog.html#EricPlainTextDialog.__init__" />
       <keyword name="EricPlainTextDialog (Module)" id="EricPlainTextDialog (Module)" ref="eric7.EricWidgets.EricPlainTextDialog.html" />
       <keyword name="EricPlainTextDialog.on_copyButton_clicked" id="EricPlainTextDialog.on_copyButton_clicked" ref="eric7.EricWidgets.EricPlainTextDialog.html#EricPlainTextDialog.on_copyButton_clicked" />
+      <keyword name="EricPlainTextDialog.toPlainText" id="EricPlainTextDialog.toPlainText" ref="eric7.EricWidgets.EricPlainTextDialog.html#EricPlainTextDialog.toPlainText" />
+      <keyword name="EricPlugin" id="EricPlugin" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin" />
+      <keyword name="EricPlugin (Constructor)" id="EricPlugin (Constructor)" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.__init__" />
+      <keyword name="EricPlugin.__initializeReportData" id="EricPlugin.__initializeReportData" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.__initializeReportData" />
+      <keyword name="EricPlugin.pytest_collectreport" id="EricPlugin.pytest_collectreport" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.pytest_collectreport" />
+      <keyword name="EricPlugin.pytest_itemcollected" id="EricPlugin.pytest_itemcollected" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.pytest_itemcollected" />
+      <keyword name="EricPlugin.pytest_report_header" id="EricPlugin.pytest_report_header" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.pytest_report_header" />
+      <keyword name="EricPlugin.pytest_runtest_logfinish" id="EricPlugin.pytest_runtest_logfinish" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.pytest_runtest_logfinish" />
+      <keyword name="EricPlugin.pytest_runtest_logreport" id="EricPlugin.pytest_runtest_logreport" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.pytest_runtest_logreport" />
+      <keyword name="EricPlugin.pytest_runtest_logstart" id="EricPlugin.pytest_runtest_logstart" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.pytest_runtest_logstart" />
+      <keyword name="EricPlugin.pytest_sessionfinish" id="EricPlugin.pytest_sessionfinish" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.pytest_sessionfinish" />
+      <keyword name="EricPlugin.pytest_sessionstart" id="EricPlugin.pytest_sessionstart" ref="eric7.Testing.Interfaces.PytestRunner.html#EricPlugin.pytest_sessionstart" />
       <keyword name="EricPluginWizard (Package)" id="EricPluginWizard (Package)" ref="index-eric7.Plugins.WizardPlugins.EricPluginWizard.html" />
       <keyword name="EricProcessDialog" id="EricProcessDialog" ref="eric7.EricWidgets.EricProcessDialog.html#EricProcessDialog" />
       <keyword name="EricProcessDialog (Constructor)" id="EricProcessDialog (Constructor)" ref="eric7.EricWidgets.EricProcessDialog.html#EricProcessDialog.__init__" />
@@ -5497,6 +5501,18 @@
       <keyword name="EricTableView.keyPressEvent" id="EricTableView.keyPressEvent" ref="eric7.EricWidgets.EricTableView.html#EricTableView.keyPressEvent" />
       <keyword name="EricTableView.removeAll" id="EricTableView.removeAll" ref="eric7.EricWidgets.EricTableView.html#EricTableView.removeAll" />
       <keyword name="EricTableView.removeSelected" id="EricTableView.removeSelected" ref="eric7.EricWidgets.EricTableView.html#EricTableView.removeSelected" />
+      <keyword name="EricTestResult" id="EricTestResult" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult" />
+      <keyword name="EricTestResult (Constructor)" id="EricTestResult (Constructor)" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.__init__" />
+      <keyword name="EricTestResult.addError" id="EricTestResult.addError" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.addError" />
+      <keyword name="EricTestResult.addExpectedFailure" id="EricTestResult.addExpectedFailure" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.addExpectedFailure" />
+      <keyword name="EricTestResult.addFailure" id="EricTestResult.addFailure" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.addFailure" />
+      <keyword name="EricTestResult.addSkip" id="EricTestResult.addSkip" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.addSkip" />
+      <keyword name="EricTestResult.addSubTest" id="EricTestResult.addSubTest" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.addSubTest" />
+      <keyword name="EricTestResult.addUnexpectedSuccess" id="EricTestResult.addUnexpectedSuccess" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.addUnexpectedSuccess" />
+      <keyword name="EricTestResult.startTest" id="EricTestResult.startTest" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.startTest" />
+      <keyword name="EricTestResult.startTestRun" id="EricTestResult.startTestRun" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.startTestRun" />
+      <keyword name="EricTestResult.stopTest" id="EricTestResult.stopTest" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.stopTest" />
+      <keyword name="EricTestResult.stopTestRun" id="EricTestResult.stopTestRun" ref="eric7.Testing.Interfaces.UnittestRunner.html#EricTestResult.stopTestRun" />
       <keyword name="EricTextEditSearchWidget" id="EricTextEditSearchWidget" ref="eric7.EricWidgets.EricTextEditSearchWidget.html#EricTextEditSearchWidget" />
       <keyword name="EricTextEditSearchWidget (Constructor)" id="EricTextEditSearchWidget (Constructor)" ref="eric7.EricWidgets.EricTextEditSearchWidget.html#EricTextEditSearchWidget.__init__" />
       <keyword name="EricTextEditSearchWidget (Module)" id="EricTextEditSearchWidget (Module)" ref="eric7.EricWidgets.EricTextEditSearchWidget.html" />
@@ -6193,6 +6209,10 @@
       <keyword name="GenericMicroPythonDevice.setButtons" id="GenericMicroPythonDevice.setButtons" ref="eric7.MicroPython.GenericMicroPythonDevices.html#GenericMicroPythonDevice.setButtons" />
       <keyword name="GenericMicroPythonDevice.supportsLocalFileAccess" id="GenericMicroPythonDevice.supportsLocalFileAccess" ref="eric7.MicroPython.GenericMicroPythonDevices.html#GenericMicroPythonDevice.supportsLocalFileAccess" />
       <keyword name="GenericMicroPythonDevices (Module)" id="GenericMicroPythonDevices (Module)" ref="eric7.MicroPython.GenericMicroPythonDevices.html" />
+      <keyword name="GetPluginVersionsPlugin" id="GetPluginVersionsPlugin" ref="eric7.Testing.Interfaces.PytestRunner.html#GetPluginVersionsPlugin" />
+      <keyword name="GetPluginVersionsPlugin (Constructor)" id="GetPluginVersionsPlugin (Constructor)" ref="eric7.Testing.Interfaces.PytestRunner.html#GetPluginVersionsPlugin.__init__" />
+      <keyword name="GetPluginVersionsPlugin.getVersions" id="GetPluginVersionsPlugin.getVersions" ref="eric7.Testing.Interfaces.PytestRunner.html#GetPluginVersionsPlugin.getVersions" />
+      <keyword name="GetPluginVersionsPlugin.pytest_cmdline_main" id="GetPluginVersionsPlugin.pytest_cmdline_main" ref="eric7.Testing.Interfaces.PytestRunner.html#GetPluginVersionsPlugin.pytest_cmdline_main" />
       <keyword name="GetSysPath (Module)" id="GetSysPath (Module)" ref="eric7.Utilities.GetSysPath.html" />
       <keyword name="Git" id="Git" ref="eric7.Plugins.VcsPlugins.vcsGit.git.html#Git" />
       <keyword name="Git (Constructor)" id="Git (Constructor)" ref="eric7.Plugins.VcsPlugins.vcsGit.git.html#Git.__init__" />
@@ -9116,10 +9136,10 @@
       <keyword name="InputDialogWizardDialog" id="InputDialogWizardDialog" ref="eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html#InputDialogWizardDialog" />
       <keyword name="InputDialogWizardDialog (Constructor)" id="InputDialogWizardDialog (Constructor)" ref="eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html#InputDialogWizardDialog.__init__" />
       <keyword name="InputDialogWizardDialog (Module)" id="InputDialogWizardDialog (Module)" ref="eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html" />
+      <keyword name="InputDialogWizardDialog.__typeSelectButtonToggled" id="InputDialogWizardDialog.__typeSelectButtonToggled" ref="eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html#InputDialogWizardDialog.__typeSelectButtonToggled" />
       <keyword name="InputDialogWizardDialog.getCode" id="InputDialogWizardDialog.getCode" ref="eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html#InputDialogWizardDialog.getCode" />
       <keyword name="InputDialogWizardDialog.on_bTest_clicked" id="InputDialogWizardDialog.on_bTest_clicked" ref="eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html#InputDialogWizardDialog.on_bTest_clicked" />
       <keyword name="InputDialogWizardDialog.on_buttonBox_clicked" id="InputDialogWizardDialog.on_buttonBox_clicked" ref="eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html#InputDialogWizardDialog.on_buttonBox_clicked" />
-      <keyword name="InputDialogWizardDialog.on_rItem_toggled" id="InputDialogWizardDialog.on_rItem_toggled" ref="eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html#InputDialogWizardDialog.on_rItem_toggled" />
       <keyword name="InsertBookmarksCommand" id="InsertBookmarksCommand" ref="eric7.WebBrowser.Bookmarks.BookmarksManager.html#InsertBookmarksCommand" />
       <keyword name="InsertBookmarksCommand (Constructor)" id="InsertBookmarksCommand (Constructor)" ref="eric7.WebBrowser.Bookmarks.BookmarksManager.html#InsertBookmarksCommand.__init__" />
       <keyword name="InsertBookmarksCommand.redo" id="InsertBookmarksCommand.redo" ref="eric7.WebBrowser.Bookmarks.BookmarksManager.html#InsertBookmarksCommand.redo" />
@@ -9152,6 +9172,7 @@
       <keyword name="InterfacePage.on_iconBarButton_clicked" id="InterfacePage.on_iconBarButton_clicked" ref="eric7.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.on_iconBarButton_clicked" />
       <keyword name="InterfacePage.on_resetLayoutButton_clicked" id="InterfacePage.on_resetLayoutButton_clicked" ref="eric7.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.on_resetLayoutButton_clicked" />
       <keyword name="InterfacePage.save" id="InterfacePage.save" ref="eric7.Preferences.ConfigurationPages.InterfacePage.html#InterfacePage.save" />
+      <keyword name="Interfaces (Package)" id="Interfaces (Package)" ref="index-eric7.Testing.Interfaces.html" />
       <keyword name="InvalidModulePath" id="InvalidModulePath" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.html#InvalidModulePath" />
       <keyword name="IrcChannel" id="IrcChannel" ref="eric7.Network.IRC.IrcNetworkManager.html#IrcChannel" />
       <keyword name="IrcChannel (Constructor)" id="IrcChannel (Constructor)" ref="eric7.Network.IRC.IrcNetworkManager.html#IrcChannel.__init__" />
@@ -11923,15 +11944,19 @@
       <keyword name="Project.getProjectAuthorEmail" id="Project.getProjectAuthorEmail" ref="eric7.Project.Project.html#Project.getProjectAuthorEmail" />
       <keyword name="Project.getProjectDescription" id="Project.getProjectDescription" ref="eric7.Project.Project.html#Project.getProjectDescription" />
       <keyword name="Project.getProjectDictionaries" id="Project.getProjectDictionaries" ref="eric7.Project.Project.html#Project.getProjectDictionaries" />
+      <keyword name="Project.getProjectExecPath" id="Project.getProjectExecPath" ref="eric7.Project.Project.html#Project.getProjectExecPath" />
       <keyword name="Project.getProjectFile" id="Project.getProjectFile" ref="eric7.Project.Project.html#Project.getProjectFile" />
       <keyword name="Project.getProjectFiles" id="Project.getProjectFiles" ref="eric7.Project.Project.html#Project.getProjectFiles" />
+      <keyword name="Project.getProjectInterpreter" id="Project.getProjectInterpreter" ref="eric7.Project.Project.html#Project.getProjectInterpreter" />
       <keyword name="Project.getProjectLanguage" id="Project.getProjectLanguage" ref="eric7.Project.Project.html#Project.getProjectLanguage" />
       <keyword name="Project.getProjectManagementDir" id="Project.getProjectManagementDir" ref="eric7.Project.Project.html#Project.getProjectManagementDir" />
       <keyword name="Project.getProjectName" id="Project.getProjectName" ref="eric7.Project.Project.html#Project.getProjectName" />
       <keyword name="Project.getProjectPath" id="Project.getProjectPath" ref="eric7.Project.Project.html#Project.getProjectPath" />
       <keyword name="Project.getProjectSpellLanguage" id="Project.getProjectSpellLanguage" ref="eric7.Project.Project.html#Project.getProjectSpellLanguage" />
+      <keyword name="Project.getProjectTestingFramework" id="Project.getProjectTestingFramework" ref="eric7.Project.Project.html#Project.getProjectTestingFramework" />
       <keyword name="Project.getProjectType" id="Project.getProjectType" ref="eric7.Project.Project.html#Project.getProjectType" />
       <keyword name="Project.getProjectTypes" id="Project.getProjectTypes" ref="eric7.Project.Project.html#Project.getProjectTypes" />
+      <keyword name="Project.getProjectVenv" id="Project.getProjectVenv" ref="eric7.Project.Project.html#Project.getProjectVenv" />
       <keyword name="Project.getProjectVersion" id="Project.getProjectVersion" ref="eric7.Project.Project.html#Project.getProjectVersion" />
       <keyword name="Project.getRelativePath" id="Project.getRelativePath" ref="eric7.Project.Project.html#Project.getRelativePath" />
       <keyword name="Project.getRelativeUniversalPath" id="Project.getRelativeUniversalPath" ref="eric7.Project.Project.html#Project.getRelativeUniversalPath" />
@@ -12384,7 +12409,7 @@
       <keyword name="PropertiesDialog.getPPath" id="PropertiesDialog.getPPath" ref="eric7.Project.PropertiesDialog.html#PropertiesDialog.getPPath" />
       <keyword name="PropertiesDialog.getProjectType" id="PropertiesDialog.getProjectType" ref="eric7.Project.PropertiesDialog.html#PropertiesDialog.getProjectType" />
       <keyword name="PropertiesDialog.on_dirPicker_textChanged" id="PropertiesDialog.on_dirPicker_textChanged" ref="eric7.Project.PropertiesDialog.html#PropertiesDialog.on_dirPicker_textChanged" />
-      <keyword name="PropertiesDialog.on_languageComboBox_currentIndexChanged" id="PropertiesDialog.on_languageComboBox_currentIndexChanged" ref="eric7.Project.PropertiesDialog.html#PropertiesDialog.on_languageComboBox_currentIndexChanged" />
+      <keyword name="PropertiesDialog.on_languageComboBox_currentTextChanged" id="PropertiesDialog.on_languageComboBox_currentTextChanged" ref="eric7.Project.PropertiesDialog.html#PropertiesDialog.on_languageComboBox_currentTextChanged" />
       <keyword name="PropertiesDialog.on_mainscriptPicker_aboutToShowPathPickerDialog" id="PropertiesDialog.on_mainscriptPicker_aboutToShowPathPickerDialog" ref="eric7.Project.PropertiesDialog.html#PropertiesDialog.on_mainscriptPicker_aboutToShowPathPickerDialog" />
       <keyword name="PropertiesDialog.on_mainscriptPicker_pathSelected" id="PropertiesDialog.on_mainscriptPicker_pathSelected" ref="eric7.Project.PropertiesDialog.html#PropertiesDialog.on_mainscriptPicker_pathSelected" />
       <keyword name="PropertiesDialog.on_makeButton_clicked" id="PropertiesDialog.on_makeButton_clicked" ref="eric7.Project.PropertiesDialog.html#PropertiesDialog.on_makeButton_clicked" />
@@ -12462,20 +12487,31 @@
       <keyword name="PyCoverageDialog" id="PyCoverageDialog" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog" />
       <keyword name="PyCoverageDialog (Constructor)" id="PyCoverageDialog (Constructor)" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__init__" />
       <keyword name="PyCoverageDialog (Module)" id="PyCoverageDialog (Module)" ref="eric7.DataViews.PyCoverageDialog.html" />
-      <keyword name="PyCoverageDialog.__annotate" id="PyCoverageDialog.__annotate" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__annotate" />
-      <keyword name="PyCoverageDialog.__annotateAll" id="PyCoverageDialog.__annotateAll" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__annotateAll" />
       <keyword name="PyCoverageDialog.__createResultItem" id="PyCoverageDialog.__createResultItem" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__createResultItem" />
-      <keyword name="PyCoverageDialog.__deleteAnnotated" id="PyCoverageDialog.__deleteAnnotated" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__deleteAnnotated" />
       <keyword name="PyCoverageDialog.__erase" id="PyCoverageDialog.__erase" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__erase" />
       <keyword name="PyCoverageDialog.__finish" id="PyCoverageDialog.__finish" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__finish" />
       <keyword name="PyCoverageDialog.__format_lines" id="PyCoverageDialog.__format_lines" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__format_lines" />
+      <keyword name="PyCoverageDialog.__htmlReport" id="PyCoverageDialog.__htmlReport" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__htmlReport" />
+      <keyword name="PyCoverageDialog.__jsonReport" id="PyCoverageDialog.__jsonReport" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__jsonReport" />
+      <keyword name="PyCoverageDialog.__lcovReport" id="PyCoverageDialog.__lcovReport" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__lcovReport" />
       <keyword name="PyCoverageDialog.__openFile" id="PyCoverageDialog.__openFile" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__openFile" />
+      <keyword name="PyCoverageDialog.__prepareReportGeneration" id="PyCoverageDialog.__prepareReportGeneration" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__prepareReportGeneration" />
       <keyword name="PyCoverageDialog.__showContextMenu" id="PyCoverageDialog.__showContextMenu" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.__showContextMenu" />
       <keyword name="PyCoverageDialog.on_buttonBox_clicked" id="PyCoverageDialog.on_buttonBox_clicked" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.on_buttonBox_clicked" />
       <keyword name="PyCoverageDialog.on_reloadButton_clicked" id="PyCoverageDialog.on_reloadButton_clicked" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.on_reloadButton_clicked" />
       <keyword name="PyCoverageDialog.on_resultList_itemActivated" id="PyCoverageDialog.on_resultList_itemActivated" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.on_resultList_itemActivated" />
       <keyword name="PyCoverageDialog.start" id="PyCoverageDialog.start" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.start" />
       <keyword name="PyCoverageDialog.stringify" id="PyCoverageDialog.stringify" ref="eric7.DataViews.PyCoverageDialog.html#PyCoverageDialog.stringify" />
+      <keyword name="PyCoverageHtmlReportDialog" id="PyCoverageHtmlReportDialog" ref="eric7.DataViews.PyCoverageHtmlReportDialog.html#PyCoverageHtmlReportDialog" />
+      <keyword name="PyCoverageHtmlReportDialog (Constructor)" id="PyCoverageHtmlReportDialog (Constructor)" ref="eric7.DataViews.PyCoverageHtmlReportDialog.html#PyCoverageHtmlReportDialog.__init__" />
+      <keyword name="PyCoverageHtmlReportDialog (Module)" id="PyCoverageHtmlReportDialog (Module)" ref="eric7.DataViews.PyCoverageHtmlReportDialog.html" />
+      <keyword name="PyCoverageHtmlReportDialog.getData" id="PyCoverageHtmlReportDialog.getData" ref="eric7.DataViews.PyCoverageHtmlReportDialog.html#PyCoverageHtmlReportDialog.getData" />
+      <keyword name="PyCoverageHtmlReportDialog.on_outputDirectoryPicker_textChanged" id="PyCoverageHtmlReportDialog.on_outputDirectoryPicker_textChanged" ref="eric7.DataViews.PyCoverageHtmlReportDialog.html#PyCoverageHtmlReportDialog.on_outputDirectoryPicker_textChanged" />
+      <keyword name="PyCoverageJsonReportDialog" id="PyCoverageJsonReportDialog" ref="eric7.DataViews.PyCoverageJsonReportDialog.html#PyCoverageJsonReportDialog" />
+      <keyword name="PyCoverageJsonReportDialog (Constructor)" id="PyCoverageJsonReportDialog (Constructor)" ref="eric7.DataViews.PyCoverageJsonReportDialog.html#PyCoverageJsonReportDialog.__init__" />
+      <keyword name="PyCoverageJsonReportDialog (Module)" id="PyCoverageJsonReportDialog (Module)" ref="eric7.DataViews.PyCoverageJsonReportDialog.html" />
+      <keyword name="PyCoverageJsonReportDialog.getData" id="PyCoverageJsonReportDialog.getData" ref="eric7.DataViews.PyCoverageJsonReportDialog.html#PyCoverageJsonReportDialog.getData" />
+      <keyword name="PyCoverageJsonReportDialog.on_outputFilePicker_textChanged" id="PyCoverageJsonReportDialog.on_outputFilePicker_textChanged" ref="eric7.DataViews.PyCoverageJsonReportDialog.html#PyCoverageJsonReportDialog.on_outputFilePicker_textChanged" />
       <keyword name="PyDocstringGenerator" id="PyDocstringGenerator" ref="eric7.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator" />
       <keyword name="PyDocstringGenerator (Constructor)" id="PyDocstringGenerator (Constructor)" ref="eric7.QScintilla.DocstringGenerator.PyDocstringGenerator.html#PyDocstringGenerator.__init__" />
       <keyword name="PyDocstringGenerator (Module)" id="PyDocstringGenerator (Module)" ref="eric7.QScintilla.DocstringGenerator.PyDocstringGenerator.html" />
@@ -12610,7 +12646,6 @@
       <keyword name="PySvnProjectHelper.initMenu" id="PySvnProjectHelper.initMenu" ref="eric7.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.html#PySvnProjectHelper.initMenu" />
       <keyword name="PySvnProjectHelper.initToolbar" id="PySvnProjectHelper.initToolbar" ref="eric7.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.html#PySvnProjectHelper.initToolbar" />
       <keyword name="PySvnProjectHelper.removeToolbar" id="PySvnProjectHelper.removeToolbar" ref="eric7.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.html#PySvnProjectHelper.removeToolbar" />
-      <keyword name="PyUnit (Package)" id="PyUnit (Package)" ref="index-eric7.PyUnit.html" />
       <keyword name="PypiSearchResultsParser" id="PypiSearchResultsParser" ref="eric7.PipInterface.PipPackagesWidget.html#PypiSearchResultsParser" />
       <keyword name="PypiSearchResultsParser (Constructor)" id="PypiSearchResultsParser (Constructor)" ref="eric7.PipInterface.PipPackagesWidget.html#PypiSearchResultsParser.__init__" />
       <keyword name="PypiSearchResultsParser.__getClass" id="PypiSearchResultsParser.__getClass" ref="eric7.PipInterface.PipPackagesWidget.html#PypiSearchResultsParser.__getClass" />
@@ -12619,6 +12654,18 @@
       <keyword name="PypiSearchResultsParser.handle_data" id="PypiSearchResultsParser.handle_data" ref="eric7.PipInterface.PipPackagesWidget.html#PypiSearchResultsParser.handle_data" />
       <keyword name="PypiSearchResultsParser.handle_endtag" id="PypiSearchResultsParser.handle_endtag" ref="eric7.PipInterface.PipPackagesWidget.html#PypiSearchResultsParser.handle_endtag" />
       <keyword name="PypiSearchResultsParser.handle_starttag" id="PypiSearchResultsParser.handle_starttag" ref="eric7.PipInterface.PipPackagesWidget.html#PypiSearchResultsParser.handle_starttag" />
+      <keyword name="PytestExecutor" id="PytestExecutor" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor" />
+      <keyword name="PytestExecutor (Constructor)" id="PytestExecutor (Constructor)" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.__init__" />
+      <keyword name="PytestExecutor (Module)" id="PytestExecutor (Module)" ref="eric7.Testing.Interfaces.PytestExecutor.html" />
+      <keyword name="PytestExecutor.__nodeid2testname" id="PytestExecutor.__nodeid2testname" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.__nodeid2testname" />
+      <keyword name="PytestExecutor.__normalizeModuleName" id="PytestExecutor.__normalizeModuleName" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.__normalizeModuleName" />
+      <keyword name="PytestExecutor.__processData" id="PytestExecutor.__processData" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.__processData" />
+      <keyword name="PytestExecutor.createArguments" id="PytestExecutor.createArguments" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.createArguments" />
+      <keyword name="PytestExecutor.finished" id="PytestExecutor.finished" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.finished" />
+      <keyword name="PytestExecutor.getVersions" id="PytestExecutor.getVersions" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.getVersions" />
+      <keyword name="PytestExecutor.hasCoverage" id="PytestExecutor.hasCoverage" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.hasCoverage" />
+      <keyword name="PytestExecutor.start" id="PytestExecutor.start" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.start" />
+      <keyword name="PytestRunner (Module)" id="PytestRunner (Module)" ref="eric7.Testing.Interfaces.PytestRunner.html" />
       <keyword name="Python (Package)" id="Python (Package)" ref="index-eric7.DebugClients.Python.html" />
       <keyword name="PythonAstViewer" id="PythonAstViewer" ref="eric7.UI.PythonAstViewer.html#PythonAstViewer" />
       <keyword name="PythonAstViewer (Constructor)" id="PythonAstViewer (Constructor)" ref="eric7.UI.PythonAstViewer.html#PythonAstViewer.__init__" />
@@ -12970,16 +13017,6 @@
       <keyword name="QtResolver" id="QtResolver" ref="eric7.DebugClients.Python.DebugVariables.html#QtResolver" />
       <keyword name="QtResolver.getVariableList" id="QtResolver.getVariableList" ref="eric7.DebugClients.Python.DebugVariables.html#QtResolver.getVariableList" />
       <keyword name="QtResolver.resolve" id="QtResolver.resolve" ref="eric7.DebugClients.Python.DebugVariables.html#QtResolver.resolve" />
-      <keyword name="QtTestResult" id="QtTestResult" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult" />
-      <keyword name="QtTestResult (Constructor)" id="QtTestResult (Constructor)" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult.__init__" />
-      <keyword name="QtTestResult.addError" id="QtTestResult.addError" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult.addError" />
-      <keyword name="QtTestResult.addExpectedFailure" id="QtTestResult.addExpectedFailure" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult.addExpectedFailure" />
-      <keyword name="QtTestResult.addFailure" id="QtTestResult.addFailure" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult.addFailure" />
-      <keyword name="QtTestResult.addSkip" id="QtTestResult.addSkip" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult.addSkip" />
-      <keyword name="QtTestResult.addSubTest" id="QtTestResult.addSubTest" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult.addSubTest" />
-      <keyword name="QtTestResult.addUnexpectedSuccess" id="QtTestResult.addUnexpectedSuccess" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult.addUnexpectedSuccess" />
-      <keyword name="QtTestResult.startTest" id="QtTestResult.startTest" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult.startTest" />
-      <keyword name="QtTestResult.stopTest" id="QtTestResult.stopTest" ref="eric7.PyUnit.UnittestDialog.html#QtTestResult.stopTest" />
       <keyword name="Queues" id="Queues" ref="eric7.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues" />
       <keyword name="Queues (Constructor)" id="Queues (Constructor)" ref="eric7.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.__init__" />
       <keyword name="Queues.__getCommitMessage" id="Queues.__getCommitMessage" ref="eric7.Plugins.VcsPlugins.vcsMercurial.QueuesExtension.queues.html#Queues.__getCommitMessage" />
@@ -15717,6 +15754,111 @@
       <keyword name="TemplatesReader.__readTemplate" id="TemplatesReader.__readTemplate" ref="eric7.EricXML.TemplatesReader.html#TemplatesReader.__readTemplate" />
       <keyword name="TemplatesReader.__readTemplateGroup" id="TemplatesReader.__readTemplateGroup" ref="eric7.EricXML.TemplatesReader.html#TemplatesReader.__readTemplateGroup" />
       <keyword name="TemplatesReader.readXML" id="TemplatesReader.readXML" ref="eric7.EricXML.TemplatesReader.html#TemplatesReader.readXML" />
+      <keyword name="TestConfig" id="TestConfig" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestConfig" />
+      <keyword name="TestExecutorBase" id="TestExecutorBase" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase" />
+      <keyword name="TestExecutorBase (Constructor)" id="TestExecutorBase (Constructor)" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.__init__" />
+      <keyword name="TestExecutorBase (Module)" id="TestExecutorBase (Module)" ref="eric7.Testing.Interfaces.TestExecutorBase.html" />
+      <keyword name="TestExecutorBase._prepareProcess" id="TestExecutorBase._prepareProcess" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase._prepareProcess" />
+      <keyword name="TestExecutorBase.createArguments" id="TestExecutorBase.createArguments" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.createArguments" />
+      <keyword name="TestExecutorBase.finished" id="TestExecutorBase.finished" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.finished" />
+      <keyword name="TestExecutorBase.getVersions" id="TestExecutorBase.getVersions" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.getVersions" />
+      <keyword name="TestExecutorBase.hasCoverage" id="TestExecutorBase.hasCoverage" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.hasCoverage" />
+      <keyword name="TestExecutorBase.isInstalled" id="TestExecutorBase.isInstalled" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.isInstalled" />
+      <keyword name="TestExecutorBase.readAllOutput" id="TestExecutorBase.readAllOutput" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.readAllOutput" />
+      <keyword name="TestExecutorBase.start" id="TestExecutorBase.start" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.start" />
+      <keyword name="TestExecutorBase.stopIfRunning" id="TestExecutorBase.stopIfRunning" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.stopIfRunning" />
+      <keyword name="TestFrameworkRegistry" id="TestFrameworkRegistry" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html#TestFrameworkRegistry" />
+      <keyword name="TestFrameworkRegistry (Constructor)" id="TestFrameworkRegistry (Constructor)" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html#TestFrameworkRegistry.__init__" />
+      <keyword name="TestFrameworkRegistry (Module)" id="TestFrameworkRegistry (Module)" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html" />
+      <keyword name="TestFrameworkRegistry.createExecutor" id="TestFrameworkRegistry.createExecutor" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html#TestFrameworkRegistry.createExecutor" />
+      <keyword name="TestFrameworkRegistry.getFrameworks" id="TestFrameworkRegistry.getFrameworks" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html#TestFrameworkRegistry.getFrameworks" />
+      <keyword name="TestFrameworkRegistry.register" id="TestFrameworkRegistry.register" ref="eric7.Testing.Interfaces.TestFrameworkRegistry.html#TestFrameworkRegistry.register" />
+      <keyword name="TestResult" id="TestResult" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestResult" />
+      <keyword name="TestResultCategory" id="TestResultCategory" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestResultCategory" />
+      <keyword name="TestResultsModel" id="TestResultsModel" ref="eric7.Testing.TestResultsTree.html#TestResultsModel" />
+      <keyword name="TestResultsModel (Constructor)" id="TestResultsModel (Constructor)" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.__init__" />
+      <keyword name="TestResultsModel.__summary" id="TestResultsModel.__summary" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.__summary" />
+      <keyword name="TestResultsModel.addTestResults" id="TestResultsModel.addTestResults" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.addTestResults" />
+      <keyword name="TestResultsModel.clear" id="TestResultsModel.clear" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.clear" />
+      <keyword name="TestResultsModel.columnCount" id="TestResultsModel.columnCount" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.columnCount" />
+      <keyword name="TestResultsModel.data" id="TestResultsModel.data" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.data" />
+      <keyword name="TestResultsModel.durationKey" id="TestResultsModel.durationKey" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.durationKey" />
+      <keyword name="TestResultsModel.getFailedTests" id="TestResultsModel.getFailedTests" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.getFailedTests" />
+      <keyword name="TestResultsModel.getTestResults" id="TestResultsModel.getTestResults" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.getTestResults" />
+      <keyword name="TestResultsModel.headerData" id="TestResultsModel.headerData" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.headerData" />
+      <keyword name="TestResultsModel.index" id="TestResultsModel.index" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.index" />
+      <keyword name="TestResultsModel.parent" id="TestResultsModel.parent" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.parent" />
+      <keyword name="TestResultsModel.rowCount" id="TestResultsModel.rowCount" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.rowCount" />
+      <keyword name="TestResultsModel.setTestResults" id="TestResultsModel.setTestResults" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.setTestResults" />
+      <keyword name="TestResultsModel.sort" id="TestResultsModel.sort" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.sort" />
+      <keyword name="TestResultsModel.updateTestResults" id="TestResultsModel.updateTestResults" ref="eric7.Testing.TestResultsTree.html#TestResultsModel.updateTestResults" />
+      <keyword name="TestResultsTree (Module)" id="TestResultsTree (Module)" ref="eric7.Testing.TestResultsTree.html" />
+      <keyword name="TestResultsTreeView" id="TestResultsTreeView" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView" />
+      <keyword name="TestResultsTreeView (Constructor)" id="TestResultsTreeView (Constructor)" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.__init__" />
+      <keyword name="TestResultsTreeView.__canonicalIndex" id="TestResultsTreeView.__canonicalIndex" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.__canonicalIndex" />
+      <keyword name="TestResultsTreeView.__createBackgroundContextMenu" id="TestResultsTreeView.__createBackgroundContextMenu" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.__createBackgroundContextMenu" />
+      <keyword name="TestResultsTreeView.__createContextMenu" id="TestResultsTreeView.__createContextMenu" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.__createContextMenu" />
+      <keyword name="TestResultsTreeView.__gotoTestDefinition" id="TestResultsTreeView.__gotoTestDefinition" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.__gotoTestDefinition" />
+      <keyword name="TestResultsTreeView.__showContextMenu" id="TestResultsTreeView.__showContextMenu" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.__showContextMenu" />
+      <keyword name="TestResultsTreeView.dataChanged" id="TestResultsTreeView.dataChanged" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.dataChanged" />
+      <keyword name="TestResultsTreeView.reset" id="TestResultsTreeView.reset" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.reset" />
+      <keyword name="TestResultsTreeView.resizeColumns" id="TestResultsTreeView.resizeColumns" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.resizeColumns" />
+      <keyword name="TestResultsTreeView.rowsInserted" id="TestResultsTreeView.rowsInserted" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.rowsInserted" />
+      <keyword name="TestResultsTreeView.spanFirstColumn" id="TestResultsTreeView.spanFirstColumn" ref="eric7.Testing.TestResultsTree.html#TestResultsTreeView.spanFirstColumn" />
+      <keyword name="Testing (Package)" id="Testing (Package)" ref="index-eric7.Testing.html" />
+      <keyword name="TestingWidget" id="TestingWidget" ref="eric7.Testing.TestingWidget.html#TestingWidget" />
+      <keyword name="TestingWidget (Constructor)" id="TestingWidget (Constructor)" ref="eric7.Testing.TestingWidget.html#TestingWidget.__init__" />
+      <keyword name="TestingWidget (Module)" id="TestingWidget (Module)" ref="eric7.Testing.TestingWidget.html" />
+      <keyword name="TestingWidget.__adjustPendingState" id="TestingWidget.__adjustPendingState" ref="eric7.Testing.TestingWidget.html#TestingWidget.__adjustPendingState" />
+      <keyword name="TestingWidget.__coverageData" id="TestingWidget.__coverageData" ref="eric7.Testing.TestingWidget.html#TestingWidget.__coverageData" />
+      <keyword name="TestingWidget.__insertDiscovery" id="TestingWidget.__insertDiscovery" ref="eric7.Testing.TestingWidget.html#TestingWidget.__insertDiscovery" />
+      <keyword name="TestingWidget.__insertHistory" id="TestingWidget.__insertHistory" ref="eric7.Testing.TestingWidget.html#TestingWidget.__insertHistory" />
+      <keyword name="TestingWidget.__insertTestFile" id="TestingWidget.__insertTestFile" ref="eric7.Testing.TestingWidget.html#TestingWidget.__insertTestFile" />
+      <keyword name="TestingWidget.__insertTestName" id="TestingWidget.__insertTestName" ref="eric7.Testing.TestingWidget.html#TestingWidget.__insertTestName" />
+      <keyword name="TestingWidget.__loadRecent" id="TestingWidget.__loadRecent" ref="eric7.Testing.TestingWidget.html#TestingWidget.__loadRecent" />
+      <keyword name="TestingWidget.__openEditor" id="TestingWidget.__openEditor" ref="eric7.Testing.TestingWidget.html#TestingWidget.__openEditor" />
+      <keyword name="TestingWidget.__populateTestFrameworkComboBox" id="TestingWidget.__populateTestFrameworkComboBox" ref="eric7.Testing.TestingWidget.html#TestingWidget.__populateTestFrameworkComboBox" />
+      <keyword name="TestingWidget.__populateVenvComboBox" id="TestingWidget.__populateVenvComboBox" ref="eric7.Testing.TestingWidget.html#TestingWidget.__populateVenvComboBox" />
+      <keyword name="TestingWidget.__processTestResult" id="TestingWidget.__processTestResult" ref="eric7.Testing.TestingWidget.html#TestingWidget.__processTestResult" />
+      <keyword name="TestingWidget.__projectClosed" id="TestingWidget.__projectClosed" ref="eric7.Testing.TestingWidget.html#TestingWidget.__projectClosed" />
+      <keyword name="TestingWidget.__projectOpened" id="TestingWidget.__projectOpened" ref="eric7.Testing.TestingWidget.html#TestingWidget.__projectOpened" />
+      <keyword name="TestingWidget.__resetResults" id="TestingWidget.__resetResults" ref="eric7.Testing.TestingWidget.html#TestingWidget.__resetResults" />
+      <keyword name="TestingWidget.__saveRecent" id="TestingWidget.__saveRecent" ref="eric7.Testing.TestingWidget.html#TestingWidget.__saveRecent" />
+      <keyword name="TestingWidget.__setIdleMode" id="TestingWidget.__setIdleMode" ref="eric7.Testing.TestingWidget.html#TestingWidget.__setIdleMode" />
+      <keyword name="TestingWidget.__setRunningMode" id="TestingWidget.__setRunningMode" ref="eric7.Testing.TestingWidget.html#TestingWidget.__setRunningMode" />
+      <keyword name="TestingWidget.__setStatusLabel" id="TestingWidget.__setStatusLabel" ref="eric7.Testing.TestingWidget.html#TestingWidget.__setStatusLabel" />
+      <keyword name="TestingWidget.__setStoppedMode" id="TestingWidget.__setStoppedMode" ref="eric7.Testing.TestingWidget.html#TestingWidget.__setStoppedMode" />
+      <keyword name="TestingWidget.__showCoverageDialog" id="TestingWidget.__showCoverageDialog" ref="eric7.Testing.TestingWidget.html#TestingWidget.__showCoverageDialog" />
+      <keyword name="TestingWidget.__showLogOutput" id="TestingWidget.__showLogOutput" ref="eric7.Testing.TestingWidget.html#TestingWidget.__showLogOutput" />
+      <keyword name="TestingWidget.__showSource" id="TestingWidget.__showSource" ref="eric7.Testing.TestingWidget.html#TestingWidget.__showSource" />
+      <keyword name="TestingWidget.__stopTests" id="TestingWidget.__stopTests" ref="eric7.Testing.TestingWidget.html#TestingWidget.__stopTests" />
+      <keyword name="TestingWidget.__testProcessFinished" id="TestingWidget.__testProcessFinished" ref="eric7.Testing.TestingWidget.html#TestingWidget.__testProcessFinished" />
+      <keyword name="TestingWidget.__testRunAboutToBeStarted" id="TestingWidget.__testRunAboutToBeStarted" ref="eric7.Testing.TestingWidget.html#TestingWidget.__testRunAboutToBeStarted" />
+      <keyword name="TestingWidget.__testRunFinished" id="TestingWidget.__testRunFinished" ref="eric7.Testing.TestingWidget.html#TestingWidget.__testRunFinished" />
+      <keyword name="TestingWidget.__testStarted" id="TestingWidget.__testStarted" ref="eric7.Testing.TestingWidget.html#TestingWidget.__testStarted" />
+      <keyword name="TestingWidget.__testsCollectError" id="TestingWidget.__testsCollectError" ref="eric7.Testing.TestingWidget.html#TestingWidget.__testsCollectError" />
+      <keyword name="TestingWidget.__testsCollected" id="TestingWidget.__testsCollected" ref="eric7.Testing.TestingWidget.html#TestingWidget.__testsCollected" />
+      <keyword name="TestingWidget.__testsStopped" id="TestingWidget.__testsStopped" ref="eric7.Testing.TestingWidget.html#TestingWidget.__testsStopped" />
+      <keyword name="TestingWidget.__updateButtonBoxButtons" id="TestingWidget.__updateButtonBoxButtons" ref="eric7.Testing.TestingWidget.html#TestingWidget.__updateButtonBoxButtons" />
+      <keyword name="TestingWidget.__updateCoverage" id="TestingWidget.__updateCoverage" ref="eric7.Testing.TestingWidget.html#TestingWidget.__updateCoverage" />
+      <keyword name="TestingWidget.__updateProgress" id="TestingWidget.__updateProgress" ref="eric7.Testing.TestingWidget.html#TestingWidget.__updateProgress" />
+      <keyword name="TestingWidget.clearRecent" id="TestingWidget.clearRecent" ref="eric7.Testing.TestingWidget.html#TestingWidget.clearRecent" />
+      <keyword name="TestingWidget.closeEvent" id="TestingWidget.closeEvent" ref="eric7.Testing.TestingWidget.html#TestingWidget.closeEvent" />
+      <keyword name="TestingWidget.getFailedTests" id="TestingWidget.getFailedTests" ref="eric7.Testing.TestingWidget.html#TestingWidget.getFailedTests" />
+      <keyword name="TestingWidget.getResultsModel" id="TestingWidget.getResultsModel" ref="eric7.Testing.TestingWidget.html#TestingWidget.getResultsModel" />
+      <keyword name="TestingWidget.hasFailedTests" id="TestingWidget.hasFailedTests" ref="eric7.Testing.TestingWidget.html#TestingWidget.hasFailedTests" />
+      <keyword name="TestingWidget.on_buttonBox_clicked" id="TestingWidget.on_buttonBox_clicked" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_buttonBox_clicked" />
+      <keyword name="TestingWidget.on_discoverCheckBox_toggled" id="TestingWidget.on_discoverCheckBox_toggled" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_discoverCheckBox_toggled" />
+      <keyword name="TestingWidget.on_frameworkComboBox_currentIndexChanged" id="TestingWidget.on_frameworkComboBox_currentIndexChanged" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_frameworkComboBox_currentIndexChanged" />
+      <keyword name="TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog" id="TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog" />
+      <keyword name="TestingWidget.on_venvComboBox_currentIndexChanged" id="TestingWidget.on_venvComboBox_currentIndexChanged" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_venvComboBox_currentIndexChanged" />
+      <keyword name="TestingWidget.on_versionsButton_clicked" id="TestingWidget.on_versionsButton_clicked" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_versionsButton_clicked" />
+      <keyword name="TestingWidget.setTestFile" id="TestingWidget.setTestFile" ref="eric7.Testing.TestingWidget.html#TestingWidget.setTestFile" />
+      <keyword name="TestingWidget.startTests" id="TestingWidget.startTests" ref="eric7.Testing.TestingWidget.html#TestingWidget.startTests" />
+      <keyword name="TestingWidgetModes" id="TestingWidgetModes" ref="eric7.Testing.TestingWidget.html#TestingWidgetModes" />
+      <keyword name="TestingWindow" id="TestingWindow" ref="eric7.Testing.TestingWidget.html#TestingWindow" />
+      <keyword name="TestingWindow (Constructor)" id="TestingWindow (Constructor)" ref="eric7.Testing.TestingWidget.html#TestingWindow.__init__" />
+      <keyword name="TestingWindow.eventFilter" id="TestingWindow.eventFilter" ref="eric7.Testing.TestingWidget.html#TestingWindow.eventFilter" />
       <keyword name="TextVisitor" id="TextVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor" />
       <keyword name="TextVisitor (Constructor)" id="TextVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.__init__" />
       <keyword name="TextVisitor.__addNode" id="TextVisitor.__addNode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.__addNode" />
@@ -15934,8 +16076,8 @@
       <keyword name="TrayStarter.__startSnapshot" id="TrayStarter.__startSnapshot" ref="eric7.Tools.TrayStarter.html#TrayStarter.__startSnapshot" />
       <keyword name="TrayStarter.__startSqlBrowser" id="TrayStarter.__startSqlBrowser" ref="eric7.Tools.TrayStarter.html#TrayStarter.__startSqlBrowser" />
       <keyword name="TrayStarter.__startTRPreviewer" id="TrayStarter.__startTRPreviewer" ref="eric7.Tools.TrayStarter.html#TrayStarter.__startTRPreviewer" />
+      <keyword name="TrayStarter.__startTesting" id="TrayStarter.__startTesting" ref="eric7.Tools.TrayStarter.html#TrayStarter.__startTesting" />
       <keyword name="TrayStarter.__startUIPreviewer" id="TrayStarter.__startUIPreviewer" ref="eric7.Tools.TrayStarter.html#TrayStarter.__startUIPreviewer" />
-      <keyword name="TrayStarter.__startUnittest" id="TrayStarter.__startUnittest" ref="eric7.Tools.TrayStarter.html#TrayStarter.__startUnittest" />
       <keyword name="TrayStarter.__startVirtualenvManager" id="TrayStarter.__startVirtualenvManager" ref="eric7.Tools.TrayStarter.html#TrayStarter.__startVirtualenvManager" />
       <keyword name="TrayStarter.__startWebBrowser" id="TrayStarter.__startWebBrowser" ref="eric7.Tools.TrayStarter.html#TrayStarter.__startWebBrowser" />
       <keyword name="TrayStarter.__startWebBrowserPrivate" id="TrayStarter.__startWebBrowserPrivate" ref="eric7.Tools.TrayStarter.html#TrayStarter.__startWebBrowserPrivate" />
@@ -16094,53 +16236,16 @@
       <keyword name="UicCompilerOptionsDialog.getData" id="UicCompilerOptionsDialog.getData" ref="eric7.Project.UicCompilerOptionsDialog.html#UicCompilerOptionsDialog.getData" />
       <keyword name="UicLoadUi5 (Module)" id="UicLoadUi5 (Module)" ref="eric7.Project.UicLoadUi5.html" />
       <keyword name="UicLoadUi6 (Module)" id="UicLoadUi6 (Module)" ref="eric7.Project.UicLoadUi6.html" />
-      <keyword name="UnittestDialog" id="UnittestDialog" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog" />
-      <keyword name="UnittestDialog (Constructor)" id="UnittestDialog (Constructor)" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__init__" />
-      <keyword name="UnittestDialog (Module)" id="UnittestDialog (Module)" ref="eric7.PyUnit.UnittestDialog.html" />
-      <keyword name="UnittestDialog.__UTDiscovered" id="UnittestDialog.__UTDiscovered" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__UTDiscovered" />
-      <keyword name="UnittestDialog.__UTPrepared" id="UnittestDialog.__UTPrepared" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__UTPrepared" />
-      <keyword name="UnittestDialog.__assembleTestCasesList" id="UnittestDialog.__assembleTestCasesList" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__assembleTestCasesList" />
-      <keyword name="UnittestDialog.__discover" id="UnittestDialog.__discover" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__discover" />
-      <keyword name="UnittestDialog.__findDiscoveryItem" id="UnittestDialog.__findDiscoveryItem" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__findDiscoveryItem" />
-      <keyword name="UnittestDialog.__loadRecent" id="UnittestDialog.__loadRecent" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__loadRecent" />
-      <keyword name="UnittestDialog.__openEditor" id="UnittestDialog.__openEditor" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__openEditor" />
-      <keyword name="UnittestDialog.__populateDiscoveryResults" id="UnittestDialog.__populateDiscoveryResults" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__populateDiscoveryResults" />
-      <keyword name="UnittestDialog.__populateVenvComboBox" id="UnittestDialog.__populateVenvComboBox" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__populateVenvComboBox" />
-      <keyword name="UnittestDialog.__saveRecent" id="UnittestDialog.__saveRecent" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__saveRecent" />
-      <keyword name="UnittestDialog.__selectedTestCases" id="UnittestDialog.__selectedTestCases" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__selectedTestCases" />
-      <keyword name="UnittestDialog.__setProgressColor" id="UnittestDialog.__setProgressColor" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__setProgressColor" />
-      <keyword name="UnittestDialog.__setRunningMode" id="UnittestDialog.__setRunningMode" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__setRunningMode" />
-      <keyword name="UnittestDialog.__setStoppedMode" id="UnittestDialog.__setStoppedMode" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__setStoppedMode" />
-      <keyword name="UnittestDialog.__showSource" id="UnittestDialog.__showSource" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__showSource" />
-      <keyword name="UnittestDialog.__stopTests" id="UnittestDialog.__stopTests" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.__stopTests" />
-      <keyword name="UnittestDialog.clearRecent" id="UnittestDialog.clearRecent" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.clearRecent" />
-      <keyword name="UnittestDialog.closeEvent" id="UnittestDialog.closeEvent" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.closeEvent" />
-      <keyword name="UnittestDialog.hasFailedTests" id="UnittestDialog.hasFailedTests" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.hasFailedTests" />
-      <keyword name="UnittestDialog.insertDiscovery" id="UnittestDialog.insertDiscovery" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.insertDiscovery" />
-      <keyword name="UnittestDialog.insertProg" id="UnittestDialog.insertProg" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.insertProg" />
-      <keyword name="UnittestDialog.insertTestName" id="UnittestDialog.insertTestName" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.insertTestName" />
-      <keyword name="UnittestDialog.keyPressEvent" id="UnittestDialog.keyPressEvent" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.keyPressEvent" />
-      <keyword name="UnittestDialog.on_buttonBox_clicked" id="UnittestDialog.on_buttonBox_clicked" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.on_buttonBox_clicked" />
-      <keyword name="UnittestDialog.on_discoverCheckBox_toggled" id="UnittestDialog.on_discoverCheckBox_toggled" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.on_discoverCheckBox_toggled" />
-      <keyword name="UnittestDialog.on_discoveryList_itemChanged" id="UnittestDialog.on_discoveryList_itemChanged" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.on_discoveryList_itemChanged" />
-      <keyword name="UnittestDialog.on_discoveryList_itemDoubleClicked" id="UnittestDialog.on_discoveryList_itemDoubleClicked" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.on_discoveryList_itemDoubleClicked" />
-      <keyword name="UnittestDialog.on_errorsListWidget_currentTextChanged" id="UnittestDialog.on_errorsListWidget_currentTextChanged" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.on_errorsListWidget_currentTextChanged" />
-      <keyword name="UnittestDialog.on_errorsListWidget_itemDoubleClicked" id="UnittestDialog.on_errorsListWidget_itemDoubleClicked" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.on_errorsListWidget_itemDoubleClicked" />
-      <keyword name="UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog" id="UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.on_testsuitePicker_aboutToShowPathPickerDialog" />
-      <keyword name="UnittestDialog.on_testsuitePicker_editTextChanged" id="UnittestDialog.on_testsuitePicker_editTextChanged" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.on_testsuitePicker_editTextChanged" />
-      <keyword name="UnittestDialog.on_testsuitePicker_pathSelected" id="UnittestDialog.on_testsuitePicker_pathSelected" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.on_testsuitePicker_pathSelected" />
-      <keyword name="UnittestDialog.setProjectMode" id="UnittestDialog.setProjectMode" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.setProjectMode" />
-      <keyword name="UnittestDialog.startTests" id="UnittestDialog.startTests" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.startTests" />
-      <keyword name="UnittestDialog.testErrored" id="UnittestDialog.testErrored" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.testErrored" />
-      <keyword name="UnittestDialog.testFailed" id="UnittestDialog.testFailed" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.testFailed" />
-      <keyword name="UnittestDialog.testFailedExpected" id="UnittestDialog.testFailedExpected" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.testFailedExpected" />
-      <keyword name="UnittestDialog.testFinished" id="UnittestDialog.testFinished" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.testFinished" />
-      <keyword name="UnittestDialog.testSkipped" id="UnittestDialog.testSkipped" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.testSkipped" />
-      <keyword name="UnittestDialog.testStarted" id="UnittestDialog.testStarted" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.testStarted" />
-      <keyword name="UnittestDialog.testSucceededUnexpected" id="UnittestDialog.testSucceededUnexpected" ref="eric7.PyUnit.UnittestDialog.html#UnittestDialog.testSucceededUnexpected" />
-      <keyword name="UnittestWindow" id="UnittestWindow" ref="eric7.PyUnit.UnittestDialog.html#UnittestWindow" />
-      <keyword name="UnittestWindow (Constructor)" id="UnittestWindow (Constructor)" ref="eric7.PyUnit.UnittestDialog.html#UnittestWindow.__init__" />
-      <keyword name="UnittestWindow.eventFilter" id="UnittestWindow.eventFilter" ref="eric7.PyUnit.UnittestDialog.html#UnittestWindow.eventFilter" />
+      <keyword name="UnittestExecutor" id="UnittestExecutor" ref="eric7.Testing.Interfaces.UnittestExecutor.html#UnittestExecutor" />
+      <keyword name="UnittestExecutor (Constructor)" id="UnittestExecutor (Constructor)" ref="eric7.Testing.Interfaces.UnittestExecutor.html#UnittestExecutor.__init__" />
+      <keyword name="UnittestExecutor (Module)" id="UnittestExecutor (Module)" ref="eric7.Testing.Interfaces.UnittestExecutor.html" />
+      <keyword name="UnittestExecutor.__processData" id="UnittestExecutor.__processData" ref="eric7.Testing.Interfaces.UnittestExecutor.html#UnittestExecutor.__processData" />
+      <keyword name="UnittestExecutor.createArguments" id="UnittestExecutor.createArguments" ref="eric7.Testing.Interfaces.UnittestExecutor.html#UnittestExecutor.createArguments" />
+      <keyword name="UnittestExecutor.finished" id="UnittestExecutor.finished" ref="eric7.Testing.Interfaces.UnittestExecutor.html#UnittestExecutor.finished" />
+      <keyword name="UnittestExecutor.getVersions" id="UnittestExecutor.getVersions" ref="eric7.Testing.Interfaces.UnittestExecutor.html#UnittestExecutor.getVersions" />
+      <keyword name="UnittestExecutor.hasCoverage" id="UnittestExecutor.hasCoverage" ref="eric7.Testing.Interfaces.UnittestExecutor.html#UnittestExecutor.hasCoverage" />
+      <keyword name="UnittestExecutor.start" id="UnittestExecutor.start" ref="eric7.Testing.Interfaces.UnittestExecutor.html#UnittestExecutor.start" />
+      <keyword name="UnittestRunner (Module)" id="UnittestRunner (Module)" ref="eric7.Testing.Interfaces.UnittestRunner.html" />
       <keyword name="UnknownDevicesDialog" id="UnknownDevicesDialog" ref="eric7.MicroPython.UnknownDevicesDialog.html#UnknownDevicesDialog" />
       <keyword name="UnknownDevicesDialog (Constructor)" id="UnknownDevicesDialog (Constructor)" ref="eric7.MicroPython.UnknownDevicesDialog.html#UnknownDevicesDialog.__init__" />
       <keyword name="UnknownDevicesDialog (Module)" id="UnknownDevicesDialog (Module)" ref="eric7.MicroPython.UnknownDevicesDialog.html" />
@@ -16275,8 +16380,8 @@
       <keyword name="UserInterface.__createLayout" id="UserInterface.__createLayout" ref="eric7.UI.UserInterface.html#UserInterface.__createLayout" />
       <keyword name="UserInterface.__createObjects" id="UserInterface.__createObjects" ref="eric7.UI.UserInterface.html#UserInterface.__createObjects" />
       <keyword name="UserInterface.__createSidebarsLayout" id="UserInterface.__createSidebarsLayout" ref="eric7.UI.UserInterface.html#UserInterface.__createSidebarsLayout" />
+      <keyword name="UserInterface.__createTestingDialog" id="UserInterface.__createTestingDialog" ref="eric7.UI.UserInterface.html#UserInterface.__createTestingDialog" />
       <keyword name="UserInterface.__createToolboxesLayout" id="UserInterface.__createToolboxesLayout" ref="eric7.UI.UserInterface.html#UserInterface.__createToolboxesLayout" />
-      <keyword name="UserInterface.__createUnitTestDialog" id="UserInterface.__createUnitTestDialog" ref="eric7.UI.UserInterface.html#UserInterface.__createUnitTestDialog" />
       <keyword name="UserInterface.__customViewer" id="UserInterface.__customViewer" ref="eric7.UI.UserInterface.html#UserInterface.__customViewer" />
       <keyword name="UserInterface.__debuggingDone" id="UserInterface.__debuggingDone" ref="eric7.UI.UserInterface.html#UserInterface.__debuggingDone" />
       <keyword name="UserInterface.__debuggingStarted" id="UserInterface.__debuggingStarted" ref="eric7.UI.UserInterface.html#UserInterface.__debuggingStarted" />
@@ -16336,7 +16441,9 @@
       <keyword name="UserInterface.__reloadAPIs" id="UserInterface.__reloadAPIs" ref="eric7.UI.UserInterface.html#UserInterface.__reloadAPIs" />
       <keyword name="UserInterface.__reportBug" id="UserInterface.__reportBug" ref="eric7.UI.UserInterface.html#UserInterface.__reportBug" />
       <keyword name="UserInterface.__requestFeature" id="UserInterface.__requestFeature" ref="eric7.UI.UserInterface.html#UserInterface.__requestFeature" />
+      <keyword name="UserInterface.__rerunFailedTests" id="UserInterface.__rerunFailedTests" ref="eric7.UI.UserInterface.html#UserInterface.__rerunFailedTests" />
       <keyword name="UserInterface.__restart" id="UserInterface.__restart" ref="eric7.UI.UserInterface.html#UserInterface.__restart" />
+      <keyword name="UserInterface.__restartTest" id="UserInterface.__restartTest" ref="eric7.UI.UserInterface.html#UserInterface.__restartTest" />
       <keyword name="UserInterface.__saveCurrentViewProfile" id="UserInterface.__saveCurrentViewProfile" ref="eric7.UI.UserInterface.html#UserInterface.__saveCurrentViewProfile" />
       <keyword name="UserInterface.__saveSessionToFile" id="UserInterface.__saveSessionToFile" ref="eric7.UI.UserInterface.html#UserInterface.__saveSessionToFile" />
       <keyword name="UserInterface.__setEditProfile" id="UserInterface.__setEditProfile" ref="eric7.UI.UserInterface.html#UserInterface.__setEditProfile" />
@@ -16375,9 +16482,13 @@
       <keyword name="UserInterface.__snapshot" id="UserInterface.__snapshot" ref="eric7.UI.UserInterface.html#UserInterface.__snapshot" />
       <keyword name="UserInterface.__sqlBrowser" id="UserInterface.__sqlBrowser" ref="eric7.UI.UserInterface.html#UserInterface.__sqlBrowser" />
       <keyword name="UserInterface.__sslErrors" id="UserInterface.__sslErrors" ref="eric7.UI.UserInterface.html#UserInterface.__sslErrors" />
+      <keyword name="UserInterface.__startTestProject" id="UserInterface.__startTestProject" ref="eric7.UI.UserInterface.html#UserInterface.__startTestProject" />
+      <keyword name="UserInterface.__startTestScript" id="UserInterface.__startTestScript" ref="eric7.UI.UserInterface.html#UserInterface.__startTestScript" />
+      <keyword name="UserInterface.__startTesting" id="UserInterface.__startTesting" ref="eric7.UI.UserInterface.html#UserInterface.__startTesting" />
       <keyword name="UserInterface.__startToolProcess" id="UserInterface.__startToolProcess" ref="eric7.UI.UserInterface.html#UserInterface.__startToolProcess" />
       <keyword name="UserInterface.__startWebBrowser" id="UserInterface.__startWebBrowser" ref="eric7.UI.UserInterface.html#UserInterface.__startWebBrowser" />
       <keyword name="UserInterface.__switchTab" id="UserInterface.__switchTab" ref="eric7.UI.UserInterface.html#UserInterface.__switchTab" />
+      <keyword name="UserInterface.__testingStopped" id="UserInterface.__testingStopped" ref="eric7.UI.UserInterface.html#UserInterface.__testingStopped" />
       <keyword name="UserInterface.__toggleBottomSidebar" id="UserInterface.__toggleBottomSidebar" ref="eric7.UI.UserInterface.html#UserInterface.__toggleBottomSidebar" />
       <keyword name="UserInterface.__toggleHorizontalToolbox" id="UserInterface.__toggleHorizontalToolbox" ref="eric7.UI.UserInterface.html#UserInterface.__toggleHorizontalToolbox" />
       <keyword name="UserInterface.__toggleLeftSidebar" id="UserInterface.__toggleLeftSidebar" ref="eric7.UI.UserInterface.html#UserInterface.__toggleLeftSidebar" />
@@ -16391,12 +16502,6 @@
       <keyword name="UserInterface.__toolGroupSelected" id="UserInterface.__toolGroupSelected" ref="eric7.UI.UserInterface.html#UserInterface.__toolGroupSelected" />
       <keyword name="UserInterface.__toolGroupsConfiguration" id="UserInterface.__toolGroupsConfiguration" ref="eric7.UI.UserInterface.html#UserInterface.__toolGroupsConfiguration" />
       <keyword name="UserInterface.__toolsConfiguration" id="UserInterface.__toolsConfiguration" ref="eric7.UI.UserInterface.html#UserInterface.__toolsConfiguration" />
-      <keyword name="UserInterface.__unittest" id="UserInterface.__unittest" ref="eric7.UI.UserInterface.html#UserInterface.__unittest" />
-      <keyword name="UserInterface.__unittestProject" id="UserInterface.__unittestProject" ref="eric7.UI.UserInterface.html#UserInterface.__unittestProject" />
-      <keyword name="UserInterface.__unittestRerunFailed" id="UserInterface.__unittestRerunFailed" ref="eric7.UI.UserInterface.html#UserInterface.__unittestRerunFailed" />
-      <keyword name="UserInterface.__unittestRestart" id="UserInterface.__unittestRestart" ref="eric7.UI.UserInterface.html#UserInterface.__unittestRestart" />
-      <keyword name="UserInterface.__unittestScript" id="UserInterface.__unittestScript" ref="eric7.UI.UserInterface.html#UserInterface.__unittestScript" />
-      <keyword name="UserInterface.__unittestStopped" id="UserInterface.__unittestStopped" ref="eric7.UI.UserInterface.html#UserInterface.__unittestStopped" />
       <keyword name="UserInterface.__updateExternalToolsActions" id="UserInterface.__updateExternalToolsActions" ref="eric7.UI.UserInterface.html#UserInterface.__updateExternalToolsActions" />
       <keyword name="UserInterface.__versionToTuple" id="UserInterface.__versionToTuple" ref="eric7.UI.UserInterface.html#UserInterface.__versionToTuple" />
       <keyword name="UserInterface.__webBrowser" id="UserInterface.__webBrowser" ref="eric7.UI.UserInterface.html#UserInterface.__webBrowser" />
@@ -18037,6 +18142,7 @@
       <keyword name="__tomlSyntaxCheck" id="__tomlSyntaxCheck" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.tomlCheckSyntax.html#__tomlSyntaxCheck" />
       <keyword name="__yamlSyntaxCheck" id="__yamlSyntaxCheck" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.yamlCheckSyntax.html#__yamlSyntaxCheck" />
       <keyword name="_add_check" id="_add_check" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_add_check" />
+      <keyword name="_assembleTestCasesList" id="_assembleTestCasesList" ref="eric7.Testing.Interfaces.UnittestRunner.html#_assembleTestCasesList" />
       <keyword name="_break_around_binary_operators" id="_break_around_binary_operators" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_break_around_binary_operators" />
       <keyword name="_buildChildrenLists" id="_buildChildrenLists" ref="eric7.Graphics.GraphicsUtilities.html#_buildChildrenLists" />
       <keyword name="_checkString" id="_checkString" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql.html#_checkString" />
@@ -18136,7 +18242,7 @@
       <keyword name="cleanupSource (Module)" id="cleanupSource (Module)" ref="cleanupSource.html" />
       <keyword name="clearPrivateData" id="clearPrivateData" ref="eric7.Plugins.PluginVcsGit.html#clearPrivateData" />
       <keyword name="clearPrivateData" id="clearPrivateData" ref="eric7.Plugins.PluginVcsMercurial.html#clearPrivateData" />
-      <keyword name="clearSavedHistories" id="clearSavedHistories" ref="eric7.PyUnit.UnittestDialog.html#clearSavedHistories" />
+      <keyword name="clearSavedHistories" id="clearSavedHistories" ref="eric7.Testing.TestingWidget.html#clearSavedHistories" />
       <keyword name="closehead (Module)" id="closehead (Module)" ref="eric7.Plugins.VcsPlugins.vcsMercurial.CloseheadExtension.closehead.html" />
       <keyword name="codeStyleBatchCheck" id="codeStyleBatchCheck" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#codeStyleBatchCheck" />
       <keyword name="codeStyleCheck" id="codeStyleCheck" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#codeStyleCheck" />
@@ -18270,10 +18376,10 @@
       <keyword name="createMainWidget" id="createMainWidget" ref="eric7.eric7_shell.html#createMainWidget" />
       <keyword name="createMainWidget" id="createMainWidget" ref="eric7.eric7_snap.html#createMainWidget" />
       <keyword name="createMainWidget" id="createMainWidget" ref="eric7.eric7_sqlbrowser.html#createMainWidget" />
+      <keyword name="createMainWidget" id="createMainWidget" ref="eric7.eric7_testing.html#createMainWidget" />
       <keyword name="createMainWidget" id="createMainWidget" ref="eric7.eric7_tray.html#createMainWidget" />
       <keyword name="createMainWidget" id="createMainWidget" ref="eric7.eric7_trpreviewer.html#createMainWidget" />
       <keyword name="createMainWidget" id="createMainWidget" ref="eric7.eric7_uipreviewer.html#createMainWidget" />
-      <keyword name="createMainWidget" id="createMainWidget" ref="eric7.eric7_unittest.html#createMainWidget" />
       <keyword name="createMainWidget" id="createMainWidget" ref="eric7.eric7_virtualenv.html#createMainWidget" />
       <keyword name="createPosixSpawn" id="createPosixSpawn" ref="eric7.DebugClients.Python.MultiProcessDebugExtension.html#createPosixSpawn" />
       <keyword name="createPyWrapper" id="createPyWrapper" ref="install.html#createPyWrapper" />
@@ -18349,10 +18455,10 @@
       <keyword name="eric7_shell (Module)" id="eric7_shell (Module)" ref="eric7.eric7_shell.html" />
       <keyword name="eric7_snap (Module)" id="eric7_snap (Module)" ref="eric7.eric7_snap.html" />
       <keyword name="eric7_sqlbrowser (Module)" id="eric7_sqlbrowser (Module)" ref="eric7.eric7_sqlbrowser.html" />
+      <keyword name="eric7_testing (Module)" id="eric7_testing (Module)" ref="eric7.eric7_testing.html" />
       <keyword name="eric7_tray (Module)" id="eric7_tray (Module)" ref="eric7.eric7_tray.html" />
       <keyword name="eric7_trpreviewer (Module)" id="eric7_trpreviewer (Module)" ref="eric7.eric7_trpreviewer.html" />
       <keyword name="eric7_uipreviewer (Module)" id="eric7_uipreviewer (Module)" ref="eric7.eric7_uipreviewer.html" />
-      <keyword name="eric7_unittest (Module)" id="eric7_unittest (Module)" ref="eric7.eric7_unittest.html" />
       <keyword name="eric7_virtualenv (Module)" id="eric7_virtualenv (Module)" ref="eric7.eric7_virtualenv.html" />
       <keyword name="eric7config (Module)" id="eric7config (Module)" ref="eric7.eric7config.html" />
       <keyword name="eric7dbgstub (Module)" id="eric7dbgstub (Module)" ref="eric7.DebugClients.Python.eric7dbgstub.html" />
@@ -18463,6 +18569,8 @@
       <keyword name="getConfigPath" id="getConfigPath" ref="eric7.Plugins.VcsPlugins.vcsSubversion.SvnUtilities.html#getConfigPath" />
       <keyword name="getCooperation" id="getCooperation" ref="eric7.Preferences.__init__.html#getCooperation" />
       <keyword name="getCorba" id="getCorba" ref="eric7.Preferences.__init__.html#getCorba" />
+      <keyword name="getCoverageFileName" id="getCoverageFileName" ref="eric7.Utilities.__init__.html#getCoverageFileName" />
+      <keyword name="getCoverageFileNames" id="getCoverageFileNames" ref="eric7.Utilities.__init__.html#getCoverageFileNames" />
       <keyword name="getDataFiles" id="getDataFiles" ref="setup.html#getDataFiles" />
       <keyword name="getDebugger" id="getDebugger" ref="eric7.Preferences.__init__.html#getDebugger" />
       <keyword name="getDefaultIconPaths" id="getDefaultIconPaths" ref="eric7.Toolbox.Startup.html#getDefaultIconPaths" />
@@ -18545,6 +18653,8 @@
       <keyword name="getPixmap" id="getPixmap" ref="eric7.UI.PixmapCache.html#getPixmap" />
       <keyword name="getPluginManager" id="getPluginManager" ref="eric7.Preferences.__init__.html#getPluginManager" />
       <keyword name="getPrinter" id="getPrinter" ref="eric7.Preferences.__init__.html#getPrinter" />
+      <keyword name="getProfileFileName" id="getProfileFileName" ref="eric7.Utilities.__init__.html#getProfileFileName" />
+      <keyword name="getProfileFileNames" id="getProfileFileNames" ref="eric7.Utilities.__init__.html#getProfileFileNames" />
       <keyword name="getProject" id="getProject" ref="eric7.Preferences.__init__.html#getProject" />
       <keyword name="getProjectBrowserColour" id="getProjectBrowserColour" ref="eric7.Preferences.__init__.html#getProjectBrowserColour" />
       <keyword name="getProjectBrowserFlags" id="getProjectBrowserFlags" ref="eric7.Preferences.__init__.html#getProjectBrowserFlags" />
@@ -18583,7 +18693,7 @@
       <keyword name="getSystem" id="getSystem" ref="eric7.Preferences.__init__.html#getSystem" />
       <keyword name="getTasks" id="getTasks" ref="eric7.Preferences.__init__.html#getTasks" />
       <keyword name="getTemplates" id="getTemplates" ref="eric7.Preferences.__init__.html#getTemplates" />
-      <keyword name="getTestFileName" id="getTestFileName" ref="eric7.Utilities.__init__.html#getTestFileName" />
+      <keyword name="getTestFileNames" id="getTestFileNames" ref="eric7.Utilities.__init__.html#getTestFileNames" />
       <keyword name="getText" id="getText" ref="eric7.EricWidgets.EricTextInputDialog.html#getText" />
       <keyword name="getTranslatedMessage" id="getTranslatedMessage" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.translations.html#getTranslatedMessage" />
       <keyword name="getTranslationEngine" id="getTranslationEngine" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#getTranslationEngine" />
@@ -18602,6 +18712,7 @@
       <keyword name="getVcsSystemIndicator" id="getVcsSystemIndicator" ref="eric7.Plugins.PluginVcsPySvn.html#getVcsSystemIndicator" />
       <keyword name="getVcsSystemIndicator" id="getVcsSystemIndicator" ref="eric7.Plugins.PluginVcsSubversion.html#getVcsSystemIndicator" />
       <keyword name="getVersion" id="getVersion" ref="setup.html#getVersion" />
+      <keyword name="getVersions" id="getVersions" ref="eric7.Testing.Interfaces.PytestRunner.html#getVersions" />
       <keyword name="getViewManager" id="getViewManager" ref="eric7.Preferences.__init__.html#getViewManager" />
       <keyword name="getVolumeName" id="getVolumeName" ref="eric7.Utilities.__init__.html#getVolumeName" />
       <keyword name="getWebBrowser" id="getWebBrowser" ref="eric7.Preferences.__init__.html#getWebBrowser" />
@@ -18700,6 +18811,7 @@
       <keyword name="isExecutable" id="isExecutable" ref="eric7.Utilities.__init__.html#isExecutable" />
       <keyword name="isGnomeDesktop" id="isGnomeDesktop" ref="eric7.Globals.__init__.html#isGnomeDesktop" />
       <keyword name="isKdeDesktop" id="isKdeDesktop" ref="eric7.Globals.__init__.html#isKdeDesktop" />
+      <keyword name="isLanguageSupported" id="isLanguageSupported" ref="eric7.Testing.__init__.html#isLanguageSupported" />
       <keyword name="isLinuxPlatform" id="isLinuxPlatform" ref="eric7.Globals.__init__.html#isLinuxPlatform" />
       <keyword name="isMacPlatform" id="isMacPlatform" ref="eric7.Globals.__init__.html#isMacPlatform" />
       <keyword name="isNameConstant" id="isNameConstant" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isNameConstant" />
@@ -18766,10 +18878,10 @@
       <keyword name="main" id="main" ref="eric7.eric7_shell.html#main" />
       <keyword name="main" id="main" ref="eric7.eric7_snap.html#main" />
       <keyword name="main" id="main" ref="eric7.eric7_sqlbrowser.html#main" />
+      <keyword name="main" id="main" ref="eric7.eric7_testing.html#main" />
       <keyword name="main" id="main" ref="eric7.eric7_tray.html#main" />
       <keyword name="main" id="main" ref="eric7.eric7_trpreviewer.html#main" />
       <keyword name="main" id="main" ref="eric7.eric7_uipreviewer.html#main" />
-      <keyword name="main" id="main" ref="eric7.eric7_unittest.html#main" />
       <keyword name="main" id="main" ref="eric7.eric7_virtualenv.html#main" />
       <keyword name="main" id="main" ref="install-debugclients.html#main" />
       <keyword name="main" id="main" ref="install-dependencies.html#main" />
@@ -18924,6 +19036,7 @@
       <keyword name="retryAbort" id="retryAbort" ref="eric7.EricWidgets.EricMessageBox.html#retryAbort" />
       <keyword name="rootPrefix" id="rootPrefix" ref="eric7.CondaInterface.__init__.html#rootPrefix" />
       <keyword name="runcall" id="runcall" ref="eric7.DebugClients.Python.eric7dbgstub.html#runcall" />
+      <keyword name="runtest" id="runtest" ref="eric7.Testing.Interfaces.UnittestRunner.html#runtest" />
       <keyword name="rxExecute" id="rxExecute" ref="eric7.Plugins.WizardPlugins.QRegularExpressionWizard.QRegularExpressionWizardServer.html#rxExecute" />
       <keyword name="rxIndex" id="rxIndex" ref="eric7.Utilities.__init__.html#rxIndex" />
       <keyword name="rxValidate" id="rxValidate" ref="eric7.Plugins.WizardPlugins.QRegularExpressionWizard.QRegularExpressionWizardServer.html#rxValidate" />
@@ -19031,6 +19144,7 @@
       <keyword name="subversion (Module)" id="subversion (Module)" ref="eric7.Plugins.VcsPlugins.vcsSubversion.subversion.html" />
       <keyword name="summarize" id="summarize" ref="eric7.DataViews.CodeMetrics.html#summarize" />
       <keyword name="supportedEngineNames" id="supportedEngineNames" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#supportedEngineNames" />
+      <keyword name="supportedLanguages" id="supportedLanguages" ref="eric7.Testing.__init__.html#supportedLanguages" />
       <keyword name="syncPreferences" id="syncPreferences" ref="eric7.Preferences.__init__.html#syncPreferences" />
       <keyword name="syntaxAndPyflakesBatchCheck" id="syntaxAndPyflakesBatchCheck" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#syntaxAndPyflakesBatchCheck" />
       <keyword name="syntaxAndPyflakesCheck" id="syntaxAndPyflakesCheck" ref="eric7.Plugins.CheckerPlugins.SyntaxChecker.SyntaxCheck.html#syntaxAndPyflakesCheck" />
@@ -19159,10 +19273,11 @@
       <file>eric7.DataViews.CodeMetrics.html</file>
       <file>eric7.DataViews.CodeMetricsDialog.html</file>
       <file>eric7.DataViews.PyCoverageDialog.html</file>
+      <file>eric7.DataViews.PyCoverageHtmlReportDialog.html</file>
+      <file>eric7.DataViews.PyCoverageJsonReportDialog.html</file>
       <file>eric7.DataViews.PyProfileDialog.html</file>
       <file>eric7.DebugClients.Python.AsyncFile.html</file>
       <file>eric7.DebugClients.Python.BreakpointWatch.html</file>
-      <file>eric7.DebugClients.Python.DCTestResult.html</file>
       <file>eric7.DebugClients.Python.DebugBase.html</file>
       <file>eric7.DebugClients.Python.DebugClient.html</file>
       <file>eric7.DebugClients.Python.DebugClientBase.html</file>
@@ -19207,7 +19322,6 @@
       <file>eric7.DocumentationTools.IndexGenerator.html</file>
       <file>eric7.DocumentationTools.ModuleDocumentor.html</file>
       <file>eric7.DocumentationTools.QtHelpGenerator.html</file>
-      <file>eric7.DocumentationTools.TemplatesListsStyle.html</file>
       <file>eric7.DocumentationTools.TemplatesListsStyleCSS.html</file>
       <file>eric7.EricCore.EricTreeSortFilterProxyModel.html</file>
       <file>eric7.EricGraphics.EricArrowItem.html</file>
@@ -19220,6 +19334,8 @@
       <file>eric7.EricNetwork.EricGoogleMailHelpers.html</file>
       <file>eric7.EricNetwork.EricJsonClient.html</file>
       <file>eric7.EricNetwork.EricJsonServer.html</file>
+      <file>eric7.EricNetwork.EricJsonStreamReader.html</file>
+      <file>eric7.EricNetwork.EricJsonStreamWriter.html</file>
       <file>eric7.EricNetwork.EricNetworkIcon.html</file>
       <file>eric7.EricNetwork.EricNetworkProxyFactory.html</file>
       <file>eric7.EricNetwork.EricSslCertificateSelectionDialog.html</file>
@@ -19868,7 +19984,6 @@
       <file>eric7.Project.UicLoadUi6.html</file>
       <file>eric7.Project.UserProjectFile.html</file>
       <file>eric7.Project.UserPropertiesDialog.html</file>
-      <file>eric7.PyUnit.UnittestDialog.html</file>
       <file>eric7.QScintilla.APIsManager.html</file>
       <file>eric7.QScintilla.DocstringGenerator.BaseDocstringGenerator.html</file>
       <file>eric7.QScintilla.DocstringGenerator.EricdocGenerator.html</file>
@@ -19982,6 +20097,15 @@
       <file>eric7.Templates.TemplateSingleVariableDialog.html</file>
       <file>eric7.Templates.TemplateViewer.html</file>
       <file>eric7.Templates.TemplatesFile.html</file>
+      <file>eric7.Testing.Interfaces.PytestExecutor.html</file>
+      <file>eric7.Testing.Interfaces.PytestRunner.html</file>
+      <file>eric7.Testing.Interfaces.TestExecutorBase.html</file>
+      <file>eric7.Testing.Interfaces.TestFrameworkRegistry.html</file>
+      <file>eric7.Testing.Interfaces.UnittestExecutor.html</file>
+      <file>eric7.Testing.Interfaces.UnittestRunner.html</file>
+      <file>eric7.Testing.TestResultsTree.html</file>
+      <file>eric7.Testing.TestingWidget.html</file>
+      <file>eric7.Testing.__init__.html</file>
       <file>eric7.Toolbox.SingleApplication.html</file>
       <file>eric7.Toolbox.Startup.html</file>
       <file>eric7.Tools.TRPreviewer.html</file>
@@ -20273,10 +20397,10 @@
       <file>eric7.eric7_shell.html</file>
       <file>eric7.eric7_snap.html</file>
       <file>eric7.eric7_sqlbrowser.html</file>
+      <file>eric7.eric7_testing.html</file>
       <file>eric7.eric7_tray.html</file>
       <file>eric7.eric7_trpreviewer.html</file>
       <file>eric7.eric7_uipreviewer.html</file>
-      <file>eric7.eric7_unittest.html</file>
       <file>eric7.eric7_virtualenv.html</file>
       <file>eric7.eric7config.html</file>
       <file>index-eric7.CondaInterface.html</file>
@@ -20365,7 +20489,6 @@
       <file>index-eric7.Preferences.ConfigurationPages.html</file>
       <file>index-eric7.Preferences.html</file>
       <file>index-eric7.Project.html</file>
-      <file>index-eric7.PyUnit.html</file>
       <file>index-eric7.QScintilla.DocstringGenerator.html</file>
       <file>index-eric7.QScintilla.Exporters.html</file>
       <file>index-eric7.QScintilla.Lexers.html</file>
@@ -20377,6 +20500,8 @@
       <file>index-eric7.SqlBrowser.html</file>
       <file>index-eric7.Tasks.html</file>
       <file>index-eric7.Templates.html</file>
+      <file>index-eric7.Testing.Interfaces.html</file>
+      <file>index-eric7.Testing.html</file>
       <file>index-eric7.Toolbox.html</file>
       <file>index-eric7.Tools.html</file>
       <file>index-eric7.UI.Previewers.html</file>
--- a/eric7/Documentation/Source/eric7.DataViews.PyCoverageDialog.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.DataViews.PyCoverageDialog.html	Mon May 23 18:15:10 2022 +0200
@@ -38,6 +38,14 @@
 <p>
     Class implementing a dialog to display the collected code coverage data.
 </p>
+<h3>Signals</h3>
+<dl>
+
+<dt>openFile(str)</dt>
+<dd>
+emitted to open the given file in an editor
+</dd>
+</dl>
 <h3>Derived from</h3>
 QDialog, Ui_PyCoverageDialog
 <h3>Class Attributes</h3>
@@ -59,22 +67,10 @@
 <td>Constructor</td>
 </tr>
 <tr>
-<td><a href="#PyCoverageDialog.__annotate">__annotate</a></td>
-<td>Private slot to handle the annotate context menu action.</td>
-</tr>
-<tr>
-<td><a href="#PyCoverageDialog.__annotateAll">__annotateAll</a></td>
-<td>Private slot to handle the annotate all context menu action.</td>
-</tr>
-<tr>
 <td><a href="#PyCoverageDialog.__createResultItem">__createResultItem</a></td>
 <td>Private method to create an entry in the result list.</td>
 </tr>
 <tr>
-<td><a href="#PyCoverageDialog.__deleteAnnotated">__deleteAnnotated</a></td>
-<td>Private slot to handle the delete annotated context menu action.</td>
-</tr>
-<tr>
 <td><a href="#PyCoverageDialog.__erase">__erase</a></td>
 <td>Private slot to handle the erase context menu action.</td>
 </tr>
@@ -87,10 +83,26 @@
 <td>Private method to format a list of integers into string by coalescing groups.</td>
 </tr>
 <tr>
+<td><a href="#PyCoverageDialog.__htmlReport">__htmlReport</a></td>
+<td>Private slot to generate a HTML report of the shown data.</td>
+</tr>
+<tr>
+<td><a href="#PyCoverageDialog.__jsonReport">__jsonReport</a></td>
+<td>Private slot to generate a JSON report of the shown data.</td>
+</tr>
+<tr>
+<td><a href="#PyCoverageDialog.__lcovReport">__lcovReport</a></td>
+<td>Private slot to generate a LCOV report of the shown data.</td>
+</tr>
+<tr>
 <td><a href="#PyCoverageDialog.__openFile">__openFile</a></td>
 <td>Private slot to open the selected file.</td>
 </tr>
 <tr>
+<td><a href="#PyCoverageDialog.__prepareReportGeneration">__prepareReportGeneration</a></td>
+<td>Private method to prepare a report generation.</td>
+</tr>
+<tr>
 <td><a href="#PyCoverageDialog.__showContextMenu">__showContextMenu</a></td>
 <td>Private slot to show the context menu of the listview.</td>
 </tr>
@@ -130,33 +142,11 @@
 </p>
 <dl>
 
-<dt><i>parent</i></dt>
+<dt><i>parent</i> (QWidget)</dt>
 <dd>
-parent widget (QWidget)
+parent widget
 </dd>
 </dl>
-<a NAME="PyCoverageDialog.__annotate" ID="PyCoverageDialog.__annotate"></a>
-<h4>PyCoverageDialog.__annotate</h4>
-<b>__annotate</b>(<i></i>)
-
-<p>
-        Private slot to handle the annotate context menu action.
-</p>
-<p>
-        This method produce an annotated coverage file of the
-        selected file.
-</p>
-<a NAME="PyCoverageDialog.__annotateAll" ID="PyCoverageDialog.__annotateAll"></a>
-<h4>PyCoverageDialog.__annotateAll</h4>
-<b>__annotateAll</b>(<i></i>)
-
-<p>
-        Private slot to handle the annotate all context menu action.
-</p>
-<p>
-        This method produce an annotated coverage file of every
-        file listed in the listview.
-</p>
 <a NAME="PyCoverageDialog.__createResultItem" ID="PyCoverageDialog.__createResultItem"></a>
 <h4>PyCoverageDialog.__createResultItem</h4>
 <b>__createResultItem</b>(<i>file, statements, executed, coverage, excluded, missing</i>)
@@ -166,42 +156,31 @@
 </p>
 <dl>
 
-<dt><i>file</i></dt>
+<dt><i>file</i> (str)</dt>
 <dd>
-filename of file (string)
+filename of file
 </dd>
-<dt><i>statements</i></dt>
+<dt><i>statements</i> (int)</dt>
 <dd>
-amount of statements (integer)
+number of statements
 </dd>
-<dt><i>executed</i></dt>
+<dt><i>executed</i> (int)</dt>
 <dd>
-amount of executed statements (integer)
+number of executed statements
 </dd>
-<dt><i>coverage</i></dt>
+<dt><i>coverage</i> (int)</dt>
 <dd>
-percent of coverage (integer)
+percent of coverage
 </dd>
-<dt><i>excluded</i></dt>
+<dt><i>excluded</i> (str)</dt>
 <dd>
-list of excluded lines (string)
+list of excluded lines
 </dd>
-<dt><i>missing</i></dt>
+<dt><i>missing</i> (str)</dt>
 <dd>
-list of lines without coverage (string)
+list of lines without coverage
 </dd>
 </dl>
-<a NAME="PyCoverageDialog.__deleteAnnotated" ID="PyCoverageDialog.__deleteAnnotated"></a>
-<h4>PyCoverageDialog.__deleteAnnotated</h4>
-<b>__deleteAnnotated</b>(<i></i>)
-
-<p>
-        Private slot to handle the delete annotated context menu action.
-</p>
-<p>
-        This method deletes all annotated files. These are files
-        ending with ',cover'.
-</p>
 <a NAME="PyCoverageDialog.__erase" ID="PyCoverageDialog.__erase"></a>
 <h4>PyCoverageDialog.__erase</h4>
 <b>__erase</b>(<i></i>)
@@ -231,7 +210,7 @@
 </p>
 <dl>
 
-<dt><i>lines</i></dt>
+<dt><i>lines</i> (list of int)</dt>
 <dd>
 list of integers
 </dd>
@@ -242,6 +221,33 @@
 string representing the list
 </dd>
 </dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="PyCoverageDialog.__htmlReport" ID="PyCoverageDialog.__htmlReport"></a>
+<h4>PyCoverageDialog.__htmlReport</h4>
+<b>__htmlReport</b>(<i></i>)
+
+<p>
+        Private slot to generate a HTML report of the shown data.
+</p>
+<a NAME="PyCoverageDialog.__jsonReport" ID="PyCoverageDialog.__jsonReport"></a>
+<h4>PyCoverageDialog.__jsonReport</h4>
+<b>__jsonReport</b>(<i></i>)
+
+<p>
+        Private slot to generate a JSON report of the shown data.
+</p>
+<a NAME="PyCoverageDialog.__lcovReport" ID="PyCoverageDialog.__lcovReport"></a>
+<h4>PyCoverageDialog.__lcovReport</h4>
+<b>__lcovReport</b>(<i></i>)
+
+<p>
+        Private slot to generate a LCOV report of the shown data.
+</p>
 <a NAME="PyCoverageDialog.__openFile" ID="PyCoverageDialog.__openFile"></a>
 <h4>PyCoverageDialog.__openFile</h4>
 <b>__openFile</b>(<i>itm=None</i>)
@@ -251,9 +257,29 @@
 </p>
 <dl>
 
-<dt><i>itm</i></dt>
+<dt><i>itm</i> (QTreeWidgetItem)</dt>
 <dd>
-reference to the item to be opened (QTreeWidgetItem)
+reference to the item to be opened
+</dd>
+</dl>
+<a NAME="PyCoverageDialog.__prepareReportGeneration" ID="PyCoverageDialog.__prepareReportGeneration"></a>
+<h4>PyCoverageDialog.__prepareReportGeneration</h4>
+<b>__prepareReportGeneration</b>(<i></i>)
+
+<p>
+        Private method to prepare a report generation.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing a reference to the Coverage object and the
+            list of files to report
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (Coverage, list of str)
 </dd>
 </dl>
 <a NAME="PyCoverageDialog.__showContextMenu" ID="PyCoverageDialog.__showContextMenu"></a>
@@ -265,9 +291,9 @@
 </p>
 <dl>
 
-<dt><i>coord</i></dt>
+<dt><i>coord</i> (QPoint)</dt>
 <dd>
-the position of the mouse pointer (QPoint)
+position of the mouse pointer
 </dd>
 </dl>
 <a NAME="PyCoverageDialog.on_buttonBox_clicked" ID="PyCoverageDialog.on_buttonBox_clicked"></a>
@@ -279,9 +305,9 @@
 </p>
 <dl>
 
-<dt><i>button</i></dt>
+<dt><i>button</i> (QAbstractButton)</dt>
 <dd>
-button that was clicked (QAbstractButton)
+button that was clicked
 </dd>
 </dl>
 <a NAME="PyCoverageDialog.on_reloadButton_clicked" ID="PyCoverageDialog.on_reloadButton_clicked"></a>
@@ -318,14 +344,13 @@
 </p>
 <dl>
 
-<dt><i>cfn</i></dt>
+<dt><i>cfn</i> (str)</dt>
 <dd>
-basename of the coverage file (string)
+basename of the coverage file
 </dd>
-<dt><i>fn</i></dt>
+<dt><i>fn</i> (str or list of str)</dt>
 <dd>
 file or list of files or directory to be checked
-                (string or list of strings)
 </dd>
 </dl>
 <a NAME="PyCoverageDialog.stringify" ID="PyCoverageDialog.stringify"></a>
@@ -338,11 +363,23 @@
 </p>
 <dl>
 
-<dt><i>pair</i></dt>
+<dt><i>pair</i> (tuple of (int, int)</dt>
 <dd>
 pair of integers
 </dd>
 </dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+representation of the pair
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.DataViews.PyCoverageHtmlReportDialog.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.DataViews.PyCoverageHtmlReportDialog</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.DataViews.PyCoverageHtmlReportDialog</h1>
+
+<p>
+Module implementing a dialog to enter the parameters for a coverage HTML
+report.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#PyCoverageHtmlReportDialog">PyCoverageHtmlReportDialog</a></td>
+<td>Class implementing a dialog to enter the parameters for a coverage HTML report.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="PyCoverageHtmlReportDialog" ID="PyCoverageHtmlReportDialog"></a>
+<h2>PyCoverageHtmlReportDialog</h2>
+
+<p>
+    Class implementing a dialog to enter the parameters for a coverage HTML
+    report.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_PyCoverageHtmlReportDialog
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#PyCoverageHtmlReportDialog.__init__">PyCoverageHtmlReportDialog</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#PyCoverageHtmlReportDialog.getData">getData</a></td>
+<td>Public method to get the entered data.</td>
+</tr>
+<tr>
+<td><a href="#PyCoverageHtmlReportDialog.on_outputDirectoryPicker_textChanged">on_outputDirectoryPicker_textChanged</a></td>
+<td>Private slot handling a change of the output directory.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="PyCoverageHtmlReportDialog.__init__" ID="PyCoverageHtmlReportDialog.__init__"></a>
+<h4>PyCoverageHtmlReportDialog (Constructor)</h4>
+<b>PyCoverageHtmlReportDialog</b>(<i>defaultDirectory, parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>defaultDirectory</i> (str)</dt>
+<dd>
+default directory for selecting the output
+            directory
+</dd>
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="PyCoverageHtmlReportDialog.getData" ID="PyCoverageHtmlReportDialog.getData"></a>
+<h4>PyCoverageHtmlReportDialog.getData</h4>
+<b>getData</b>(<i></i>)
+
+<p>
+        Public method to get the entered data.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing the report title, the output directory, the
+            path of a file containing extra CSS and a flag indicating to open
+            the generated report in a browser
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, str, str, bool)
+</dd>
+</dl>
+<a NAME="PyCoverageHtmlReportDialog.on_outputDirectoryPicker_textChanged" ID="PyCoverageHtmlReportDialog.on_outputDirectoryPicker_textChanged"></a>
+<h4>PyCoverageHtmlReportDialog.on_outputDirectoryPicker_textChanged</h4>
+<b>on_outputDirectoryPicker_textChanged</b>(<i>directory</i>)
+
+<p>
+        Private slot handling a change of the output directory.
+</p>
+<dl>
+
+<dt><i>directory</i> (str)</dt>
+<dd>
+current text of the directory picker
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.DataViews.PyCoverageJsonReportDialog.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.DataViews.PyCoverageJsonReportDialog</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.DataViews.PyCoverageJsonReportDialog</h1>
+
+<p>
+Module implementing a dialog to enter the parameters for a coverage JSON
+report.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#PyCoverageJsonReportDialog">PyCoverageJsonReportDialog</a></td>
+<td>Class implementing a dialog to enter the parameters for a coverage JSON report.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="PyCoverageJsonReportDialog" ID="PyCoverageJsonReportDialog"></a>
+<h2>PyCoverageJsonReportDialog</h2>
+
+<p>
+    Class implementing a dialog to enter the parameters for a coverage JSON
+    report.
+</p>
+<h3>Derived from</h3>
+QDialog, Ui_PyCoverageJsonReportDialog
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#PyCoverageJsonReportDialog.__init__">PyCoverageJsonReportDialog</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#PyCoverageJsonReportDialog.getData">getData</a></td>
+<td>Public method to get the entered data.</td>
+</tr>
+<tr>
+<td><a href="#PyCoverageJsonReportDialog.on_outputFilePicker_textChanged">on_outputFilePicker_textChanged</a></td>
+<td>Private slot handling a change of the output file.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="PyCoverageJsonReportDialog.__init__" ID="PyCoverageJsonReportDialog.__init__"></a>
+<h4>PyCoverageJsonReportDialog (Constructor)</h4>
+<b>PyCoverageJsonReportDialog</b>(<i>defaultDirectory, parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>defaultDirectory</i> (str)</dt>
+<dd>
+default directory for selecting the output
+            directory
+</dd>
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="PyCoverageJsonReportDialog.getData" ID="PyCoverageJsonReportDialog.getData"></a>
+<h4>PyCoverageJsonReportDialog.getData</h4>
+<b>getData</b>(<i></i>)
+
+<p>
+        Public method to get the entered data.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing the output file and a flag indicating the
+            creation of a compact JSON file
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (str, bool)
+</dd>
+</dl>
+<a NAME="PyCoverageJsonReportDialog.on_outputFilePicker_textChanged" ID="PyCoverageJsonReportDialog.on_outputFilePicker_textChanged"></a>
+<h4>PyCoverageJsonReportDialog.on_outputFilePicker_textChanged</h4>
+<b>on_outputFilePicker_textChanged</b>(<i>filename</i>)
+
+<p>
+        Private slot handling a change of the output file.
+</p>
+<dl>
+
+<dt><i>filename</i> (str)</dt>
+<dd>
+current text of the file picker
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/eric7/Documentation/Source/eric7.DebugClients.Python.DebugClientBase.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.DebugClients.Python.DebugClientBase.html	Mon May 23 18:15:10 2022 +0200
@@ -89,10 +89,6 @@
 <td>Constructor</td>
 </tr>
 <tr>
-<td><a href="#DebugClientBase.__assembleTestCasesList">__assembleTestCasesList</a></td>
-<td>Private method to assemble a list of test cases included in a test suite.</td>
-</tr>
-<tr>
 <td><a href="#DebugClientBase.__clientCapabilities">__clientCapabilities</a></td>
 <td>Private method to determine the clients capabilities.</td>
 </tr>
@@ -282,38 +278,6 @@
 <p>
         Constructor
 </p>
-<a NAME="DebugClientBase.__assembleTestCasesList" ID="DebugClientBase.__assembleTestCasesList"></a>
-<h4>DebugClientBase.__assembleTestCasesList</h4>
-<b>__assembleTestCasesList</b>(<i>suite, start</i>)
-
-<p>
-        Private method to assemble a list of test cases included in a test
-        suite.
-</p>
-<dl>
-
-<dt><i>suite</i> (unittest.TestSuite)</dt>
-<dd>
-test suite to be inspected
-</dd>
-<dt><i>start</i> (str)</dt>
-<dd>
-name of directory discovery was started at
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-list of tuples containing the test case ID, a short description
-            and the path of the test file name
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-list of tuples of (str, str, str)
-</dd>
-</dl>
 <a NAME="DebugClientBase.__clientCapabilities" ID="DebugClientBase.__clientCapabilities"></a>
 <h4>DebugClientBase.__clientCapabilities</h4>
 <b>__clientCapabilities</b>(<i></i>)
--- a/eric7/Documentation/Source/eric7.DebugClients.Python.DebugClientCapabilities.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.DebugClients.Python.DebugClientCapabilities.html	Mon May 23 18:15:10 2022 +0200
@@ -14,7 +14,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>HasAll</td></tr><tr><td>HasCompleter</td></tr><tr><td>HasCoverage</td></tr><tr><td>HasDebugger</td></tr><tr><td>HasInterpreter</td></tr><tr><td>HasProfiler</td></tr><tr><td>HasShell</td></tr><tr><td>HasUnittest</td></tr>
+<tr><td>HasAll</td></tr><tr><td>HasCompleter</td></tr><tr><td>HasCoverage</td></tr><tr><td>HasDebugger</td></tr><tr><td>HasInterpreter</td></tr><tr><td>HasProfiler</td></tr><tr><td>HasShell</td></tr>
 </table>
 <h3>Classes</h3>
 
--- a/eric7/Documentation/Source/eric7.Debugger.DebugClientCapabilities.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Debugger.DebugClientCapabilities.html	Mon May 23 18:15:10 2022 +0200
@@ -14,7 +14,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>HasAll</td></tr><tr><td>HasCompleter</td></tr><tr><td>HasCoverage</td></tr><tr><td>HasDebugger</td></tr><tr><td>HasInterpreter</td></tr><tr><td>HasProfiler</td></tr><tr><td>HasShell</td></tr><tr><td>HasUnittest</td></tr>
+<tr><td>HasAll</td></tr><tr><td>HasCompleter</td></tr><tr><td>HasCoverage</td></tr><tr><td>HasDebugger</td></tr><tr><td>HasInterpreter</td></tr><tr><td>HasProfiler</td></tr><tr><td>HasShell</td></tr>
 </table>
 <h3>Classes</h3>
 
--- a/eric7/Documentation/Source/eric7.Debugger.DebugServer.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Debugger.DebugServer.html	Mon May 23 18:15:10 2022 +0200
@@ -208,55 +208,6 @@
 emitted after the debug client has
         connected in passive debug mode
 </dd>
-<dt>utDiscovered(testCases, exc_type, exc_value)</dt>
-<dd>
-emitted after the
-        client has performed a test case discovery action
-</dd>
-<dt>utFinished()</dt>
-<dd>
-emitted after the client signalled the end of the
-        unittest
-</dd>
-<dt>utPrepared(nrTests, exc_type, exc_value)</dt>
-<dd>
-emitted after the client
-        has loaded a unittest suite
-</dd>
-<dt>utStartTest(testname, testdocu)</dt>
-<dd>
-emitted after the client has
-        started a test
-</dd>
-<dt>utStopTest()</dt>
-<dd>
-emitted after the client has finished a test
-</dd>
-<dt>utTestErrored(testname, exc_info, id)</dt>
-<dd>
-emitted after the client
-        reported an errored test
-</dd>
-<dt>utTestFailed(testname, exc_info, id)</dt>
-<dd>
-emitted after the client
-        reported a failed test
-</dd>
-<dt>utTestFailedExpected(testname, exc_info, id)</dt>
-<dd>
-emitted after the
-        client reported an expected test failure
-</dd>
-<dt>utTestSkipped(testname, reason, id)</dt>
-<dd>
-emitted after the client
-        reported a skipped test
-</dd>
-<dt>utTestSucceededUnexpected(testname, id)</dt>
-<dd>
-emitted after the client
-        reported an unexpected test success
-</dd>
 </dl>
 <h3>Derived from</h3>
 QTcpServer
@@ -395,46 +346,6 @@
 <td>Private slot to handle the dataAboutToBeChanged signal of the watch expression model.</td>
 </tr>
 <tr>
-<td><a href="#DebugServer.clientUtDiscovered">clientUtDiscovered</a></td>
-<td>Public method to process the client unittest discover info.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.clientUtFinished">clientUtFinished</a></td>
-<td>Public method to process the client unit test finished info.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.clientUtPrepared">clientUtPrepared</a></td>
-<td>Public method to process the client unittest prepared info.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.clientUtStartTest">clientUtStartTest</a></td>
-<td>Public method to process the client start test info.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.clientUtStopTest">clientUtStopTest</a></td>
-<td>Public method to process the client stop test info.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.clientUtTestErrored">clientUtTestErrored</a></td>
-<td>Public method to process the client test errored info.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.clientUtTestFailed">clientUtTestFailed</a></td>
-<td>Public method to process the client test failed info.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.clientUtTestFailedExpected">clientUtTestFailedExpected</a></td>
-<td>Public method to process the client test failed expected info.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.clientUtTestSkipped">clientUtTestSkipped</a></td>
-<td>Public method to process the client test skipped info.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.clientUtTestSucceededUnexpected">clientUtTestSucceededUnexpected</a></td>
-<td>Public method to process the client test succeeded unexpected info.</td>
-</tr>
-<tr>
 <td><a href="#DebugServer.getBreakPointModel">getBreakPointModel</a></td>
 <td>Public slot to get a reference to the breakpoint model object.</td>
 </tr>
@@ -603,22 +514,6 @@
 <td>Public method to request the list of threads from the client.</td>
 </tr>
 <tr>
-<td><a href="#DebugServer.remoteUTDiscover">remoteUTDiscover</a></td>
-<td>Public method to perform a test case discovery.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.remoteUTPrepare">remoteUTPrepare</a></td>
-<td>Public method to prepare a new unittest run.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.remoteUTRun">remoteUTRun</a></td>
-<td>Public method to start a unittest run.</td>
-</tr>
-<tr>
-<td><a href="#DebugServer.remoteUTStop">remoteUTStop</a></td>
-<td>public method to stop a unittest run.</td>
-</tr>
-<tr>
 <td><a href="#DebugServer.setCallTraceEnabled">setCallTraceEnabled</a></td>
 <td>Public method to set the call trace state.</td>
 </tr>
@@ -1321,195 +1216,6 @@
 end index of the rows to be changed
 </dd>
 </dl>
-<a NAME="DebugServer.clientUtDiscovered" ID="DebugServer.clientUtDiscovered"></a>
-<h4>DebugServer.clientUtDiscovered</h4>
-<b>clientUtDiscovered</b>(<i>testCases, exceptionType, exceptionValue</i>)
-
-<p>
-        Public method to process the client unittest discover info.
-</p>
-<dl>
-
-<dt><i>testCases</i> (str)</dt>
-<dd>
-list of detected test cases
-</dd>
-<dt><i>exceptionType</i> (str)</dt>
-<dd>
-exception type
-</dd>
-<dt><i>exceptionValue</i> (str)</dt>
-<dd>
-exception message
-</dd>
-</dl>
-<a NAME="DebugServer.clientUtFinished" ID="DebugServer.clientUtFinished"></a>
-<h4>DebugServer.clientUtFinished</h4>
-<b>clientUtFinished</b>(<i>status</i>)
-
-<p>
-        Public method to process the client unit test finished info.
-</p>
-<dl>
-
-<dt><i>status</i> (int)</dt>
-<dd>
-exit status of the unit test
-</dd>
-</dl>
-<a NAME="DebugServer.clientUtPrepared" ID="DebugServer.clientUtPrepared"></a>
-<h4>DebugServer.clientUtPrepared</h4>
-<b>clientUtPrepared</b>(<i>result, exceptionType, exceptionValue</i>)
-
-<p>
-        Public method to process the client unittest prepared info.
-</p>
-<dl>
-
-<dt><i>result</i> (int)</dt>
-<dd>
-number of test cases (0 = error)
-</dd>
-<dt><i>exceptionType</i> (str)</dt>
-<dd>
-exception type
-</dd>
-<dt><i>exceptionValue</i> (str)</dt>
-<dd>
-exception message
-</dd>
-</dl>
-<a NAME="DebugServer.clientUtStartTest" ID="DebugServer.clientUtStartTest"></a>
-<h4>DebugServer.clientUtStartTest</h4>
-<b>clientUtStartTest</b>(<i>testname, doc</i>)
-
-<p>
-        Public method to process the client start test info.
-</p>
-<dl>
-
-<dt><i>testname</i> (str)</dt>
-<dd>
-name of the test
-</dd>
-<dt><i>doc</i> (str)</dt>
-<dd>
-short description of the test
-</dd>
-</dl>
-<a NAME="DebugServer.clientUtStopTest" ID="DebugServer.clientUtStopTest"></a>
-<h4>DebugServer.clientUtStopTest</h4>
-<b>clientUtStopTest</b>(<i></i>)
-
-<p>
-        Public method to process the client stop test info.
-</p>
-<a NAME="DebugServer.clientUtTestErrored" ID="DebugServer.clientUtTestErrored"></a>
-<h4>DebugServer.clientUtTestErrored</h4>
-<b>clientUtTestErrored</b>(<i>testname, traceback, testId</i>)
-
-<p>
-        Public method to process the client test errored info.
-</p>
-<dl>
-
-<dt><i>testname</i> (str)</dt>
-<dd>
-name of the test
-</dd>
-<dt><i>traceback</i> (list of str)</dt>
-<dd>
-lines of traceback info
-</dd>
-<dt><i>testId</i> (str)</dt>
-<dd>
-id of the test
-</dd>
-</dl>
-<a NAME="DebugServer.clientUtTestFailed" ID="DebugServer.clientUtTestFailed"></a>
-<h4>DebugServer.clientUtTestFailed</h4>
-<b>clientUtTestFailed</b>(<i>testname, traceback, testId</i>)
-
-<p>
-        Public method to process the client test failed info.
-</p>
-<dl>
-
-<dt><i>testname</i> (str)</dt>
-<dd>
-name of the test
-</dd>
-<dt><i>traceback</i> (list of str)</dt>
-<dd>
-lines of traceback info
-</dd>
-<dt><i>testId</i> (str)</dt>
-<dd>
-id of the test
-</dd>
-</dl>
-<a NAME="DebugServer.clientUtTestFailedExpected" ID="DebugServer.clientUtTestFailedExpected"></a>
-<h4>DebugServer.clientUtTestFailedExpected</h4>
-<b>clientUtTestFailedExpected</b>(<i>testname, traceback, testId</i>)
-
-<p>
-        Public method to process the client test failed expected info.
-</p>
-<dl>
-
-<dt><i>testname</i> (str)</dt>
-<dd>
-name of the test
-</dd>
-<dt><i>traceback</i> (list of str)</dt>
-<dd>
-lines of traceback info
-</dd>
-<dt><i>testId</i> (str)</dt>
-<dd>
-id of the test
-</dd>
-</dl>
-<a NAME="DebugServer.clientUtTestSkipped" ID="DebugServer.clientUtTestSkipped"></a>
-<h4>DebugServer.clientUtTestSkipped</h4>
-<b>clientUtTestSkipped</b>(<i>testname, reason, testId</i>)
-
-<p>
-        Public method to process the client test skipped info.
-</p>
-<dl>
-
-<dt><i>testname</i> (str)</dt>
-<dd>
-name of the test
-</dd>
-<dt><i>reason</i> (str)</dt>
-<dd>
-reason for skipping the test
-</dd>
-<dt><i>testId</i> (str)</dt>
-<dd>
-id of the test
-</dd>
-</dl>
-<a NAME="DebugServer.clientUtTestSucceededUnexpected" ID="DebugServer.clientUtTestSucceededUnexpected"></a>
-<h4>DebugServer.clientUtTestSucceededUnexpected</h4>
-<b>clientUtTestSucceededUnexpected</b>(<i>testname, testId</i>)
-
-<p>
-        Public method to process the client test succeeded unexpected info.
-</p>
-<dl>
-
-<dt><i>testname</i> (str)</dt>
-<dd>
-name of the test
-</dd>
-<dt><i>testId</i> (str)</dt>
-<dd>
-id of the test
-</dd>
-</dl>
 <a NAME="DebugServer.getBreakPointModel" ID="DebugServer.getBreakPointModel"></a>
 <h4>DebugServer.getBreakPointModel</h4>
 <b>getBreakPointModel</b>(<i></i>)
@@ -2464,142 +2170,6 @@
 ID of the debugger backend
 </dd>
 </dl>
-<a NAME="DebugServer.remoteUTDiscover" ID="DebugServer.remoteUTDiscover"></a>
-<h4>DebugServer.remoteUTDiscover</h4>
-<b>remoteUTDiscover</b>(<i>clientType, forProject, venvName, syspath, workdir, discoveryStart</i>)
-
-<p>
-        Public method to perform a test case discovery.
-</p>
-<dl>
-
-<dt><i>clientType</i> (str)</dt>
-<dd>
-client type to be used
-</dd>
-<dt><i>forProject</i> (bool)</dt>
-<dd>
-flag indicating a project related action
-</dd>
-<dt><i>venvName</i> (str)</dt>
-<dd>
-name of a virtual environment
-</dd>
-<dt><i>syspath</i> (list of str)</dt>
-<dd>
-list of directories to be added to sys.path on the
-            remote side
-</dd>
-<dt><i>workdir</i> (str)</dt>
-<dd>
-path name of the working directory
-</dd>
-<dt><i>discoveryStart</i> (str)</dt>
-<dd>
-directory to start auto-discovery at
-</dd>
-</dl>
-<a NAME="DebugServer.remoteUTPrepare" ID="DebugServer.remoteUTPrepare"></a>
-<h4>DebugServer.remoteUTPrepare</h4>
-<b>remoteUTPrepare</b>(<i>fn, tn, tfn, failed, cov, covname, coverase, clientType="", forProject=False, venvName="", syspath=None, workdir="", discover=False, discoveryStart="", testCases=None, debug=False</i>)
-
-<p>
-        Public method to prepare a new unittest run.
-</p>
-<dl>
-
-<dt><i>fn</i> (str)</dt>
-<dd>
-the filename to load
-</dd>
-<dt><i>tn</i> (str)</dt>
-<dd>
-the testname to load
-</dd>
-<dt><i>tfn</i> (str)</dt>
-<dd>
-the test function name to load tests from
-</dd>
-<dt><i>failed</i> (list of str)</dt>
-<dd>
-list of failed test, if only failed test should be run
-</dd>
-<dt><i>cov</i> (bool)</dt>
-<dd>
-flag indicating collection of coverage data is requested
-</dd>
-<dt><i>covname</i> (str)</dt>
-<dd>
-filename to be used to assemble the coverage caches
-            filename
-</dd>
-<dt><i>coverase</i> (bool)</dt>
-<dd>
-flag indicating erasure of coverage data is requested
-</dd>
-<dt><i>clientType</i> (str)</dt>
-<dd>
-client type to be used
-</dd>
-<dt><i>forProject</i> (bool)</dt>
-<dd>
-flag indicating a project related action
-</dd>
-<dt><i>venvName</i> (str)</dt>
-<dd>
-name of a virtual environment
-</dd>
-<dt><i>syspath</i> (list of str)</dt>
-<dd>
-list of directories to be added to sys.path on the
-            remote side
-</dd>
-<dt><i>workdir</i> (str)</dt>
-<dd>
-path name of the working directory
-</dd>
-<dt><i>discover</i> (bool)</dt>
-<dd>
-flag indicating to discover the tests automatically
-</dd>
-<dt><i>discoveryStart</i> (str)</dt>
-<dd>
-directory to start auto-discovery at
-</dd>
-<dt><i>testCases</i> (list of str)</dt>
-<dd>
-list of test cases to be loaded
-</dd>
-<dt><i>debug</i> (bool)</dt>
-<dd>
-flag indicating to run unittest with debugging
-</dd>
-</dl>
-<a NAME="DebugServer.remoteUTRun" ID="DebugServer.remoteUTRun"></a>
-<h4>DebugServer.remoteUTRun</h4>
-<b>remoteUTRun</b>(<i>debug=False, failfast=False</i>)
-
-<p>
-        Public method to start a unittest run.
-</p>
-<dl>
-
-<dt><i>debug</i> (bool)</dt>
-<dd>
-flag indicating to run unittest with debugging
-</dd>
-<dt><i>failfast</i> (bool)</dt>
-<dd>
-flag indicating to stop at the first error
-</dd>
-</dl>
-<a NAME="DebugServer.remoteUTStop" ID="DebugServer.remoteUTStop"></a>
-<h4>DebugServer.remoteUTStop</h4>
-<b>remoteUTStop</b>(<i></i>)
-
-<p>
-        public method to stop a unittest run.
-</p>
 <a NAME="DebugServer.setCallTraceEnabled" ID="DebugServer.setCallTraceEnabled"></a>
 <h4>DebugServer.setCallTraceEnabled</h4>
 <b>setCallTraceEnabled</b>(<i>debuggerId, on</i>)
--- a/eric7/Documentation/Source/eric7.Debugger.DebuggerInterfaceNone.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Debugger.DebuggerInterfaceNone.html	Mon May 23 18:15:10 2022 +0200
@@ -195,22 +195,6 @@
 <td>Public method to request the list of threads from the client.</td>
 </tr>
 <tr>
-<td><a href="#DebuggerInterfaceNone.remoteUTDiscover">remoteUTDiscover</a></td>
-<td>Public method to perform a test case discovery.</td>
-</tr>
-<tr>
-<td><a href="#DebuggerInterfaceNone.remoteUTPrepare">remoteUTPrepare</a></td>
-<td>Public method to prepare a new unittest run.</td>
-</tr>
-<tr>
-<td><a href="#DebuggerInterfaceNone.remoteUTRun">remoteUTRun</a></td>
-<td>Public method to start a unittest run.</td>
-</tr>
-<tr>
-<td><a href="#DebuggerInterfaceNone.remoteUTStop">remoteUTStop</a></td>
-<td>public method to stop a unittest run.</td>
-</tr>
-<tr>
 <td><a href="#DebuggerInterfaceNone.remoteWatchpoint">remoteWatchpoint</a></td>
 <td>Public method to set or clear a watch expression.</td>
 </tr>
@@ -918,118 +902,6 @@
 ID of the debugger backend
 </dd>
 </dl>
-<a NAME="DebuggerInterfaceNone.remoteUTDiscover" ID="DebuggerInterfaceNone.remoteUTDiscover"></a>
-<h4>DebuggerInterfaceNone.remoteUTDiscover</h4>
-<b>remoteUTDiscover</b>(<i>syspath, workdir, discoveryStart</i>)
-
-<p>
-        Public method to perform a test case discovery.
-</p>
-<dl>
-
-<dt><i>syspath</i> (list of str)</dt>
-<dd>
-list of directories to be added to sys.path on the
-            remote side
-</dd>
-<dt><i>workdir</i> (str)</dt>
-<dd>
-path name of the working directory
-</dd>
-<dt><i>discoveryStart</i> (str)</dt>
-<dd>
-directory to start auto-discovery at
-</dd>
-</dl>
-<a NAME="DebuggerInterfaceNone.remoteUTPrepare" ID="DebuggerInterfaceNone.remoteUTPrepare"></a>
-<h4>DebuggerInterfaceNone.remoteUTPrepare</h4>
-<b>remoteUTPrepare</b>(<i>fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug</i>)
-
-<p>
-        Public method to prepare a new unittest run.
-</p>
-<dl>
-
-<dt><i>fn</i> (str)</dt>
-<dd>
-name of file to load
-</dd>
-<dt><i>tn</i> (str)</dt>
-<dd>
-name of test to load
-</dd>
-<dt><i>tfn</i> (str)</dt>
-<dd>
-test function name to load tests from
-</dd>
-<dt><i>failed</i> (list of str)</dt>
-<dd>
-list of failed test, if only failed test should be run
-</dd>
-<dt><i>cov</i> (bool)</dt>
-<dd>
-flag indicating collection of coverage data is requested
-</dd>
-<dt><i>covname</i> (str)</dt>
-<dd>
-name of file to be used to assemble the coverage caches
-            filename
-</dd>
-<dt><i>coverase</i> (bool)</dt>
-<dd>
-flag indicating erasure of coverage data is requested
-</dd>
-<dt><i>syspath</i> (list of str)</dt>
-<dd>
-list of directories to be added to sys.path on the
-            remote side
-</dd>
-<dt><i>workdir</i> (str)</dt>
-<dd>
-path name of the working directory
-</dd>
-<dt><i>discover</i> (bool)</dt>
-<dd>
-flag indicating to discover the tests automatically
-</dd>
-<dt><i>discoveryStart</i> (str)</dt>
-<dd>
-directory to start auto-discovery at
-</dd>
-<dt><i>testCases</i> (list of str)</dt>
-<dd>
-list of test cases to be loaded
-</dd>
-<dt><i>debug</i> (bool)</dt>
-<dd>
-flag indicating to run unittest with debugging
-</dd>
-</dl>
-<a NAME="DebuggerInterfaceNone.remoteUTRun" ID="DebuggerInterfaceNone.remoteUTRun"></a>
-<h4>DebuggerInterfaceNone.remoteUTRun</h4>
-<b>remoteUTRun</b>(<i>debug, failfast</i>)
-
-<p>
-        Public method to start a unittest run.
-</p>
-<dl>
-
-<dt><i>debug</i> (bool)</dt>
-<dd>
-flag indicating to run unittest with debugging
-</dd>
-<dt><i>failfast</i> (bool)</dt>
-<dd>
-flag indicating to stop at the first error
-</dd>
-</dl>
-<a NAME="DebuggerInterfaceNone.remoteUTStop" ID="DebuggerInterfaceNone.remoteUTStop"></a>
-<h4>DebuggerInterfaceNone.remoteUTStop</h4>
-<b>remoteUTStop</b>(<i></i>)
-
-<p>
-        public method to stop a unittest run.
-</p>
 <a NAME="DebuggerInterfaceNone.remoteWatchpoint" ID="DebuggerInterfaceNone.remoteWatchpoint"></a>
 <h4>DebuggerInterfaceNone.remoteWatchpoint</h4>
 <b>remoteWatchpoint</b>(<i>debuggerId, cond, setWatch, temp=False</i>)
--- a/eric7/Documentation/Source/eric7.Debugger.DebuggerInterfacePython.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Debugger.DebuggerInterfacePython.html	Mon May 23 18:15:10 2022 +0200
@@ -240,22 +240,6 @@
 <td>Public method to request the list of threads from the client.</td>
 </tr>
 <tr>
-<td><a href="#DebuggerInterfacePython.remoteUTDiscover">remoteUTDiscover</a></td>
-<td>Public method to perform a test case discovery.</td>
-</tr>
-<tr>
-<td><a href="#DebuggerInterfacePython.remoteUTPrepare">remoteUTPrepare</a></td>
-<td>Public method to prepare a new unittest run.</td>
-</tr>
-<tr>
-<td><a href="#DebuggerInterfacePython.remoteUTRun">remoteUTRun</a></td>
-<td>Public method to start a unittest run.</td>
-</tr>
-<tr>
-<td><a href="#DebuggerInterfacePython.remoteUTStop">remoteUTStop</a></td>
-<td>Public method to stop a unittest run.</td>
-</tr>
-<tr>
 <td><a href="#DebuggerInterfacePython.remoteWatchpoint">remoteWatchpoint</a></td>
 <td>Public method to set or clear a watch expression.</td>
 </tr>
@@ -1196,118 +1180,6 @@
 ID of the debugger backend
 </dd>
 </dl>
-<a NAME="DebuggerInterfacePython.remoteUTDiscover" ID="DebuggerInterfacePython.remoteUTDiscover"></a>
-<h4>DebuggerInterfacePython.remoteUTDiscover</h4>
-<b>remoteUTDiscover</b>(<i>syspath, workdir, discoveryStart</i>)
-
-<p>
-        Public method to perform a test case discovery.
-</p>
-<dl>
-
-<dt><i>syspath</i> (list of str)</dt>
-<dd>
-list of directories to be added to sys.path on the
-            remote side
-</dd>
-<dt><i>workdir</i> (str)</dt>
-<dd>
-path name of the working directory
-</dd>
-<dt><i>discoveryStart</i> (str)</dt>
-<dd>
-directory to start auto-discovery at
-</dd>
-</dl>
-<a NAME="DebuggerInterfacePython.remoteUTPrepare" ID="DebuggerInterfacePython.remoteUTPrepare"></a>
-<h4>DebuggerInterfacePython.remoteUTPrepare</h4>
-<b>remoteUTPrepare</b>(<i>fn, tn, tfn, failed, cov, covname, coverase, syspath, workdir, discover, discoveryStart, testCases, debug</i>)
-
-<p>
-        Public method to prepare a new unittest run.
-</p>
-<dl>
-
-<dt><i>fn</i> (str)</dt>
-<dd>
-name of file to load
-</dd>
-<dt><i>tn</i> (str)</dt>
-<dd>
-name of test to load
-</dd>
-<dt><i>tfn</i> (str)</dt>
-<dd>
-test function name to load tests from
-</dd>
-<dt><i>failed</i> (list of str)</dt>
-<dd>
-list of failed test, if only failed test should be run
-</dd>
-<dt><i>cov</i> (bool)</dt>
-<dd>
-flag indicating collection of coverage data is requested
-</dd>
-<dt><i>covname</i> (str)</dt>
-<dd>
-name of file to be used to assemble the coverage caches
-            filename
-</dd>
-<dt><i>coverase</i> (bool)</dt>
-<dd>
-flag indicating erasure of coverage data is requested
-</dd>
-<dt><i>syspath</i> (list of str)</dt>
-<dd>
-list of directories to be added to sys.path on the
-            remote side
-</dd>
-<dt><i>workdir</i> (str)</dt>
-<dd>
-path name of the working directory
-</dd>
-<dt><i>discover</i> (bool)</dt>
-<dd>
-flag indicating to discover the tests automatically
-</dd>
-<dt><i>discoveryStart</i> (str)</dt>
-<dd>
-directory to start auto-discovery at
-</dd>
-<dt><i>testCases</i> (list of str)</dt>
-<dd>
-list of test cases to be loaded
-</dd>
-<dt><i>debug</i> (bool)</dt>
-<dd>
-flag indicating to run unittest with debugging
-</dd>
-</dl>
-<a NAME="DebuggerInterfacePython.remoteUTRun" ID="DebuggerInterfacePython.remoteUTRun"></a>
-<h4>DebuggerInterfacePython.remoteUTRun</h4>
-<b>remoteUTRun</b>(<i>debug, failfast</i>)
-
-<p>
-        Public method to start a unittest run.
-</p>
-<dl>
-
-<dt><i>debug</i> (bool)</dt>
-<dd>
-flag indicating to run unittest with debugging
-</dd>
-<dt><i>failfast</i> (bool)</dt>
-<dd>
-flag indicating to stop at the first error
-</dd>
-</dl>
-<a NAME="DebuggerInterfacePython.remoteUTStop" ID="DebuggerInterfacePython.remoteUTStop"></a>
-<h4>DebuggerInterfacePython.remoteUTStop</h4>
-<b>remoteUTStop</b>(<i></i>)
-
-<p>
-        Public method to stop a unittest run.
-</p>
 <a NAME="DebuggerInterfacePython.remoteWatchpoint" ID="DebuggerInterfacePython.remoteWatchpoint"></a>
 <h4>DebuggerInterfacePython.remoteWatchpoint</h4>
 <b>remoteWatchpoint</b>(<i>debuggerId, cond, setWatch, temp=False</i>)
--- a/eric7/Documentation/Source/eric7.DocumentationTools.TemplatesListsStyle.html	Mon May 23 17:31:02 2022 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric7.DocumentationTools.TemplatesListsStyle</title>
-<meta charset="UTF-8">
-<link rel="stylesheet" href="styles.css">
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric7.DocumentationTools.TemplatesListsStyle</h1>
-
-<p>
-Module implementing templates for the documentation generator (lists style).
-</p>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>authorInfoTemplate</td></tr><tr><td>classTemplate</td></tr><tr><td>constructorTemplate</td></tr><tr><td>deprecatedTemplate</td></tr><tr><td>eventsListEntryTemplate</td></tr><tr><td>eventsListTemplate</td></tr><tr><td>exceptionsListEntryTemplate</td></tr><tr><td>exceptionsListTemplate</td></tr><tr><td>footerTemplate</td></tr><tr><td>functionTemplate</td></tr><tr><td>headerTemplate</td></tr><tr><td>indexBodyTemplate</td></tr><tr><td>indexListEntryTemplate</td></tr><tr><td>indexListModulesTemplate</td></tr><tr><td>indexListPackagesTemplate</td></tr><tr><td>listEntryDeprecatedTemplate</td></tr><tr><td>listEntryNoneTemplate</td></tr><tr><td>listEntrySimpleTemplate</td></tr><tr><td>listEntryTemplate</td></tr><tr><td>listTemplate</td></tr><tr><td>methodTemplate</td></tr><tr><td>moduleTemplate</td></tr><tr><td>paragraphTemplate</td></tr><tr><td>parameterTypesListEntryTemplate</td></tr><tr><td>parametersListEntryTemplate</td></tr><tr><td>parametersListTemplate</td></tr><tr><td>rbFileTemplate</td></tr><tr><td>rbModuleTemplate</td></tr><tr><td>rbModulesClassTemplate</td></tr><tr><td>returnTypesTemplate</td></tr><tr><td>returnsTemplate</td></tr><tr><td>seeLinkTemplate</td></tr><tr><td>seeListEntryTemplate</td></tr><tr><td>seeListTemplate</td></tr><tr><td>signalsListEntryTemplate</td></tr><tr><td>signalsListTemplate</td></tr><tr><td>sinceInfoTemplate</td></tr><tr><td>yieldTypesTemplate</td></tr><tr><td>yieldsTemplate</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric7/Documentation/Source/eric7.EricNetwork.EricJsonClient.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.EricNetwork.EricJsonClient.html	Mon May 23 18:15:10 2022 +0200
@@ -96,7 +96,7 @@
 
 <dt><i>host</i> (str)</dt>
 <dd>
-ip address the background service is listening
+IP address the background service is listening
 </dd>
 <dt><i>port</i> (int)</dt>
 <dd>
--- a/eric7/Documentation/Source/eric7.EricNetwork.EricJsonServer.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.EricNetwork.EricJsonServer.html	Mon May 23 18:15:10 2022 +0200
@@ -148,7 +148,7 @@
 
 <dt><i>idString</i> (str)</dt>
 <dd>
-id of the connection been disconnected
+id of the connection
 </dd>
 </dl>
 <a NAME="EricJsonServer.connectionNames" ID="EricJsonServer.connectionNames"></a>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.EricNetwork.EricJsonStreamReader.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,183 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.EricNetwork.EricJsonStreamReader</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.EricNetwork.EricJsonStreamReader</h1>
+
+<p>
+Module implementing a JSON based reader class.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#EricJsonReader">EricJsonReader</a></td>
+<td>Class implementing a JSON based reader class.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="EricJsonReader" ID="EricJsonReader"></a>
+<h2>EricJsonReader</h2>
+
+<p>
+    Class implementing a JSON based reader class.
+</p>
+<p>
+    The reader is responsible for opening a socket to listen for writer
+    connections.
+</p>
+<h3>Signals</h3>
+<dl>
+
+<dt>dataReceived(object)</dt>
+<dd>
+emitted after a data object was received
+</dd>
+</dl>
+<h3>Derived from</h3>
+QTcpServer
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#EricJsonReader.__init__">EricJsonReader</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#EricJsonReader.__handleDisconnect">__handleDisconnect</a></td>
+<td>Private slot handling a disconnect of the writer.</td>
+</tr>
+<tr>
+<td><a href="#EricJsonReader.__receiveJson">__receiveJson</a></td>
+<td>Private slot handling received data from the writer.</td>
+</tr>
+<tr>
+<td><a href="#EricJsonReader.address">address</a></td>
+<td>Public method to get the host address.</td>
+</tr>
+<tr>
+<td><a href="#EricJsonReader.handleNewConnection">handleNewConnection</a></td>
+<td>Public slot for new incoming connections from a writer.</td>
+</tr>
+<tr>
+<td><a href="#EricJsonReader.port">port</a></td>
+<td>Public method to get the port number to connect to.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="EricJsonReader.__init__" ID="EricJsonReader.__init__"></a>
+<h4>EricJsonReader (Constructor)</h4>
+<b>EricJsonReader</b>(<i>name="", ip=None, parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>name</i> (str)</dt>
+<dd>
+name of the server (used for output only)
+</dd>
+<dt><i>ip</i> (str)</dt>
+<dd>
+IP address to listen at
+</dd>
+<dt><i>parent</i> (QObject)</dt>
+<dd>
+parent object
+</dd>
+</dl>
+<a NAME="EricJsonReader.__handleDisconnect" ID="EricJsonReader.__handleDisconnect"></a>
+<h4>EricJsonReader.__handleDisconnect</h4>
+<b>__handleDisconnect</b>(<i></i>)
+
+<p>
+        Private slot handling a disconnect of the writer.
+</p>
+<a NAME="EricJsonReader.__receiveJson" ID="EricJsonReader.__receiveJson"></a>
+<h4>EricJsonReader.__receiveJson</h4>
+<b>__receiveJson</b>(<i></i>)
+
+<p>
+        Private slot handling received data from the writer.
+</p>
+<a NAME="EricJsonReader.address" ID="EricJsonReader.address"></a>
+<h4>EricJsonReader.address</h4>
+<b>address</b>(<i></i>)
+
+<p>
+        Public method to get the host address.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+host address
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="EricJsonReader.handleNewConnection" ID="EricJsonReader.handleNewConnection"></a>
+<h4>EricJsonReader.handleNewConnection</h4>
+<b>handleNewConnection</b>(<i></i>)
+
+<p>
+        Public slot for new incoming connections from a writer.
+</p>
+<a NAME="EricJsonReader.port" ID="EricJsonReader.port"></a>
+<h4>EricJsonReader.port</h4>
+<b>port</b>(<i></i>)
+
+<p>
+        Public method to get the port number to connect to.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+port number
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+int
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.EricNetwork.EricJsonStreamWriter.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,117 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.EricNetwork.EricJsonStreamWriter</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.EricNetwork.EricJsonStreamWriter</h1>
+
+<p>
+Module implementing a JSON based writer class.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#EricJsonWriter">EricJsonWriter</a></td>
+<td>Class implementing a JSON based writer class.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="EricJsonWriter" ID="EricJsonWriter"></a>
+<h2>EricJsonWriter</h2>
+
+<p>
+    Class implementing a JSON based writer class.
+</p>
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#EricJsonWriter.__init__">EricJsonWriter</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#EricJsonWriter.close">close</a></td>
+<td>Public method to close the stream.</td>
+</tr>
+<tr>
+<td><a href="#EricJsonWriter.write">write</a></td>
+<td>Public method to send JSON serializable data.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="EricJsonWriter.__init__" ID="EricJsonWriter.__init__"></a>
+<h4>EricJsonWriter (Constructor)</h4>
+<b>EricJsonWriter</b>(<i>host, port</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>host</i> (str)</dt>
+<dd>
+IP address the reader is listening on
+</dd>
+<dt><i>port</i> (int)</dt>
+<dd>
+port the reader is listening on
+</dd>
+</dl>
+<a NAME="EricJsonWriter.close" ID="EricJsonWriter.close"></a>
+<h4>EricJsonWriter.close</h4>
+<b>close</b>(<i></i>)
+
+<p>
+        Public method to close the stream.
+</p>
+<a NAME="EricJsonWriter.write" ID="EricJsonWriter.write"></a>
+<h4>EricJsonWriter.write</h4>
+<b>write</b>(<i>data</i>)
+
+<p>
+        Public method to send JSON serializable data.
+</p>
+<dl>
+
+<dt><i>data</i> (object)</dt>
+<dd>
+JSON serializable object to be sent
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/eric7/Documentation/Source/eric7.EricWidgets.EricPlainTextDialog.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.EricWidgets.EricPlainTextDialog.html	Mon May 23 18:15:10 2022 +0200
@@ -62,6 +62,10 @@
 <td><a href="#EricPlainTextDialog.on_copyButton_clicked">on_copyButton_clicked</a></td>
 <td>Private slot to copy the text to the clipboard.</td>
 </tr>
+<tr>
+<td><a href="#EricPlainTextDialog.toPlainText">toPlainText</a></td>
+<td>Public method to get the plain text.</td>
+</tr>
 </table>
 <h3>Static Methods</h3>
 
@@ -71,24 +75,28 @@
 
 <a NAME="EricPlainTextDialog.__init__" ID="EricPlainTextDialog.__init__"></a>
 <h4>EricPlainTextDialog (Constructor)</h4>
-<b>EricPlainTextDialog</b>(<i>title="", text="", parent=None</i>)
+<b>EricPlainTextDialog</b>(<i>title="", text="", readOnly=True, parent=None</i>)
 
 <p>
         Constructor
 </p>
 <dl>
 
-<dt><i>title</i> (str)</dt>
+<dt><i>title</i> (str (optional))</dt>
 <dd>
-title of the window
+title of the dialog (defaults to "")
 </dd>
-<dt><i>text</i> (str)</dt>
+<dt><i>text</i> (str (optional))</dt>
 <dd>
-text to be shown
+text to be shown (defaults to "")
 </dd>
-<dt><i>parent</i> (QWidget)</dt>
+<dt><i>readOnly</i> (bool (optional))</dt>
 <dd>
-reference to the parent widget
+flag indicating a read-only dialog (defaults to True)
+</dd>
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
 </dd>
 </dl>
 <a NAME="EricPlainTextDialog.on_copyButton_clicked" ID="EricPlainTextDialog.on_copyButton_clicked"></a>
@@ -98,6 +106,25 @@
 <p>
         Private slot to copy the text to the clipboard.
 </p>
+<a NAME="EricPlainTextDialog.toPlainText" ID="EricPlainTextDialog.toPlainText"></a>
+<h4>EricPlainTextDialog.toPlainText</h4>
+<b>toPlainText</b>(<i></i>)
+
+<p>
+        Public method to get the plain text.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+contents of the plain text edit
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/eric7/Documentation/Source/eric7.Globals.__init__.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Globals.__init__.html	Mon May 23 18:15:10 2022 +0200
@@ -14,7 +14,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>configDir</td></tr><tr><td>recentNameBreakpointConditions</td></tr><tr><td>recentNameBreakpointFiles</td></tr><tr><td>recentNameFiles</td></tr><tr><td>recentNameHexFiles</td></tr><tr><td>recentNameHosts</td></tr><tr><td>recentNameMultiProject</td></tr><tr><td>recentNameProject</td></tr><tr><td>recentNameUnittestDiscoverHistory</td></tr><tr><td>recentNameUnittestFileHistory</td></tr><tr><td>recentNameUnittestTestnameHistory</td></tr><tr><td>settingsNameGlobal</td></tr><tr><td>settingsNameOrganization</td></tr><tr><td>settingsNameRecent</td></tr>
+<tr><td>configDir</td></tr><tr><td>recentNameBreakpointConditions</td></tr><tr><td>recentNameBreakpointFiles</td></tr><tr><td>recentNameFiles</td></tr><tr><td>recentNameHexFiles</td></tr><tr><td>recentNameHosts</td></tr><tr><td>recentNameMultiProject</td></tr><tr><td>recentNameProject</td></tr><tr><td>recentNameTestDiscoverHistory</td></tr><tr><td>recentNameTestEnvironment</td></tr><tr><td>recentNameTestFileHistory</td></tr><tr><td>recentNameTestFramework</td></tr><tr><td>recentNameTestNameHistory</td></tr><tr><td>settingsNameGlobal</td></tr><tr><td>settingsNameOrganization</td></tr><tr><td>settingsNameRecent</td></tr>
 </table>
 <h3>Classes</h3>
 
--- a/eric7/Documentation/Source/eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Plugins.WizardPlugins.InputDialogWizard.InputDialogWizardDialog.html	Mon May 23 18:15:10 2022 +0200
@@ -63,6 +63,10 @@
 <td>Constructor</td>
 </tr>
 <tr>
+<td><a href="#InputDialogWizardDialog.__typeSelectButtonToggled">__typeSelectButtonToggled</a></td>
+<td>Private slot to modify the dialog according to the selected type.</td>
+</tr>
+<tr>
 <td><a href="#InputDialogWizardDialog.getCode">getCode</a></td>
 <td>Public method to get the source code for Qt6.</td>
 </tr>
@@ -74,10 +78,6 @@
 <td><a href="#InputDialogWizardDialog.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
 <td>Private slot called by a button of the button box clicked.</td>
 </tr>
-<tr>
-<td><a href="#InputDialogWizardDialog.on_rItem_toggled">on_rItem_toggled</a></td>
-<td>Private slot to perform actions dependant on the item type selection.</td>
-</tr>
 </table>
 <h3>Static Methods</h3>
 
@@ -99,6 +99,24 @@
 parent widget (QWidget)
 </dd>
 </dl>
+<a NAME="InputDialogWizardDialog.__typeSelectButtonToggled" ID="InputDialogWizardDialog.__typeSelectButtonToggled"></a>
+<h4>InputDialogWizardDialog.__typeSelectButtonToggled</h4>
+<b>__typeSelectButtonToggled</b>(<i>checked</i>)
+
+<p>
+        Private slot to modify the dialog according to the selected type.
+</p>
+<p>
+        Note: This is a multiplexed slot. Therefore it just reacts upon a
+        positive check state (i.e. checked == True).
+</p>
+<dl>
+
+<dt><i>checked</i> (bool)</dt>
+<dd>
+flag indicating the checked state
+</dd>
+</dl>
 <a NAME="InputDialogWizardDialog.getCode" ID="InputDialogWizardDialog.getCode"></a>
 <h4>InputDialogWizardDialog.getCode</h4>
 <b>getCode</b>(<i>indLevel, indString</i>)
@@ -144,20 +162,6 @@
 button that was clicked (QAbstractButton)
 </dd>
 </dl>
-<a NAME="InputDialogWizardDialog.on_rItem_toggled" ID="InputDialogWizardDialog.on_rItem_toggled"></a>
-<h4>InputDialogWizardDialog.on_rItem_toggled</h4>
-<b>on_rItem_toggled</b>(<i>checked</i>)
-
-<p>
-        Private slot to perform actions dependant on the item type selection.
-</p>
-<dl>
-
-<dt><i>checked</i></dt>
-<dd>
-flag indicating the checked state (boolean)
-</dd>
-</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
\ No newline at end of file
--- a/eric7/Documentation/Source/eric7.Project.Project.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Project.Project.html	Mon May 23 18:15:10 2022 +0200
@@ -741,6 +741,10 @@
 <td>Public method to get the names of the project specific dictionaries.</td>
 </tr>
 <tr>
+<td><a href="#Project.getProjectExecPath">getProjectExecPath</a></td>
+<td>Public method to get the executable search path prefix of the project.</td>
+</tr>
+<tr>
 <td><a href="#Project.getProjectFile">getProjectFile</a></td>
 <td>Public method to get the path of the project file.</td>
 </tr>
@@ -749,6 +753,10 @@
 <td>Public method to get the file entries of the given type.</td>
 </tr>
 <tr>
+<td><a href="#Project.getProjectInterpreter">getProjectInterpreter</a></td>
+<td>Public method to get the path of the interpreter used by the project.</td>
+</tr>
+<tr>
 <td><a href="#Project.getProjectLanguage">getProjectLanguage</a></td>
 <td>Public method to get the project's programming language.</td>
 </tr>
@@ -769,6 +777,10 @@
 <td>Public method to get the project's programming language.</td>
 </tr>
 <tr>
+<td><a href="#Project.getProjectTestingFramework">getProjectTestingFramework</a></td>
+<td>Public method to get the testing framework name of the project.</td>
+</tr>
+<tr>
 <td><a href="#Project.getProjectType">getProjectType</a></td>
 <td>Public method to get the type of the project.</td>
 </tr>
@@ -777,6 +789,10 @@
 <td>Public method to get the list of supported project types.</td>
 </tr>
 <tr>
+<td><a href="#Project.getProjectVenv">getProjectVenv</a></td>
+<td>Public method to get the name of the virtual environment used by the project.</td>
+</tr>
+<tr>
 <td><a href="#Project.getProjectVersion">getProjectVersion</a></td>
 <td>Public mehod to get the version number of the project.</td>
 </tr>
@@ -2557,18 +2573,27 @@
 <p>
         Public method to return the main script filename.
 </p>
+<p>
+        The normalized name is the name of the main script prepended with
+        the project path.
+</p>
 <dl>
 
-<dt><i>normalized</i></dt>
+<dt><i>normalized</i> (bool)</dt>
 <dd>
 flag indicating a normalized filename is wanted
-            (boolean)
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-filename of the projects main script (string)
+filename of the projects main script
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="Project.getMenu" ID="Project.getMenu"></a>
@@ -2701,6 +2726,25 @@
             project specific word and exclude list
 </dd>
 </dl>
+<a NAME="Project.getProjectExecPath" ID="Project.getProjectExecPath"></a>
+<h4>Project.getProjectExecPath</h4>
+<b>getProjectExecPath</b>(<i></i>)
+
+<p>
+        Public method to get the executable search path prefix of the project.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+executable search path prefix
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="Project.getProjectFile" ID="Project.getProjectFile"></a>
 <h4>Project.getProjectFile</h4>
 <b>getProjectFile</b>(<i></i>)
@@ -2752,6 +2796,34 @@
 raised when an unsupported file type is given
 </dd>
 </dl>
+<a NAME="Project.getProjectInterpreter" ID="Project.getProjectInterpreter"></a>
+<h4>Project.getProjectInterpreter</h4>
+<b>getProjectInterpreter</b>(<i>resolveGlobal=True</i>)
+
+<p>
+        Public method to get the path of the interpreter used by the project.
+</p>
+<dl>
+
+<dt><i>resolveGlobal</i> (bool)</dt>
+<dd>
+flag indicating to resolve the interpreter using
+            the global interpreter if no project of debugger specific
+            environment was configured
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+path of the project's interpreter
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="Project.getProjectLanguage" ID="Project.getProjectLanguage"></a>
 <h4>Project.getProjectLanguage</h4>
 <b>getProjectLanguage</b>(<i></i>)
@@ -2820,6 +2892,25 @@
 programming language (string)
 </dd>
 </dl>
+<a NAME="Project.getProjectTestingFramework" ID="Project.getProjectTestingFramework"></a>
+<h4>Project.getProjectTestingFramework</h4>
+<b>getProjectTestingFramework</b>(<i></i>)
+
+<p>
+        Public method to get the testing framework name of the project.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+testing framework name of the project
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="Project.getProjectType" ID="Project.getProjectType"></a>
 <h4>Project.getProjectType</h4>
 <b>getProjectType</b>(<i></i>)
@@ -2854,6 +2945,34 @@
 reference to the dictionary of project types.
 </dd>
 </dl>
+<a NAME="Project.getProjectVenv" ID="Project.getProjectVenv"></a>
+<h4>Project.getProjectVenv</h4>
+<b>getProjectVenv</b>(<i>resolveDebugger=True</i>)
+
+<p>
+        Public method to get the name of the virtual environment used by the
+        project.
+</p>
+<dl>
+
+<dt><i>resolveDebugger</i> (bool)</dt>
+<dd>
+flag indicating to resolve the virtual
+            environment name via the debugger settings if none was configured
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+name of the project's virtual environment
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="Project.getProjectVersion" ID="Project.getProjectVersion"></a>
 <h4>Project.getProjectVersion</h4>
 <b>getProjectVersion</b>(<i></i>)
@@ -2926,16 +3045,21 @@
 </p>
 <dl>
 
-<dt><i>normalized</i></dt>
+<dt><i>normalized</i> (bool)</dt>
 <dd>
 flag indicating a normalized filename is wanted
-            (boolean)
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-list of the projects scripts (list of string)
+list of the projects scripts
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
 </dd>
 </dl>
 <a NAME="Project.getStatusMonitorAutoUpdate" ID="Project.getStatusMonitorAutoUpdate"></a>
--- a/eric7/Documentation/Source/eric7.Project.PropertiesDialog.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Project.PropertiesDialog.html	Mon May 23 18:15:10 2022 +0200
@@ -71,7 +71,7 @@
 <td>Private slot to handle a change of the project directory.</td>
 </tr>
 <tr>
-<td><a href="#PropertiesDialog.on_languageComboBox_currentIndexChanged">on_languageComboBox_currentIndexChanged</a></td>
+<td><a href="#PropertiesDialog.on_languageComboBox_currentTextChanged">on_languageComboBox_currentTextChanged</a></td>
 <td>Private slot handling the selection of a programming language.</td>
 </tr>
 <tr>
@@ -175,18 +175,18 @@
 name of the project directory (string)
 </dd>
 </dl>
-<a NAME="PropertiesDialog.on_languageComboBox_currentIndexChanged" ID="PropertiesDialog.on_languageComboBox_currentIndexChanged"></a>
-<h4>PropertiesDialog.on_languageComboBox_currentIndexChanged</h4>
-<b>on_languageComboBox_currentIndexChanged</b>(<i>index</i>)
+<a NAME="PropertiesDialog.on_languageComboBox_currentTextChanged" ID="PropertiesDialog.on_languageComboBox_currentTextChanged"></a>
+<h4>PropertiesDialog.on_languageComboBox_currentTextChanged</h4>
+<b>on_languageComboBox_currentTextChanged</b>(<i>language</i>)
 
 <p>
         Private slot handling the selection of a programming language.
 </p>
 <dl>
 
-<dt><i>index</i> (int)</dt>
+<dt><i>language</i> (str)</dt>
 <dd>
-index of the current item
+text of the current item
 </dd>
 </dl>
 <a NAME="PropertiesDialog.on_mainscriptPicker_aboutToShowPathPickerDialog" ID="PropertiesDialog.on_mainscriptPicker_aboutToShowPathPickerDialog"></a>
--- a/eric7/Documentation/Source/eric7.QScintilla.Editor.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.QScintilla.Editor.html	Mon May 23 18:15:10 2022 +0200
@@ -2492,7 +2492,13 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-file name of the coverage file (string)
+file name of the coverage file
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
 </dd>
 </dl>
 <a NAME="Editor.__getEditorConfig" ID="Editor.__getEditorConfig"></a>
@@ -4423,7 +4429,7 @@
 </p>
 <a NAME="Editor.codeCoverageShowAnnotations" ID="Editor.codeCoverageShowAnnotations"></a>
 <h4>Editor.codeCoverageShowAnnotations</h4>
-<b>codeCoverageShowAnnotations</b>(<i>silent=False</i>)
+<b>codeCoverageShowAnnotations</b>(<i>silent=False, coverageFile=None</i>)
 
 <p>
         Public method to handle the show code coverage annotations context
@@ -4431,9 +4437,15 @@
 </p>
 <dl>
 
-<dt><i>silent</i></dt>
-<dd>
-flag indicating to not show any dialog (boolean)
+<dt><i>silent</i> (bool (optional))</dt>
+<dd>
+flag indicating to not show any dialog (defaults to
+            False)
+</dd>
+<dt><i>coverageFile</i> (str (optional))</dt>
+<dd>
+path of the file containing the code coverage data
+            (defaults to None)
 </dd>
 </dl>
 <a NAME="Editor.collapseFoldWithChildren" ID="Editor.collapseFoldWithChildren"></a>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestExecutor.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,297 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.Interfaces.PytestExecutor</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.Interfaces.PytestExecutor</h1>
+
+<p>
+Module implementing the executor for the 'pytest' framework.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#PytestExecutor">PytestExecutor</a></td>
+<td>Class implementing the executor for the 'pytest' framework.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="PytestExecutor" ID="PytestExecutor"></a>
+<h2>PytestExecutor</h2>
+
+<p>
+    Class implementing the executor for the 'pytest' framework.
+</p>
+<h3>Derived from</h3>
+TestExecutorBase
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>module</td></tr><tr><td>name</td></tr><tr><td>runner</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#PytestExecutor.__init__">PytestExecutor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#PytestExecutor.__nodeid2testname">__nodeid2testname</a></td>
+<td>Private method to convert a nodeid to a test name.</td>
+</tr>
+<tr>
+<td><a href="#PytestExecutor.__normalizeModuleName">__normalizeModuleName</a></td>
+<td>Private method to convert a module name reported by pytest to Python conventions.</td>
+</tr>
+<tr>
+<td><a href="#PytestExecutor.__processData">__processData</a></td>
+<td>Private slot to process the received data.</td>
+</tr>
+<tr>
+<td><a href="#PytestExecutor.createArguments">createArguments</a></td>
+<td>Public method to create the arguments needed to start the test process.</td>
+</tr>
+<tr>
+<td><a href="#PytestExecutor.finished">finished</a></td>
+<td>Public method handling the unit test process been finished.</td>
+</tr>
+<tr>
+<td><a href="#PytestExecutor.getVersions">getVersions</a></td>
+<td>Public method to get the test framework version and version information of its installed plugins.</td>
+</tr>
+<tr>
+<td><a href="#PytestExecutor.hasCoverage">hasCoverage</a></td>
+<td>Public method to get the test framework version and version information of its installed plugins.</td>
+</tr>
+<tr>
+<td><a href="#PytestExecutor.start">start</a></td>
+<td>Public method to start the testing process.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="PytestExecutor.__init__" ID="PytestExecutor.__init__"></a>
+<h4>PytestExecutor (Constructor)</h4>
+<b>PytestExecutor</b>(<i>testWidget</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>testWidget</i> (TestingWidget)</dt>
+<dd>
+reference to the unit test widget
+</dd>
+</dl>
+<a NAME="PytestExecutor.__nodeid2testname" ID="PytestExecutor.__nodeid2testname"></a>
+<h4>PytestExecutor.__nodeid2testname</h4>
+<b>__nodeid2testname</b>(<i>nodeid</i>)
+
+<p>
+        Private method to convert a nodeid to a test name.
+</p>
+<dl>
+
+<dt><i>nodeid</i> (str)</dt>
+<dd>
+nodeid to be converted
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+test name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="PytestExecutor.__normalizeModuleName" ID="PytestExecutor.__normalizeModuleName"></a>
+<h4>PytestExecutor.__normalizeModuleName</h4>
+<b>__normalizeModuleName</b>(<i>name</i>)
+
+<p>
+        Private method to convert a module name reported by pytest to Python
+        conventions.
+</p>
+<p>
+        This method strips the extensions '.pyw' and '.py' first and replaces
+        '/' and '\' thereafter.
+</p>
+<dl>
+
+<dt><i>name</i> (str)</dt>
+<dd>
+module name reported by pytest
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+module name iaw. Python conventions
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="PytestExecutor.__processData" ID="PytestExecutor.__processData"></a>
+<h4>PytestExecutor.__processData</h4>
+<b>__processData</b>(<i>data</i>)
+
+<p>
+        Private slot to process the received data.
+</p>
+<dl>
+
+<dt><i>data</i> (dict)</dt>
+<dd>
+data object received
+</dd>
+</dl>
+<a NAME="PytestExecutor.createArguments" ID="PytestExecutor.createArguments"></a>
+<h4>PytestExecutor.createArguments</h4>
+<b>createArguments</b>(<i>config</i>)
+
+<p>
+        Public method to create the arguments needed to start the test process.
+</p>
+<dl>
+
+<dt><i>config</i> (TestConfig)</dt>
+<dd>
+configuration for the test execution
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of process arguments
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<a NAME="PytestExecutor.finished" ID="PytestExecutor.finished"></a>
+<h4>PytestExecutor.finished</h4>
+<b>finished</b>(<i></i>)
+
+<p>
+        Public method handling the unit test process been finished.
+</p>
+<p>
+        This method should read the results (if necessary) and emit the signal
+        testFinished.
+</p>
+<a NAME="PytestExecutor.getVersions" ID="PytestExecutor.getVersions"></a>
+<h4>PytestExecutor.getVersions</h4>
+<b>getVersions</b>(<i>interpreter</i>)
+
+<p>
+        Public method to get the test framework version and version information
+        of its installed plugins.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the framework name and version and the
+            list of available plugins with name and version each
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="PytestExecutor.hasCoverage" ID="PytestExecutor.hasCoverage"></a>
+<h4>PytestExecutor.hasCoverage</h4>
+<b>hasCoverage</b>(<i>interpreter</i>)
+
+<p>
+        Public method to get the test framework version and version information
+        of its installed plugins.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the availability of coverage functionality
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="PytestExecutor.start" ID="PytestExecutor.start"></a>
+<h4>PytestExecutor.start</h4>
+<b>start</b>(<i>config, pythonpath</i>)
+
+<p>
+        Public method to start the testing process.
+</p>
+<dl>
+
+<dt><i>config</i> (TestConfig)</dt>
+<dd>
+configuration for the test execution
+</dd>
+<dt><i>pythonpath</i> (list of str)</dt>
+<dd>
+list of directories to be added to the Python path
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestRunner.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,364 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.Interfaces.PytestRunner</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.Interfaces.PytestRunner</h1>
+
+<p>
+Module implementing the test runner script for the 'pytest' framework.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#EricPlugin">EricPlugin</a></td>
+<td>Class implementing a pytest plugin which reports the data in a format suitable for the PytestExecutor.</td>
+</tr>
+<tr>
+<td><a href="#GetPluginVersionsPlugin">GetPluginVersionsPlugin</a></td>
+<td>Class implementing a pytest plugin to extract the version info of all installed plugins.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#getVersions">getVersions</a></td>
+<td>Function to determine the framework version and versions of all available plugins.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="EricPlugin" ID="EricPlugin"></a>
+<h2>EricPlugin</h2>
+
+<p>
+    Class implementing a pytest plugin which reports the data in a format
+    suitable for the PytestExecutor.
+</p>
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#EricPlugin.__init__">EricPlugin</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#EricPlugin.__initializeReportData">__initializeReportData</a></td>
+<td>Private method to initialize attributes for data collection.</td>
+</tr>
+<tr>
+<td><a href="#EricPlugin.pytest_collectreport">pytest_collectreport</a></td>
+<td>Public method called by pytest after the tests have been collected.</td>
+</tr>
+<tr>
+<td><a href="#EricPlugin.pytest_itemcollected">pytest_itemcollected</a></td>
+<td>Public malled by pytest after a test item has been collected.</td>
+</tr>
+<tr>
+<td><a href="#EricPlugin.pytest_report_header">pytest_report_header</a></td>
+<td>Public method called by pytest before any reporting.</td>
+</tr>
+<tr>
+<td><a href="#EricPlugin.pytest_runtest_logfinish">pytest_runtest_logfinish</a></td>
+<td>Public method called by pytest after a test has been completed.</td>
+</tr>
+<tr>
+<td><a href="#EricPlugin.pytest_runtest_logreport">pytest_runtest_logreport</a></td>
+<td>Public method called by pytest when a test phase (setup, call and teardown) has been completed.</td>
+</tr>
+<tr>
+<td><a href="#EricPlugin.pytest_runtest_logstart">pytest_runtest_logstart</a></td>
+<td>Public method called by pytest before running a test.</td>
+</tr>
+<tr>
+<td><a href="#EricPlugin.pytest_sessionfinish">pytest_sessionfinish</a></td>
+<td>Public method called by pytest after the whole test run finished.</td>
+</tr>
+<tr>
+<td><a href="#EricPlugin.pytest_sessionstart">pytest_sessionstart</a></td>
+<td>Public method called by pytest before performing collection and entering the run test loop.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="EricPlugin.__init__" ID="EricPlugin.__init__"></a>
+<h4>EricPlugin (Constructor)</h4>
+<b>EricPlugin</b>(<i>writer</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>writer</i> (EricJsonWriter)</dt>
+<dd>
+reference to the object to write the results to
+</dd>
+</dl>
+<a NAME="EricPlugin.__initializeReportData" ID="EricPlugin.__initializeReportData"></a>
+<h4>EricPlugin.__initializeReportData</h4>
+<b>__initializeReportData</b>(<i></i>)
+
+<p>
+        Private method to initialize attributes for data collection.
+</p>
+<a NAME="EricPlugin.pytest_collectreport" ID="EricPlugin.pytest_collectreport"></a>
+<h4>EricPlugin.pytest_collectreport</h4>
+<b>pytest_collectreport</b>(<i>report</i>)
+
+<p>
+        Public method called by pytest after the tests have been collected.
+</p>
+<dl>
+
+<dt><i>report</i> (CollectReport)</dt>
+<dd>
+reference to the report object
+</dd>
+</dl>
+<a NAME="EricPlugin.pytest_itemcollected" ID="EricPlugin.pytest_itemcollected"></a>
+<h4>EricPlugin.pytest_itemcollected</h4>
+<b>pytest_itemcollected</b>(<i>item</i>)
+
+<p>
+        Public malled by pytest after a test item has been collected.
+</p>
+<dl>
+
+<dt><i>item</i> (Item)</dt>
+<dd>
+reference to the collected test item
+</dd>
+</dl>
+<a NAME="EricPlugin.pytest_report_header" ID="EricPlugin.pytest_report_header"></a>
+<h4>EricPlugin.pytest_report_header</h4>
+<b>pytest_report_header</b>(<i>config, startdir</i>)
+
+<p>
+        Public method called by pytest before any reporting.
+</p>
+<dl>
+
+<dt><i>config</i> (Config)</dt>
+<dd>
+reference to the configuration object
+</dd>
+<dt><i>startdir</i> (LocalPath)</dt>
+<dd>
+starting directory
+</dd>
+</dl>
+<a NAME="EricPlugin.pytest_runtest_logfinish" ID="EricPlugin.pytest_runtest_logfinish"></a>
+<h4>EricPlugin.pytest_runtest_logfinish</h4>
+<b>pytest_runtest_logfinish</b>(<i>nodeid, location</i>)
+
+<p>
+        Public method called by pytest after a test has been completed.
+</p>
+<dl>
+
+<dt><i>nodeid</i> (str)</dt>
+<dd>
+node id of the test item
+</dd>
+<dt><i>location</i> (tuple of (str, int, str))</dt>
+<dd>
+tuple containing the file name, the line number and
+            the test name
+</dd>
+</dl>
+<a NAME="EricPlugin.pytest_runtest_logreport" ID="EricPlugin.pytest_runtest_logreport"></a>
+<h4>EricPlugin.pytest_runtest_logreport</h4>
+<b>pytest_runtest_logreport</b>(<i>report</i>)
+
+<p>
+        Public method called by pytest when a test phase (setup, call and
+            teardown) has been completed.
+</p>
+<dl>
+
+<dt><i>report</i> (TestReport)</dt>
+<dd>
+reference to the test report object
+</dd>
+</dl>
+<a NAME="EricPlugin.pytest_runtest_logstart" ID="EricPlugin.pytest_runtest_logstart"></a>
+<h4>EricPlugin.pytest_runtest_logstart</h4>
+<b>pytest_runtest_logstart</b>(<i>nodeid, location</i>)
+
+<p>
+        Public method called by pytest before running a test.
+</p>
+<dl>
+
+<dt><i>nodeid</i> (str)</dt>
+<dd>
+node id of the test item
+</dd>
+<dt><i>location</i> (tuple of (str, int, str))</dt>
+<dd>
+tuple containing the file name, the line number and
+            the test name
+</dd>
+</dl>
+<a NAME="EricPlugin.pytest_sessionfinish" ID="EricPlugin.pytest_sessionfinish"></a>
+<h4>EricPlugin.pytest_sessionfinish</h4>
+<b>pytest_sessionfinish</b>(<i>session, exitstatus</i>)
+
+<p>
+        Public method called by pytest after the whole test run finished.
+</p>
+<dl>
+
+<dt><i>session</i> (Session)</dt>
+<dd>
+reference to the session object
+</dd>
+<dt><i>exitstatus</i> (int or ExitCode)</dt>
+<dd>
+exit status
+</dd>
+</dl>
+<a NAME="EricPlugin.pytest_sessionstart" ID="EricPlugin.pytest_sessionstart"></a>
+<h4>EricPlugin.pytest_sessionstart</h4>
+<b>pytest_sessionstart</b>(<i>session</i>)
+
+<p>
+        Public method called by pytest before performing collection and
+        entering the run test loop.
+</p>
+<dl>
+
+<dt><i>session</i> (Session)</dt>
+<dd>
+reference to the session object
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="GetPluginVersionsPlugin" ID="GetPluginVersionsPlugin"></a>
+<h2>GetPluginVersionsPlugin</h2>
+
+<p>
+    Class implementing a pytest plugin to extract the version info of all
+    installed plugins.
+</p>
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#GetPluginVersionsPlugin.__init__">GetPluginVersionsPlugin</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#GetPluginVersionsPlugin.getVersions">getVersions</a></td>
+<td>Public method to get the assembled list of plugin versions.</td>
+</tr>
+<tr>
+<td><a href="#GetPluginVersionsPlugin.pytest_cmdline_main">pytest_cmdline_main</a></td>
+<td>Public method called for performing the main command line action.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="GetPluginVersionsPlugin.__init__" ID="GetPluginVersionsPlugin.__init__"></a>
+<h4>GetPluginVersionsPlugin (Constructor)</h4>
+<b>GetPluginVersionsPlugin</b>(<i></i>)
+
+<p>
+        Constructor
+</p>
+<a NAME="GetPluginVersionsPlugin.getVersions" ID="GetPluginVersionsPlugin.getVersions"></a>
+<h4>GetPluginVersionsPlugin.getVersions</h4>
+<b>getVersions</b>(<i></i>)
+
+<p>
+        Public method to get the assembled list of plugin versions.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of collected plugin versions
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of dict
+</dd>
+</dl>
+<a NAME="GetPluginVersionsPlugin.pytest_cmdline_main" ID="GetPluginVersionsPlugin.pytest_cmdline_main"></a>
+<h4>GetPluginVersionsPlugin.pytest_cmdline_main</h4>
+<b>pytest_cmdline_main</b>(<i>config</i>)
+
+<p>
+        Public method called for performing the main command line action.
+</p>
+<dl>
+
+<dt><i>config</i> (Config)</dt>
+<dd>
+pytest config object
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="getVersions" ID="getVersions"></a>
+<h2>getVersions</h2>
+<b>getVersions</b>(<i></i>)
+
+<p>
+    Function to determine the framework version and versions of all available
+    plugins.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.Testing.Interfaces.TestExecutorBase.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,520 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.Interfaces.TestExecutorBase</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.Interfaces.TestExecutorBase</h1>
+
+<p>
+Module implementing the executor base class for the various testing frameworks
+and supporting classes.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestConfig">TestConfig</a></td>
+<td>Class containing the test run configuration.</td>
+</tr>
+<tr>
+<td><a href="#TestExecutorBase">TestExecutorBase</a></td>
+<td>Base class for test framework specific implementations.</td>
+</tr>
+<tr>
+<td><a href="#TestResult">TestResult</a></td>
+<td>Class containing the test result data.</td>
+</tr>
+<tr>
+<td><a href="#TestResultCategory">TestResultCategory</a></td>
+<td>Class defining the supported result categories.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="TestConfig" ID="TestConfig"></a>
+<h2>TestConfig</h2>
+
+<p>
+    Class containing the test run configuration.
+</p>
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="TestExecutorBase" ID="TestExecutorBase"></a>
+<h2>TestExecutorBase</h2>
+
+<p>
+    Base class for test framework specific implementations.
+</p>
+<h3>Signals</h3>
+<dl>
+
+<dt>collectError(list of tuple of (str, str)</dt>
+<dd>
+) emitted when errors
+        are encountered during test collection. Tuple elements are the
+        test name and the error message.
+</dd>
+<dt>collected(list of tuple of (str, str, str)</dt>
+<dd>
+) emitted after all tests
+        have been collected. Tuple elements are the test id, the test name and
+        a short description of the test.
+</dd>
+<dt>coverageDataSaved(str)</dt>
+<dd>
+emitted after the coverage data was saved.
+        The element is the absolute path of the coverage data file.
+</dd>
+<dt>startTest(tuple of (str, str, str)</dt>
+<dd>
+emitted before tests are run.
+        Tuple elements are test id, test name and short description.
+</dd>
+<dt>stop()</dt>
+<dd>
+emitted when the test process is being stopped.
+</dd>
+<dt>testFinished(list, str)</dt>
+<dd>
+emitted when the test has finished.
+        The elements are the list of test results and the captured output
+        of the test worker (if any).
+</dd>
+<dt>testResult(TestResult)</dt>
+<dd>
+emitted when a test result is ready
+</dd>
+<dt>testRunAboutToBeStarted()</dt>
+<dd>
+emitted just before the test run will
+        be started.
+</dd>
+<dt>testRunFinished(int, float)</dt>
+<dd>
+emitted when the test run has finished.
+        The elements are the number of tests run and the duration in seconds
+</dd>
+</dl>
+<h3>Derived from</h3>
+QObject
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>module</td></tr><tr><td>name</td></tr><tr><td>runner</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestExecutorBase.isInstalled">isInstalled</a></td>
+<td>Class method to check whether a test framework is installed.</td>
+</tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestExecutorBase.__init__">TestExecutorBase</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#TestExecutorBase._prepareProcess">_prepareProcess</a></td>
+<td>Protected method to prepare a process object to be started.</td>
+</tr>
+<tr>
+<td><a href="#TestExecutorBase.createArguments">createArguments</a></td>
+<td>Public method to create the arguments needed to start the test process.</td>
+</tr>
+<tr>
+<td><a href="#TestExecutorBase.finished">finished</a></td>
+<td>Public method handling the unit test process been finished.</td>
+</tr>
+<tr>
+<td><a href="#TestExecutorBase.getVersions">getVersions</a></td>
+<td>Public method to get the test framework version and version information of its installed plugins.</td>
+</tr>
+<tr>
+<td><a href="#TestExecutorBase.hasCoverage">hasCoverage</a></td>
+<td>Public method to get the test framework version and version information of its installed plugins.</td>
+</tr>
+<tr>
+<td><a href="#TestExecutorBase.readAllOutput">readAllOutput</a></td>
+<td>Public method to read all output of the test process.</td>
+</tr>
+<tr>
+<td><a href="#TestExecutorBase.start">start</a></td>
+<td>Public method to start the testing process.</td>
+</tr>
+<tr>
+<td><a href="#TestExecutorBase.stopIfRunning">stopIfRunning</a></td>
+<td>Public method to stop the testing process, if it is running.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="TestExecutorBase.isInstalled" ID="TestExecutorBase.isInstalled"></a>
+<h4>TestExecutorBase.isInstalled (class method)</h4>
+<b>isInstalled</b>(<i>interpreter</i>)
+
+<p>
+        Class method to check whether a test framework is installed.
+</p>
+<p>
+        The test is performed by checking, if a module loader can found.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the test framework module is installed
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="TestExecutorBase.__init__" ID="TestExecutorBase.__init__"></a>
+<h4>TestExecutorBase (Constructor)</h4>
+<b>TestExecutorBase</b>(<i>testWidget</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>testWidget</i> (TestingWidget)</dt>
+<dd>
+reference to the unit test widget
+</dd>
+</dl>
+<a NAME="TestExecutorBase._prepareProcess" ID="TestExecutorBase._prepareProcess"></a>
+<h4>TestExecutorBase._prepareProcess</h4>
+<b>_prepareProcess</b>(<i>workDir, pythonpath</i>)
+
+<p>
+        Protected method to prepare a process object to be started.
+</p>
+<dl>
+
+<dt><i>workDir</i> (str)</dt>
+<dd>
+working directory
+</dd>
+<dt><i>pythonpath</i> (list of str)</dt>
+<dd>
+list of directories to be added to the Python path
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+prepared process object
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QProcess
+</dd>
+</dl>
+<a NAME="TestExecutorBase.createArguments" ID="TestExecutorBase.createArguments"></a>
+<h4>TestExecutorBase.createArguments</h4>
+<b>createArguments</b>(<i>config</i>)
+
+<p>
+        Public method to create the arguments needed to start the test process.
+</p>
+<dl>
+
+<dt><i>config</i> (TestConfig)</dt>
+<dd>
+configuration for the test execution
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of process arguments
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<dl>
+
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+this method needs to be implemented by
+            derived classes
+</dd>
+</dl>
+<a NAME="TestExecutorBase.finished" ID="TestExecutorBase.finished"></a>
+<h4>TestExecutorBase.finished</h4>
+<b>finished</b>(<i></i>)
+
+<p>
+        Public method handling the unit test process been finished.
+</p>
+<p>
+        This method should read the results (if necessary) and emit the signal
+        testFinished.
+</p>
+<dl>
+
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+this method needs to be implemented by
+            derived classes
+</dd>
+</dl>
+<a NAME="TestExecutorBase.getVersions" ID="TestExecutorBase.getVersions"></a>
+<h4>TestExecutorBase.getVersions</h4>
+<b>getVersions</b>(<i>interpreter</i>)
+
+<p>
+        Public method to get the test framework version and version information
+        of its installed plugins.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the framework name and version and the
+            list of available plugins with name and version each
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<dl>
+
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+this method needs to be implemented by
+            derived classes
+</dd>
+</dl>
+<a NAME="TestExecutorBase.hasCoverage" ID="TestExecutorBase.hasCoverage"></a>
+<h4>TestExecutorBase.hasCoverage</h4>
+<b>hasCoverage</b>(<i>interpreter</i>)
+
+<p>
+        Public method to get the test framework version and version information
+        of its installed plugins.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the availability of coverage functionality
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<dl>
+
+<dt>Raises <b>NotImplementedError</b>:</dt>
+<dd>
+this method needs to be implemented by
+            derived classes
+</dd>
+</dl>
+<a NAME="TestExecutorBase.readAllOutput" ID="TestExecutorBase.readAllOutput"></a>
+<h4>TestExecutorBase.readAllOutput</h4>
+<b>readAllOutput</b>(<i>process=None</i>)
+
+<p>
+        Public method to read all output of the test process.
+</p>
+<dl>
+
+<dt><i>process</i> (QProcess)</dt>
+<dd>
+reference to the process object
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+test process output
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="TestExecutorBase.start" ID="TestExecutorBase.start"></a>
+<h4>TestExecutorBase.start</h4>
+<b>start</b>(<i>config, pythonpath</i>)
+
+<p>
+        Public method to start the testing process.
+</p>
+<dl>
+
+<dt><i>config</i> (TestConfig)</dt>
+<dd>
+configuration for the test execution
+</dd>
+<dt><i>pythonpath</i> (list of str)</dt>
+<dd>
+list of directories to be added to the Python path
+</dd>
+</dl>
+<dl>
+
+<dt>Raises <b>RuntimeError</b>:</dt>
+<dd>
+raised if the the testing process did not start
+</dd>
+</dl>
+<a NAME="TestExecutorBase.stopIfRunning" ID="TestExecutorBase.stopIfRunning"></a>
+<h4>TestExecutorBase.stopIfRunning</h4>
+<b>stopIfRunning</b>(<i></i>)
+
+<p>
+        Public method to stop the testing process, if it is running.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="TestResult" ID="TestResult"></a>
+<h2>TestResult</h2>
+
+<p>
+    Class containing the test result data.
+</p>
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="TestResultCategory" ID="TestResultCategory"></a>
+<h2>TestResultCategory</h2>
+
+<p>
+    Class defining the supported result categories.
+</p>
+<h3>Derived from</h3>
+IntEnum
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>FAIL</td></tr><tr><td>OK</td></tr><tr><td>PENDING</td></tr><tr><td>RUNNING</td></tr><tr><td>SKIP</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.Testing.Interfaces.TestFrameworkRegistry.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,166 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.Interfaces.TestFrameworkRegistry</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.Interfaces.TestFrameworkRegistry</h1>
+
+<p>
+Module implementing a simple registry containing the available test framework
+interfaces.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestFrameworkRegistry">TestFrameworkRegistry</a></td>
+<td>Class implementing a simple registry of test framework interfaces.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="TestFrameworkRegistry" ID="TestFrameworkRegistry"></a>
+<h2>TestFrameworkRegistry</h2>
+
+<p>
+    Class implementing a simple registry of test framework interfaces.
+</p>
+<p>
+    The test executor for a framework is responsible for running the tests,
+    receiving the results and preparing them for display. It must implement
+    the interface of TestExecutorBase.
+</p>
+<p>
+    Frameworks must first be registered using '.register()'. This registry
+    can then create the assoicated test executor when '.createExecutor()' is
+    called.
+</p>
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestFrameworkRegistry.__init__">TestFrameworkRegistry</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#TestFrameworkRegistry.createExecutor">createExecutor</a></td>
+<td>Public method to create a test framework executor.</td>
+</tr>
+<tr>
+<td><a href="#TestFrameworkRegistry.getFrameworks">getFrameworks</a></td>
+<td>Public method to get a copy of the registered frameworks.</td>
+</tr>
+<tr>
+<td><a href="#TestFrameworkRegistry.register">register</a></td>
+<td>Public method to register a test framework executor.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="TestFrameworkRegistry.__init__" ID="TestFrameworkRegistry.__init__"></a>
+<h4>TestFrameworkRegistry (Constructor)</h4>
+<b>TestFrameworkRegistry</b>(<i></i>)
+
+<p>
+        Constructor
+</p>
+<a NAME="TestFrameworkRegistry.createExecutor" ID="TestFrameworkRegistry.createExecutor"></a>
+<h4>TestFrameworkRegistry.createExecutor</h4>
+<b>createExecutor</b>(<i>framework, widget</i>)
+
+<p>
+        Public method to create a test framework executor.
+</p>
+<p>
+        Note: The executor classes have to be registered first.
+</p>
+<dl>
+
+<dt><i>framework</i> (str)</dt>
+<dd>
+name of the test framework
+</dd>
+<dt><i>widget</i> (TestingWidget)</dt>
+<dd>
+reference to the unit test widget
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+test framework executor object
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+TestExecutorBase
+</dd>
+</dl>
+<a NAME="TestFrameworkRegistry.getFrameworks" ID="TestFrameworkRegistry.getFrameworks"></a>
+<h4>TestFrameworkRegistry.getFrameworks</h4>
+<b>getFrameworks</b>(<i></i>)
+
+<p>
+        Public method to get a copy of the registered frameworks.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+copy of the registered frameworks
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="TestFrameworkRegistry.register" ID="TestFrameworkRegistry.register"></a>
+<h4>TestFrameworkRegistry.register</h4>
+<b>register</b>(<i>executorClass</i>)
+
+<p>
+        Public method to register a test framework executor.
+</p>
+<dl>
+
+<dt><i>executorClass</i> (TestExecutorBase)</dt>
+<dd>
+class implementing the test framework executor
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.Testing.Interfaces.UnittestExecutor.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,232 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.Interfaces.UnittestExecutor</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.Interfaces.UnittestExecutor</h1>
+
+<p>
+Module implementing the executor for the standard 'unittest' framework.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#UnittestExecutor">UnittestExecutor</a></td>
+<td>Class implementing the executor for the standard 'unittest' framework.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="UnittestExecutor" ID="UnittestExecutor"></a>
+<h2>UnittestExecutor</h2>
+
+<p>
+    Class implementing the executor for the standard 'unittest' framework.
+</p>
+<h3>Derived from</h3>
+TestExecutorBase
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>module</td></tr><tr><td>name</td></tr><tr><td>runner</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#UnittestExecutor.__init__">UnittestExecutor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#UnittestExecutor.__processData">__processData</a></td>
+<td>Private slot to process the received data.</td>
+</tr>
+<tr>
+<td><a href="#UnittestExecutor.createArguments">createArguments</a></td>
+<td>Public method to create the arguments needed to start the test process.</td>
+</tr>
+<tr>
+<td><a href="#UnittestExecutor.finished">finished</a></td>
+<td>Public method handling the unit test process been finished.</td>
+</tr>
+<tr>
+<td><a href="#UnittestExecutor.getVersions">getVersions</a></td>
+<td>Public method to get the test framework version and version information of its installed plugins.</td>
+</tr>
+<tr>
+<td><a href="#UnittestExecutor.hasCoverage">hasCoverage</a></td>
+<td>Public method to get the test framework version and version information of its installed plugins.</td>
+</tr>
+<tr>
+<td><a href="#UnittestExecutor.start">start</a></td>
+<td>Public method to start the testing process.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="UnittestExecutor.__init__" ID="UnittestExecutor.__init__"></a>
+<h4>UnittestExecutor (Constructor)</h4>
+<b>UnittestExecutor</b>(<i>testWidget</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>testWidget</i> (TestingWidget)</dt>
+<dd>
+reference to the unit test widget
+</dd>
+</dl>
+<a NAME="UnittestExecutor.__processData" ID="UnittestExecutor.__processData"></a>
+<h4>UnittestExecutor.__processData</h4>
+<b>__processData</b>(<i>data</i>)
+
+<p>
+        Private slot to process the received data.
+</p>
+<dl>
+
+<dt><i>data</i> (dict)</dt>
+<dd>
+data object received
+</dd>
+</dl>
+<a NAME="UnittestExecutor.createArguments" ID="UnittestExecutor.createArguments"></a>
+<h4>UnittestExecutor.createArguments</h4>
+<b>createArguments</b>(<i>config</i>)
+
+<p>
+        Public method to create the arguments needed to start the test process.
+</p>
+<dl>
+
+<dt><i>config</i> (TestConfig)</dt>
+<dd>
+configuration for the test execution
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of process arguments
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<a NAME="UnittestExecutor.finished" ID="UnittestExecutor.finished"></a>
+<h4>UnittestExecutor.finished</h4>
+<b>finished</b>(<i></i>)
+
+<p>
+        Public method handling the unit test process been finished.
+</p>
+<p>
+        This method should read the results (if necessary) and emit the signal
+        testFinished.
+</p>
+<a NAME="UnittestExecutor.getVersions" ID="UnittestExecutor.getVersions"></a>
+<h4>UnittestExecutor.getVersions</h4>
+<b>getVersions</b>(<i>interpreter</i>)
+
+<p>
+        Public method to get the test framework version and version information
+        of its installed plugins.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the framework name and version and the
+            list of available plugins with name and version each
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="UnittestExecutor.hasCoverage" ID="UnittestExecutor.hasCoverage"></a>
+<h4>UnittestExecutor.hasCoverage</h4>
+<b>hasCoverage</b>(<i>interpreter</i>)
+
+<p>
+        Public method to get the test framework version and version information
+        of its installed plugins.
+</p>
+<dl>
+
+<dt><i>interpreter</i> (str)</dt>
+<dd>
+interpreter to be used for the test
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the availability of coverage functionality
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="UnittestExecutor.start" ID="UnittestExecutor.start"></a>
+<h4>UnittestExecutor.start</h4>
+<b>start</b>(<i>config, pythonpath</i>)
+
+<p>
+        Public method to start the testing process.
+</p>
+<dl>
+
+<dt><i>config</i> (TestConfig)</dt>
+<dd>
+configuration for the test execution
+</dd>
+<dt><i>pythonpath</i> (list of str)</dt>
+<dd>
+list of directories to be added to the Python path
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.Testing.Interfaces.UnittestRunner.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,339 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.Interfaces.UnittestRunner</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.Interfaces.UnittestRunner</h1>
+
+<p>
+Module implementing the test runner script for the 'unittest' framework.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#EricTestResult">EricTestResult</a></td>
+<td>Class implementing a TestResult derivative to send the data via a network connection.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#_assembleTestCasesList">_assembleTestCasesList</a></td>
+<td>Protected function to assemble a list of test cases included in a test suite.</td>
+</tr>
+<tr>
+<td><a href="#runtest">runtest</a></td>
+<td>Function to run the tests.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="EricTestResult" ID="EricTestResult"></a>
+<h2>EricTestResult</h2>
+
+<p>
+    Class implementing a TestResult derivative to send the data via a network
+    connection.
+</p>
+<h3>Derived from</h3>
+unittest.TestResult
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#EricTestResult.__init__">EricTestResult</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.addError">addError</a></td>
+<td>Public method called if a test errored.</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.addExpectedFailure">addExpectedFailure</a></td>
+<td>Public method called if a test failed expected.</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.addFailure">addFailure</a></td>
+<td>Public method called if a test failed.</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.addSkip">addSkip</a></td>
+<td>Public method called if a test was skipped.</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.addSubTest">addSubTest</a></td>
+<td>Public method called for each subtest to record its result.</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.addUnexpectedSuccess">addUnexpectedSuccess</a></td>
+<td>Public method called if a test succeeded expectedly.</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.startTest">startTest</a></td>
+<td>Public method called at the start of a test.</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.startTestRun">startTestRun</a></td>
+<td>Public method called once before any tests are executed.</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.stopTest">stopTest</a></td>
+<td>Public method called at the end of a test.</td>
+</tr>
+<tr>
+<td><a href="#EricTestResult.stopTestRun">stopTestRun</a></td>
+<td>Public method called once after all tests are executed.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="EricTestResult.__init__" ID="EricTestResult.__init__"></a>
+<h4>EricTestResult (Constructor)</h4>
+<b>EricTestResult</b>(<i>writer, failfast</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>writer</i> (EricJsonWriter)</dt>
+<dd>
+reference to the object to write the results to
+</dd>
+<dt><i>failfast</i> (bool)</dt>
+<dd>
+flag indicating to stop at the first error
+</dd>
+</dl>
+<a NAME="EricTestResult.addError" ID="EricTestResult.addError"></a>
+<h4>EricTestResult.addError</h4>
+<b>addError</b>(<i>test, err</i>)
+
+<p>
+        Public method called if a test errored.
+</p>
+<dl>
+
+<dt><i>test</i> (TestCase)</dt>
+<dd>
+reference to the test object
+</dd>
+<dt><i>err</i> (tuple)</dt>
+<dd>
+tuple containing the exception data like sys.exc_info
+            (exception type, exception instance, traceback)
+</dd>
+</dl>
+<a NAME="EricTestResult.addExpectedFailure" ID="EricTestResult.addExpectedFailure"></a>
+<h4>EricTestResult.addExpectedFailure</h4>
+<b>addExpectedFailure</b>(<i>test, err</i>)
+
+<p>
+        Public method called if a test failed expected.
+</p>
+<dl>
+
+<dt><i>test</i> (TestCase)</dt>
+<dd>
+reference to the test object
+</dd>
+<dt><i>err</i> (tuple)</dt>
+<dd>
+tuple containing the exception data like sys.exc_info
+            (exception type, exception instance, traceback)
+</dd>
+</dl>
+<a NAME="EricTestResult.addFailure" ID="EricTestResult.addFailure"></a>
+<h4>EricTestResult.addFailure</h4>
+<b>addFailure</b>(<i>test, err</i>)
+
+<p>
+        Public method called if a test failed.
+</p>
+<dl>
+
+<dt><i>test</i> (TestCase)</dt>
+<dd>
+reference to the test object
+</dd>
+<dt><i>err</i> (tuple)</dt>
+<dd>
+tuple containing the exception data like sys.exc_info
+            (exception type, exception instance, traceback)
+</dd>
+</dl>
+<a NAME="EricTestResult.addSkip" ID="EricTestResult.addSkip"></a>
+<h4>EricTestResult.addSkip</h4>
+<b>addSkip</b>(<i>test, reason</i>)
+
+<p>
+        Public method called if a test was skipped.
+</p>
+<dl>
+
+<dt><i>test</i> (TestCase)</dt>
+<dd>
+reference to the test object
+</dd>
+<dt><i>reason</i> (str)</dt>
+<dd>
+reason for skipping the test
+</dd>
+</dl>
+<a NAME="EricTestResult.addSubTest" ID="EricTestResult.addSubTest"></a>
+<h4>EricTestResult.addSubTest</h4>
+<b>addSubTest</b>(<i>test, subtest, err</i>)
+
+<p>
+        Public method called for each subtest to record its result.
+</p>
+<dl>
+
+<dt><i>test</i> (TestCase)</dt>
+<dd>
+reference to the test object
+</dd>
+<dt><i>subtest</i> (TestCase)</dt>
+<dd>
+reference to the subtest object
+</dd>
+<dt><i>err</i> (tuple)</dt>
+<dd>
+tuple containing the exception data like sys.exc_info
+            (exception type, exception instance, traceback)
+</dd>
+</dl>
+<a NAME="EricTestResult.addUnexpectedSuccess" ID="EricTestResult.addUnexpectedSuccess"></a>
+<h4>EricTestResult.addUnexpectedSuccess</h4>
+<b>addUnexpectedSuccess</b>(<i>test</i>)
+
+<p>
+        Public method called if a test succeeded expectedly.
+</p>
+<dl>
+
+<dt><i>test</i> (TestCase)</dt>
+<dd>
+reference to the test object
+</dd>
+</dl>
+<a NAME="EricTestResult.startTest" ID="EricTestResult.startTest"></a>
+<h4>EricTestResult.startTest</h4>
+<b>startTest</b>(<i>test</i>)
+
+<p>
+        Public method called at the start of a test.
+</p>
+<dl>
+
+<dt><i>test</i> (TestCase)</dt>
+<dd>
+reference to the test object
+</dd>
+</dl>
+<a NAME="EricTestResult.startTestRun" ID="EricTestResult.startTestRun"></a>
+<h4>EricTestResult.startTestRun</h4>
+<b>startTestRun</b>(<i></i>)
+
+<p>
+        Public method called once before any tests are executed.
+</p>
+<a NAME="EricTestResult.stopTest" ID="EricTestResult.stopTest"></a>
+<h4>EricTestResult.stopTest</h4>
+<b>stopTest</b>(<i>test</i>)
+
+<p>
+        Public method called at the end of a test.
+</p>
+<dl>
+
+<dt><i>test</i> (TestCase)</dt>
+<dd>
+reference to the test object
+</dd>
+</dl>
+<a NAME="EricTestResult.stopTestRun" ID="EricTestResult.stopTestRun"></a>
+<h4>EricTestResult.stopTestRun</h4>
+<b>stopTestRun</b>(<i></i>)
+
+<p>
+        Public method called once after all tests are executed.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="_assembleTestCasesList" ID="_assembleTestCasesList"></a>
+<h2>_assembleTestCasesList</h2>
+<b>_assembleTestCasesList</b>(<i>suite</i>)
+
+<p>
+    Protected function to assemble a list of test cases included in a test
+    suite.
+</p>
+<dl>
+
+<dt><i>suite</i> (unittest.TestSuite)</dt>
+<dd>
+test suite to be inspected
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of tuples containing the test case ID, the string
+        representation and the short description
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of tuples of (str, str)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="runtest" ID="runtest"></a>
+<h2>runtest</h2>
+<b>runtest</b>(<i>argv</i>)
+
+<p>
+    Function to run the tests.
+</p>
+<dl>
+
+<dt><i>argv</i> (list of str)</dt>
+<dd>
+list of command line parameters.
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.Testing.TestResultsTree.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,770 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.TestResultsTree</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.TestResultsTree</h1>
+
+<p>
+Module implementing a tree view and associated model to show the test result
+data.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>TopLevelId</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestResultsModel">TestResultsModel</a></td>
+<td>Class implementing the item model containing the test data.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView">TestResultsTreeView</a></td>
+<td>Class implementing a tree view to show the test result data.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<hr />
+<hr />
+<a NAME="TestResultsModel" ID="TestResultsModel"></a>
+<h2>TestResultsModel</h2>
+
+<p>
+    Class implementing the item model containing the test data.
+</p>
+<h3>Signals</h3>
+<dl>
+
+<dt>summary(str)</dt>
+<dd>
+emitted whenever the model data changes. The element
+        is a summary of the test results of the model.
+</dd>
+</dl>
+<h3>Derived from</h3>
+QAbstractItemModel
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>DurationColumn</td></tr><tr><td>Headers</td></tr><tr><td>MessageColumn</td></tr><tr><td>NameColumn</td></tr><tr><td>StatusColumn</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestResultsModel.__init__">TestResultsModel</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.__summary">__summary</a></td>
+<td>Private method to generate a test results summary text.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.addTestResults">addTestResults</a></td>
+<td>Public method to add test results to the ones already managed by the model.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.clear">clear</a></td>
+<td>Public method to clear the model data.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.columnCount">columnCount</a></td>
+<td>Public method to get the number of columns.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.data">data</a></td>
+<td>Public method to get the data for the various columns and roles.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.durationKey">durationKey</a></td>
+<td>Function to generate a key for duration sorting</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.getFailedTests">getFailedTests</a></td>
+<td>Public method to extract the test ids of all failed tests.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.getTestResults">getTestResults</a></td>
+<td>Public method to get the list of test results managed by the model.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.headerData">headerData</a></td>
+<td>Public method to get the header string for the various sections.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.index">index</a></td>
+<td>Public method to generate an index for the given row and column to identify the item.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.parent">parent</a></td>
+<td>Public method to get the parent of the item pointed to by index.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.rowCount">rowCount</a></td>
+<td>Public method to get the number of row for a given parent index.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.setTestResults">setTestResults</a></td>
+<td>Public method to set the list of test results of the model.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.sort">sort</a></td>
+<td>Public method to sort the model data by column in order.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsModel.updateTestResults">updateTestResults</a></td>
+<td>Public method to update the data of managed test result items.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="TestResultsModel.__init__" ID="TestResultsModel.__init__"></a>
+<h4>TestResultsModel (Constructor)</h4>
+<b>TestResultsModel</b>(<i>parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>parent</i> (QObject (optional))</dt>
+<dd>
+reference to the parent object (defaults to None)
+</dd>
+</dl>
+<a NAME="TestResultsModel.__summary" ID="TestResultsModel.__summary"></a>
+<h4>TestResultsModel.__summary</h4>
+<b>__summary</b>(<i></i>)
+
+<p>
+        Private method to generate a test results summary text.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+test results summary text
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="TestResultsModel.addTestResults" ID="TestResultsModel.addTestResults"></a>
+<h4>TestResultsModel.addTestResults</h4>
+<b>addTestResults</b>(<i>testResults</i>)
+
+<p>
+        Public method to add test results to the ones already managed by the
+        model.
+</p>
+<dl>
+
+<dt><i>testResults</i> (list of TestResult)</dt>
+<dd>
+test results to be added to the model
+</dd>
+</dl>
+<a NAME="TestResultsModel.clear" ID="TestResultsModel.clear"></a>
+<h4>TestResultsModel.clear</h4>
+<b>clear</b>(<i></i>)
+
+<p>
+        Public method to clear the model data.
+</p>
+<a NAME="TestResultsModel.columnCount" ID="TestResultsModel.columnCount"></a>
+<h4>TestResultsModel.columnCount</h4>
+<b>columnCount</b>(<i>parent=QModelIndex()</i>)
+
+<p>
+        Public method to get the number of columns.
+</p>
+<dl>
+
+<dt><i>parent</i> (QModelIndex (optional))</dt>
+<dd>
+index of the parent item (defaults to QModelIndex())
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+number of columns
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+int
+</dd>
+</dl>
+<a NAME="TestResultsModel.data" ID="TestResultsModel.data"></a>
+<h4>TestResultsModel.data</h4>
+<b>data</b>(<i>index, role</i>)
+
+<p>
+        Public method to get the data for the various columns and roles.
+</p>
+<dl>
+
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+index of the data to be returned
+</dd>
+<dt><i>role</i> (Qt.ItemDataRole)</dt>
+<dd>
+role designating the data to return
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+requested data item
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+Any
+</dd>
+</dl>
+<a NAME="TestResultsModel.durationKey" ID="TestResultsModel.durationKey"></a>
+<h4>TestResultsModel.durationKey</h4>
+<b>durationKey</b>(<i></i>)
+
+<p>
+            Function to generate a key for duration sorting
+</p>
+<dl>
+
+<dt><i>result</i> (TestResult)</dt>
+<dd>
+result object
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+sort key
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+float
+</dd>
+</dl>
+<a NAME="TestResultsModel.getFailedTests" ID="TestResultsModel.getFailedTests"></a>
+<h4>TestResultsModel.getFailedTests</h4>
+<b>getFailedTests</b>(<i></i>)
+
+<p>
+        Public method to extract the test ids of all failed tests.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+test ids of all failed tests
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<a NAME="TestResultsModel.getTestResults" ID="TestResultsModel.getTestResults"></a>
+<h4>TestResultsModel.getTestResults</h4>
+<b>getTestResults</b>(<i></i>)
+
+<p>
+        Public method to get the list of test results managed by the model.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of test results managed by the model
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of TestResult
+</dd>
+</dl>
+<a NAME="TestResultsModel.headerData" ID="TestResultsModel.headerData"></a>
+<h4>TestResultsModel.headerData</h4>
+<b>headerData</b>(<i>section, orientation, role=Qt.ItemDataRole.DisplayRole</i>)
+
+<p>
+        Public method to get the header string for the various sections.
+</p>
+<dl>
+
+<dt><i>section</i> (int)</dt>
+<dd>
+section number
+</dd>
+<dt><i>orientation</i> (Qt.Orientation)</dt>
+<dd>
+orientation of the header
+</dd>
+<dt><i>role</i> (Qt.ItemDataRole (optional))</dt>
+<dd>
+data role (defaults to Qt.ItemDataRole.DisplayRole)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+header string of the section
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="TestResultsModel.index" ID="TestResultsModel.index"></a>
+<h4>TestResultsModel.index</h4>
+<b>index</b>(<i>row, column, parent=QModelIndex()</i>)
+
+<p>
+        Public method to generate an index for the given row and column to
+        identify the item.
+</p>
+<dl>
+
+<dt><i>row</i> (int)</dt>
+<dd>
+row for the index
+</dd>
+<dt><i>column</i> (int)</dt>
+<dd>
+column for the index
+</dd>
+<dt><i>parent</i> (QModelIndex (optional))</dt>
+<dd>
+index of the parent item (defaults to QModelIndex())
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+index for the item
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QModelIndex
+</dd>
+</dl>
+<a NAME="TestResultsModel.parent" ID="TestResultsModel.parent"></a>
+<h4>TestResultsModel.parent</h4>
+<b>parent</b>(<i>index</i>)
+
+<p>
+        Public method to get the parent of the item pointed to by index.
+</p>
+<dl>
+
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+index of the item
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+index of the parent item
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QModelIndex
+</dd>
+</dl>
+<a NAME="TestResultsModel.rowCount" ID="TestResultsModel.rowCount"></a>
+<h4>TestResultsModel.rowCount</h4>
+<b>rowCount</b>(<i>parent=QModelIndex()</i>)
+
+<p>
+        Public method to get the number of row for a given parent index.
+</p>
+<dl>
+
+<dt><i>parent</i> (QModelIndex (optional))</dt>
+<dd>
+index of the parent item (defaults to QModelIndex())
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+number of rows
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+int
+</dd>
+</dl>
+<a NAME="TestResultsModel.setTestResults" ID="TestResultsModel.setTestResults"></a>
+<h4>TestResultsModel.setTestResults</h4>
+<b>setTestResults</b>(<i>testResults</i>)
+
+<p>
+        Public method to set the list of test results of the model.
+</p>
+<dl>
+
+<dt><i>testResults</i> (list of TestResult)</dt>
+<dd>
+test results to be managed by the model
+</dd>
+</dl>
+<a NAME="TestResultsModel.sort" ID="TestResultsModel.sort"></a>
+<h4>TestResultsModel.sort</h4>
+<b>sort</b>(<i>column, order</i>)
+
+<p>
+        Public method to sort the model data by column in order.
+</p>
+<dl>
+
+<dt><i>column</i> (int)</dt>
+<dd>
+sort column number
+</dd>
+<dt><i>order</i> (Qt.SortOrder)</dt>
+<dd>
+sort order
+</dd>
+</dl>
+<a NAME="TestResultsModel.updateTestResults" ID="TestResultsModel.updateTestResults"></a>
+<h4>TestResultsModel.updateTestResults</h4>
+<b>updateTestResults</b>(<i>testResults</i>)
+
+<p>
+        Public method to update the data of managed test result items.
+</p>
+<dl>
+
+<dt><i>testResults</i> (list of TestResult)</dt>
+<dd>
+test results to be updated
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="TestResultsTreeView" ID="TestResultsTreeView"></a>
+<h2>TestResultsTreeView</h2>
+
+<p>
+    Class implementing a tree view to show the test result data.
+</p>
+<h3>Signals</h3>
+<dl>
+
+<dt>goto(str, int)</dt>
+<dd>
+emitted to go to the position given by file name
+        and line number
+</dd>
+</dl>
+<h3>Derived from</h3>
+QTreeView
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestResultsTreeView.__init__">TestResultsTreeView</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.__canonicalIndex">__canonicalIndex</a></td>
+<td>Private method to create the canonical index for a given index.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.__createBackgroundContextMenu">__createBackgroundContextMenu</a></td>
+<td>Private method to create a context menu for the background.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.__createContextMenu">__createContextMenu</a></td>
+<td>Private method to create a context menu for the item pointed to by the given index.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.__gotoTestDefinition">__gotoTestDefinition</a></td>
+<td>Private slot to show the test definition.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.__showContextMenu">__showContextMenu</a></td>
+<td>Private slot to show the context menu.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.dataChanged">dataChanged</a></td>
+<td>Public method called when the model data has changed.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.reset">reset</a></td>
+<td>Public method to reset the internal state of the view.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.resizeColumns">resizeColumns</a></td>
+<td>Public method to resize the columns to their contents.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.rowsInserted">rowsInserted</a></td>
+<td>Public method called when rows are inserted.</td>
+</tr>
+<tr>
+<td><a href="#TestResultsTreeView.spanFirstColumn">spanFirstColumn</a></td>
+<td>Public method to make the first column span the row for second level items.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="TestResultsTreeView.__init__" ID="TestResultsTreeView.__init__"></a>
+<h4>TestResultsTreeView (Constructor)</h4>
+<b>TestResultsTreeView</b>(<i>parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="TestResultsTreeView.__canonicalIndex" ID="TestResultsTreeView.__canonicalIndex"></a>
+<h4>TestResultsTreeView.__canonicalIndex</h4>
+<b>__canonicalIndex</b>(<i>index</i>)
+
+<p>
+        Private method to create the canonical index for a given index.
+</p>
+<p>
+        The canonical index is the index of the first column of the test
+        result entry (i.e. the top-level item). If the index is invalid,
+        None is returned.
+</p>
+<dl>
+
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+index to determine the canonical index for
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+index of the firt column of the associated top-level item index
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QModelIndex
+</dd>
+</dl>
+<a NAME="TestResultsTreeView.__createBackgroundContextMenu" ID="TestResultsTreeView.__createBackgroundContextMenu"></a>
+<h4>TestResultsTreeView.__createBackgroundContextMenu</h4>
+<b>__createBackgroundContextMenu</b>(<i></i>)
+
+<p>
+        Private method to create a context menu for the background.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+created context menu
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QMenu
+</dd>
+</dl>
+<a NAME="TestResultsTreeView.__createContextMenu" ID="TestResultsTreeView.__createContextMenu"></a>
+<h4>TestResultsTreeView.__createContextMenu</h4>
+<b>__createContextMenu</b>(<i>index</i>)
+
+<p>
+        Private method to create a context menu for the item pointed to by the
+        given index.
+</p>
+<dl>
+
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+index of the item
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+created context menu
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QMenu
+</dd>
+</dl>
+<a NAME="TestResultsTreeView.__gotoTestDefinition" ID="TestResultsTreeView.__gotoTestDefinition"></a>
+<h4>TestResultsTreeView.__gotoTestDefinition</h4>
+<b>__gotoTestDefinition</b>(<i>index</i>)
+
+<p>
+        Private slot to show the test definition.
+</p>
+<dl>
+
+<dt><i>index</i> (QModelIndex)</dt>
+<dd>
+index for the double-clicked item
+</dd>
+</dl>
+<a NAME="TestResultsTreeView.__showContextMenu" ID="TestResultsTreeView.__showContextMenu"></a>
+<h4>TestResultsTreeView.__showContextMenu</h4>
+<b>__showContextMenu</b>(<i>pos</i>)
+
+<p>
+        Private slot to show the context menu.
+</p>
+<dl>
+
+<dt><i>pos</i> (QPoint)</dt>
+<dd>
+relative position for the context menu
+</dd>
+</dl>
+<a NAME="TestResultsTreeView.dataChanged" ID="TestResultsTreeView.dataChanged"></a>
+<h4>TestResultsTreeView.dataChanged</h4>
+<b>dataChanged</b>(<i>topLeft, bottomRight, roles=[]</i>)
+
+<p>
+        Public method called when the model data has changed.
+</p>
+<dl>
+
+<dt><i>topLeft</i> (QModelIndex)</dt>
+<dd>
+index of the top left element
+</dd>
+<dt><i>bottomRight</i> (QModelIndex)</dt>
+<dd>
+index of the bottom right element
+</dd>
+<dt><i>roles</i> (list of Qt.ItemDataRole (optional))</dt>
+<dd>
+list of roles changed (defaults to [])
+</dd>
+</dl>
+<a NAME="TestResultsTreeView.reset" ID="TestResultsTreeView.reset"></a>
+<h4>TestResultsTreeView.reset</h4>
+<b>reset</b>(<i></i>)
+
+<p>
+        Public method to reset the internal state of the view.
+</p>
+<a NAME="TestResultsTreeView.resizeColumns" ID="TestResultsTreeView.resizeColumns"></a>
+<h4>TestResultsTreeView.resizeColumns</h4>
+<b>resizeColumns</b>(<i></i>)
+
+<p>
+        Public method to resize the columns to their contents.
+</p>
+<a NAME="TestResultsTreeView.rowsInserted" ID="TestResultsTreeView.rowsInserted"></a>
+<h4>TestResultsTreeView.rowsInserted</h4>
+<b>rowsInserted</b>(<i>parent, startRow, endRow</i>)
+
+<p>
+        Public method called when rows are inserted.
+</p>
+<dl>
+
+<dt><i>parent</i> (QModelIndex)</dt>
+<dd>
+model index of the parent item
+</dd>
+<dt><i>startRow</i> (int)</dt>
+<dd>
+first row been inserted
+</dd>
+<dt><i>endRow</i> (int)</dt>
+<dd>
+last row been inserted
+</dd>
+</dl>
+<a NAME="TestResultsTreeView.spanFirstColumn" ID="TestResultsTreeView.spanFirstColumn"></a>
+<h4>TestResultsTreeView.spanFirstColumn</h4>
+<b>spanFirstColumn</b>(<i>startRow, endRow</i>)
+
+<p>
+        Public method to make the first column span the row for second level
+        items.
+</p>
+<p>
+        These items contain the test results.
+</p>
+<dl>
+
+<dt><i>startRow</i> (QModelIndex)</dt>
+<dd>
+index of the first row to span
+</dd>
+<dt><i>endRow</i> (QModelIndex)</dt>
+<dd>
+index of the last row (including) to span
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.Testing.TestingWidget.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,970 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.TestingWidget</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.TestingWidget</h1>
+
+<p>
+Module implementing a widget to orchestrate unit test execution.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestingWidget">TestingWidget</a></td>
+<td>Class implementing a widget to orchestrate unit test execution.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidgetModes">TestingWidgetModes</a></td>
+<td>Class defining the various modes of the testing widget.</td>
+</tr>
+<tr>
+<td><a href="#TestingWindow">TestingWindow</a></td>
+<td>Main window class for the standalone dialog.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#clearSavedHistories">clearSavedHistories</a></td>
+<td>Function to clear the saved history lists.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="TestingWidget" ID="TestingWidget"></a>
+<h2>TestingWidget</h2>
+
+<p>
+    Class implementing a widget to orchestrate unit test execution.
+</p>
+<h3>Signals</h3>
+<dl>
+
+<dt>testFile(str, int, bool)</dt>
+<dd>
+emitted to show the source of a
+       test file
+</dd>
+<dt>testRunStopped()</dt>
+<dd>
+emitted after a test run has finished
+</dd>
+</dl>
+<h3>Derived from</h3>
+QWidget, Ui_TestingWidget
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestingWidget.__init__">TestingWidget</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__adjustPendingState">__adjustPendingState</a></td>
+<td>Private method to change the status indicator of all still pending tests to "not run".</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__coverageData">__coverageData</a></td>
+<td>Private slot to handle the 'coverageData' signal of the executor.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__insertDiscovery">__insertDiscovery</a></td>
+<td>Private slot to insert the discovery start directory into the discoveryPicker object.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__insertHistory">__insertHistory</a></td>
+<td>Private slot to insert an item into a history object.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__insertTestFile">__insertTestFile</a></td>
+<td>Private slot to insert a test file name into the testsuitePicker object.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__insertTestName">__insertTestName</a></td>
+<td>Private slot to insert a test name into the testComboBox object.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__loadRecent">__loadRecent</a></td>
+<td>Private method to load the most recently used lists.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__openEditor">__openEditor</a></td>
+<td>Private method to open an editor window for the given file.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__populateTestFrameworkComboBox">__populateTestFrameworkComboBox</a></td>
+<td>Private method to (re-)populate the test framework selector.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__populateVenvComboBox">__populateVenvComboBox</a></td>
+<td>Private method to (re-)populate the virtual environments selector.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__processTestResult">__processTestResult</a></td>
+<td>Private slot to handle the receipt of a test result object.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__projectClosed">__projectClosed</a></td>
+<td>Private slot to handle a project being closed.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__projectOpened">__projectOpened</a></td>
+<td>Private slot to handle a project being opened.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__resetResults">__resetResults</a></td>
+<td>Private slot to reset the test results tab and data.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__saveRecent">__saveRecent</a></td>
+<td>Private method to save the most recently used lists.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__setIdleMode">__setIdleMode</a></td>
+<td>Private slot to switch the widget to idle mode.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__setRunningMode">__setRunningMode</a></td>
+<td>Private slot to switch the widget to running mode.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__setStatusLabel">__setStatusLabel</a></td>
+<td>Private slot to set the status label to the text sent by the model.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__setStoppedMode">__setStoppedMode</a></td>
+<td>Private slot to switch the widget to stopped mode.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__showCoverageDialog">__showCoverageDialog</a></td>
+<td>Private slot to show a code coverage dialog for the most recent test run.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__showLogOutput">__showLogOutput</a></td>
+<td>Private slot to show the output of the most recent test run.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__showSource">__showSource</a></td>
+<td>Private slot to show the source of a traceback in an editor.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__stopTests">__stopTests</a></td>
+<td>Private slot to stop the current test run.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__testProcessFinished">__testProcessFinished</a></td>
+<td>Private slot to handle the 'testFinished' signal of the executor.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__testRunAboutToBeStarted">__testRunAboutToBeStarted</a></td>
+<td>Private slot to handle the 'testRunAboutToBeStarted' signal of the executor.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__testRunFinished">__testRunFinished</a></td>
+<td>Private slot to handle the 'testRunFinished' signal of the executor.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__testStarted">__testStarted</a></td>
+<td>Private slot handling the 'startTest' signal of the executor.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__testsCollectError">__testsCollectError</a></td>
+<td>Private slot handling the 'collectError' signal of the executor.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__testsCollected">__testsCollected</a></td>
+<td>Private slot handling the 'collected' signal of the executor.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__testsStopped">__testsStopped</a></td>
+<td>Private slot to handle the 'stop' signal of the executor.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__updateButtonBoxButtons">__updateButtonBoxButtons</a></td>
+<td>Private slot to update the state of the buttons of the button box.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__updateCoverage">__updateCoverage</a></td>
+<td>Private slot to update the state of the coverage checkbox depending on the selected framework's capabilities.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.__updateProgress">__updateProgress</a></td>
+<td>Private slot update the progress indicators.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.clearRecent">clearRecent</a></td>
+<td>Public slot to clear the recently used lists.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.closeEvent">closeEvent</a></td>
+<td>Protected method to handle the close event.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.getFailedTests">getFailedTests</a></td>
+<td>Public method to get the list of failed tests (if any).</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.getResultsModel">getResultsModel</a></td>
+<td>Public method to get a reference to the model containing the test result data.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.hasFailedTests">hasFailedTests</a></td>
+<td>Public method to check for failed tests.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.on_buttonBox_clicked">on_buttonBox_clicked</a></td>
+<td>Private slot called by a button of the button box clicked.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.on_discoverCheckBox_toggled">on_discoverCheckBox_toggled</a></td>
+<td>Private slot handling state changes of the 'discover' checkbox.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.on_frameworkComboBox_currentIndexChanged">on_frameworkComboBox_currentIndexChanged</a></td>
+<td>Private slot handling the selection of a test framework.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog">on_testsuitePicker_aboutToShowPathPickerDialog</a></td>
+<td>Private slot called before the test file selection dialog is shown.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.on_venvComboBox_currentIndexChanged">on_venvComboBox_currentIndexChanged</a></td>
+<td>Private slot handling the selection of a virtual environment.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.on_versionsButton_clicked">on_versionsButton_clicked</a></td>
+<td>Private slot to show the versions of available plugins.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.setTestFile">setTestFile</a></td>
+<td>Public slot to set the given test file as the current one.</td>
+</tr>
+<tr>
+<td><a href="#TestingWidget.startTests">startTests</a></td>
+<td>Public slot to start the test run.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="TestingWidget.__init__" ID="TestingWidget.__init__"></a>
+<h4>TestingWidget (Constructor)</h4>
+<b>TestingWidget</b>(<i>testfile=None, parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>testfile</i> (str)</dt>
+<dd>
+file name of the test to load
+</dd>
+<dt><i>parent</i> (QWidget (optional))</dt>
+<dd>
+reference to the parent widget (defaults to None)
+</dd>
+</dl>
+<a NAME="TestingWidget.__adjustPendingState" ID="TestingWidget.__adjustPendingState"></a>
+<h4>TestingWidget.__adjustPendingState</h4>
+<b>__adjustPendingState</b>(<i></i>)
+
+<p>
+        Private method to change the status indicator of all still pending
+        tests to "not run".
+</p>
+<a NAME="TestingWidget.__coverageData" ID="TestingWidget.__coverageData"></a>
+<h4>TestingWidget.__coverageData</h4>
+<b>__coverageData</b>(<i>coverageFile</i>)
+
+<p>
+        Private slot to handle the 'coverageData' signal of the executor.
+</p>
+<dl>
+
+<dt><i>coverageFile</i> (str)</dt>
+<dd>
+file containing the coverage data
+</dd>
+</dl>
+<a NAME="TestingWidget.__insertDiscovery" ID="TestingWidget.__insertDiscovery"></a>
+<h4>TestingWidget.__insertDiscovery</h4>
+<b>__insertDiscovery</b>(<i>start</i>)
+
+<p>
+        Private slot to insert the discovery start directory into the
+        discoveryPicker object.
+</p>
+<dl>
+
+<dt><i>start</i> (str)</dt>
+<dd>
+start directory name to be inserted
+</dd>
+</dl>
+<a NAME="TestingWidget.__insertHistory" ID="TestingWidget.__insertHistory"></a>
+<h4>TestingWidget.__insertHistory</h4>
+<b>__insertHistory</b>(<i>widget, history, item</i>)
+
+<p>
+        Private slot to insert an item into a history object.
+</p>
+<dl>
+
+<dt><i>widget</i> (QComboBox or EricComboPathPicker)</dt>
+<dd>
+reference to the widget
+</dd>
+<dt><i>history</i> (list of str)</dt>
+<dd>
+array containing the history
+</dd>
+<dt><i>item</i> (str)</dt>
+<dd>
+item to be inserted
+</dd>
+</dl>
+<a NAME="TestingWidget.__insertTestFile" ID="TestingWidget.__insertTestFile"></a>
+<h4>TestingWidget.__insertTestFile</h4>
+<b>__insertTestFile</b>(<i>prog</i>)
+
+<p>
+        Private slot to insert a test file name into the testsuitePicker
+        object.
+</p>
+<dl>
+
+<dt><i>prog</i> (str)</dt>
+<dd>
+test file name to be inserted
+</dd>
+</dl>
+<a NAME="TestingWidget.__insertTestName" ID="TestingWidget.__insertTestName"></a>
+<h4>TestingWidget.__insertTestName</h4>
+<b>__insertTestName</b>(<i>testName</i>)
+
+<p>
+        Private slot to insert a test name into the testComboBox object.
+</p>
+<dl>
+
+<dt><i>testName</i> (str)</dt>
+<dd>
+name of the test to be inserted
+</dd>
+</dl>
+<a NAME="TestingWidget.__loadRecent" ID="TestingWidget.__loadRecent"></a>
+<h4>TestingWidget.__loadRecent</h4>
+<b>__loadRecent</b>(<i></i>)
+
+<p>
+        Private method to load the most recently used lists.
+</p>
+<a NAME="TestingWidget.__openEditor" ID="TestingWidget.__openEditor"></a>
+<h4>TestingWidget.__openEditor</h4>
+<b>__openEditor</b>(<i>filename, linenumber=1</i>)
+
+<p>
+        Private method to open an editor window for the given file.
+</p>
+<p>
+        Note: This method opens an editor window when the testing dialog
+        is called as a standalone application.
+</p>
+<dl>
+
+<dt><i>filename</i> (str)</dt>
+<dd>
+path of the file to be opened
+</dd>
+<dt><i>linenumber</i> (int (optional))</dt>
+<dd>
+line number to place the cursor at (defaults to 1)
+</dd>
+</dl>
+<a NAME="TestingWidget.__populateTestFrameworkComboBox" ID="TestingWidget.__populateTestFrameworkComboBox"></a>
+<h4>TestingWidget.__populateTestFrameworkComboBox</h4>
+<b>__populateTestFrameworkComboBox</b>(<i></i>)
+
+<p>
+        Private method to (re-)populate the test framework selector.
+</p>
+<a NAME="TestingWidget.__populateVenvComboBox" ID="TestingWidget.__populateVenvComboBox"></a>
+<h4>TestingWidget.__populateVenvComboBox</h4>
+<b>__populateVenvComboBox</b>(<i></i>)
+
+<p>
+        Private method to (re-)populate the virtual environments selector.
+</p>
+<a NAME="TestingWidget.__processTestResult" ID="TestingWidget.__processTestResult"></a>
+<h4>TestingWidget.__processTestResult</h4>
+<b>__processTestResult</b>(<i>result</i>)
+
+<p>
+        Private slot to handle the receipt of a test result object.
+</p>
+<dl>
+
+<dt><i>result</i> (TestResult)</dt>
+<dd>
+test result object
+</dd>
+</dl>
+<a NAME="TestingWidget.__projectClosed" ID="TestingWidget.__projectClosed"></a>
+<h4>TestingWidget.__projectClosed</h4>
+<b>__projectClosed</b>(<i></i>)
+
+<p>
+        Private slot to handle a project being closed.
+</p>
+<a NAME="TestingWidget.__projectOpened" ID="TestingWidget.__projectOpened"></a>
+<h4>TestingWidget.__projectOpened</h4>
+<b>__projectOpened</b>(<i></i>)
+
+<p>
+        Private slot to handle a project being opened.
+</p>
+<a NAME="TestingWidget.__resetResults" ID="TestingWidget.__resetResults"></a>
+<h4>TestingWidget.__resetResults</h4>
+<b>__resetResults</b>(<i></i>)
+
+<p>
+        Private slot to reset the test results tab and data.
+</p>
+<a NAME="TestingWidget.__saveRecent" ID="TestingWidget.__saveRecent"></a>
+<h4>TestingWidget.__saveRecent</h4>
+<b>__saveRecent</b>(<i></i>)
+
+<p>
+        Private method to save the most recently used lists.
+</p>
+<a NAME="TestingWidget.__setIdleMode" ID="TestingWidget.__setIdleMode"></a>
+<h4>TestingWidget.__setIdleMode</h4>
+<b>__setIdleMode</b>(<i></i>)
+
+<p>
+        Private slot to switch the widget to idle mode.
+</p>
+<a NAME="TestingWidget.__setRunningMode" ID="TestingWidget.__setRunningMode"></a>
+<h4>TestingWidget.__setRunningMode</h4>
+<b>__setRunningMode</b>(<i></i>)
+
+<p>
+        Private slot to switch the widget to running mode.
+</p>
+<a NAME="TestingWidget.__setStatusLabel" ID="TestingWidget.__setStatusLabel"></a>
+<h4>TestingWidget.__setStatusLabel</h4>
+<b>__setStatusLabel</b>(<i>statusText</i>)
+
+<p>
+        Private slot to set the status label to the text sent by the model.
+</p>
+<dl>
+
+<dt><i>statusText</i> (str)</dt>
+<dd>
+text to be shown
+</dd>
+</dl>
+<a NAME="TestingWidget.__setStoppedMode" ID="TestingWidget.__setStoppedMode"></a>
+<h4>TestingWidget.__setStoppedMode</h4>
+<b>__setStoppedMode</b>(<i></i>)
+
+<p>
+        Private slot to switch the widget to stopped mode.
+</p>
+<a NAME="TestingWidget.__showCoverageDialog" ID="TestingWidget.__showCoverageDialog"></a>
+<h4>TestingWidget.__showCoverageDialog</h4>
+<b>__showCoverageDialog</b>(<i></i>)
+
+<p>
+        Private slot to show a code coverage dialog for the most recent test
+        run.
+</p>
+<a NAME="TestingWidget.__showLogOutput" ID="TestingWidget.__showLogOutput"></a>
+<h4>TestingWidget.__showLogOutput</h4>
+<b>__showLogOutput</b>(<i></i>)
+
+<p>
+        Private slot to show the output of the most recent test run.
+</p>
+<a NAME="TestingWidget.__showSource" ID="TestingWidget.__showSource"></a>
+<h4>TestingWidget.__showSource</h4>
+<b>__showSource</b>(<i>filename, lineno</i>)
+
+<p>
+        Private slot to show the source of a traceback in an editor.
+</p>
+<dl>
+
+<dt><i>filename</i> (str)</dt>
+<dd>
+file name of the file to be shown
+</dd>
+<dt><i>lineno</i> (int)</dt>
+<dd>
+line number to go to in the file
+</dd>
+</dl>
+<a NAME="TestingWidget.__stopTests" ID="TestingWidget.__stopTests"></a>
+<h4>TestingWidget.__stopTests</h4>
+<b>__stopTests</b>(<i></i>)
+
+<p>
+        Private slot to stop the current test run.
+</p>
+<a NAME="TestingWidget.__testProcessFinished" ID="TestingWidget.__testProcessFinished"></a>
+<h4>TestingWidget.__testProcessFinished</h4>
+<b>__testProcessFinished</b>(<i>results, output</i>)
+
+<p>
+        Private slot to handle the 'testFinished' signal of the executor.
+</p>
+<dl>
+
+<dt><i>results</i> (list of TestResult)</dt>
+<dd>
+list of test result objects (if not sent via the
+            'testResult' signal
+</dd>
+<dt><i>output</i> (str)</dt>
+<dd>
+string containing the test process output (if any)
+</dd>
+</dl>
+<a NAME="TestingWidget.__testRunAboutToBeStarted" ID="TestingWidget.__testRunAboutToBeStarted"></a>
+<h4>TestingWidget.__testRunAboutToBeStarted</h4>
+<b>__testRunAboutToBeStarted</b>(<i></i>)
+
+<p>
+        Private slot to handle the 'testRunAboutToBeStarted' signal of the
+        executor.
+</p>
+<a NAME="TestingWidget.__testRunFinished" ID="TestingWidget.__testRunFinished"></a>
+<h4>TestingWidget.__testRunFinished</h4>
+<b>__testRunFinished</b>(<i>noTests, duration</i>)
+
+<p>
+        Private slot to handle the 'testRunFinished' signal of the executor.
+</p>
+<dl>
+
+<dt><i>noTests</i> (int)</dt>
+<dd>
+number of tests run by the executor
+</dd>
+<dt><i>duration</i> (float)</dt>
+<dd>
+time needed in seconds to run the tests
+</dd>
+</dl>
+<a NAME="TestingWidget.__testStarted" ID="TestingWidget.__testStarted"></a>
+<h4>TestingWidget.__testStarted</h4>
+<b>__testStarted</b>(<i>test</i>)
+
+<p>
+        Private slot handling the 'startTest' signal of the executor.
+</p>
+<dl>
+
+<dt><i>test</i> (tuple of (str, str, str))</dt>
+<dd>
+tuple containing the id, name and short description of the
+            tests about to be run
+</dd>
+</dl>
+<a NAME="TestingWidget.__testsCollectError" ID="TestingWidget.__testsCollectError"></a>
+<h4>TestingWidget.__testsCollectError</h4>
+<b>__testsCollectError</b>(<i>errors</i>)
+
+<p>
+        Private slot handling the 'collectError' signal of the executor.
+</p>
+<dl>
+
+<dt><i>errors</i> (list of tuple of (str, str))</dt>
+<dd>
+list of tuples containing the test name and a description
+            of the error
+</dd>
+</dl>
+<a NAME="TestingWidget.__testsCollected" ID="TestingWidget.__testsCollected"></a>
+<h4>TestingWidget.__testsCollected</h4>
+<b>__testsCollected</b>(<i>testNames</i>)
+
+<p>
+        Private slot handling the 'collected' signal of the executor.
+</p>
+<dl>
+
+<dt><i>testNames</i> (list of tuple of (str, str, str))</dt>
+<dd>
+list of tuples containing the test id, the test name
+            and a description of collected tests
+</dd>
+</dl>
+<a NAME="TestingWidget.__testsStopped" ID="TestingWidget.__testsStopped"></a>
+<h4>TestingWidget.__testsStopped</h4>
+<b>__testsStopped</b>(<i></i>)
+
+<p>
+        Private slot to handle the 'stop' signal of the executor.
+</p>
+<a NAME="TestingWidget.__updateButtonBoxButtons" ID="TestingWidget.__updateButtonBoxButtons"></a>
+<h4>TestingWidget.__updateButtonBoxButtons</h4>
+<b>__updateButtonBoxButtons</b>(<i></i>)
+
+<p>
+        Private slot to update the state of the buttons of the button box.
+</p>
+<a NAME="TestingWidget.__updateCoverage" ID="TestingWidget.__updateCoverage"></a>
+<h4>TestingWidget.__updateCoverage</h4>
+<b>__updateCoverage</b>(<i></i>)
+
+<p>
+        Private slot to update the state of the coverage checkbox depending on
+        the selected framework's capabilities.
+</p>
+<a NAME="TestingWidget.__updateProgress" ID="TestingWidget.__updateProgress"></a>
+<h4>TestingWidget.__updateProgress</h4>
+<b>__updateProgress</b>(<i></i>)
+
+<p>
+        Private slot update the progress indicators.
+</p>
+<a NAME="TestingWidget.clearRecent" ID="TestingWidget.clearRecent"></a>
+<h4>TestingWidget.clearRecent</h4>
+<b>clearRecent</b>(<i></i>)
+
+<p>
+        Public slot to clear the recently used lists.
+</p>
+<a NAME="TestingWidget.closeEvent" ID="TestingWidget.closeEvent"></a>
+<h4>TestingWidget.closeEvent</h4>
+<b>closeEvent</b>(<i>event</i>)
+
+<p>
+        Protected method to handle the close event.
+</p>
+<dl>
+
+<dt><i>event</i> (QCloseEvent)</dt>
+<dd>
+close event
+</dd>
+</dl>
+<a NAME="TestingWidget.getFailedTests" ID="TestingWidget.getFailedTests"></a>
+<h4>TestingWidget.getFailedTests</h4>
+<b>getFailedTests</b>(<i></i>)
+
+<p>
+        Public method to get the list of failed tests (if any).
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of IDs of failed tests
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<a NAME="TestingWidget.getResultsModel" ID="TestingWidget.getResultsModel"></a>
+<h4>TestingWidget.getResultsModel</h4>
+<b>getResultsModel</b>(<i></i>)
+
+<p>
+        Public method to get a reference to the model containing the test
+        result data.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the test results model
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+TestResultsModel
+</dd>
+</dl>
+<a NAME="TestingWidget.hasFailedTests" ID="TestingWidget.hasFailedTests"></a>
+<h4>TestingWidget.hasFailedTests</h4>
+<b>hasFailedTests</b>(<i></i>)
+
+<p>
+        Public method to check for failed tests.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the existence of failed tests
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="TestingWidget.on_buttonBox_clicked" ID="TestingWidget.on_buttonBox_clicked"></a>
+<h4>TestingWidget.on_buttonBox_clicked</h4>
+<b>on_buttonBox_clicked</b>(<i>button</i>)
+
+<p>
+        Private slot called by a button of the button box clicked.
+</p>
+<dl>
+
+<dt><i>button</i> (QAbstractButton)</dt>
+<dd>
+button that was clicked
+</dd>
+</dl>
+<a NAME="TestingWidget.on_discoverCheckBox_toggled" ID="TestingWidget.on_discoverCheckBox_toggled"></a>
+<h4>TestingWidget.on_discoverCheckBox_toggled</h4>
+<b>on_discoverCheckBox_toggled</b>(<i>checked</i>)
+
+<p>
+        Private slot handling state changes of the 'discover' checkbox.
+</p>
+<dl>
+
+<dt><i>checked</i> (bool)</dt>
+<dd>
+state of the checkbox
+</dd>
+</dl>
+<a NAME="TestingWidget.on_frameworkComboBox_currentIndexChanged" ID="TestingWidget.on_frameworkComboBox_currentIndexChanged"></a>
+<h4>TestingWidget.on_frameworkComboBox_currentIndexChanged</h4>
+<b>on_frameworkComboBox_currentIndexChanged</b>(<i>index</i>)
+
+<p>
+        Private slot handling the selection of a test framework.
+</p>
+<dl>
+
+<dt><i>index</i> (int)</dt>
+<dd>
+index of the selected framework
+</dd>
+</dl>
+<a NAME="TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog" ID="TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog"></a>
+<h4>TestingWidget.on_testsuitePicker_aboutToShowPathPickerDialog</h4>
+<b>on_testsuitePicker_aboutToShowPathPickerDialog</b>(<i></i>)
+
+<p>
+        Private slot called before the test file selection dialog is shown.
+</p>
+<a NAME="TestingWidget.on_venvComboBox_currentIndexChanged" ID="TestingWidget.on_venvComboBox_currentIndexChanged"></a>
+<h4>TestingWidget.on_venvComboBox_currentIndexChanged</h4>
+<b>on_venvComboBox_currentIndexChanged</b>(<i>index</i>)
+
+<p>
+        Private slot handling the selection of a virtual environment.
+</p>
+<dl>
+
+<dt><i>index</i> (int)</dt>
+<dd>
+index of the selected environment
+</dd>
+</dl>
+<a NAME="TestingWidget.on_versionsButton_clicked" ID="TestingWidget.on_versionsButton_clicked"></a>
+<h4>TestingWidget.on_versionsButton_clicked</h4>
+<b>on_versionsButton_clicked</b>(<i></i>)
+
+<p>
+        Private slot to show the versions of available plugins.
+</p>
+<a NAME="TestingWidget.setTestFile" ID="TestingWidget.setTestFile"></a>
+<h4>TestingWidget.setTestFile</h4>
+<b>setTestFile</b>(<i>testFile, forProject=False</i>)
+
+<p>
+        Public slot to set the given test file as the current one.
+</p>
+<dl>
+
+<dt><i>testFile</i> (str)</dt>
+<dd>
+path of the test file
+</dd>
+<dt><i>forProject</i> (bool (optional))</dt>
+<dd>
+flag indicating that this call is for a project
+            (defaults to False)
+</dd>
+</dl>
+<a NAME="TestingWidget.startTests" ID="TestingWidget.startTests"></a>
+<h4>TestingWidget.startTests</h4>
+<b>startTests</b>(<i>failedOnly=False</i>)
+
+<p>
+        Public slot to start the test run.
+</p>
+<dl>
+
+<dt><i>failedOnly</i> (bool)</dt>
+<dd>
+flag indicating to run only failed tests
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="TestingWidgetModes" ID="TestingWidgetModes"></a>
+<h2>TestingWidgetModes</h2>
+
+<p>
+    Class defining the various modes of the testing widget.
+</p>
+<h3>Derived from</h3>
+enum.Enum
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>IDLE</td></tr><tr><td>RUNNING</td></tr><tr><td>STOPPED</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="TestingWindow" ID="TestingWindow"></a>
+<h2>TestingWindow</h2>
+
+<p>
+    Main window class for the standalone dialog.
+</p>
+<h3>Derived from</h3>
+EricMainWindow
+<h3>Class Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+
+<table>
+
+<tr>
+<td><a href="#TestingWindow.__init__">TestingWindow</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#TestingWindow.eventFilter">eventFilter</a></td>
+<td>Public method to filter events.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<a NAME="TestingWindow.__init__" ID="TestingWindow.__init__"></a>
+<h4>TestingWindow (Constructor)</h4>
+<b>TestingWindow</b>(<i>testfile=None, parent=None</i>)
+
+<p>
+        Constructor
+</p>
+<dl>
+
+<dt><i>testfile</i> (str)</dt>
+<dd>
+file name of the test script to open
+</dd>
+<dt><i>parent</i> (QWidget)</dt>
+<dd>
+reference to the parent widget
+</dd>
+</dl>
+<a NAME="TestingWindow.eventFilter" ID="TestingWindow.eventFilter"></a>
+<h4>TestingWindow.eventFilter</h4>
+<b>eventFilter</b>(<i>obj, event</i>)
+
+<p>
+        Public method to filter events.
+</p>
+<dl>
+
+<dt><i>obj</i></dt>
+<dd>
+reference to the object the event is meant for (QObject)
+</dd>
+<dt><i>event</i></dt>
+<dd>
+reference to the event object (QEvent)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating, whether the event was handled (boolean)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="clearSavedHistories" ID="clearSavedHistories"></a>
+<h2>clearSavedHistories</h2>
+<b>clearSavedHistories</b>(<i>self</i>)
+
+<p>
+    Function to clear the saved history lists.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.Testing.__init__.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.__init__</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Testing.__init__</h1>
+
+<p>
+Package implementing testing functionality and interface to various test
+frameworks.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#isLanguageSupported">isLanguageSupported</a></td>
+<td>Function to check, if the given programming language is supported by any testing framework.</td>
+</tr>
+<tr>
+<td><a href="#supportedLanguages">supportedLanguages</a></td>
+<td>Function to get a list of supported programming languages.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="isLanguageSupported" ID="isLanguageSupported"></a>
+<h2>isLanguageSupported</h2>
+<b>isLanguageSupported</b>(<i>language</i>)
+
+<p>
+    Function to check, if the given programming language is supported by any
+    testing framework.
+</p>
+<dl>
+
+<dt><i>language</i> (str)</dt>
+<dd>
+programming language
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating support
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="supportedLanguages" ID="supportedLanguages"></a>
+<h2>supportedLanguages</h2>
+<b>supportedLanguages</b>(<i></i>)
+
+<p>
+    Function to get a list of supported programming languages.
+</p>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of supported programming languages
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/eric7/Documentation/Source/eric7.Tools.TrayStarter.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Tools.TrayStarter.html	Mon May 23 18:15:10 2022 +0200
@@ -175,14 +175,14 @@
 <td>Private slot to start the eric translations previewer.</td>
 </tr>
 <tr>
+<td><a href="#TrayStarter.__startTesting">__startTesting</a></td>
+<td>Private slot to start the eric testing dialog.</td>
+</tr>
+<tr>
 <td><a href="#TrayStarter.__startUIPreviewer">__startUIPreviewer</a></td>
 <td>Private slot to start the eric UI previewer.</td>
 </tr>
 <tr>
-<td><a href="#TrayStarter.__startUnittest">__startUnittest</a></td>
-<td>Private slot to start the eric unittest dialog.</td>
-</tr>
-<tr>
 <td><a href="#TrayStarter.__startVirtualenvManager">__startVirtualenvManager</a></td>
 <td>Private slot to start the eric virtual environments manager window.</td>
 </tr>
@@ -453,6 +453,13 @@
 <p>
         Private slot to start the eric translations previewer.
 </p>
+<a NAME="TrayStarter.__startTesting" ID="TrayStarter.__startTesting"></a>
+<h4>TrayStarter.__startTesting</h4>
+<b>__startTesting</b>(<i></i>)
+
+<p>
+        Private slot to start the eric testing dialog.
+</p>
 <a NAME="TrayStarter.__startUIPreviewer" ID="TrayStarter.__startUIPreviewer"></a>
 <h4>TrayStarter.__startUIPreviewer</h4>
 <b>__startUIPreviewer</b>(<i></i>)
@@ -460,13 +467,6 @@
 <p>
         Private slot to start the eric UI previewer.
 </p>
-<a NAME="TrayStarter.__startUnittest" ID="TrayStarter.__startUnittest"></a>
-<h4>TrayStarter.__startUnittest</h4>
-<b>__startUnittest</b>(<i></i>)
-
-<p>
-        Private slot to start the eric unittest dialog.
-</p>
 <a NAME="TrayStarter.__startVirtualenvManager" ID="TrayStarter.__startVirtualenvManager"></a>
 <h4>TrayStarter.__startVirtualenvManager</h4>
 <b>__startVirtualenvManager</b>(<i></i>)
--- a/eric7/Documentation/Source/eric7.UI.Browser.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.UI.Browser.html	Mon May 23 18:15:10 2022 +0200
@@ -99,6 +99,11 @@
 <dd>
 emitted to open a SVG file (str)
 </dd>
+<dt>testFile(filename)</dt>
+<dd>
+emitted to open a Python file for a
+        unit test (str)
+</dd>
 <dt>trpreview(filenames)</dt>
 <dd>
 emitted to preview Qt-Linguist (*.qm)
@@ -114,11 +119,6 @@
 <dd>
 emitted to open an eric UML file (str)
 </dd>
-<dt>unittestOpen(filename)</dt>
-<dd>
-emitted to open a Python file for a
-        unit test (str)
-</dd>
 </dl>
 <h3>Derived from</h3>
 QTreeView
@@ -277,8 +277,8 @@
 <td>Public slot to handle the programChange signal.</td>
 </tr>
 <tr>
-<td><a href="#Browser.handleUnittest">handleUnittest</a></td>
-<td>Public slot to handle the unittest popup menu entry.</td>
+<td><a href="#Browser.handleTesting">handleTesting</a></td>
+<td>Public slot to handle the testing popup menu entry.</td>
 </tr>
 <tr>
 <td><a href="#Browser.keyboardSearch">keyboardSearch</a></td>
@@ -683,12 +683,12 @@
 file name (string)
 </dd>
 </dl>
-<a NAME="Browser.handleUnittest" ID="Browser.handleUnittest"></a>
-<h4>Browser.handleUnittest</h4>
-<b>handleUnittest</b>(<i></i>)
+<a NAME="Browser.handleTesting" ID="Browser.handleTesting"></a>
+<h4>Browser.handleTesting</h4>
+<b>handleTesting</b>(<i></i>)
 
 <p>
-        Public slot to handle the unittest popup menu entry.
+        Public slot to handle the testing popup menu entry.
 </p>
 <a NAME="Browser.keyboardSearch" ID="Browser.keyboardSearch"></a>
 <h4>Browser.keyboardSearch</h4>
--- a/eric7/Documentation/Source/eric7.UI.ClearPrivateDataDialog.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.UI.ClearPrivateDataDialog.html	Mon May 23 18:15:10 2022 +0200
@@ -95,7 +95,7 @@
 <dd>
 flags indicating which data to clear
             (recent files, recent projects, recent multi projects,
-             debug histories, shell histories, unittest histories,
+             debug histories, shell histories, test histories,
              VCS histories, private data of plugins)
 </dd>
 </dl>
--- a/eric7/Documentation/Source/eric7.UI.UserInterface.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.UI.UserInterface.html	Mon May 23 18:15:10 2022 +0200
@@ -385,14 +385,14 @@
 <td>Private method to create the Sidebars layout.</td>
 </tr>
 <tr>
+<td><a href="#UserInterface.__createTestingDialog">__createTestingDialog</a></td>
+<td>Private slot to generate the testing dialog on demand.</td>
+</tr>
+<tr>
 <td><a href="#UserInterface.__createToolboxesLayout">__createToolboxesLayout</a></td>
 <td>Private method to create the Toolboxes layout.</td>
 </tr>
 <tr>
-<td><a href="#UserInterface.__createUnitTestDialog">__createUnitTestDialog</a></td>
-<td>Private slot to generate the unit test dialog on demand.</td>
-</tr>
-<tr>
 <td><a href="#UserInterface.__customViewer">__customViewer</a></td>
 <td>Private slot to start a custom viewer.</td>
 </tr>
@@ -629,10 +629,18 @@
 <td>Private slot to handle the Feature Request dialog.</td>
 </tr>
 <tr>
+<td><a href="#UserInterface.__rerunFailedTests">__rerunFailedTests</a></td>
+<td>Private slot to display the testing dialog and rerun all failed tests of the last run.</td>
+</tr>
+<tr>
 <td><a href="#UserInterface.__restart">__restart</a></td>
 <td>Private method to restart the application.</td>
 </tr>
 <tr>
+<td><a href="#UserInterface.__restartTest">__restartTest</a></td>
+<td>Private slot to display the testing dialog and rerun the last test run.</td>
+</tr>
+<tr>
 <td><a href="#UserInterface.__saveCurrentViewProfile">__saveCurrentViewProfile</a></td>
 <td>Private slot to save the window geometries of the active profile.</td>
 </tr>
@@ -785,6 +793,18 @@
 <td>Private slot to handle SSL errors.</td>
 </tr>
 <tr>
+<td><a href="#UserInterface.__startTestProject">__startTestProject</a></td>
+<td>Private slot for displaying the testing dialog and run the test for the current project.</td>
+</tr>
+<tr>
+<td><a href="#UserInterface.__startTestScript">__startTestScript</a></td>
+<td>Private slot for displaying the testing dialog and run the current script.</td>
+</tr>
+<tr>
+<td><a href="#UserInterface.__startTesting">__startTesting</a></td>
+<td>Private slot for displaying the testing dialog.</td>
+</tr>
+<tr>
 <td><a href="#UserInterface.__startToolProcess">__startToolProcess</a></td>
 <td>Private slot to start an external tool process.</td>
 </tr>
@@ -797,6 +817,10 @@
 <td>Private slot used to switch between the current and the previous current tab.</td>
 </tr>
 <tr>
+<td><a href="#UserInterface.__testingStopped">__testingStopped</a></td>
+<td>Private slot to handle the end of a test run.</td>
+</tr>
+<tr>
 <td><a href="#UserInterface.__toggleBottomSidebar">__toggleBottomSidebar</a></td>
 <td>Private slot to handle the toggle of the bottom sidebar window.</td>
 </tr>
@@ -849,30 +873,6 @@
 <td>Private slot to handle the tools configuration menu entry.</td>
 </tr>
 <tr>
-<td><a href="#UserInterface.__unittest">__unittest</a></td>
-<td>Private slot for displaying the unittest dialog.</td>
-</tr>
-<tr>
-<td><a href="#UserInterface.__unittestProject">__unittestProject</a></td>
-<td>Private slot for displaying the unittest dialog and run the current project.</td>
-</tr>
-<tr>
-<td><a href="#UserInterface.__unittestRerunFailed">__unittestRerunFailed</a></td>
-<td>Private slot to display the unittest dialog and rerun all failed tests of the last run.</td>
-</tr>
-<tr>
-<td><a href="#UserInterface.__unittestRestart">__unittestRestart</a></td>
-<td>Private slot to display the unittest dialog and rerun the last unit test.</td>
-</tr>
-<tr>
-<td><a href="#UserInterface.__unittestScript">__unittestScript</a></td>
-<td>Private slot for displaying the unittest dialog and run the current script.</td>
-</tr>
-<tr>
-<td><a href="#UserInterface.__unittestStopped">__unittestStopped</a></td>
-<td>Private slot to handle the end of a unit test run.</td>
-</tr>
-<tr>
 <td><a href="#UserInterface.__updateExternalToolsActions">__updateExternalToolsActions</a></td>
 <td>Private method to update the external tools actions for the current tool group.</td>
 </tr>
@@ -1612,6 +1612,13 @@
 <p>
         Private method to create the Sidebars layout.
 </p>
+<a NAME="UserInterface.__createTestingDialog" ID="UserInterface.__createTestingDialog"></a>
+<h4>UserInterface.__createTestingDialog</h4>
+<b>__createTestingDialog</b>(<i></i>)
+
+<p>
+        Private slot to generate the testing dialog on demand.
+</p>
 <a NAME="UserInterface.__createToolboxesLayout" ID="UserInterface.__createToolboxesLayout"></a>
 <h4>UserInterface.__createToolboxesLayout</h4>
 <b>__createToolboxesLayout</b>(<i></i>)
@@ -1619,13 +1626,6 @@
 <p>
         Private method to create the Toolboxes layout.
 </p>
-<a NAME="UserInterface.__createUnitTestDialog" ID="UserInterface.__createUnitTestDialog"></a>
-<h4>UserInterface.__createUnitTestDialog</h4>
-<b>__createUnitTestDialog</b>(<i></i>)
-
-<p>
-        Private slot to generate the unit test dialog on demand.
-</p>
 <a NAME="UserInterface.__customViewer" ID="UserInterface.__customViewer"></a>
 <h4>UserInterface.__customViewer</h4>
 <b>__customViewer</b>(<i>home=None</i>)
@@ -2229,6 +2229,14 @@
 <p>
         Private slot to handle the Feature Request dialog.
 </p>
+<a NAME="UserInterface.__rerunFailedTests" ID="UserInterface.__rerunFailedTests"></a>
+<h4>UserInterface.__rerunFailedTests</h4>
+<b>__rerunFailedTests</b>(<i></i>)
+
+<p>
+        Private slot to display the testing dialog and rerun all failed tests
+        of the last run.
+</p>
 <a NAME="UserInterface.__restart" ID="UserInterface.__restart"></a>
 <h4>UserInterface.__restart</h4>
 <b>__restart</b>(<i>ask=False</i>)
@@ -2243,6 +2251,14 @@
 flag indicating to ask the user for permission
 </dd>
 </dl>
+<a NAME="UserInterface.__restartTest" ID="UserInterface.__restartTest"></a>
+<h4>UserInterface.__restartTest</h4>
+<b>__restartTest</b>(<i></i>)
+
+<p>
+        Private slot to display the testing dialog and rerun the last
+        test run.
+</p>
 <a NAME="UserInterface.__saveCurrentViewProfile" ID="UserInterface.__saveCurrentViewProfile"></a>
 <h4>UserInterface.__saveCurrentViewProfile</h4>
 <b>__saveCurrentViewProfile</b>(<i>save</i>)
@@ -2634,6 +2650,36 @@
 list of SSL errors (list of QSslError)
 </dd>
 </dl>
+<a NAME="UserInterface.__startTestProject" ID="UserInterface.__startTestProject"></a>
+<h4>UserInterface.__startTestProject</h4>
+<b>__startTestProject</b>(<i></i>)
+
+<p>
+        Private slot for displaying the testing dialog and run the test for
+        the current project.
+</p>
+<a NAME="UserInterface.__startTestScript" ID="UserInterface.__startTestScript"></a>
+<h4>UserInterface.__startTestScript</h4>
+<b>__startTestScript</b>(<i>testFile=None</i>)
+
+<p>
+        Private slot for displaying the testing dialog and run the current
+        script.
+</p>
+<dl>
+
+<dt><i>testFile</i> (str)</dt>
+<dd>
+file containing the tests to be run
+</dd>
+</dl>
+<a NAME="UserInterface.__startTesting" ID="UserInterface.__startTesting"></a>
+<h4>UserInterface.__startTesting</h4>
+<b>__startTesting</b>(<i></i>)
+
+<p>
+        Private slot for displaying the testing dialog.
+</p>
 <a NAME="UserInterface.__startToolProcess" ID="UserInterface.__startToolProcess"></a>
 <h4>UserInterface.__startToolProcess</h4>
 <b>__startToolProcess</b>(<i>tool</i>)
@@ -2663,6 +2709,13 @@
         Private slot used to switch between the current and the previous
         current tab.
 </p>
+<a NAME="UserInterface.__testingStopped" ID="UserInterface.__testingStopped"></a>
+<h4>UserInterface.__testingStopped</h4>
+<b>__testingStopped</b>(<i></i>)
+
+<p>
+        Private slot to handle the end of a test run.
+</p>
 <a NAME="UserInterface.__toggleBottomSidebar" ID="UserInterface.__toggleBottomSidebar"></a>
 <h4>UserInterface.__toggleBottomSidebar</h4>
 <b>__toggleBottomSidebar</b>(<i></i>)
@@ -2799,59 +2852,6 @@
 <p>
         Private slot to handle the tools configuration menu entry.
 </p>
-<a NAME="UserInterface.__unittest" ID="UserInterface.__unittest"></a>
-<h4>UserInterface.__unittest</h4>
-<b>__unittest</b>(<i></i>)
-
-<p>
-        Private slot for displaying the unittest dialog.
-</p>
-<a NAME="UserInterface.__unittestProject" ID="UserInterface.__unittestProject"></a>
-<h4>UserInterface.__unittestProject</h4>
-<b>__unittestProject</b>(<i></i>)
-
-<p>
-        Private slot for displaying the unittest dialog and run the current
-        project.
-</p>
-<a NAME="UserInterface.__unittestRerunFailed" ID="UserInterface.__unittestRerunFailed"></a>
-<h4>UserInterface.__unittestRerunFailed</h4>
-<b>__unittestRerunFailed</b>(<i></i>)
-
-<p>
-        Private slot to display the unittest dialog and rerun all failed tests
-        of the last run.
-</p>
-<a NAME="UserInterface.__unittestRestart" ID="UserInterface.__unittestRestart"></a>
-<h4>UserInterface.__unittestRestart</h4>
-<b>__unittestRestart</b>(<i></i>)
-
-<p>
-        Private slot to display the unittest dialog and rerun the last
-        unit test.
-</p>
-<a NAME="UserInterface.__unittestScript" ID="UserInterface.__unittestScript"></a>
-<h4>UserInterface.__unittestScript</h4>
-<b>__unittestScript</b>(<i>prog=None</i>)
-
-<p>
-        Private slot for displaying the unittest dialog and run the current
-        script.
-</p>
-<dl>
-
-<dt><i>prog</i></dt>
-<dd>
-the python program to be opened
-</dd>
-</dl>
-<a NAME="UserInterface.__unittestStopped" ID="UserInterface.__unittestStopped"></a>
-<h4>UserInterface.__unittestStopped</h4>
-<b>__unittestStopped</b>(<i></i>)
-
-<p>
-        Private slot to handle the end of a unit test run.
-</p>
 <a NAME="UserInterface.__updateExternalToolsActions" ID="UserInterface.__updateExternalToolsActions"></a>
 <h4>UserInterface.__updateExternalToolsActions</h4>
 <b>__updateExternalToolsActions</b>(<i></i>)
--- a/eric7/Documentation/Source/eric7.Utilities.__init__.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/eric7.Utilities.__init__.html	Mon May 23 18:15:10 2022 +0200
@@ -138,6 +138,14 @@
 <td>Module function to generate a string with various version infos.</td>
 </tr>
 <tr>
+<td><a href="#getCoverageFileName">getCoverageFileName</a></td>
+<td>Function to build a file name for a coverage data file.</td>
+</tr>
+<tr>
+<td><a href="#getCoverageFileNames">getCoverageFileNames</a></td>
+<td>Function to build a list of coverage data file names.</td>
+</tr>
+<tr>
 <td><a href="#getDirs">getDirs</a></td>
 <td>Function returning a list of all directories below path.</td>
 </tr>
@@ -166,6 +174,14 @@
 <td>Function to get the help text for the supported %-codes.</td>
 </tr>
 <tr>
+<td><a href="#getProfileFileName">getProfileFileName</a></td>
+<td>Function to build a file name for a profile data file.</td>
+</tr>
+<tr>
+<td><a href="#getProfileFileNames">getProfileFileNames</a></td>
+<td>Function to build a list of profile data file names.</td>
+</tr>
+<tr>
 <td><a href="#getPythonLibPath">getPythonLibPath</a></td>
 <td>Function to determine the path to Python's library.</td>
 </tr>
@@ -186,8 +202,8 @@
 <td>Module function to get the Python path (sys.path) of a specific interpreter.</td>
 </tr>
 <tr>
-<td><a href="#getTestFileName">getTestFileName</a></td>
-<td>Function to build the filename of a unittest file.</td>
+<td><a href="#getTestFileNames">getTestFileNames</a></td>
+<td>Function to build the potential file names of a test file.</td>
 </tr>
 <tr>
 <td><a href="#getUserName">getUserName</a></td>
@@ -1241,6 +1257,69 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="getCoverageFileName" ID="getCoverageFileName"></a>
+<h2>getCoverageFileName</h2>
+<b>getCoverageFileName</b>(<i>fn, mustExist=True</i>)
+
+<p>
+    Function to build a file name for a coverage data file.
+</p>
+<dl>
+
+<dt><i>fn</i> (str)</dt>
+<dd>
+file name basis to be used for the coverage data file name
+</dd>
+<dt><i>mustExist</i> (bool (optional))</dt>
+<dd>
+flag indicating to check that the file exists (defaults
+        to True)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+coverage data file name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="getCoverageFileNames" ID="getCoverageFileNames"></a>
+<h2>getCoverageFileNames</h2>
+<b>getCoverageFileNames</b>(<i>fn</i>)
+
+<p>
+    Function to build a list of coverage data file names.
+</p>
+<dl>
+
+<dt><i>fn</i> (str)</dt>
+<dd>
+file name basis to be used for the coverage data file
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of existing coverage data files
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="getDirs" ID="getDirs"></a>
 <h2>getDirs</h2>
 <b>getDirs</b>(<i>path, excludeDirs</i>)
@@ -1408,6 +1487,69 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
+<a NAME="getProfileFileName" ID="getProfileFileName"></a>
+<h2>getProfileFileName</h2>
+<b>getProfileFileName</b>(<i>fn, mustExist=True</i>)
+
+<p>
+    Function to build a file name for a profile data file.
+</p>
+<dl>
+
+<dt><i>fn</i> (str)</dt>
+<dd>
+file name basis to be used for the profile data file name
+</dd>
+<dt><i>mustExist</i> (bool (optional))</dt>
+<dd>
+flag indicating to check that the file exists (defaults
+        to True)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+profile data file name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="getProfileFileNames" ID="getProfileFileNames"></a>
+<h2>getProfileFileNames</h2>
+<b>getProfileFileNames</b>(<i>fn</i>)
+
+<p>
+    Function to build a list of profile data file names.
+</p>
+<dl>
+
+<dt><i>fn</i> (str)</dt>
+<dd>
+file name basis to be used for the profile data file
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of existing profile data files
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
 <a NAME="getPythonLibPath" ID="getPythonLibPath"></a>
 <h2>getPythonLibPath</h2>
 <b>getPythonLibPath</b>(<i></i>)
@@ -1510,28 +1652,34 @@
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
-<a NAME="getTestFileName" ID="getTestFileName"></a>
-<h2>getTestFileName</h2>
-<b>getTestFileName</b>(<i>fn</i>)
+<a NAME="getTestFileNames" ID="getTestFileNames"></a>
+<h2>getTestFileNames</h2>
+<b>getTestFileNames</b>(<i>fn</i>)
 
 <p>
-    Function to build the filename of a unittest file.
+    Function to build the potential file names of a test file.
 </p>
 <p>
-    The filename for the unittest file is built by prepending
-    the string "test" to the filename passed into this function.
+    The file names for the test file is built by prepending the string
+    "test" and "test_" to the file name passed into this function.
 </p>
 <dl>
 
-<dt><i>fn</i></dt>
+<dt><i>fn</i> (str)</dt>
 <dd>
-filename basis to be used for the unittest filename (string)
+file name basis to be used for the test file names
 </dd>
 </dl>
 <dl>
 <dt>Return:</dt>
 <dd>
-filename of the corresponding unittest file (string)
+file names of the corresponding test file
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
 </dd>
 </dl>
 <div align="right"><a href="#top">Up</a></div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/eric7.eric7_testing.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.eric7_testing</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.eric7_testing</h1>
+
+<p>
+eric testing.
+</p>
+<p>
+This is the main Python script that performs the necessary initialization
+of the testing module and starts the Qt event loop. This is a standalone
+version of the integrated testing module.
+</p>
+<h3>Global Attributes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Classes</h3>
+
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Functions</h3>
+
+<table>
+
+<tr>
+<td><a href="#createMainWidget">createMainWidget</a></td>
+<td>Function to create the main widget.</td>
+</tr>
+<tr>
+<td><a href="#main">main</a></td>
+<td>Main entry point into the application.</td>
+</tr>
+</table>
+<hr />
+<hr />
+<a NAME="createMainWidget" ID="createMainWidget"></a>
+<h2>createMainWidget</h2>
+<b>createMainWidget</b>(<i>argv</i>)
+
+<p>
+    Function to create the main widget.
+</p>
+<dl>
+
+<dt><i>argv</i> (list of str)</dt>
+<dd>
+list of commandline parameters
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the main widget
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+QWidget
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="main" ID="main"></a>
+<h2>main</h2>
+<b>main</b>(<i></i>)
+
+<p>
+    Main entry point into the application.
+</p>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file
--- a/eric7/Documentation/Source/eric7.eric7_unittest.html	Mon May 23 17:31:02 2022 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric7.eric7_unittest</title>
-<meta charset="UTF-8">
-<link rel="stylesheet" href="styles.css">
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric7.eric7_unittest</h1>
-
-<p>
-eric Unittest.
-</p>
-<p>
-This is the main Python script that performs the necessary initialization
-of the unittest module and starts the Qt event loop. This is a standalone
-version of the integrated unittest module.
-</p>
-<h3>Global Attributes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Classes</h3>
-
-<table>
-<tr><td>None</td></tr>
-</table>
-<h3>Functions</h3>
-
-<table>
-
-<tr>
-<td><a href="#createMainWidget">createMainWidget</a></td>
-<td>Function to create the main widget.</td>
-</tr>
-<tr>
-<td><a href="#main">main</a></td>
-<td>Main entry point into the application.</td>
-</tr>
-</table>
-<hr />
-<hr />
-<a NAME="createMainWidget" ID="createMainWidget"></a>
-<h2>createMainWidget</h2>
-<b>createMainWidget</b>(<i>argv</i>)
-
-<p>
-    Function to create the main widget.
-</p>
-<dl>
-
-<dt><i>argv</i></dt>
-<dd>
-list of commandline parameters (list of strings)
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-reference to the main widget (QWidget)
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="main" ID="main"></a>
-<h2>main</h2>
-<b>main</b>(<i></i>)
-
-<p>
-    Main entry point into the application.
-</p>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
\ No newline at end of file
--- a/eric7/Documentation/Source/index-eric7.DataViews.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/index-eric7.DataViews.html	Mon May 23 18:15:10 2022 +0200
@@ -28,6 +28,14 @@
 <td>Module implementing a Python code coverage dialog.</td>
 </tr>
 <tr>
+<td><a href="eric7.DataViews.PyCoverageHtmlReportDialog.html">PyCoverageHtmlReportDialog</a></td>
+<td>Module implementing a dialog to enter the parameters for a coverage HTML report.</td>
+</tr>
+<tr>
+<td><a href="eric7.DataViews.PyCoverageJsonReportDialog.html">PyCoverageJsonReportDialog</a></td>
+<td>Module implementing a dialog to enter the parameters for a coverage JSON report.</td>
+</tr>
+<tr>
 <td><a href="eric7.DataViews.PyProfileDialog.html">PyProfileDialog</a></td>
 <td>Module implementing a dialog to display profile data.</td>
 </tr>
--- a/eric7/Documentation/Source/index-eric7.DebugClients.Python.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/index-eric7.DebugClients.Python.html	Mon May 23 18:15:10 2022 +0200
@@ -27,10 +27,6 @@
 <td>Module implementing the breakpoint and watch class.</td>
 </tr>
 <tr>
-<td><a href="eric7.DebugClients.Python.DCTestResult.html">DCTestResult</a></td>
-<td>Module implementing a TestResult derivative for the eric debugger.</td>
-</tr>
-<tr>
 <td><a href="eric7.DebugClients.Python.DebugBase.html">DebugBase</a></td>
 <td>Module implementing the debug base class which based originally on bdb.</td>
 </tr>
--- a/eric7/Documentation/Source/index-eric7.EricNetwork.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/index-eric7.EricNetwork.html	Mon May 23 18:15:10 2022 +0200
@@ -44,6 +44,14 @@
 <td>Module implementing the JSON based server base class.</td>
 </tr>
 <tr>
+<td><a href="eric7.EricNetwork.EricJsonStreamReader.html">EricJsonStreamReader</a></td>
+<td>Module implementing a JSON based reader class.</td>
+</tr>
+<tr>
+<td><a href="eric7.EricNetwork.EricJsonStreamWriter.html">EricJsonStreamWriter</a></td>
+<td>Module implementing a JSON based writer class.</td>
+</tr>
+<tr>
 <td><a href="eric7.EricNetwork.EricNetworkIcon.html">EricNetworkIcon</a></td>
 <td>Module implementing a statusbar icon tracking the network status.</td>
 </tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/index-eric7.Testing.Interfaces.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing.Interfaces</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<h1>eric7.Testing.Interfaces</h1>
+
+<p>
+Package containg the various test framework interfaces.
+</p>
+
+
+<h3>Modules</h3>
+<table>
+
+<tr>
+<td><a href="eric7.Testing.Interfaces.PytestExecutor.html">PytestExecutor</a></td>
+<td>Module implementing the executor for the 'pytest' framework.</td>
+</tr>
+<tr>
+<td><a href="eric7.Testing.Interfaces.PytestRunner.html">PytestRunner</a></td>
+<td>Module implementing the test runner script for the 'pytest' framework.</td>
+</tr>
+<tr>
+<td><a href="eric7.Testing.Interfaces.TestExecutorBase.html">TestExecutorBase</a></td>
+<td>Module implementing the executor base class for the various testing frameworks and supporting classes.</td>
+</tr>
+<tr>
+<td><a href="eric7.Testing.Interfaces.TestFrameworkRegistry.html">TestFrameworkRegistry</a></td>
+<td>Module implementing a simple registry containing the available test framework interfaces.</td>
+</tr>
+<tr>
+<td><a href="eric7.Testing.Interfaces.UnittestExecutor.html">UnittestExecutor</a></td>
+<td>Module implementing the executor for the standard 'unittest' framework.</td>
+</tr>
+<tr>
+<td><a href="eric7.Testing.Interfaces.UnittestRunner.html">UnittestRunner</a></td>
+<td>Module implementing the test runner script for the 'unittest' framework.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/Documentation/Source/index-eric7.Testing.html	Mon May 23 18:15:10 2022 +0200
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Testing</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<h1>eric7.Testing</h1>
+
+<p>
+Package implementing testing functionality and interface to various test
+frameworks.
+</p>
+
+<h3>Packages</h3>
+<table>
+
+<tr>
+<td><a href="index-eric7.Testing.Interfaces.html">Interfaces</a></td>
+<td>Package containg the various test framework interfaces.</td>
+</tr>
+</table>
+
+<h3>Modules</h3>
+<table>
+
+<tr>
+<td><a href="eric7.Testing.TestResultsTree.html">TestResultsTree</a></td>
+<td>Module implementing a tree view and associated model to show the test result data.</td>
+</tr>
+<tr>
+<td><a href="eric7.Testing.TestingWidget.html">TestingWidget</a></td>
+<td>Module implementing a widget to orchestrate unit test execution.</td>
+</tr>
+<tr>
+<td><a href="eric7.Testing.__init__.html">Testing</a></td>
+<td>Package implementing testing functionality and interface to various test frameworks.</td>
+</tr>
+</table>
+</body></html>
\ No newline at end of file
--- a/eric7/Documentation/Source/index-eric7.html	Mon May 23 17:31:02 2022 +0200
+++ b/eric7/Documentation/Source/index-eric7.html	Mon May 23 18:15:10 2022 +0200
@@ -127,10 +127,6 @@
 <td>Package implementing the project management module of eric.</td>
 </tr>
 <tr>
-<td><a href="index-eric7.PyUnit.html">PyUnit</a></td>
-<td>Package implementing an interface to the pyunit unittest package.</td>
-</tr>
-<tr>
 <td><a href="index-eric7.QScintilla.html">QScintilla</a></td>
 <td>Package implementing the editor and shell components of the eric IDE.</td>
 </tr>
@@ -155,6 +151,10 @@
 <td>Package containing modules for the templating system.</td>
 </tr>
 <tr>
+<td><a href="index-eric7.Testing.html">Testing</a></td>
+<td>Package implementing testing functionality and interface to various test frameworks.</td>
+</tr>
+<tr>
 <td><a href="index-eric7.Toolbox.html">Toolbox</a></td>
 <td>Package implementing general purpose tools.</td>
 </tr>
@@ -272,6 +272,10 @@
 <td>eric SQL Browser.</td>
 </tr>
 <tr>
+<td><a href="eric7.eric7_testing.html">eric7_testing</a></td>
+<td>eric testing.</td>
+</tr>
+<tr>
 <td><a href="eric7.eric7_tray.html">eric7_tray</a></td>
 <td>eric Tray.</td>
 </tr>
@@ -284,10 +288,6 @@
 <td>eric UI Previewer.</td>
 </tr>
 <tr>
-<td><a href="eric7.eric7_unittest.html">eric7_unittest</a></td>
-<td>eric Unittest.</td>
-</tr>
-<tr>
 <td><a href="eric7.eric7_virtualenv.html">eric7_virtualenv</a></td>
 <td>eric Virtual Environment Manager.</td>
 </tr>

eric ide

mercurial