Files
deb-python-wrapt/tests/test_object_proxy.py
2013-08-13 22:06:52 +08:00

601 lines
15 KiB
Python

from __future__ import print_function
import unittest
import imp
import wrapt
from wrapt import six
OBJECTS_CODE = """
class Target(object):
"documentation"
def target():
"documentation"
pass
"""
objects = imp.new_module('objects')
six.exec_(OBJECTS_CODE, objects.__dict__, objects.__dict__)
class TestNamingObjectProxy(unittest.TestCase):
def test_class_object_name(self):
# Test preservation of class __name__ attribute.
target = objects.Target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__name__, target.__name__)
def test_class_object_qualname(self):
# Test preservation of class __qualname__ attribute.
target = objects.Target
wrapper = wrapt.ObjectProxy(target)
try:
__qualname__ = target.__qualname__
except AttributeError:
pass
else:
self.assertEqual(wrapper.__qualname__, __qualname__)
def test_class_module_name(self):
# Test preservation of class __module__ attribute.
target = objects.Target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__module__, target.__module__)
def test_class_doc_string(self):
# Test preservation of class __doc__ attribute.
target = objects.Target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__doc__, target.__doc__)
def test_instance_module_name(self):
# Test preservation of instance __module__ attribute.
target = objects.Target()
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__module__, target.__module__)
def test_instance_doc_string(self):
# Test preservation of instance __doc__ attribute.
target = objects.Target()
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__doc__, target.__doc__)
def test_function_object_name(self):
# Test preservation of function __name__ attribute.
target = objects.target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__name__, target.__name__)
def test_function_object_qualname(self):
# Test preservation of function __qualname__ attribute.
target = objects.target
wrapper = wrapt.ObjectProxy(target)
try:
__qualname__ = target.__qualname__
except AttributeError:
pass
else:
self.assertEqual(wrapper.__qualname__, __qualname__)
def test_function_module_name(self):
# Test preservation of function __module__ attribute.
target = objects.target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__module__, target.__module__)
def test_function_doc_string(self):
# Test preservation of function __doc__ attribute.
target = objects.target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__doc__, target.__doc__)
class TestTypeObjectProxy(unittest.TestCase):
def test_class_of_class(self):
# Test preservation of class __class__ attribute.
target = objects.Target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__class__, target.__class__)
self.assertTrue(isinstance(wrapper, type(target)))
def test_class_of_instance(self):
# Test preservation of instance __class__ attribute.
target = objects.Target()
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__class__, target.__class__)
self.assertTrue(isinstance(wrapper, type(target)))
def test_class_of_function(self):
# Test preservation of function __class__ attribute.
target = objects.target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(wrapper.__class__, target.__class__)
self.assertTrue(isinstance(wrapper, type(target)))
class TestDirObjectProxy(unittest.TestCase):
def test_dir_of_class(self):
# Test preservation of class __dir__ attribute.
target = objects.Target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(dir(wrapper), dir(target))
def test_vars_of_class(self):
# Test preservation of class __dir__ attribute.
target = objects.Target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(vars(wrapper), vars(target))
def test_dir_of_instance(self):
# Test preservation of instance __dir__ attribute.
target = objects.Target()
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(dir(wrapper), dir(target))
def test_vars_of_instance(self):
# Test preservation of instance __dir__ attribute.
target = objects.Target()
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(vars(wrapper), vars(target))
def test_dir_of_function(self):
# Test preservation of function __dir__ attribute.
target = objects.target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(dir(wrapper), dir(target))
def test_vars_of_function(self):
# Test preservation of function __dir__ attribute.
target = objects.target
wrapper = wrapt.ObjectProxy(target)
self.assertEqual(vars(wrapper), vars(target))
class TestCallingObject(unittest.TestCase):
def test_function_no_args(self):
_args = ()
_kwargs = {}
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(function)
result = wrapper()
self.assertEqual(result, (_args, _kwargs))
def test_function_args(self):
_args = (1, 2)
_kwargs = {}
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(function)
result = wrapper(*_args)
self.assertEqual(result, (_args, _kwargs))
def test_function_kwargs(self):
_args = ()
_kwargs = { "one": 1, "two": 2 }
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(function)
result = wrapper(**_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_function_args_plus_kwargs(self):
_args = (1, 2)
_kwargs = { "one": 1, "two": 2 }
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(function)
result = wrapper(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_instancemethod_no_args(self):
_args = ()
_kwargs = {}
class Class(object):
def function(self, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper()
self.assertEqual(result, (_args, _kwargs))
def test_instancemethod_args(self):
_args = (1, 2)
_kwargs = {}
class Class(object):
def function(self, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper(*_args)
self.assertEqual(result, (_args, _kwargs))
def test_instancemethod_kwargs(self):
_args = ()
_kwargs = { "one": 1, "two": 2 }
class Class(object):
def function(self, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper(**_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_instancemethod_args_plus_kwargs(self):
_args = (1, 2)
_kwargs = { "one": 1, "two": 2 }
class Class(object):
def function(self, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_instancemethod_via_class_no_args(self):
_args = ()
_kwargs = {}
class Class(object):
def function(self, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(Class())
self.assertEqual(result, (_args, _kwargs))
def test_instancemethod_via_class_args(self):
_args = (1, 2)
_kwargs = {}
class Class(object):
def function(self, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(Class(), *_args)
self.assertEqual(result, (_args, _kwargs))
def test_instancemethod_via_class_kwargs(self):
_args = ()
_kwargs = { "one": 1, "two": 2 }
class Class(object):
def function(self, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(Class(), **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_instancemethod_via_class_args_plus_kwargs(self):
_args = (1, 2)
_kwargs = { "one": 1, "two": 2 }
class Class(object):
def function(self, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(Class(), *_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_classmethod_no_args(self):
_args = ()
_kwargs = {}
class Class(object):
@classmethod
def function(cls, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper()
self.assertEqual(result, (_args, _kwargs))
def test_classmethod_args(self):
_args = (1, 2)
_kwargs = {}
class Class(object):
@classmethod
def function(cls, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper(*_args)
self.assertEqual(result, (_args, _kwargs))
def test_classmethod_kwargs(self):
_args = ()
_kwargs = { "one": 1, "two": 2 }
class Class(object):
@classmethod
def function(cls, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper(**_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_classmethod_args_plus_kwargs(self):
_args = (1, 2)
_kwargs = { "one": 1, "two": 2 }
class Class(object):
@classmethod
def function(cls, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_classmethod_via_class_no_args(self):
_args = ()
_kwargs = {}
class Class(object):
@classmethod
def function(cls, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper()
self.assertEqual(result, (_args, _kwargs))
def test_classmethod_via_class_args(self):
_args = (1, 2)
_kwargs = {}
class Class(object):
@classmethod
def function(cls, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(*_args)
self.assertEqual(result, (_args, _kwargs))
def test_classmethod_via_class_kwargs(self):
_args = ()
_kwargs = { "one": 1, "two": 2 }
class Class(object):
@classmethod
def function(cls, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(**_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_classmethod_via_class_args_plus_kwargs(self):
_args = (1, 2)
_kwargs = { "one": 1, "two": 2 }
class Class(object):
@classmethod
def function(cls, *args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_staticmethod_no_args(self):
_args = ()
_kwargs = {}
class Class(object):
@staticmethod
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper()
self.assertEqual(result, (_args, _kwargs))
def test_staticmethod_args(self):
_args = (1, 2)
_kwargs = {}
class Class(object):
@staticmethod
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper(*_args)
self.assertEqual(result, (_args, _kwargs))
def test_staticmethod_kwargs(self):
_args = ()
_kwargs = { "one": 1, "two": 2 }
class Class(object):
@staticmethod
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper(**_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_staticmethod_args_plus_kwargs(self):
_args = (1, 2)
_kwargs = { "one": 1, "two": 2 }
class Class(object):
@staticmethod
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class().function)
result = wrapper(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_staticmethod_via_class_no_args(self):
_args = ()
_kwargs = {}
class Class(object):
@staticmethod
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper()
self.assertEqual(result, (_args, _kwargs))
def test_staticmethod_via_class_args(self):
_args = (1, 2)
_kwargs = {}
class Class(object):
@staticmethod
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(*_args)
self.assertEqual(result, (_args, _kwargs))
def test_staticmethod_via_class_kwargs(self):
_args = ()
_kwargs = { "one": 1, "two": 2 }
class Class(object):
@staticmethod
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(**_kwargs)
self.assertEqual(result, (_args, _kwargs))
def test_staticmethod_via_class_args_plus_kwargs(self):
_args = (1, 2)
_kwargs = { "one": 1, "two": 2 }
class Class(object):
@staticmethod
def function(*args, **kwargs):
return args, kwargs
wrapper = wrapt.ObjectProxy(Class.function)
result = wrapper(*_args, **_kwargs)
self.assertEqual(result, (_args, _kwargs))
if __name__ == '__main__':
unittest.main()