Updates to unit tests.

This commit is contained in:
Graham Dumpleton
2013-08-06 21:33:22 +08:00
parent c4b02cfa1e
commit 41025ba0cb
7 changed files with 216 additions and 8 deletions

View File

@@ -67,6 +67,28 @@ class TestCallingFunction(unittest.TestCase):
@wrapt.function_decorator
def _decorator(wrapped, args, kwargs):
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
def _function(*args, **kwargs):
return args, kwargs
result = _function(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_call_function_generic_decorator(self):
_args = (1, 2)
_kwargs = { 'one': 1, 'two': 2 }
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator

View File

@@ -118,6 +118,8 @@ class TestCallingInnerClassMethod(unittest.TestCase):
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
@@ -146,6 +148,8 @@ class TestCallingInnerClassMethod(unittest.TestCase):
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator

View File

@@ -1,5 +1,7 @@
from __future__ import print_function
import wrapt
import unittest
import inspect
@@ -103,3 +105,63 @@ class TestNamingInnerStaticMethod(unittest.TestCase):
self.assertTrue(isinstance(Class().function,
type(Original().function)))
class TestCallingInnerStaticMethod(unittest.TestCase):
def test_class_call_function(self):
# Test calling staticmethod.
_args = (1, 2)
_kwargs = { 'one': 1, 'two': 2 }
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
def _function(*args, **kwargs):
return args, kwargs
class Class(object):
@_decorator
@staticmethod
def _function(*args, **kwargs):
return (args, kwargs)
result = Class._function(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_instance_call_function(self):
# Test calling staticmethod via class instance. The instance
# passed to the wrapper will not be None because our decorator
# surrounds the staticmethod decorator.
_args = (1, 2)
_kwargs = { 'one': 1, 'two': 2 }
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
def _function(*args, **kwargs):
return args, kwargs
class Class(object):
@_decorator
@staticmethod
def _function(*args, **kwargs):
return (args, kwargs)
result = Class()._function(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))

View File

@@ -217,6 +217,9 @@ class TestCallingInstanceMethodOldStyle(unittest.TestCase):
@wrapt.instancemethod_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
@@ -241,6 +244,9 @@ class TestCallingInstanceMethodOldStyle(unittest.TestCase):
@wrapt.instancemethod_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
@@ -258,17 +264,17 @@ class TestCallingInstanceMethodOldStyle(unittest.TestCase):
def test_class_call_function_generic_decorator(self):
# Test calling instancemethod via class and passing in the class
# instance directly. The generic decorator does not perform the
# fiddle that the instance method decorator does when called via
# the class type with the instance as first argument. Thus the
# instance passed to the wrapper will be None.
# instance directly.
_args = (1, 2)
_kwargs = { 'one': 1, 'two': 2 }
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
@@ -293,6 +299,9 @@ class TestCallingInstanceMethodOldStyle(unittest.TestCase):
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
@@ -312,7 +321,7 @@ class TestCallingInstanceMethodNewStyle(unittest.TestCase):
def test_class_call_function(self):
# Test calling instancemethod via class and passing in the class
# instance directly. This is bypassing the descriptor protocol.
# instance directly.
_args = (1, 2)
_kwargs = { 'one': 1, 'two': 2 }
@@ -320,6 +329,9 @@ class TestCallingInstanceMethodNewStyle(unittest.TestCase):
@wrapt.instancemethod_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
@@ -344,6 +356,9 @@ class TestCallingInstanceMethodNewStyle(unittest.TestCase):
@wrapt.instancemethod_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
@@ -361,14 +376,17 @@ class TestCallingInstanceMethodNewStyle(unittest.TestCase):
def test_class_call_function_generic_decorator(self):
# Test calling instancemethod via class and passing in the class
# instance directly. This is bypassing the descriptor protocol.
# instance directly.
_args = (1, 2)
_kwargs = { 'one': 1, 'two': 2 }
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
@@ -393,6 +411,9 @@ class TestCallingInstanceMethodNewStyle(unittest.TestCase):
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertNotEqual(obj, None)
self.assertNotEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator

View File

@@ -71,6 +71,34 @@ class TestCallingNestedFunction(unittest.TestCase):
@wrapt.function_decorator
def _decorator(wrapped, args, kwargs):
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
def _function(*args, **kwargs):
return args, kwargs
def _function():
@passthru_function_decorator
def inner(*args, **kwargs):
return args, kwargs
return inner
result = _function()(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_call_function_generic_decorator(self):
_args = (1, 2)
_kwargs = { 'one': 1, 'two': 2 }
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator

View File

@@ -123,6 +123,8 @@ class TestCallingOuterClassMethod(unittest.TestCase):
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertEqual(cls, None)
self.assertEqual(args, (Class,)+_args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
@@ -154,6 +156,8 @@ class TestCallingOuterClassMethod(unittest.TestCase):
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertEqual(cls, None)
self.assertEqual(args, (Class,)+_args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator

View File

@@ -3,6 +3,8 @@ from __future__ import print_function
import unittest
import inspect
import wrapt
from .decorators import passthru_generic_decorator
class Class(object):
@@ -103,3 +105,68 @@ class TestNamingOuterStaticMethod(unittest.TestCase):
self.assertTrue(isinstance(Class().function,
type(Original().function)))
class TestCallingOuterStaticMethod(unittest.TestCase):
def test_class_call_function(self):
# Test calling staticmethod. The instance and class passed to the
# wrapper will both be None because our decorator is surrounded
# by the staticmethod decorator. The staticmethod decorator
# doesn't bind the method and treats it like a normal function.
_args = (1, 2)
_kwargs = { 'one': 1, 'two': 2 }
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
def _function(*args, **kwargs):
return args, kwargs
class Class(object):
@staticmethod
@_decorator
def _function(*args, **kwargs):
return (args, kwargs)
result = Class._function(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_instance_call_function(self):
# Test calling staticmethod via class instance. The instance
# and class passed to the wrapper will both be None because our
# decorator is surrounded by the staticmethod decorator. The
# staticmethod decorator doesn't bind the method and treats it
# like a normal function.
_args = (1, 2)
_kwargs = { 'one': 1, 'two': 2 }
@wrapt.generic_decorator
def _decorator(wrapped, obj, cls, args, kwargs):
self.assertEqual(obj, None)
self.assertEqual(cls, None)
self.assertEqual(args, _args)
self.assertEqual(kwargs, _kwargs)
return wrapped(*args, **kwargs)
@_decorator
def _function(*args, **kwargs):
return args, kwargs
class Class(object):
@staticmethod
@_decorator
def _function(*args, **kwargs):
return (args, kwargs)
result = Class()._function(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))