| import warnings |
| |
| __unittest=True |
| |
| class _AssertWarnsContext(object): |
| def __init__(self, warningtype, testcase, msg=''): |
| self.warningtype = warningtype |
| warnings.filterwarnings('error') |
| self.failureException = testcase.failureException |
| |
| def __enter__(self): |
| return self |
| |
| def __exit__(self, exc_type, exc_value, tb): |
| if exc_type is None: |
| try: |
| exc_name = self.warningtype.__name__ |
| except AttributeError: |
| exc_name = str(self.warningtype) |
| raise self.failureException( |
| "{0} not raised".format(exc_name)) |
| |
| if not issubclass(exc_type, self.warningtype): |
| raise self.failureException('"%s" does not match "%s"' % |
| (self.warningtype.__name__, str(exc_type.__name__))) |
| |
| return True |
| |
| class CatchWarningsMixin(object): |
| def assertWarns(self, wrnClass, callableObj=None, *args, **kwargs): |
| context = _AssertWarnsContext(wrnClass, self) |
| if callableObj is None: |
| return context |
| with context: |
| callableObj(*args, **kwargs) |