summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2004-08-15 07:21:25 +0000
committerBrett Cannon <bcannon@gmail.com>2004-08-15 07:21:25 +0000
commitadd33601c2826a151718da295b15fbb8cf656e53 (patch)
tree5b06b8571dd84cba7d1d0da67143fd2f5a98b38b /Lib
parent31f8350f439c3219c3975d127f8c5037d2362427 (diff)
downloadcpython-git-add33601c2826a151718da295b15fbb8cf656e53.tar.gz
Correct the order of application for decorators. Meant to be bottom-up and not
top-down. Now matches the PEP.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_decorators.py23
1 files changed, 16 insertions, 7 deletions
diff --git a/Lib/test/test_decorators.py b/Lib/test/test_decorators.py
index dbe45cf3fd..8010ea37f3 100644
--- a/Lib/test/test_decorators.py
+++ b/Lib/test/test_decorators.py
@@ -129,7 +129,8 @@ class TestDecorators(unittest.TestCase):
# XXX: This doesn't work unless memoize is the last decorator -
# see the comment in countcalls.
counts = {}
- @countcalls(counts) @memoize
+ @memoize
+ @countcalls(counts)
def double(x):
return x * 2
@@ -186,12 +187,20 @@ class TestDecorators(unittest.TestCase):
self.assertEqual(C.foo.booh, 42)
def test_order(self):
- class C(object):
- @funcattrs(abc=1) @staticmethod
- def foo(): return 42
- # This wouldn't work if staticmethod was called first
- self.assertEqual(C.foo(), 42)
- self.assertEqual(C().foo(), 42)
+ # Test that decorators are conceptually applied right-recursively;
+ # that means bottom-up
+ def ordercheck(num):
+ def deco(func):
+ return lambda: num
+ return deco
+
+ # Should go ordercheck(1)(ordercheck(2)(blah)) which should lead to
+ # blah() == 1
+ @ordercheck(1)
+ @ordercheck(2)
+ def blah(): pass
+ self.assertEqual(blah(), 1, "decorators are meant to be applied "
+ "bottom-up")
def test_main():
test_support.run_unittest(TestDecorators)