162 lines
4.4 KiB
Python
162 lines
4.4 KiB
Python
from __future__ import print_function
|
|
|
|
import unittest
|
|
import sys
|
|
|
|
import wrapt
|
|
|
|
def global_function_1(*args, **kwargs):
|
|
return args, kwargs
|
|
|
|
def global_function_2(*args, **kwargs):
|
|
return args, kwargs
|
|
|
|
def global_function_3(*args, **kwargs):
|
|
return args, kwargs
|
|
|
|
def global_function_4(*args, **kwargs):
|
|
return args, kwargs
|
|
|
|
class Class_1(object):
|
|
def method(self, *args, **kwargs):
|
|
return args, kwargs
|
|
|
|
class TestMonkeyPatching(unittest.TestCase):
|
|
|
|
def test_function_wrapper(self):
|
|
|
|
_args = (1, 2)
|
|
_kwargs = { 'one': 1, 'two': 2 }
|
|
|
|
called = []
|
|
|
|
@wrapt.function_wrapper
|
|
def wrapper(wrapped, instance, args, kwargs):
|
|
called.append((args, kwargs))
|
|
self.assertEqual(instance, None)
|
|
self.assertEqual(args, _args)
|
|
self.assertEqual(kwargs, _kwargs)
|
|
return wrapped(*args, **kwargs)
|
|
|
|
@wrapper
|
|
def function(*args, **kwargs):
|
|
return args, kwargs
|
|
|
|
result = function(*_args, **_kwargs)
|
|
|
|
self.assertEqual(result, (_args, _kwargs))
|
|
self.assertEqual(called[0], (_args, _kwargs))
|
|
|
|
def test_wrap_function_module_name(self):
|
|
|
|
_args = (1, 2)
|
|
_kwargs = { 'one': 1, 'two': 2 }
|
|
|
|
called = []
|
|
|
|
def wrapper(wrapped, instance, args, kwargs):
|
|
called.append((args, kwargs))
|
|
self.assertEqual(instance, None)
|
|
self.assertEqual(args, _args)
|
|
self.assertEqual(kwargs, _kwargs)
|
|
return wrapped(*args, **kwargs)
|
|
|
|
wrapt.wrap_function_wrapper(__name__, 'global_function_1', wrapper)
|
|
|
|
result = global_function_1(*_args, **_kwargs)
|
|
|
|
self.assertEqual(result, (_args, _kwargs))
|
|
self.assertEqual(called[0], (_args, _kwargs))
|
|
|
|
def test_wrap_function_module(self):
|
|
|
|
_args = (1, 2)
|
|
_kwargs = { 'one': 1, 'two': 2 }
|
|
|
|
called = []
|
|
|
|
def wrapper(wrapped, instance, args, kwargs):
|
|
called.append((args, kwargs))
|
|
self.assertEqual(instance, None)
|
|
self.assertEqual(args, _args)
|
|
self.assertEqual(kwargs, _kwargs)
|
|
return wrapped(*args, **kwargs)
|
|
|
|
module = sys.modules[__name__]
|
|
|
|
wrapt.wrap_function_wrapper(module, 'global_function_2', wrapper)
|
|
|
|
result = global_function_2(*_args, **_kwargs)
|
|
|
|
self.assertEqual(result, (_args, _kwargs))
|
|
self.assertEqual(called[0], (_args, _kwargs))
|
|
|
|
def test_wrap_instance_method_module_name(self):
|
|
|
|
_args = (1, 2)
|
|
_kwargs = { 'one': 1, 'two': 2 }
|
|
|
|
called = []
|
|
|
|
_instance = Class_1()
|
|
|
|
def wrapper(wrapped, instance, args, kwargs):
|
|
called.append((args, kwargs))
|
|
self.assertEqual(instance, _instance)
|
|
self.assertEqual(args, _args)
|
|
self.assertEqual(kwargs, _kwargs)
|
|
return wrapped(*args, **kwargs)
|
|
|
|
wrapt.wrap_function_wrapper(__name__, 'Class_1.method',
|
|
wrapper)
|
|
|
|
result = _instance.method(*_args, **_kwargs)
|
|
|
|
self.assertEqual(result, (_args, _kwargs))
|
|
self.assertEqual(called[0], (_args, _kwargs))
|
|
|
|
def test_patch_function_module_name(self):
|
|
|
|
_args = (1, 2)
|
|
_kwargs = { 'one': 1, 'two': 2 }
|
|
|
|
called = []
|
|
|
|
@wrapt.patch_function_wrapper(__name__, 'global_function_3')
|
|
def wrapper(wrapped, instance, args, kwargs):
|
|
called.append((args, kwargs))
|
|
self.assertEqual(instance, None)
|
|
self.assertEqual(args, _args)
|
|
self.assertEqual(kwargs, _kwargs)
|
|
return wrapped(*args, **kwargs)
|
|
|
|
result = global_function_3(*_args, **_kwargs)
|
|
|
|
self.assertEqual(result, (_args, _kwargs))
|
|
self.assertEqual(called[0], (_args, _kwargs))
|
|
|
|
def test_patch_function_module(self):
|
|
|
|
_args = (1, 2)
|
|
_kwargs = { 'one': 1, 'two': 2 }
|
|
|
|
called = []
|
|
|
|
module = sys.modules[__name__]
|
|
|
|
@wrapt.patch_function_wrapper(module, 'global_function_4')
|
|
def wrapper(wrapped, instance, args, kwargs):
|
|
called.append((args, kwargs))
|
|
self.assertEqual(instance, None)
|
|
self.assertEqual(args, _args)
|
|
self.assertEqual(kwargs, _kwargs)
|
|
return wrapped(*args, **kwargs)
|
|
|
|
result = global_function_4(*_args, **_kwargs)
|
|
|
|
self.assertEqual(result, (_args, _kwargs))
|
|
self.assertEqual(called[0], (_args, _kwargs))
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|