47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
|
# This test is temporary until we can import test_decorators from CPython 3.x
|
||
|
# The reason for not doing that already is that in Python 3.x the name of a
|
||
|
# function is stored in func.__name__, in 2.x it's func.func_name
|
||
|
import unittest
|
||
|
from test import test_support
|
||
|
|
||
|
class TestClassDecorators(unittest.TestCase):
|
||
|
|
||
|
def test_simple(self):
|
||
|
def plain(x):
|
||
|
x.extra = 'Hello'
|
||
|
return x
|
||
|
@plain
|
||
|
class C(object): pass
|
||
|
self.assertEqual(C.extra, 'Hello')
|
||
|
|
||
|
def test_double(self):
|
||
|
def ten(x):
|
||
|
x.extra = 10
|
||
|
return x
|
||
|
def add_five(x):
|
||
|
x.extra += 5
|
||
|
return x
|
||
|
|
||
|
@add_five
|
||
|
@ten
|
||
|
class C(object): pass
|
||
|
self.assertEqual(C.extra, 15)
|
||
|
|
||
|
def test_order(self):
|
||
|
def applied_first(x):
|
||
|
x.extra = 'first'
|
||
|
return x
|
||
|
def applied_second(x):
|
||
|
x.extra = 'second'
|
||
|
return x
|
||
|
@applied_second
|
||
|
@applied_first
|
||
|
class C(object): pass
|
||
|
self.assertEqual(C.extra, 'second')
|
||
|
|
||
|
def test_main():
|
||
|
test_support.run_unittest(TestClassDecorators)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
test_main()
|