# -*- coding: utf-8 -*-
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from twisted.internet import defer
from twisted.trial.unittest import TestCase
__all__ = ['TxTestCase']
[docs]class TxTestCase(TestCase):
'''
Unit test helper class for Twisted.
Provides useful methods to test exception cases, such as `assertRaisesWithMessage` and
`assertInlineCallbacksRaisesWithMessage` in addition to `twisted.trial.unittest.TestCase`.
'''
def __assertExceptionMessageIs(self, err, expectedMessage):
if hasattr(err, "message"):
self.assertSubstring(expectedMessage, err.message)
else:
self.assertSubstring(expectedMessage, str(err))
[docs] def assertRaisesWithMessage(self, exceptionClass, expectedMessage, func, *args, **kw):
'''
Check if a given function call (synchronous or deferred) raised with a given message.
Note: You cannot use an inlineCallbacks as func. Please use
assertInlineCallbacksRaisesWithMessage.
'''
try:
defer.maybeDeferred(func(*args, **kw))
except exceptionClass as err:
self.__assertExceptionMessageIs(err, expectedMessage)
return
raise Exception("{0} not raised".format(exceptionClass, ))
@defer.inlineCallbacks
[docs] def assertInlineCbRaisesWithMsg(self,
exceptionClass,
expectedMessage,
inlineCallbacksFunc,
*args,
**kw):
'''
Assert a given inlineCallbacks decorated method raises with a given message.
This replaces assertRaisesWithMessage for inlineCallbacks.
Note: this method is an inlineCallbacks and need to be yielded.
'''
try:
yield inlineCallbacksFunc(*args, **kw)
except exceptionClass as err:
self.__assertExceptionMessageIs(err, expectedMessage)
return
raise Exception("{0} not raised".format(exceptionClass, ))
@defer.inlineCallbacks
[docs] def assertInlineCbRaises(self, exceptionClass, inlineCallbacksFunc, *args, **kw):
'''
Assert a given inlineCallbacks decorated method raises.
This replaces assertRaisesWithMessage for inlineCallbacks.
Note: this method is an inlineCallbacks and need to be yielded.
'''
try:
yield inlineCallbacksFunc(*args, **kw)
except exceptionClass:
return
raise Exception("{0} not raised".format(exceptionClass))