diff options
| author | Brett Cannon <bcannon@gmail.com> | 2004-08-15 07:21:25 +0000 |
|---|---|---|
| committer | Brett Cannon <bcannon@gmail.com> | 2004-08-15 07:21:25 +0000 |
| commit | add33601c2826a151718da295b15fbb8cf656e53 (patch) | |
| tree | 5b06b8571dd84cba7d1d0da67143fd2f5a98b38b /Lib | |
| parent | 31f8350f439c3219c3975d127f8c5037d2362427 (diff) | |
| download | cpython-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.py | 23 |
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) |
