blob: 737a5c19a7c47869b720f411392d53a02a3f7b69 [file] [log] [blame]
import unittest
import warnings
import sys
from unittest.signals import registerResult
MOD_org_eclipse_ease_lang_unittest_UnitTestModule = loadModule("/Unittest")
class EASETestResult(unittest.result.TestResult):
def __init__(self, stream, descriptions, verbosity):
super(EASETestResult, self).__init__(stream, descriptions, verbosity)
self.stream = stream
self.showAll = verbosity > 1
self.dots = verbosity == 1
self.descriptions = descriptions
def getUnitTestModule(self):
return MOD_org_eclipse_ease_lang_unittest_UnitTestModule
def startTest(self, test):
super(EASETestResult, self).startTest(test)
self.getUnitTestModule().startTest(test._testMethodName, test.shortDescription())
def stopTest(self, test):
self.getUnitTestModule().endTest()
def addError(self, test, err):
try:
if (hasattr(err[1], 'java_exception')):
if ("org.eclipse.ease.lang.unittest.AssertionException" == err[1].java_exception.getClass().getName()):
self.addFailure(test, (AssertionError, AssertionError(err[1].java_exception.getMessage()), err[2]))
return
except:
pass
super(EASETestResult, self).addError(test, err)
self.addTestResult(org.eclipse.ease.lang.unittest.runtime.TestStatus.ERROR, str(err[0].__name__) + ": " + str(err[1]))
def addFailure(self, test, err):
super(EASETestResult, self).addFailure(test, err)
self.addTestResult(org.eclipse.ease.lang.unittest.runtime.TestStatus.FAILURE, str(err[1]))
def addTestResult(self, type, message):
result = org.eclipse.ease.lang.unittest.runtime.IRuntimeFactory.eINSTANCE.createTestResult()
result.setStatus(type);
result.setMessage(message);
try:
result.setStackTrace(getScriptEngine().getStackTrace())
except Exception:
print("could not set stacktrace")
pass
self.getUnitTestModule().getCurrentTest().getResults().add(result);
def addSkip(self, test, reason):
super(EASETestResult, self).addSkip(test, reason)
self.addTestResult(org.eclipse.ease.lang.unittest.runtime.TestStatus.DISABLED, reason)
def addUnexpectedSuccess(self, test):
super(EASETestResult, self).addUnexpectedSuccess(test)
self.addTestResult(org.eclipse.ease.lang.unittest.runtime.TestStatus.FAILURE, "We expected an error")
class EASETestRunner(object):
"""A test runner class that cooperates with the Eclipse EASE framework.
"""
resultclass = EASETestResult
def __init__(self, stream=None, descriptions=True, verbosity=1,
failfast=False, buffer=False, resultclass=None, warnings=None):
if stream is None:
stream = sys.stderr
self.stream = stream
self.descriptions = descriptions
self.verbosity = verbosity
self.failfast = failfast
self.buffer = buffer
self.warnings = warnings
if resultclass is not None:
self.resultclass = resultclass
def _makeResult(self):
return self.resultclass(self.stream, self.descriptions, self.verbosity)
def run(self, test):
"Run the given test case or test suite."
result = self._makeResult()
registerResult(result)
result.failfast = self.failfast
result.buffer = self.buffer
with warnings.catch_warnings():
if self.warnings:
# if self.warnings is set, use it to filter all the warnings
warnings.simplefilter(self.warnings)
# if the filter is 'default' or 'always', special-case the
# warnings from the deprecated unittest methods to show them
# no more than once per module, because they can be fairly
# noisy. The -Wd and -Wa flags can be used to bypass this
# only when self.warnings is None.
if self.warnings in ['default', 'always']:
warnings.filterwarnings('module',
category=DeprecationWarning,
message='Please use assert\w+ instead.')
startTestRun = getattr(result, 'startTestRun', None)
if startTestRun is not None:
startTestRun()
try:
test(result)
finally:
stopTestRun = getattr(result, 'stopTestRun', None)
if stopTestRun is not None:
stopTestRun()
result.printErrors()
run = result.testsRun
expectedFails = unexpectedSuccesses = skipped = 0
try:
results = map(len, (result.expectedFailures,
result.unexpectedSuccesses,
result.skipped))
except AttributeError:
pass
else:
expectedFails, unexpectedSuccesses, skipped = results
infos = []
return result
if __name__ == "__main__":
# Dynamically create test suite to combine test cases
tests = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
testSuite = unittest.TestSuite(tests)
runner = EASETestRunner()
runner.run(testSuite)