diff -r 8c4cf9c405c7 -r 060a30488316 PyUnit/UnittestDialog.py --- a/PyUnit/UnittestDialog.py Sun Mar 24 19:18:56 2019 +0100 +++ b/PyUnit/UnittestDialog.py Mon Mar 25 20:18:47 2019 +0100 @@ -327,6 +327,8 @@ @type bool """ self.discoverButton.setEnabled(checked) + self.discoveryList.clear() + if not bool(self.discoveryPicker.currentText()): if self.__forProject: project = e5App().getObject("Project") @@ -379,6 +381,10 @@ " auto-discovery.")) return + if discoveryStart: + sys.path = [os.path.abspath(discoveryStart)] + \ + self.savedSysPath + # clean up list of imported modules to force a reimport upon # running the test if self.savedModulelist: @@ -391,22 +397,42 @@ # now try to discover the testsuite os.chdir(discoveryStart) try: - test = unittest.defaultTestLoader.discover(discoveryStart) + testLoader = unittest.TestLoader() + test = testLoader.discover(discoveryStart) if test: - testsList = self.__assembleTestCasesList(test) - self.__populateDiscoveryResults(testsList) - self.sbLabel.setText( - self.tr("Discovered %n Test(s)", "", len(testsList))) - self.tabWidget.setCurrentIndex(0) + if hasattr(testLoader, "errors") and \ + bool(testLoader.errors): + E5MessageBox.critical( + self, + self.tr("Unittest"), + self.tr( + "<p>Unable to discover tests.</p>" + "<p>{0}</p>" + ).format("<br/>".join(testLoader.errors) + .replace("\n", "<br/>")) + ) + self.sbLabel.clear() + else: + testsList = self.__assembleTestCasesList(test) + self.__populateDiscoveryResults(testsList) + self.sbLabel.setText( + self.tr("Discovered %n Test(s)", "", + len(testsList))) + self.tabWidget.setCurrentIndex(0) except Exception: exc_type, exc_value, exc_tb = sys.exc_info() E5MessageBox.critical( self, self.tr("Unittest"), self.tr( - "<p>Unable to discover tests.<br/>" - "{0}<br/>{1}</p>") - .format(str(exc_type), str(exc_value))) + "<p>Unable to discover tests.</p>" + "<p>{0}<br/>{1}</p>") + .format(str(exc_type), + str(exc_value).replace("\n", "<br/>")) + ) + self.sbLabel.clear() + + sys.path = self.savedSysPath def __assembleTestCasesList(self, suite): """ @@ -424,7 +450,11 @@ if isinstance(test, unittest.TestSuite): testCases.extend(self.__assembleTestCasesList(test)) else: - testCases.append((test.id(), test.shortDescription())) + testId = test.id() + if "ModuleImportFailure" not in testId and \ + "LoadTestsFailure" not in testId and \ + "_FailedTest" not in testId: + testCases.append((test.id(), test.shortDescription())) return testCases def __findDiscoveryItem(self, modulePath): @@ -621,6 +651,7 @@ # now try to generate the testsuite try: + testLoader = unittest.TestLoader() if failedOnly and self.__failedTests: failed = self.__failedTests[:] if discover: @@ -629,7 +660,7 @@ else: failed = [] if discover: - test = unittest.defaultTestLoader.discover(discoveryStart) + test = testLoader.discover(discoveryStart) else: if testFileName: module = __import__(self.testName) @@ -641,10 +672,10 @@ for t in self.__failedTests] else: failed = self.__failedTests[:] - test = unittest.defaultTestLoader.loadTestsFromNames( + test = testLoader.loadTestsFromNames( failed, module) else: - test = unittest.defaultTestLoader.loadTestsFromName( + test = testLoader.loadTestsFromName( testName, module) except Exception: exc_type, exc_value, exc_tb = sys.exc_info() @@ -652,10 +683,11 @@ self, self.tr("Unittest"), self.tr( - "<p>Unable to run test <b>{0}</b>.<br>" - "{1}<br>{2}</p>") + "<p>Unable to run test <b>{0}</b>.</p>" + "<p>{1}<br/>{2}</p>") .format(self.testName, str(exc_type), - str(exc_value))) + str(exc_value).replace("\n", "<br/>")) + ) return # now set up the coverage stuff @@ -704,8 +736,11 @@ self, self.tr("Unittest"), self.tr( - "<p>Unable to run test <b>{0}</b>.<br>{1}<br>{2}</p>") - .format(self.testName, exc_type, exc_value)) + "<p>Unable to run test <b>{0}</b>.</p>" + "<p>{1}<br>{2}</p>") + .format(self.testName, exc_type, + exc_value.replace("\n", "<br/>")) + ) return self.totalTests = nrTests