diff options
Diffstat (limited to 'pecan/tests/test_util.py')
-rw-r--r-- | pecan/tests/test_util.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/pecan/tests/test_util.py b/pecan/tests/test_util.py new file mode 100644 index 0000000..c1cdfbd --- /dev/null +++ b/pecan/tests/test_util.py @@ -0,0 +1,68 @@ +import functools +import inspect +import unittest + +from pecan import expose +from pecan import util + + +class TestArgSpec(unittest.TestCase): + + @property + def controller(self): + + class RootController(object): + + @expose() + def index(self, a, b, c=1, *args, **kwargs): + return 'Hello, World!' + + return RootController() + + def test_no_decorator(self): + expected = inspect.getargspec(self.controller.index.__func__) + actual = util.getargspec(self.controller.index.__func__) + assert expected == actual + + def test_simple_decorator(self): + def dec(f): + return f + + expected = inspect.getargspec(self.controller.index.__func__) + actual = util.getargspec(dec(self.controller.index.__func__)) + assert expected == actual + + def test_simple_wrapper(self): + def dec(f): + @functools.wraps(f) + def wrapped(*a, **kw): + return f(*a, **kw) + return wrapped + + expected = inspect.getargspec(self.controller.index.__func__) + actual = util.getargspec(dec(self.controller.index.__func__)) + assert expected == actual + + def test_multiple_decorators(self): + def dec(f): + @functools.wraps(f) + def wrapped(*a, **kw): + return f(*a, **kw) + return wrapped + + expected = inspect.getargspec(self.controller.index.__func__) + actual = util.getargspec(dec(dec(dec(self.controller.index.__func__)))) + assert expected == actual + + def test_decorator_with_args(self): + def dec(flag): + def inner(f): + @functools.wraps(f) + def wrapped(*a, **kw): + return f(*a, **kw) + return wrapped + return inner + + expected = inspect.getargspec(self.controller.index.__func__) + actual = util.getargspec(dec(True)(self.controller.index.__func__)) + assert expected == actual |