Mon, 05 Sep 2022 18:08:43 +0200
Testing
- extended the testing dialog to allow test case filtering on markers (pytest only)
--- a/docs/changelog Sun Sep 04 16:11:32 2022 +0200 +++ b/docs/changelog Mon Sep 05 18:08:43 2022 +0200 @@ -4,6 +4,8 @@ - bug fixes - pip Interface -- changed the pip licenses dialog to show the count of each individual license +- Testing + -- extended the testing dialog to allow test case filtering on markers (pytest only) Version 22.9: - bug fixes
--- a/eric7.epj Sun Sep 04 16:11:32 2022 +0200 +++ b/eric7.epj Mon Sep 05 18:08:43 2022 +0200 @@ -652,6 +652,7 @@ "src/eric7/Tasks/TaskPropertiesDialog.ui", "src/eric7/Templates/TemplatePropertiesDialog.ui", "src/eric7/Templates/TemplateSingleVariableDialog.ui", + "src/eric7/Testing/MarkersWindow.ui", "src/eric7/Testing/TestingWidget.ui", "src/eric7/UI/AuthenticationDialog.ui", "src/eric7/UI/ClearPrivateDataDialog.ui", @@ -1999,6 +2000,7 @@ "src/eric7/Testing/Interfaces/UnittestExecutor.py", "src/eric7/Testing/Interfaces/UnittestRunner.py", "src/eric7/Testing/Interfaces/__init__.py", + "src/eric7/Testing/MarkersWindow.py", "src/eric7/Testing/TestResultsTree.py", "src/eric7/Testing/TestingWidget.py", "src/eric7/Testing/__init__.py",
--- a/src/eric7/APIs/Python3/eric7.api Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/APIs/Python3/eric7.api Mon Sep 05 18:08:43 2022 +0200 @@ -3290,6 +3290,7 @@ eric7.PipInterface.piplicenses.create_licenses_list?4(args: "CustomNamespace", output_fields=DEFAULT_OUTPUT_FIELDS) eric7.PipInterface.piplicenses.create_output_string?4(args: "CustomNamespace") eric7.PipInterface.piplicenses.create_parser?4() +eric7.PipInterface.piplicenses.create_summary_by_license_list?4(args: "CustomNamespace") eric7.PipInterface.piplicenses.create_summary_list?4(args: "CustomNamespace") eric7.PipInterface.piplicenses.enum_key_to_value?4(enum_key: Enum) eric7.PipInterface.piplicenses.find_license_from_classifier?4(message) @@ -9295,12 +9296,14 @@ 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.getMarkers?4(interpreter, workdir) 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.supportsMarkers?4(interpreter) 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) @@ -9311,9 +9314,13 @@ 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.GetMarkersPlugin.getMarkers?4() +eric7.Testing.Interfaces.PytestRunner.GetMarkersPlugin.pytest_cmdline_main?4(config) +eric7.Testing.Interfaces.PytestRunner.GetMarkersPlugin?1() 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.getMarkers?4() eric7.Testing.Interfaces.PytestRunner.getVersions?4() eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase._prepareProcess?5(workDir, pythonpath) eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.collectError?7 @@ -9321,6 +9328,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.getMarkers?4(interpreter, workdir) eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.getVersions?4(interpreter) eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.hasCoverage?4(interpreter) eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.isInstalled?4(interpreter) @@ -9332,6 +9340,7 @@ 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.supportsMarkers?4(interpreter) eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testFinished?7 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testResult?7 eric7.Testing.Interfaces.TestExecutorBase.TestExecutorBase.testRunAboutToBeStarted?7 @@ -9368,6 +9377,9 @@ eric7.Testing.Interfaces.UnittestRunner.EricTestResult?1(writer, failfast) eric7.Testing.Interfaces.UnittestRunner._assembleTestCasesList?5(suite) eric7.Testing.Interfaces.UnittestRunner.runtest?4(argv) +eric7.Testing.MarkersWindow.MarkersWindow.closeEvent?4(e) +eric7.Testing.MarkersWindow.MarkersWindow.showMarkers?4(markers) +eric7.Testing.MarkersWindow.MarkersWindow?1(parent=None) eric7.Testing.TestResultsTree.TestResultsModel.DurationColumn?7 eric7.Testing.TestResultsTree.TestResultsModel.Headers?7 eric7.Testing.TestResultsTree.TestResultsModel.MessageColumn?7 @@ -9405,6 +9417,7 @@ 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_showMarkersButton_clicked?4() 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()
--- a/src/eric7/APIs/Python3/eric7.bas Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/APIs/Python3/eric7.bas Mon Sep 05 18:08:43 2022 +0200 @@ -638,6 +638,7 @@ MakePropertiesDialog QDialog Ui_MakePropertiesDialog ManageDictionariesDialog QDialog Ui_ManageDictionariesDialog MarkdownProvider MarkupBase +MarkersWindow QWidget Ui_MarkersWindow MasterPasswordEntryDialog QDialog Ui_MasterPasswordEntryDialog MercurialPage ConfigurationPageBase Ui_MercurialPage MermaidExtension Extension
--- a/src/eric7/Documentation/Help/source.qhp Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Documentation/Help/source.qhp Mon Sep 05 18:08:43 2022 +0200 @@ -1068,6 +1068,7 @@ <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.MarkersWindow" ref="eric7.Testing.MarkersWindow.html" /> <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" /> @@ -6311,6 +6312,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="GetMarkersPlugin" id="GetMarkersPlugin" ref="eric7.Testing.Interfaces.PytestRunner.html#GetMarkersPlugin" /> + <keyword name="GetMarkersPlugin (Constructor)" id="GetMarkersPlugin (Constructor)" ref="eric7.Testing.Interfaces.PytestRunner.html#GetMarkersPlugin.__init__" /> + <keyword name="GetMarkersPlugin.getMarkers" id="GetMarkersPlugin.getMarkers" ref="eric7.Testing.Interfaces.PytestRunner.html#GetMarkersPlugin.getMarkers" /> + <keyword name="GetMarkersPlugin.pytest_cmdline_main" id="GetMarkersPlugin.pytest_cmdline_main" ref="eric7.Testing.Interfaces.PytestRunner.html#GetMarkersPlugin.pytest_cmdline_main" /> <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" /> @@ -10228,6 +10233,11 @@ <keyword name="MarkdownProvider.numberedList" id="MarkdownProvider.numberedList" ref="eric7.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider.numberedList" /> <keyword name="MarkdownProvider.quote" id="MarkdownProvider.quote" ref="eric7.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider.quote" /> <keyword name="MarkdownProvider.strikethrough" id="MarkdownProvider.strikethrough" ref="eric7.QScintilla.MarkupProviders.MarkdownProvider.html#MarkdownProvider.strikethrough" /> + <keyword name="MarkersWindow" id="MarkersWindow" ref="eric7.Testing.MarkersWindow.html#MarkersWindow" /> + <keyword name="MarkersWindow (Constructor)" id="MarkersWindow (Constructor)" ref="eric7.Testing.MarkersWindow.html#MarkersWindow.__init__" /> + <keyword name="MarkersWindow (Module)" id="MarkersWindow (Module)" ref="eric7.Testing.MarkersWindow.html" /> + <keyword name="MarkersWindow.closeEvent" id="MarkersWindow.closeEvent" ref="eric7.Testing.MarkersWindow.html#MarkersWindow.closeEvent" /> + <keyword name="MarkersWindow.showMarkers" id="MarkersWindow.showMarkers" ref="eric7.Testing.MarkersWindow.html#MarkersWindow.showMarkers" /> <keyword name="MarkupBase" id="MarkupBase" ref="eric7.QScintilla.MarkupProviders.MarkupBase.html#MarkupBase" /> <keyword name="MarkupBase (Constructor)" id="MarkupBase (Constructor)" ref="eric7.QScintilla.MarkupProviders.MarkupBase.html#MarkupBase.__init__" /> <keyword name="MarkupBase (Module)" id="MarkupBase (Module)" ref="eric7.QScintilla.MarkupProviders.MarkupBase.html" /> @@ -12801,9 +12811,11 @@ <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.getMarkers" id="PytestExecutor.getMarkers" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.getMarkers" /> <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="PytestExecutor.supportsMarkers" id="PytestExecutor.supportsMarkers" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.supportsMarkers" /> <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" /> @@ -15927,12 +15939,14 @@ <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.getMarkers" id="TestExecutorBase.getMarkers" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.getMarkers" /> <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="TestExecutorBase.supportsMarkers" id="TestExecutorBase.supportsMarkers" ref="eric7.Testing.Interfaces.TestExecutorBase.html#TestExecutorBase.supportsMarkers" /> <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" /> @@ -16007,6 +16021,7 @@ <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.__updateMarkerSupport" id="TestingWidget.__updateMarkerSupport" ref="eric7.Testing.TestingWidget.html#TestingWidget.__updateMarkerSupport" /> <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" /> @@ -16016,6 +16031,7 @@ <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_showMarkersButton_clicked" id="TestingWidget.on_showMarkersButton_clicked" ref="eric7.Testing.TestingWidget.html#TestingWidget.on_showMarkersButton_clicked" /> <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" /> @@ -18566,6 +18582,7 @@ <keyword name="create_licenses_list" id="create_licenses_list" ref="eric7.PipInterface.piplicenses.html#create_licenses_list" /> <keyword name="create_output_string" id="create_output_string" ref="eric7.PipInterface.piplicenses.html#create_output_string" /> <keyword name="create_parser" id="create_parser" ref="eric7.PipInterface.piplicenses.html#create_parser" /> + <keyword name="create_summary_by_license_list" id="create_summary_by_license_list" ref="eric7.PipInterface.piplicenses.html#create_summary_by_license_list" /> <keyword name="create_summary_list" id="create_summary_list" ref="eric7.PipInterface.piplicenses.html#create_summary_list" /> <keyword name="critical" id="critical" ref="eric7.EricWidgets.EricMessageBox.html#critical" /> <keyword name="crypto (Package)" id="crypto (Package)" ref="index-eric7.Utilities.crypto.html" /> @@ -18800,6 +18817,7 @@ <keyword name="getKeyUrl" id="getKeyUrl" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.__init__.html#getKeyUrl" /> <keyword name="getLanguageIcon" id="getLanguageIcon" ref="eric7.QScintilla.Lexers.__init__.html#getLanguageIcon" /> <keyword name="getLexer" id="getLexer" ref="eric7.QScintilla.Lexers.__init__.html#getLexer" /> + <keyword name="getMarkers" id="getMarkers" ref="eric7.Testing.Interfaces.PytestRunner.html#getMarkers" /> <keyword name="getMarkupProvider" id="getMarkupProvider" ref="eric7.QScintilla.MarkupProviders.__init__.html#getMarkupProvider" /> <keyword name="getMessageCodes" id="getMessageCodes" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.translations.html#getMessageCodes" /> <keyword name="getMicroPython" id="getMicroPython" ref="eric7.Preferences.__init__.html#getMicroPython" /> @@ -20238,6 +20256,7 @@ <file>eric7.Testing.Interfaces.TestFrameworkRegistry.html</file> <file>eric7.Testing.Interfaces.UnittestExecutor.html</file> <file>eric7.Testing.Interfaces.UnittestRunner.html</file> + <file>eric7.Testing.MarkersWindow.html</file> <file>eric7.Testing.TestResultsTree.html</file> <file>eric7.Testing.TestingWidget.html</file> <file>eric7.Testing.__init__.html</file>
--- a/src/eric7/Documentation/Source/eric7.PipInterface.piplicenses.html Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Documentation/Source/eric7.PipInterface.piplicenses.html Mon Sep 05 18:08:43 2022 +0200 @@ -97,6 +97,10 @@ <td></td> </tr> <tr> +<td><a href="#create_summary_by_license_list">create_summary_by_license_list</a></td> +<td></td> +</tr> +<tr> <td><a href="#create_summary_list">create_summary_list</a></td> <td></td> </tr> @@ -438,6 +442,13 @@ <div align="right"><a href="#top">Up</a></div> <hr /> <hr /> +<a NAME="create_summary_by_license_list" ID="create_summary_by_license_list"></a> +<h2>create_summary_by_license_list</h2> +<b>create_summary_by_license_list</b>(<i>args: "CustomNamespace"</i>) + +<div align="right"><a href="#top">Up</a></div> +<hr /> +<hr /> <a NAME="create_summary_list" ID="create_summary_list"></a> <h2>create_summary_list</h2> <b>create_summary_list</b>(<i>args: "CustomNamespace"</i>)
--- a/src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestExecutor.html Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestExecutor.html Mon Sep 05 18:08:43 2022 +0200 @@ -79,6 +79,10 @@ <td>Public method handling the unit test process been finished.</td> </tr> <tr> +<td><a href="#PytestExecutor.getMarkers">getMarkers</a></td> +<td>Public method to get the list of defined markers.</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> @@ -90,6 +94,10 @@ <td><a href="#PytestExecutor.start">start</a></td> <td>Public method to start the testing process.</td> </tr> +<tr> +<td><a href="#PytestExecutor.supportsMarkers">supportsMarkers</a></td> +<td>Public method to indicate the support for test filtering using markers and/or marker expressions.</td> +</tr> </table> <h3>Static Methods</h3> @@ -219,6 +227,37 @@ This method should read the results (if necessary) and emit the signal testFinished. </p> +<a NAME="PytestExecutor.getMarkers" ID="PytestExecutor.getMarkers"></a> +<h4>PytestExecutor.getMarkers</h4> +<b>getMarkers</b>(<i>interpreter, workdir</i>) + +<p> + Public method to get the list of defined markers. +</p> +<dl> + +<dt><i>interpreter</i> (str)</dt> +<dd> +interpreter to be used for the test +</dd> +<dt><i>workdir</i> (str)</dt> +<dd> +name of the working directory +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +dictionary containing the marker as key and the associated description + as value +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl> <a NAME="PytestExecutor.getVersions" ID="PytestExecutor.getVersions"></a> <h4>PytestExecutor.getVersions</h4> <b>getVersions</b>(<i>interpreter</i>) @@ -292,6 +331,33 @@ list of directories to be added to the Python path </dd> </dl> +<a NAME="PytestExecutor.supportsMarkers" ID="PytestExecutor.supportsMarkers"></a> +<h4>PytestExecutor.supportsMarkers</h4> +<b>supportsMarkers</b>(<i>interpreter</i>) + +<p> + Public method to indicate the support for test filtering using markers and/or + marker expressions. +</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 support of markers +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> <div align="right"><a href="#top">Up</a></div> <hr /> </body></html> \ No newline at end of file
--- a/src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestRunner.html Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Documentation/Source/eric7.Testing.Interfaces.PytestRunner.html Mon Sep 05 18:08:43 2022 +0200 @@ -25,6 +25,10 @@ <td>Class implementing a pytest plugin which reports the data in a format suitable for the PytestExecutor.</td> </tr> <tr> +<td><a href="#GetMarkersPlugin">GetMarkersPlugin</a></td> +<td>Class implementing a pytest plugin to extract the list of all defined markers.</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> @@ -34,6 +38,10 @@ <table> <tr> +<td><a href="#getMarkers">getMarkers</a></td> +<td>Function to determine the defined markers and their descriptions.</td> +</tr> +<tr> <td><a href="#getVersions">getVersions</a></td> <td>Function to determine the framework version and versions of all available plugins.</td> </tr> @@ -266,6 +274,90 @@ <div align="right"><a href="#top">Up</a></div> <hr /> <hr /> +<a NAME="GetMarkersPlugin" ID="GetMarkersPlugin"></a> +<h2>GetMarkersPlugin</h2> + +<p> + Class implementing a pytest plugin to extract the list of all defined markers. +</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="#GetMarkersPlugin.__init__">GetMarkersPlugin</a></td> +<td>Constructor</td> +</tr> +<tr> +<td><a href="#GetMarkersPlugin.getMarkers">getMarkers</a></td> +<td>Public method to get the assembled list of markers.</td> +</tr> +<tr> +<td><a href="#GetMarkersPlugin.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="GetMarkersPlugin.__init__" ID="GetMarkersPlugin.__init__"></a> +<h4>GetMarkersPlugin (Constructor)</h4> +<b>GetMarkersPlugin</b>(<i></i>) + +<p> + Constructor +</p> +<a NAME="GetMarkersPlugin.getMarkers" ID="GetMarkersPlugin.getMarkers"></a> +<h4>GetMarkersPlugin.getMarkers</h4> +<b>getMarkers</b>(<i></i>) + +<p> + Public method to get the assembled list of markers. +</p> +<dl> +<dt>Return:</dt> +<dd> +list of collected markers (marker name as key and description as value) +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl> +<a NAME="GetMarkersPlugin.pytest_cmdline_main" ID="GetMarkersPlugin.pytest_cmdline_main"></a> +<h4>GetMarkersPlugin.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="GetPluginVersionsPlugin" ID="GetPluginVersionsPlugin"></a> <h2>GetPluginVersionsPlugin</h2> @@ -351,6 +443,16 @@ <div align="right"><a href="#top">Up</a></div> <hr /> <hr /> +<a NAME="getMarkers" ID="getMarkers"></a> +<h2>getMarkers</h2> +<b>getMarkers</b>(<i></i>) + +<p> + Function to determine the defined markers and their descriptions. +</p> +<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>)
--- a/src/eric7/Documentation/Source/eric7.Testing.Interfaces.TestExecutorBase.html Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Documentation/Source/eric7.Testing.Interfaces.TestExecutorBase.html Mon Sep 05 18:08:43 2022 +0200 @@ -170,6 +170,10 @@ <td>Public method handling the unit test process been finished.</td> </tr> <tr> +<td><a href="#TestExecutorBase.getMarkers">getMarkers</a></td> +<td>Public method to get the list of defined markers.</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> @@ -189,6 +193,10 @@ <td><a href="#TestExecutorBase.stopIfRunning">stopIfRunning</a></td> <td>Public method to stop the testing process, if it is running.</td> </tr> +<tr> +<td><a href="#TestExecutorBase.supportsMarkers">supportsMarkers</a></td> +<td>Public method to indicate the support for test filtering using markers and/or marker expressions.</td> +</tr> </table> <h3>Static Methods</h3> @@ -322,6 +330,37 @@ derived classes </dd> </dl> +<a NAME="TestExecutorBase.getMarkers" ID="TestExecutorBase.getMarkers"></a> +<h4>TestExecutorBase.getMarkers</h4> +<b>getMarkers</b>(<i>interpreter, workdir</i>) + +<p> + Public method to get the list of defined markers. +</p> +<dl> + +<dt><i>interpreter</i> (str)</dt> +<dd> +interpreter to be used for the test +</dd> +<dt><i>workdir</i> (str)</dt> +<dd> +name of the working directory +</dd> +</dl> +<dl> +<dt>Return:</dt> +<dd> +dictionary containing the marker as key and the associated description + as value +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +dict +</dd> +</dl> <a NAME="TestExecutorBase.getVersions" ID="TestExecutorBase.getVersions"></a> <h4>TestExecutorBase.getVersions</h4> <b>getVersions</b>(<i>interpreter</i>) @@ -350,14 +389,6 @@ 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>) @@ -385,14 +416,6 @@ 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>) @@ -451,6 +474,33 @@ <p> Public method to stop the testing process, if it is running. </p> +<a NAME="TestExecutorBase.supportsMarkers" ID="TestExecutorBase.supportsMarkers"></a> +<h4>TestExecutorBase.supportsMarkers</h4> +<b>supportsMarkers</b>(<i>interpreter</i>) + +<p> + Public method to indicate the support for test filtering using markers and/or + marker expressions. +</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 support of markers +</dd> +</dl> +<dl> +<dt>Return Type:</dt> +<dd> +bool +</dd> +</dl> <div align="right"><a href="#top">Up</a></div> <hr /> <hr />
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/eric7/Documentation/Source/eric7.Testing.MarkersWindow.html Mon Sep 05 18:08:43 2022 +0200 @@ -0,0 +1,120 @@ +<!DOCTYPE html> +<html><head> +<title>eric7.Testing.MarkersWindow</title> +<meta charset="UTF-8"> +<link rel="stylesheet" href="styles.css"> +</head> +<body> +<a NAME="top" ID="top"></a> +<h1>eric7.Testing.MarkersWindow</h1> + +<p> +Module implementing a dialog to show defined test markers. +</p> +<h3>Global Attributes</h3> + +<table> +<tr><td>None</td></tr> +</table> +<h3>Classes</h3> + +<table> + +<tr> +<td><a href="#MarkersWindow">MarkersWindow</a></td> +<td>Class documentation goes here.</td> +</tr> +</table> +<h3>Functions</h3> + +<table> +<tr><td>None</td></tr> +</table> +<hr /> +<hr /> +<a NAME="MarkersWindow" ID="MarkersWindow"></a> +<h2>MarkersWindow</h2> + +<p> + Class documentation goes here. +</p> +<h3>Derived from</h3> +QWidget, Ui_MarkersWindow +<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="#MarkersWindow.__init__">MarkersWindow</a></td> +<td>Constructor</td> +</tr> +<tr> +<td><a href="#MarkersWindow.closeEvent">closeEvent</a></td> +<td>Protected slot implementing a close event handler.</td> +</tr> +<tr> +<td><a href="#MarkersWindow.showMarkers">showMarkers</a></td> +<td>Public method to show the dialog with the given markers.</td> +</tr> +</table> +<h3>Static Methods</h3> + +<table> +<tr><td>None</td></tr> +</table> + +<a NAME="MarkersWindow.__init__" ID="MarkersWindow.__init__"></a> +<h4>MarkersWindow (Constructor)</h4> +<b>MarkersWindow</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="MarkersWindow.closeEvent" ID="MarkersWindow.closeEvent"></a> +<h4>MarkersWindow.closeEvent</h4> +<b>closeEvent</b>(<i>e</i>) + +<p> + Protected slot implementing a close event handler. +</p> +<dl> + +<dt><i>e</i> (QCloseEvent)</dt> +<dd> +close event +</dd> +</dl> +<a NAME="MarkersWindow.showMarkers" ID="MarkersWindow.showMarkers"></a> +<h4>MarkersWindow.showMarkers</h4> +<b>showMarkers</b>(<i>markers</i>) + +<p> + Public method to show the dialog with the given markers. +</p> +<dl> + +<dt><i>markers</i> (dict)</dt> +<dd> +dictionary containing the markers and their descriptions +</dd> +</dl> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file
--- a/src/eric7/Documentation/Source/eric7.Testing.TestingWidget.html Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Documentation/Source/eric7.Testing.TestingWidget.html Mon Sep 05 18:08:43 2022 +0200 @@ -212,6 +212,10 @@ <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.__updateMarkerSupport">__updateMarkerSupport</a></td> +<td>Private slot to update the state of the marker related widgets 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> @@ -248,6 +252,10 @@ <td>Private slot handling the selection of a test framework.</td> </tr> <tr> +<td><a href="#TestingWidget.on_showMarkersButton_clicked">on_showMarkersButton_clicked</a></td> +<td>Private slot to show a window containing the list of defined markers.</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> @@ -652,6 +660,14 @@ Private slot to update the state of the coverage checkbox depending on the selected framework's capabilities. </p> +<a NAME="TestingWidget.__updateMarkerSupport" ID="TestingWidget.__updateMarkerSupport"></a> +<h4>TestingWidget.__updateMarkerSupport</h4> +<b>__updateMarkerSupport</b>(<i></i>) + +<p> + Private slot to update the state of the marker related widgets 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>) @@ -780,6 +796,13 @@ index of the selected framework </dd> </dl> +<a NAME="TestingWidget.on_showMarkersButton_clicked" ID="TestingWidget.on_showMarkersButton_clicked"></a> +<h4>TestingWidget.on_showMarkersButton_clicked</h4> +<b>on_showMarkersButton_clicked</b>(<i></i>) + +<p> + Private slot to show a window containing the list of defined markers. +</p> <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>)
--- a/src/eric7/Documentation/Source/index-eric7.Testing.html Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Documentation/Source/index-eric7.Testing.html Mon Sep 05 18:08:43 2022 +0200 @@ -25,6 +25,10 @@ <table> <tr> +<td><a href="eric7.Testing.MarkersWindow.html">MarkersWindow</a></td> +<td>Module implementing a dialog to show defined test markers.</td> +</tr> +<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>
--- a/src/eric7/Testing/Interfaces/PytestExecutor.py Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Testing/Interfaces/PytestExecutor.py Mon Sep 05 18:08:43 2022 +0200 @@ -87,6 +87,44 @@ return False + def supportsMarkers(self, interpreter): + """ + Public method to indicate the support for test filtering using markers and/or + marker expressions. + + @param interpreter interpreter to be used for the test + @type str + @return flag indicating support of markers + @rtype bool + """ + return True + + def getMarkers(self, interpreter, workdir): + """ + Public method to get the list of defined markers. + + @param interpreter interpreter to be used for the test + @type str + @param workdir name of the working directory + @type str + @return dictionary containing the marker as key and the associated description + as value + @rtype dict + """ + proc = QProcess() + proc.setWorkingDirectory(workdir) + proc.start(interpreter, [PytestExecutor.runner, "markers"]) + if proc.waitForFinished(3000): + exitCode = proc.exitCode() + if exitCode == 0: + outputLines = self.readAllOutput(proc).splitlines() + for line in outputLines: + if line.startswith("{") and line.endswith("}"): + with contextlib.suppress(json.JSONDecodeError): + return json.loads(line) + + return {} + def createArguments(self, config): """ Public method to create the arguments needed to start the test process. @@ -122,6 +160,10 @@ if not config.eraseCoverage: args.append("--cov-append") + if config.testMarkerExpression: + args.append("-m") + args.append(config.testMarkerExpression) + if config.testFilename: if config.testName: args.append(
--- a/src/eric7/Testing/Interfaces/PytestRunner.py Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Testing/Interfaces/PytestRunner.py Mon Sep 05 18:08:43 2022 +0200 @@ -7,6 +7,7 @@ Module implementing the test runner script for the 'pytest' framework. """ +import contextlib import json import os import sys @@ -14,6 +15,9 @@ sys.path.insert(2, os.path.abspath(os.path.join(os.path.dirname(__file__), "..", ".."))) +with contextlib.suppress(ImportError): + import pytest + class GetPluginVersionsPlugin: """ @@ -27,7 +31,7 @@ """ super().__init__() - self.versions = [] + self.__versions = [] def pytest_cmdline_main(self, config): """ @@ -39,7 +43,7 @@ pluginInfo = config.pluginmanager.list_plugin_distinfo() if pluginInfo: for _plugin, dist in pluginInfo: - self.versions.append( + self.__versions.append( {"name": dist.project_name, "version": dist.version} ) @@ -50,7 +54,49 @@ @return list of collected plugin versions @rtype list of dict """ - return self.versions + return self.__versions + + +class GetMarkersPlugin: + """ + Class implementing a pytest plugin to extract the list of all defined markers. + """ + + def __init__(self): + """ + Constructor + """ + super().__init__() + + self.__markers = {} + + @pytest.hookimpl(tryfirst=True) + def pytest_cmdline_main(self, config): + """ + Public method called for performing the main command line action. + + @param config pytest config object + @type Config + """ + config._do_configure() + for line in config.getini("markers"): + parts = line.split(":", 1) + name = parts[0] + rest = parts[1] if len(parts) == 2 else "" + self.__markers[name] = rest + config._ensure_unconfigure() + + print(json.dumps(self.__markers)) + sys.exit(0) + + def getMarkers(self): + """ + Public method to get the assembled list of markers. + + @return list of collected markers (marker name as key and description as value) + @rtype dict + """ + return self.__markers class EricPlugin: @@ -275,6 +321,23 @@ sys.exit(0) +def getMarkers(): + """ + Function to determine the defined markers and their descriptions. + """ + try: + import pytest + + # --capture=sys needed on Windows to avoid + # ValueError: saved filedescriptor not valid anymore + plugin = GetMarkersPlugin() + pytest.main(["--markers", "--capture=sys"], plugins=[plugin]) + # dumping the markers is done in the plugin + except ImportError: + print(json.dumps({})) + sys.exit(0) + + if __name__ == "__main__": command = sys.argv[1] if command == "installed": @@ -288,6 +351,9 @@ elif command == "versions": getVersions() + elif command == "markers": + getMarkers() + elif command == "runtest": import pytest from EricNetwork.EricJsonStreamWriter import EricJsonWriter
--- a/src/eric7/Testing/Interfaces/TestExecutorBase.py Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Testing/Interfaces/TestExecutorBase.py Mon Sep 05 18:08:43 2022 +0200 @@ -59,6 +59,7 @@ discoveryStart: str # start directory for auto discovery testFilename: str # name of the test script testName: str # name of the test function + testMarkerExpression: str # marker expression for test selection failFast: bool # stop on first fail failedOnly: bool # run failed tests only collectCoverage: bool # coverage collection flag @@ -147,11 +148,7 @@ @return dictionary containing the framework name and version and the list of available plugins with name and version each @rtype dict - @exception NotImplementedError this method needs to be implemented by - derived classes """ - raise NotImplementedError - return {} def hasCoverage(self, interpreter): @@ -163,12 +160,34 @@ @type str @return flag indicating the availability of coverage functionality @rtype bool - @exception NotImplementedError this method needs to be implemented by - derived classes + """ + return False + + def supportsMarkers(self, interpreter): + """ + Public method to indicate the support for test filtering using markers and/or + marker expressions. + + @param interpreter interpreter to be used for the test + @type str + @return flag indicating support of markers + @rtype bool """ - raise NotImplementedError + return False + + def getMarkers(self, interpreter, workdir): + """ + Public method to get the list of defined markers. - return False + @param interpreter interpreter to be used for the test + @type str + @param workdir name of the working directory + @type str + @return dictionary containing the marker as key and the associated description + as value + @rtype dict + """ + return {} def createArguments(self, config): """
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/eric7/Testing/MarkersWindow.py Mon Sep 05 18:08:43 2022 +0200 @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2022 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to show defined test markers. +""" + +from PyQt6.QtCore import Qt +from PyQt6.QtWidgets import QWidget, QTreeWidgetItem + +from .Ui_MarkersWindow import Ui_MarkersWindow + + +class MarkersWindow(QWidget, Ui_MarkersWindow): + """ + Class documentation goes here. + """ + + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent widget (defaults to None) + @type QWidget (optional) + """ + super().__init__(parent) + self.setupUi(self) + + self.__lastGeometry = None + + def showMarkers(self, markers): + """ + Public method to show the dialog with the given markers. + + @param markers dictionary containing the markers and their descriptions + @type dict + """ + self.markersList.clear() + + for marker, description in markers.items(): + QTreeWidgetItem(self.markersList, [marker, description]) + + self.markersList.setColumnWidth(0, 250) + self.markersList.resizeColumnToContents(1) + + self.markersList.sortItems(0, Qt.SortOrder.AscendingOrder) + + if self.__lastGeometry is not None: + self.restoreGeometry(self.__lastGeometry) + + self.show() + + def closeEvent(self, e): + """ + Protected slot implementing a close event handler. + + @param e close event + @type QCloseEvent + """ + self.__lastGeometry = self.saveGeometry()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/eric7/Testing/MarkersWindow.ui Mon Sep 05 18:08:43 2022 +0200 @@ -0,0 +1,77 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>MarkersWindow</class> + <widget class="QWidget" name="MarkersWindow"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>800</width> + <height>600</height> + </rect> + </property> + <property name="windowTitle"> + <string>Defined Markers</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QTreeWidget" name="markersList"> + <property name="alternatingRowColors"> + <bool>true</bool> + </property> + <property name="selectionMode"> + <enum>QAbstractItemView::NoSelection</enum> + </property> + <property name="rootIsDecorated"> + <bool>false</bool> + </property> + <property name="itemsExpandable"> + <bool>false</bool> + </property> + <property name="sortingEnabled"> + <bool>true</bool> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + <column> + <property name="text"> + <string>Marker</string> + </property> + </column> + <column> + <property name="text"> + <string>Description</string> + </property> + </column> + </widget> + </item> + <item> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="standardButtons"> + <set>QDialogButtonBox::Close</set> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>MarkersWindow</receiver> + <slot>close()</slot> + <hints> + <hint type="sourcelabel"> + <x>429</x> + <y>672</y> + </hint> + <hint type="destinationlabel"> + <x>426</x> + <y>619</y> + </hint> + </hints> + </connection> + </connections> +</ui>
--- a/src/eric7/Testing/TestingWidget.py Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Testing/TestingWidget.py Mon Sep 05 18:08:43 2022 +0200 @@ -82,6 +82,7 @@ self.versionsButton.setIcon(UI.PixmapCache.getIcon("info")) self.clearHistoriesButton.setIcon(UI.PixmapCache.getIcon("clearPrivateData")) + self.showMarkersButton.setIcon(UI.PixmapCache.getIcon("select")) self.testsuitePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) self.testsuitePicker.setInsertPolicy(QComboBox.InsertPolicy.InsertAtTop) @@ -205,6 +206,8 @@ self.__testExecutor = None self.__recentLog = "" + self.__markersWindow = None + # connect some signals self.discoveryPicker.editTextChanged.connect(self.__resetResults) self.testsuitePicker.editTextChanged.connect(self.__resetResults) @@ -681,6 +684,7 @@ """ self.__resetResults() self.__updateCoverage() + self.__updateMarkerSupport() @pyqtSlot() def __updateCoverage(self): @@ -703,6 +707,58 @@ self.coverageCheckBox.setChecked(False) @pyqtSlot() + def __updateMarkerSupport(self): + """ + Private slot to update the state of the marker related widgets depending on + the selected framework's capabilities. + """ + supportsMarkers = False + + venvName = self.venvComboBox.currentText() + if venvName: + framework = self.frameworkComboBox.currentText() + if framework: + interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + executor = self.__frameworkRegistry.createExecutor(framework, self) + supportsMarkers = executor.supportsMarkers(interpreter) + + # 1. marker expression line edit + self.markerExpressionEdit.setEnabled(supportsMarkers) + if not supportsMarkers: + self.markerExpressionEdit.clear() + + # 2. show markers button + self.showMarkersButton.setEnabled(supportsMarkers) + if self.__markersWindow is not None: + self.__markersWindow.close() + + @pyqtSlot() + def on_showMarkersButton_clicked(self): + """ + Private slot to show a window containing the list of defined markers. + """ + venvName = self.venvComboBox.currentText() + if venvName: + framework = self.frameworkComboBox.currentText() + if framework: + if self.discoverCheckBox.isChecked(): + workdir = self.discoveryPicker.currentText() + elif self.testsuitePicker.currentText(): + workdir = os.path.dirname(self.testsuitePicker.currentText()) + else: + workdir = "" + + interpreter = self.__venvManager.getVirtualenvInterpreter(venvName) + executor = self.__frameworkRegistry.createExecutor(framework, self) + markers = executor.getMarkers(interpreter, workdir) + + if self.__markersWindow is None: + from .MarkersWindow import MarkersWindow + + self.__markersWindow = MarkersWindow() + self.__markersWindow.showMarkers(markers) + + @pyqtSlot() def on_versionsButton_clicked(self): """ Private slot to show the versions of available plugins. @@ -791,6 +847,7 @@ discoveryStart=discoveryStart, testFilename=testFileName, testName=testName, + testMarkerExpression=self.markerExpressionEdit.text(), failFast=self.failfastCheckBox.isChecked(), failedOnly=failedOnly, collectCoverage=self.coverageCheckBox.isChecked(),
--- a/src/eric7/Testing/TestingWidget.ui Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/Testing/TestingWidget.ui Mon Sep 05 18:08:43 2022 +0200 @@ -87,7 +87,7 @@ <string>Test Parameters</string> </property> <layout class="QGridLayout" name="gridLayout"> - <item row="0" column="0" colspan="2"> + <item row="0" column="0" colspan="3"> <layout class="QHBoxLayout" name="horizontalLayout_4"> <item> <widget class="QCheckBox" name="discoverCheckBox"> @@ -127,7 +127,7 @@ </property> </widget> </item> - <item row="1" column="1"> + <item row="1" column="1" colspan="2"> <widget class="EricComboPathPicker" name="discoveryPicker" native="true"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> @@ -158,7 +158,7 @@ </property> </widget> </item> - <item row="2" column="1"> + <item row="2" column="1" colspan="2"> <widget class="EricComboPathPicker" name="testsuitePicker" native="true"> <property name="enabled"> <bool>false</bool> @@ -190,7 +190,7 @@ </property> </widget> </item> - <item row="3" column="1"> + <item row="3" column="1" colspan="2"> <widget class="QComboBox" name="testComboBox"> <property name="enabled"> <bool>false</bool> @@ -206,6 +206,30 @@ </property> </widget> </item> + <item row="4" column="0"> + <widget class="QLabel" name="label_4"> + <property name="text"> + <string>Marker Expression:</string> + </property> + </widget> + </item> + <item row="4" column="1"> + <widget class="QLineEdit" name="markerExpressionEdit"> + <property name="toolTip"> + <string>Enter a marker expression or name to filter tests</string> + </property> + <property name="clearButtonEnabled"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="4" column="2"> + <widget class="QToolButton" name="showMarkersButton"> + <property name="toolTip"> + <string>Press to show a window with the list of defined markers</string> + </property> + </widget> + </item> </layout> </widget> </item> @@ -437,6 +461,8 @@ <tabstop>discoveryPicker</tabstop> <tabstop>testsuitePicker</tabstop> <tabstop>testComboBox</tabstop> + <tabstop>markerExpressionEdit</tabstop> + <tabstop>showMarkersButton</tabstop> <tabstop>coverageCheckBox</tabstop> <tabstop>coverageEraseCheckBox</tabstop> <tabstop>failfastCheckBox</tabstop> @@ -450,8 +476,8 @@ <slot>close()</slot> <hints> <hint type="sourcelabel"> - <x>31</x> - <y>648</y> + <x>40</x> + <y>690</y> </hint> <hint type="destinationlabel"> <x>1</x> @@ -466,8 +492,8 @@ <slot>close()</slot> <hints> <hint type="sourcelabel"> - <x>80</x> - <y>649</y> + <x>89</x> + <y>690</y> </hint> <hint type="destinationlabel"> <x>3</x> @@ -534,8 +560,8 @@ <y>320</y> </hint> <hint type="destinationlabel"> - <x>369</x> - <y>319</y> + <x>788</x> + <y>328</y> </hint> </hints> </connection>
--- a/src/eric7/i18n/eric7_cs.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_cs.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46860,6 +46860,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished">Popisek</translation> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61300,18 +61318,18 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation type="unfinished">Chyba</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation type="unfinished" /> @@ -78817,7 +78835,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation type="unfinished" /> @@ -78926,6 +78944,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation type="unfinished" /> </message> @@ -79001,172 +79034,172 @@ <translation type="unfinished">V běhu</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation type="unfinished">Spustit</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation type="unfinished">Spustit vybranou soupravu testů</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation type="unfinished">Zastavit</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation type="unfinished">Běží</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation type="unfinished">Python soubory (*.py);;Všechny soubory (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation type="unfinished">Příprava soupravy testu</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation type="unfinished">běžící</translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation type="unfinished" /> </message>
--- a/src/eric7/i18n/eric7_de.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_de.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46953,6 +46953,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation>Definierte Markierungen</translation> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation>Markierung</translation> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation>Beschreibung</translation> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61415,18 +61433,18 @@ <translation>Erfolg</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation>Fehler</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation>FEHLER in {0}: {1}</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation>FEHLER in {0}: {1}</translation> @@ -79055,7 +79073,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation>Modultest</translation> @@ -79168,6 +79186,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation>Markierungsausdruck:</translation> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation>Gib einen Markierungsausdruck oder -namen zur Testfilterung ein</translation> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation>Drücken, um ein Fenster mit der Liste der definierten Markierungen anzuzeigen</translation> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation>Ausführungsparameter</translation> </message> @@ -79243,153 +79276,153 @@ <translation>Leerlauf</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation>Ausgabe anzeigen...</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation>Zeig die Ausgabe des Testläufer Prozesses</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation><b>Ausgabe anzeigen...</b><p>Dieser Knopf öffnet einen Dialog mit der Ausgabe des Testläufers für den letzten Testlauf.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation>Abdeckung zeigen...</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation>Zeige die Testabdeckung in einem neuen Dialog</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation><b>Abdeckung zeigen...</b<p>Dieser Knopf öffnet einen Dialog mit mit den gesammlten Abdeckungsdaten.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation>Start</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation>Startet den ausgewählten Modultest</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation><b>Starte Modultest</b><p>Dieser Knopf startet den ausgewählten Modultest.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation>Fehlerhafte wiederholen</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation>Fehlerhafte Tests des ausgewählten Modultests wiederholen</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation><b>Fehlerhafte wiederholen</b><p>Dieser Knopf wiederholt alle fehlerhaften Tests des aktuellsten Testlaufes.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation>Anhalten</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation>Halte den laufenden Modultest an</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation><b>Modultest anhalten</b><p>Dieser Knopf hält den laufenden Test an.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation>{0} (nicht installiert)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation>Aktiv</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation>Python3 Dateien ({0});;Alle Dateien (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation>Python-Dateien (*.py);;Alle Dateien (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation><h3>Versionen der Testrahmen und ihrer Erweiterungen</h3></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation><tr><td>{0}</td><td>{1}</td></tr></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation>Keine Versionsinformationen verfügbar.</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation>Versionen</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation>Bereite Testlauf vor</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation>ausstehend</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation>Fehlschlag</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation>Ermittlungsfehler</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation><p>Es gab einen Fehler während der Testermittlung.</p><p>{0}</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation>läuft</translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation> <numerusform>%n Test in {0}s ausgeführt</numerusform> @@ -79397,7 +79430,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation> <numerusform>%n Test ausgeführt</numerusform> @@ -79405,12 +79438,12 @@ </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation>nicht ausgeführt</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation>Ausgabe Testlauf</translation> </message>
--- a/src/eric7/i18n/eric7_empty.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_empty.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46718,6 +46718,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished" /> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61075,18 +61093,18 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation type="unfinished" /> @@ -78506,7 +78524,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation type="unfinished" /> @@ -78615,6 +78633,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation type="unfinished" /> </message> @@ -78690,172 +78723,172 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation type="unfinished" /> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation type="unfinished" /> </message>
--- a/src/eric7/i18n/eric7_en.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_en.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46759,6 +46759,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished" /> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61123,18 +61141,18 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation type="unfinished" /> @@ -78557,7 +78575,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation type="unfinished" /> @@ -78666,6 +78684,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation type="unfinished" /> </message> @@ -78741,153 +78774,153 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation type="unfinished" /> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation> <numerusform>Ran %n test in {0}s</numerusform> @@ -78895,7 +78928,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation> <numerusform>Ran %n test</numerusform> @@ -78903,12 +78936,12 @@ </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation type="unfinished" /> </message>
--- a/src/eric7/i18n/eric7_es.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_es.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46956,6 +46956,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished">Marcador</translation> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished">Descripción</translation> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61391,18 +61409,18 @@ <translation>Éxito</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation>Error</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation>ERROR en {0}: {1}</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation>ERROR en {0}: {1}</translation> @@ -79030,7 +79048,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation>Testando</translation> @@ -79141,6 +79159,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation>Ejecutar Parámetros</translation> </message> @@ -79216,153 +79249,153 @@ <translation>Desocupado</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation>Mostrar Salida...</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation>Mostrar la salida del proceso de ejecución del test</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation><b>Mostrar Salida...</b<p>Este botón abre un diálogo que contiene la salida del proceso de ejecución del test en la ejecución más reciente.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation>Mostrar Cobertura...</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation>Mostrar la cobertura de código en un nuevo diálogo</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation><b>Mostrar Cobertura...</b><p>Este botón abre un diálogo que contiene los datos recogidos sobre cobertura de código.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation>Comenzar</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation>Comenzar la suite de tests seleccionada</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation><b>Comenzar Test</b><p>Este botón inicia la ejecución del test.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation>Re-ejecución Fallida</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation>La re-ejecución ha fallado tests del testsuite seleccionado</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation><b>Re-ejecución Fallida</b><p>Este botón re-ejecuta todos los tests fallidos de la ejecución de test más reciente.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation>Detener</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation>Detener el test en ejecución</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation><b>Detener Test</b><p>Este botón detiene un test en ejecución.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation>{0} (no disponible)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation>Ejecutando</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation>Archivos de Python3 ({0});;Todos los Archivos (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation>Archivos Python (*.py);;Todos los Archivos (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation><h3>Versiones de los Frameworks y sus correspondientes Plugins</h3></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation><tr><td>{0}</td><td>{1}</td></tr></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation>No hay información de versión disponible.</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation>Versiones</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation>Preparando Suite de Tests</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation>pendiente</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation>Fallo</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation>Error de Recolección</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation><p>Ha habido un error mientras se recolectaban los tests.</p><p>{0}</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation>en ejecución</translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation> <numerusform>Ejecutado %n test en {0}s</numerusform> @@ -79370,7 +79403,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation> <numerusform>Ejecutado %n test</numerusform> @@ -79378,12 +79411,12 @@ </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation>no ejecutado</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation>Salida de Ejecución de Test</translation> </message>
--- a/src/eric7/i18n/eric7_fr.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_fr.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46928,6 +46928,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished">Marqueur</translation> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished">Description</translation> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61381,18 +61399,18 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation type="unfinished">Erreur</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation type="unfinished" /> @@ -78967,7 +78985,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation type="unfinished" /> @@ -79076,6 +79094,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation type="unfinished" /> </message> @@ -79151,172 +79184,172 @@ <translation type="unfinished">Idle</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation type="unfinished">Lancer</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation type="unfinished">Lancer la suite de tests</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation type="unfinished">Arrêt</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation type="unfinished">En cours d'execution</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation type="unfinished">Fichiers Python3({0});; Tous les fichiers (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation type="unfinished">Fichiers Python (*.py);;Tous les fichiers (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation type="unfinished">Pas d'information de version disponible.</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation type="unfinished">Préparation de Testsuite</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation type="unfinished">en cours</translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation type="unfinished" /> </message>
--- a/src/eric7/i18n/eric7_it.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_it.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46896,6 +46896,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished">Descrizione</translation> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61339,18 +61357,18 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation type="unfinished">Errore</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation type="unfinished" /> @@ -78895,7 +78913,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation type="unfinished" /> @@ -79004,6 +79022,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation type="unfinished" /> </message> @@ -79079,172 +79112,172 @@ <translation type="unfinished">Attesa</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation type="unfinished">Inizia</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation type="unfinished">Avvia la testsuite selezioanata</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation type="unfinished">Ferma</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation type="unfinished">In esecuzione</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation type="unfinished">File Python (*.py);;Tutti i File (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation type="unfinished">Preparazione Testsuite</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation type="unfinished">in esecuzione</translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation type="unfinished" /> </message>
--- a/src/eric7/i18n/eric7_pt.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_pt.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46885,6 +46885,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished">Descrição</translation> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61280,18 +61298,18 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation type="unfinished">Erro</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation type="unfinished" /> @@ -78729,7 +78747,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation type="unfinished" /> @@ -78838,6 +78856,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation type="unfinished" /> </message> @@ -78913,172 +78946,172 @@ <translation type="unfinished">Inativo</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation type="unfinished">Iniciar</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation type="unfinished">Iniciar a suite de testes selecionada</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation type="unfinished">Reexecução Falhada</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation type="unfinished">Testes de reexecução falhados da suite de testes selecionada</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation type="unfinished">Parar</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation type="unfinished">A executar</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation type="unfinished">Ficheiros Python (*.py);;Ficheiros Todos (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation type="unfinished">A preparar Suite de Testes</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation type="unfinished">a executar</translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation type="unfinished" /> </message>
--- a/src/eric7/i18n/eric7_ru.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_ru.ts Mon Sep 05 18:08:43 2022 +0200 @@ -47022,6 +47022,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished">Маркер</translation> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished">Описание</translation> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61535,18 +61553,18 @@ <translation>Успешное завершение</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation>Ошибка</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation>ERROR в {0}: {1}</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation>ERROR в {0}: {1}</translation> @@ -79203,7 +79221,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation>Тестирование</translation> @@ -79315,6 +79333,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation>Параметры прогона</translation> </message> @@ -79390,153 +79423,153 @@ <translation>Отсутствие действий</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation>Показать вывод...</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation>Показать вывод процесса прогона тестов</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation><b>Показать вывод...</b<p>Эта кнопка открывает диалоговое окно, содержащее выходные данные самого последнего запуска процесса выполнения тестов.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation>Показать покрытие...</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation>Показать покрытие кода в новом диалоге</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation><b>Показать покрытие...</b><p>Эта кнопка открывает диалоговое окно, содержащее собранные данные о покрытии кода.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation>Запустить</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation>Запустить выбранный набор тестов</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation><b>Запустить тест</b><p>Кнопка запуска выполнения теста.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation>Повторить неудачные</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation>Повторить неудачные тесты выбранного набора тестов</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation><b>Повторить неудачные</b><p>Повторно запускает все неудачные тесты самого последнего запуска теста.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation>Остановить</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation>Остановить работающий тест</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation><b>Остановить тест</b><p>Эта кнопка отстанавливает работающий тест.</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation>{0} (недоступно)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation>Выполнение</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation>Файлы Python3 ({0});;Все файлы (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation>Файлы Python (*.py);;Все файлы (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation><h3>Версии фреймворков и их плагинов</h3></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation><tr><td>{0}</td><td>{1}</td></tr></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation>Информация о версии недоступна.</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation>Версии</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation>Подготовка набора тестов</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation>ожидает</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation>Сбой</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation>Ошибка сборки</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation><p>При сборке тестов произошла ошибка.</p><p>{0}</p></translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation>выполнение</translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation> <numerusform>Выполнен %n тест за {0} сек</numerusform> @@ -79545,7 +79578,7 @@ </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation> <numerusform>Выполнен %n тест</numerusform> @@ -79554,12 +79587,12 @@ </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation>не выполнено</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation>Выходные данные прогона теста</translation> </message>
--- a/src/eric7/i18n/eric7_tr.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_tr.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46843,6 +46843,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished">Açıklama</translation> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61233,18 +61251,18 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation type="unfinished">Hata</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation type="unfinished" /> @@ -78699,7 +78717,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation type="unfinished" /> @@ -78808,6 +78826,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation type="unfinished" /> </message> @@ -78883,172 +78916,172 @@ <translation type="unfinished">Idle</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation type="unfinished">Başla</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation type="unfinished">Seçilen test yöntemini başmat</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation type="unfinished">Dur</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation type="unfinished">Çalışıyor</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation type="unfinished">Python Dosyaları (*.py);;Tüm Dosyalar (*)</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation type="unfinished">çalışıyor</translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation type="unfinished" /> </message>
--- a/src/eric7/i18n/eric7_zh_CN.ts Sun Sep 04 16:11:32 2022 +0200 +++ b/src/eric7/i18n/eric7_zh_CN.ts Mon Sep 05 18:08:43 2022 +0200 @@ -46840,6 +46840,24 @@ </message> </context> <context> + <name>MarkersWindow</name> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Defined Markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Marker</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/MarkersWindow.ui" line="0" /> + <source>Description</source> + <translation type="unfinished">描述</translation> + </message> + </context> + <context> <name>MasterPasswordEntryDialog</name> <message> <location filename="../Preferences/ConfigurationPages/MasterPasswordEntryDialog.py" line="36" /> @@ -61284,18 +61302,18 @@ <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="221" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="263" /> <source>Error</source> <translation type="unfinished">错误</translation> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="230" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="272" /> <source>ERROR at {0}: {1}</source> <comment>phase, message</comment> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/Interfaces/PytestExecutor.py" line="233" /> + <location filename="../Testing/Interfaces/PytestExecutor.py" line="275" /> <source>ERROR at {0}: {1}</source> <comment>phase, extra text</comment> <translation type="unfinished" /> @@ -78837,7 +78855,7 @@ <context> <name>TestingWidget</name> <message> - <location filename="../Testing/TestingWidget.py" line="168" /> + <location filename="../Testing/TestingWidget.py" line="169" /> <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Testing</source> <translation type="unfinished" /> @@ -78946,6 +78964,21 @@ </message> <message> <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Marker Expression:</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Enter a marker expression or name to filter tests</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> + <source>Press to show a window with the list of defined markers</source> + <translation type="unfinished" /> + </message> + <message> + <location filename="../Testing/TestingWidget.ui" line="0" /> <source>Run Parameters</source> <translation type="unfinished" /> </message> @@ -79021,172 +79054,172 @@ <translation type="unfinished">空闲</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="102" /> + <location filename="../Testing/TestingWidget.py" line="103" /> <source>Show Output...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="105" /> + <location filename="../Testing/TestingWidget.py" line="106" /> <source>Show the output of the test runner process</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="108" /> + <location filename="../Testing/TestingWidget.py" line="109" /> <source><b>Show Output...</b<p>This button opens a dialog containing the output of the test runner process of the most recent run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="116" /> + <location filename="../Testing/TestingWidget.py" line="117" /> <source>Show Coverage...</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="119" /> + <location filename="../Testing/TestingWidget.py" line="120" /> <source>Show code coverage in a new dialog</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="122" /> + <location filename="../Testing/TestingWidget.py" line="123" /> <source><b>Show Coverage...</b><p>This button opens a dialog containing the collected code coverage data.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="130" /> + <location filename="../Testing/TestingWidget.py" line="131" /> <source>Start</source> <translation type="unfinished">开始</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="133" /> + <location filename="../Testing/TestingWidget.py" line="134" /> <source>Start the selected testsuite</source> <translation type="unfinished">开启所选测试套件</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="135" /> + <location filename="../Testing/TestingWidget.py" line="136" /> <source><b>Start Test</b><p>This button starts the test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="141" /> + <location filename="../Testing/TestingWidget.py" line="142" /> <source>Rerun Failed</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="144" /> + <location filename="../Testing/TestingWidget.py" line="145" /> <source>Reruns failed tests of the selected testsuite</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="147" /> + <location filename="../Testing/TestingWidget.py" line="148" /> <source><b>Rerun Failed</b><p>This button reruns all failed tests of the most recent test run.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="155" /> + <location filename="../Testing/TestingWidget.py" line="156" /> <source>Stop</source> <translation type="unfinished">中止</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="157" /> + <location filename="../Testing/TestingWidget.py" line="158" /> <source>Stop the running test</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="159" /> + <location filename="../Testing/TestingWidget.py" line="160" /> <source><b>Stop Test</b><p>This button stops a running test.</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="271" /> + <location filename="../Testing/TestingWidget.py" line="274" /> <source>{0} (not available)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="566" /> + <location filename="../Testing/TestingWidget.py" line="569" /> <source>Running</source> <translation type="unfinished">正在运行</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="622" /> + <location filename="../Testing/TestingWidget.py" line="625" /> <source>Python3 Files ({0});;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="627" /> + <location filename="../Testing/TestingWidget.py" line="630" /> <source>Python Files (*.py);;All Files (*)</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="712" /> + <location filename="../Testing/TestingWidget.py" line="768" /> <source><h3>Versions of Frameworks and their Plugins</h3></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="726" /> + <location filename="../Testing/TestingWidget.py" line="782" /> <source><tr><td>{0}</td><td>{1}</td></tr></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="735" /> + <location filename="../Testing/TestingWidget.py" line="791" /> <source>No version information available.</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="738" /> + <location filename="../Testing/TestingWidget.py" line="794" /> <source>Versions</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="775" /> + <location filename="../Testing/TestingWidget.py" line="831" /> <source>Preparing Testsuite</source> <translation type="unfinished">准备测试套件</translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="838" /> + <location filename="../Testing/TestingWidget.py" line="895" /> <source>pending</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="866" /> + <location filename="../Testing/TestingWidget.py" line="923" /> <source>Failure</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="876" /> - <location filename="../Testing/TestingWidget.py" line="869" /> + <location filename="../Testing/TestingWidget.py" line="933" /> + <location filename="../Testing/TestingWidget.py" line="926" /> <source>Collection Error</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="877" /> + <location filename="../Testing/TestingWidget.py" line="934" /> <source><p>There was an error while collecting tests.</p><p>{0}</p></source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="898" /> + <location filename="../Testing/TestingWidget.py" line="955" /> <source>running</source> <translation type="unfinished">运行中</translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="949" /> + <location filename="../Testing/TestingWidget.py" line="1006" /> <source>Ran %n test(s) in {0}s</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message numerus="yes"> - <location filename="../Testing/TestingWidget.py" line="961" /> + <location filename="../Testing/TestingWidget.py" line="1018" /> <source>Ran %n test(s)</source> <translation type="unfinished"> <numerusform /> </translation> </message> <message> - <location filename="../Testing/TestingWidget.py" line="982" /> + <location filename="../Testing/TestingWidget.py" line="1039" /> <source>not run</source> <translation type="unfinished" /> </message> <message> - <location filename="../Testing/TestingWidget.py" line="1027" /> + <location filename="../Testing/TestingWidget.py" line="1084" /> <source>Test Run Output</source> <translation type="unfinished" /> </message>