diff -r 927d57b6aae0 -r f8d3b4511358 eric7/PyUnit/UnittestDialog.py --- a/eric7/PyUnit/UnittestDialog.py Tue Aug 24 18:10:24 2021 +0200 +++ b/eric7/PyUnit/UnittestDialog.py Wed Aug 25 17:33:29 2021 +0200 @@ -174,7 +174,7 @@ "^Error: ", ] - self.__failedTests = [] + self.__failedTests = set() # now connect the debug server signals if called from the eric IDE if self.__dbs: @@ -766,13 +766,13 @@ clientType = "Python3" sysPath = [] if failedOnly and self.__failedTests: - failed = self.__failedTests[:] + failed = list(self.__failedTests) if discover: workdir = discoveryStart discover = False else: failed = [] - self.__failedTests = [] + self.__failedTests = set() self.__dbs.remoteUTPrepare( testFileName, self.testName, testName, failed, self.coverageCheckBox.isChecked(), coverageFile, @@ -817,7 +817,7 @@ try: testLoader = unittest.TestLoader() if failedOnly and self.__failedTests: - failed = self.__failedTests[:] + failed = list(self.__failedTests) if discover: os.chdir(discoveryStart) discover = False @@ -838,7 +838,7 @@ failed = [t.split(".", 1)[1] for t in self.__failedTests] else: - failed = self.__failedTests[:] + failed = list(self.__failedTests) test = testLoader.loadTestsFromNames( failed, module) else: @@ -883,7 +883,7 @@ self.tr("Unittest"), self.tr("""No unittest were found. Aborting...""")) else: - self.__failedTests = [] + self.__failedTests = set() self.__setRunningMode() if cover: cover.start() @@ -1035,7 +1035,7 @@ itm = QListWidgetItem(self.tr("Failure: {0}").format(test)) itm.setData(UnittestDialog.ErrorsInfoRole, (test, exc)) self.errorsListWidget.insertItem(0, itm) - self.__failedTests.append(testId) + self.__failedTests.add(testId) def testErrored(self, test, exc, testId): """ @@ -1050,7 +1050,7 @@ itm = QListWidgetItem(self.tr("Error: {0}").format(test)) itm.setData(UnittestDialog.ErrorsInfoRole, (test, exc)) self.errorsListWidget.insertItem(0, itm) - self.__failedTests.append(testId) + self.__failedTests.add(testId) def testSkipped(self, test, reason, testId): """ @@ -1278,6 +1278,24 @@ tracebackLines = self._exc_info_to_string(err, test) self.parent.testErrored(str(test), tracebackLines, test.id()) + def addSubTest(self, test, subtest, err): + """ + Public method called for each subtest to record its result. + + @param test reference to the test object + @param subtest reference to the subtest object + @param err error traceback + """ + if err is not None: + super().addSubTest(test, subtest, err) + tracebackLines = self._exc_info_to_string(err, test) + if issubclass(err[0], test.failureException): + self.parent.testFailed( + str(subtest), tracebackLines, test.id()) + else: + self.parent.testErrored( + str(subtest), tracebackLines, test.id()) + def addSkip(self, test, reason): """ Public method called if a test was skipped.