import unittest

from turbogears.decorator import *
from turbogears import testutil

def d1(func):
    def call(func, *args, **kw):
        return func(*args, **kw)
    return decorator(call)(func)

def d2(func):
    def call(func, *args, **kw):
        return func(*args, **kw)
    newfunc = decorator(call)(func)
    newfunc.baz3 = 3
    return newfunc

def d3(func):
    func.baz2 = 2
    def call(func, *args, **kw):
        return func(*args, **kw)
    return decorator(call)(func)

def foo(a, b):
    """Do foo."""
    return a+b
foo.baz1 = 1

bar = foo

foo = d1(foo)
foo = d2(foo)
foo = d3(foo)

class TestDecorator(unittest.TestCase):

    def test_attributes(self):
        self.failUnless(foo.baz1==1)
        self.failUnless(foo.baz2==2)
        self.failUnless(foo.baz3==3)
