172 # These are for untranslated/partially translated situations |
172 # These are for untranslated/partially translated situations |
173 "^Failure: ", |
173 "^Failure: ", |
174 "^Error: ", |
174 "^Error: ", |
175 ] |
175 ] |
176 |
176 |
177 self.__failedTests = [] |
177 self.__failedTests = set() |
178 |
178 |
179 # now connect the debug server signals if called from the eric IDE |
179 # now connect the debug server signals if called from the eric IDE |
180 if self.__dbs: |
180 if self.__dbs: |
181 self.__dbs.utDiscovered.connect(self.__UTDiscovered) |
181 self.__dbs.utDiscovered.connect(self.__UTDiscovered) |
182 self.__dbs.utPrepared.connect(self.__UTPrepared) |
182 self.__dbs.utPrepared.connect(self.__UTPrepared) |
764 coverageFile = os.path.abspath("unittest") |
764 coverageFile = os.path.abspath("unittest") |
765 workdir = "" |
765 workdir = "" |
766 clientType = "Python3" |
766 clientType = "Python3" |
767 sysPath = [] |
767 sysPath = [] |
768 if failedOnly and self.__failedTests: |
768 if failedOnly and self.__failedTests: |
769 failed = self.__failedTests[:] |
769 failed = list(self.__failedTests) |
770 if discover: |
770 if discover: |
771 workdir = discoveryStart |
771 workdir = discoveryStart |
772 discover = False |
772 discover = False |
773 else: |
773 else: |
774 failed = [] |
774 failed = [] |
775 self.__failedTests = [] |
775 self.__failedTests = set() |
776 self.__dbs.remoteUTPrepare( |
776 self.__dbs.remoteUTPrepare( |
777 testFileName, self.testName, testName, failed, |
777 testFileName, self.testName, testName, failed, |
778 self.coverageCheckBox.isChecked(), coverageFile, |
778 self.coverageCheckBox.isChecked(), coverageFile, |
779 self.coverageEraseCheckBox.isChecked(), clientType=clientType, |
779 self.coverageEraseCheckBox.isChecked(), clientType=clientType, |
780 forProject=self.__forProject, workdir=workdir, |
780 forProject=self.__forProject, workdir=workdir, |
815 |
815 |
816 # now try to generate the testsuite |
816 # now try to generate the testsuite |
817 try: |
817 try: |
818 testLoader = unittest.TestLoader() |
818 testLoader = unittest.TestLoader() |
819 if failedOnly and self.__failedTests: |
819 if failedOnly and self.__failedTests: |
820 failed = self.__failedTests[:] |
820 failed = list(self.__failedTests) |
821 if discover: |
821 if discover: |
822 os.chdir(discoveryStart) |
822 os.chdir(discoveryStart) |
823 discover = False |
823 discover = False |
824 else: |
824 else: |
825 failed = [] |
825 failed = [] |
836 if failedOnly and self.__failedTests: |
836 if failedOnly and self.__failedTests: |
837 if module: |
837 if module: |
838 failed = [t.split(".", 1)[1] |
838 failed = [t.split(".", 1)[1] |
839 for t in self.__failedTests] |
839 for t in self.__failedTests] |
840 else: |
840 else: |
841 failed = self.__failedTests[:] |
841 failed = list(self.__failedTests) |
842 test = testLoader.loadTestsFromNames( |
842 test = testLoader.loadTestsFromNames( |
843 failed, module) |
843 failed, module) |
844 else: |
844 else: |
845 test = testLoader.loadTestsFromName( |
845 test = testLoader.loadTestsFromName( |
846 testName, module) |
846 testName, module) |
881 EricMessageBox.warning( |
881 EricMessageBox.warning( |
882 self, |
882 self, |
883 self.tr("Unittest"), |
883 self.tr("Unittest"), |
884 self.tr("""No unittest were found. Aborting...""")) |
884 self.tr("""No unittest were found. Aborting...""")) |
885 else: |
885 else: |
886 self.__failedTests = [] |
886 self.__failedTests = set() |
887 self.__setRunningMode() |
887 self.__setRunningMode() |
888 if cover: |
888 if cover: |
889 cover.start() |
889 cover.start() |
890 test.run(self.testResult) |
890 test.run(self.testResult) |
891 if cover: |
891 if cover: |
1033 self.failCount += 1 |
1033 self.failCount += 1 |
1034 self.progressCounterFailureCount.setText(str(self.failCount)) |
1034 self.progressCounterFailureCount.setText(str(self.failCount)) |
1035 itm = QListWidgetItem(self.tr("Failure: {0}").format(test)) |
1035 itm = QListWidgetItem(self.tr("Failure: {0}").format(test)) |
1036 itm.setData(UnittestDialog.ErrorsInfoRole, (test, exc)) |
1036 itm.setData(UnittestDialog.ErrorsInfoRole, (test, exc)) |
1037 self.errorsListWidget.insertItem(0, itm) |
1037 self.errorsListWidget.insertItem(0, itm) |
1038 self.__failedTests.append(testId) |
1038 self.__failedTests.add(testId) |
1039 |
1039 |
1040 def testErrored(self, test, exc, testId): |
1040 def testErrored(self, test, exc, testId): |
1041 """ |
1041 """ |
1042 Public method called if a test errors. |
1042 Public method called if a test errors. |
1043 |
1043 |
1048 self.errorCount += 1 |
1048 self.errorCount += 1 |
1049 self.progressCounterErrorCount.setText(str(self.errorCount)) |
1049 self.progressCounterErrorCount.setText(str(self.errorCount)) |
1050 itm = QListWidgetItem(self.tr("Error: {0}").format(test)) |
1050 itm = QListWidgetItem(self.tr("Error: {0}").format(test)) |
1051 itm.setData(UnittestDialog.ErrorsInfoRole, (test, exc)) |
1051 itm.setData(UnittestDialog.ErrorsInfoRole, (test, exc)) |
1052 self.errorsListWidget.insertItem(0, itm) |
1052 self.errorsListWidget.insertItem(0, itm) |
1053 self.__failedTests.append(testId) |
1053 self.__failedTests.add(testId) |
1054 |
1054 |
1055 def testSkipped(self, test, reason, testId): |
1055 def testSkipped(self, test, reason, testId): |
1056 """ |
1056 """ |
1057 Public method called if a test was skipped. |
1057 Public method called if a test was skipped. |
1058 |
1058 |
1276 """ |
1276 """ |
1277 super().addError(test, err) |
1277 super().addError(test, err) |
1278 tracebackLines = self._exc_info_to_string(err, test) |
1278 tracebackLines = self._exc_info_to_string(err, test) |
1279 self.parent.testErrored(str(test), tracebackLines, test.id()) |
1279 self.parent.testErrored(str(test), tracebackLines, test.id()) |
1280 |
1280 |
|
1281 def addSubTest(self, test, subtest, err): |
|
1282 """ |
|
1283 Public method called for each subtest to record its result. |
|
1284 |
|
1285 @param test reference to the test object |
|
1286 @param subtest reference to the subtest object |
|
1287 @param err error traceback |
|
1288 """ |
|
1289 if err is not None: |
|
1290 super().addSubTest(test, subtest, err) |
|
1291 tracebackLines = self._exc_info_to_string(err, test) |
|
1292 if issubclass(err[0], test.failureException): |
|
1293 self.parent.testFailed( |
|
1294 str(subtest), tracebackLines, test.id()) |
|
1295 else: |
|
1296 self.parent.testErrored( |
|
1297 str(subtest), tracebackLines, test.id()) |
|
1298 |
1281 def addSkip(self, test, reason): |
1299 def addSkip(self, test, reason): |
1282 """ |
1300 """ |
1283 Public method called if a test was skipped. |
1301 Public method called if a test was skipped. |
1284 |
1302 |
1285 @param test reference to the test object |
1303 @param test reference to the test object |