From 5becc45d19bdc64bf4cd30138cfa38df1b635736 Mon Sep 17 00:00:00 2001 From: Brian Stinson Date: Jul 20 2015 04:28:02 +0000 Subject: add an assertWarns context manager for unit tests --- diff --git a/tests/__init__.py b/tests/__init__.py index 661012a..47ea5e8 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1,5 +1,32 @@ import os import sys +import unittest +import warnings sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '../src')) + +class CatchWarningsMixin(object): + class assertWarns(object): + def __init__(self, warningtype, msg=''): + self.warningtype = warningtype + warnings.filterwarnings('error') + self.failureException = unittest.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