tests: import assertNotRaises() from core-admin

This commit is contained in:
Marek Marczykowski-Górecki 2017-04-30 22:52:47 +02:00
parent d5bf5a1d75
commit 09acf4729b
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724

View File

@ -17,6 +17,7 @@
#
# You should have received a copy of the GNU Lesser General Public License along
# with this program; if not, see <http://www.gnu.org/licenses/>.
import traceback
import unittest
import io
@ -73,6 +74,39 @@ class TestProcess(object):
self.stdin_close()
return 0
class _AssertNotRaisesContext(object):
"""A context manager used to implement TestCase.assertNotRaises methods.
Stolen from unittest and hacked. Regexp support stripped.
""" # pylint: disable=too-few-public-methods
def __init__(self, expected, test_case, expected_regexp=None):
if expected_regexp is not None:
raise NotImplementedError('expected_regexp is unsupported')
self.expected = expected
self.exception = None
self.failureException = test_case.failureException
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, tb):
if exc_type is None:
return True
if issubclass(exc_type, self.expected):
raise self.failureException(
"{!r} raised, traceback:\n{!s}".format(
exc_value, ''.join(traceback.format_tb(tb))))
else:
# pass through
return False
class QubesTest(qubesmgmt.app.QubesBase):
expected_calls = None
actual_calls = None
@ -110,3 +144,32 @@ class QubesTestCase(unittest.TestCase):
self.assertEqual(
set(self.app.expected_calls.keys()),
set(self.app.actual_calls))
def assertNotRaises(self, excClass, callableObj=None, *args, **kwargs):
"""Fail if an exception of class excClass is raised
by callableObj when invoked with arguments args and keyword
arguments kwargs. If a different type of exception is
raised, it will not be caught, and the test case will be
deemed to have suffered an error, exactly as for an
unexpected exception.
If called with callableObj omitted or None, will return a
context object used like this::
with self.assertRaises(SomeException):
do_something()
The context manager keeps a reference to the exception as
the 'exception' attribute. This allows you to inspect the
exception after the assertion::
with self.assertRaises(SomeException) as cm:
do_something()
the_exception = cm.exception
self.assertEqual(the_exception.error_code, 3)
"""
context = _AssertNotRaisesContext(excClass, self)
if callableObj is None:
return context
with context:
callableObj(*args, **kwargs)