From f993d371a6d8f2f27abf3a8e10154daec336caa8 Mon Sep 17 00:00:00 2001 From: maxkoryukov Date: Wed, 3 Feb 2016 18:19:18 +0500 Subject: [PATCH] Improved testing approach (many testcases in decorators) --- headphones/unittestcompat.py | 56 ++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 5 deletions(-) diff --git a/headphones/unittestcompat.py b/headphones/unittestcompat.py index 0cbb901a..c6055bf3 100644 --- a/headphones/unittestcompat.py +++ b/headphones/unittestcompat.py @@ -19,14 +19,60 @@ class TestCase(TC): """ Wrapper for python 2.6 stubs """ + + def assertIsInstance(self, obj, cls, msg=None): + if not _dummy: + return super(TestCase, self).assertIsInstance(obj, cls, msg) + tst = isinstance(obj, cls) + return self.assertTrue(tst, msg) + @_d - def assertIsInstance(self, *args, **kw): - return super(TestCase, self).assertIsInstance(*args, **kw) + def assertNotIsInstance(self, *args, **kw): + return super(TestCase, self).assertNotIsInstance(*args, **kw) @_d def assertIn(self, *args, **kw): return super(TestCase, self).assertIn(*args, **kw) - @_d - def assertIsNotNone(self, *args, **kw): - return super(TestCase, self).assertIsNotNone(*args, **kw) + def assertIsNotNone(self, val, msg=None): + if not _dummy: + return super(TestCase, self).assertIsNotNone(val, msg) + tst = val is not None + return super(TestCase, self).assertTrue(val, msg) + + class _TestCaseRaiseStub: + def __init__(self, exc, tc): + self.exc = exc + self.tc = tc + def __enter__(self): + return self + def __exit__(self, tp, value, traceback): + tst = tp is self.exc + self.tc.assertTrue(tst) + self.exception = value + return True + + def assertRaises(self, exc, msg = None): + if not _dummy: + return super(TestCase, self).assertRaises(exc, msg) + return TestCase._TestCaseRaiseStub(exc, self) + +def TestArgs(*parameters): + def tuplify(x): + if not isinstance(x, tuple): + return (x,) + return x + + def decorator(method, parameters=parameters): + for parameter in (tuplify(x) for x in parameters): + + def method_for_parameter(self, method=method, parameter=parameter): + method(self, *parameter) + args_for_parameter = ",".join(repr(v) for v in parameter) + name_for_parameter = method.__name__ + "(" + args_for_parameter + ")" + frame = sys._getframe(1) # pylint: disable-msg=W0212 + frame.f_locals[name_for_parameter] = method_for_parameter + frame.f_locals[name_for_parameter].__doc__ = method.__doc__ + '(' + args_for_parameter + ')' + method_for_parameter.__name__ = name_for_parameter + '(' + args_for_parameter + ')' + return None + return decorator