diff options
author | Barry Warsaw <barry@python.org> | 2001-01-15 20:30:15 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2001-01-15 20:30:15 (GMT) |
commit | 4a420a0a753119bab88d60603a4305b3586982bd (patch) | |
tree | 04683ffe5003e58c710e66a47bb1984f5600c312 | |
parent | 773d9f09becb5cbb6ceecb59a933f9848dcb6ace (diff) | |
download | cpython-4a420a0a753119bab88d60603a4305b3586982bd.zip cpython-4a420a0a753119bab88d60603a4305b3586982bd.tar.gz cpython-4a420a0a753119bab88d60603a4305b3586982bd.tar.bz2 |
Committing PEP 232, function attribute feature, approved by Guido.
Closes SF patch #103123.
Regression test for function attributes, with output file.
-rw-r--r-- | Lib/test/output/test_funcattrs | 1 | ||||
-rw-r--r-- | Lib/test/test_funcattrs.py | 102 |
2 files changed, 103 insertions, 0 deletions
diff --git a/Lib/test/output/test_funcattrs b/Lib/test/output/test_funcattrs new file mode 100644 index 0000000..40c9004 --- /dev/null +++ b/Lib/test/output/test_funcattrs @@ -0,0 +1 @@ +test_funcattrs diff --git a/Lib/test/test_funcattrs.py b/Lib/test/test_funcattrs.py new file mode 100644 index 0000000..f8b471e --- /dev/null +++ b/Lib/test/test_funcattrs.py @@ -0,0 +1,102 @@ +from test_support import verbose, TestFailed + +class F: + def a(self): + pass + +def b(): + 'my docstring' + pass + +# setting attributes on functions +try: + b.publish +except AttributeError: + pass +else: + raise TestFailed, 'expected AttributeError' + +b.publish = 1 +if b.publish <> 1: + raise TestFailed, 'function attribute not set to expected value' + +docstring = 'its docstring' +b.__doc__ = docstring +if b.__doc__ <> docstring: + raise TestFailed, 'problem with setting __doc__ attribute' + +if 'publish' not in dir(b): + raise TestFailed, 'attribute not in dir()' + +f1 = F() +f2 = F() + +try: + F.a.publish +except AttributeError: + pass +else: + raise TestFailed, 'expected AttributeError' + +try: + f1.a.publish +except AttributeError: + pass +else: + raise TestFailed, 'expected AttributeError' + + +F.a.publish = 1 +if F.a.publish <> 1: + raise TestFailed, 'unbound method attribute not set to expected value' + +if f1.a.publish <> 1: + raise TestFailed, 'bound method attribute access did not work' + +if f2.a.publish <> 1: + raise TestFailed, 'bound method attribute access did not work' + +if 'publish' not in dir(F.a): + raise TestFailed, 'attribute not in dir()' + +try: + f1.a.publish = 0 +except TypeError: + pass +else: + raise TestFailed, 'expected TypeError' + +F.a.myclass = F +f1.a.myclass +f2.a.myclass +f1.a.myclass +F.a.myclass + +if f1.a.myclass is not f2.a.myclass or \ + f1.a.myclass is not F.a.myclass: + raise TestFailed, 'attributes were not the same' + +# try setting __dict__ +try: + F.a.__dict__ = (1, 2, 3) +except TypeError: + pass +else: + raise TestFailed, 'expected TypeError' + +F.a.__dict__ = {'one': 11, 'two': 22, 'three': 33} +if f1.a.two <> 22: + raise TestFailed, 'setting __dict__' + +from UserDict import UserDict +d = UserDict({'four': 44, 'five': 55}) + +try: + F.a.__dict__ = d +except TypeError: + pass +else: + raise TestFailed + +if f2.a.one <> f1.a.one <> F.a.one <> 11: + raise TestFailed |