annotate Lib/test/test_dynamicclassattribute.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents 3752c94368dd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
86325
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
1 # Test case for DynamicClassAttribute
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
2 # more tests are in test_descr
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
3
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
4 import abc
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
5 import sys
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
6 import unittest
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
7 from test.support import run_unittest
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
8 from types import DynamicClassAttribute
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
9
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
10 class PropertyBase(Exception):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
11 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
12
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
13 class PropertyGet(PropertyBase):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
14 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
15
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
16 class PropertySet(PropertyBase):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
17 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
18
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
19 class PropertyDel(PropertyBase):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
20 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
21
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
22 class BaseClass(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
23 def __init__(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
24 self._spam = 5
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
25
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
26 @DynamicClassAttribute
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
27 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
28 """BaseClass.getter"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
29 return self._spam
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
30
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
31 @spam.setter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
32 def spam(self, value):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
33 self._spam = value
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
34
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
35 @spam.deleter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
36 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
37 del self._spam
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
38
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
39 class SubClass(BaseClass):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
40
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
41 spam = BaseClass.__dict__['spam']
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
42
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
43 @spam.getter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
44 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
45 """SubClass.getter"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
46 raise PropertyGet(self._spam)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
47
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
48 @spam.setter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
49 def spam(self, value):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
50 raise PropertySet(self._spam)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
51
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
52 @spam.deleter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
53 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
54 raise PropertyDel(self._spam)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
55
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
56 class PropertyDocBase(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
57 _spam = 1
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
58 def _get_spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
59 return self._spam
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
60 spam = DynamicClassAttribute(_get_spam, doc="spam spam spam")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
61
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
62 class PropertyDocSub(PropertyDocBase):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
63 spam = PropertyDocBase.__dict__['spam']
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
64 @spam.getter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
65 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
66 """The decorator does not use this doc string"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
67 return self._spam
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
68
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
69 class PropertySubNewGetter(BaseClass):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
70 spam = BaseClass.__dict__['spam']
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
71 @spam.getter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
72 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
73 """new docstring"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
74 return 5
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
75
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
76 class PropertyNewGetter(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
77 @DynamicClassAttribute
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
78 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
79 """original docstring"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
80 return 1
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
81 @spam.getter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
82 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
83 """new docstring"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
84 return 8
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
85
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
86 class ClassWithAbstractVirtualProperty(metaclass=abc.ABCMeta):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
87 @DynamicClassAttribute
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
88 @abc.abstractmethod
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
89 def color():
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
90 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
91
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
92 class ClassWithPropertyAbstractVirtual(metaclass=abc.ABCMeta):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
93 @abc.abstractmethod
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
94 @DynamicClassAttribute
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
95 def color():
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
96 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
97
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
98 class PropertyTests(unittest.TestCase):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
99 def test_property_decorator_baseclass(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
100 # see #1620
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
101 base = BaseClass()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
102 self.assertEqual(base.spam, 5)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
103 self.assertEqual(base._spam, 5)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
104 base.spam = 10
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
105 self.assertEqual(base.spam, 10)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
106 self.assertEqual(base._spam, 10)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
107 delattr(base, "spam")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
108 self.assertTrue(not hasattr(base, "spam"))
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
109 self.assertTrue(not hasattr(base, "_spam"))
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
110 base.spam = 20
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
111 self.assertEqual(base.spam, 20)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
112 self.assertEqual(base._spam, 20)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
113
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
114 def test_property_decorator_subclass(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
115 # see #1620
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
116 sub = SubClass()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
117 self.assertRaises(PropertyGet, getattr, sub, "spam")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
118 self.assertRaises(PropertySet, setattr, sub, "spam", None)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
119 self.assertRaises(PropertyDel, delattr, sub, "spam")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
120
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
121 @unittest.skipIf(sys.flags.optimize >= 2,
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
122 "Docstrings are omitted with -O2 and above")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
123 def test_property_decorator_subclass_doc(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
124 sub = SubClass()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
125 self.assertEqual(sub.__class__.__dict__['spam'].__doc__, "SubClass.getter")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
126
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
127 @unittest.skipIf(sys.flags.optimize >= 2,
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
128 "Docstrings are omitted with -O2 and above")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
129 def test_property_decorator_baseclass_doc(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
130 base = BaseClass()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
131 self.assertEqual(base.__class__.__dict__['spam'].__doc__, "BaseClass.getter")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
132
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
133 def test_property_decorator_doc(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
134 base = PropertyDocBase()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
135 sub = PropertyDocSub()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
136 self.assertEqual(base.__class__.__dict__['spam'].__doc__, "spam spam spam")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
137 self.assertEqual(sub.__class__.__dict__['spam'].__doc__, "spam spam spam")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
138
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
139 @unittest.skipIf(sys.flags.optimize >= 2,
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
140 "Docstrings are omitted with -O2 and above")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
141 def test_property_getter_doc_override(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
142 newgettersub = PropertySubNewGetter()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
143 self.assertEqual(newgettersub.spam, 5)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
144 self.assertEqual(newgettersub.__class__.__dict__['spam'].__doc__, "new docstring")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
145 newgetter = PropertyNewGetter()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
146 self.assertEqual(newgetter.spam, 8)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
147 self.assertEqual(newgetter.__class__.__dict__['spam'].__doc__, "new docstring")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
148
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
149 def test_property___isabstractmethod__descriptor(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
150 for val in (True, False, [], [1], '', '1'):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
151 class C(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
152 def foo(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
153 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
154 foo.__isabstractmethod__ = val
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
155 foo = DynamicClassAttribute(foo)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
156 self.assertIs(C.__dict__['foo'].__isabstractmethod__, bool(val))
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
157
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
158 # check that the DynamicClassAttribute's __isabstractmethod__ descriptor does the
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
159 # right thing when presented with a value that fails truth testing:
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
160 class NotBool(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
161 def __nonzero__(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
162 raise ValueError()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
163 __len__ = __nonzero__
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
164 with self.assertRaises(ValueError):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
165 class C(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
166 def foo(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
167 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
168 foo.__isabstractmethod__ = NotBool()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
169 foo = DynamicClassAttribute(foo)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
170
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
171 def test_abstract_virtual(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
172 self.assertRaises(TypeError, ClassWithAbstractVirtualProperty)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
173 self.assertRaises(TypeError, ClassWithPropertyAbstractVirtual)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
174 class APV(ClassWithPropertyAbstractVirtual):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
175 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
176 self.assertRaises(TypeError, APV)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
177 class AVP(ClassWithAbstractVirtualProperty):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
178 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
179 self.assertRaises(TypeError, AVP)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
180 class Okay1(ClassWithAbstractVirtualProperty):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
181 @DynamicClassAttribute
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
182 def color(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
183 return self._color
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
184 def __init__(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
185 self._color = 'cyan'
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
186 with self.assertRaises(AttributeError):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
187 Okay1.color
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
188 self.assertEqual(Okay1().color, 'cyan')
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
189 class Okay2(ClassWithAbstractVirtualProperty):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
190 @DynamicClassAttribute
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
191 def color(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
192 return self._color
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
193 def __init__(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
194 self._color = 'magenta'
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
195 with self.assertRaises(AttributeError):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
196 Okay2.color
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
197 self.assertEqual(Okay2().color, 'magenta')
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
198
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
199
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
200 # Issue 5890: subclasses of DynamicClassAttribute do not preserve method __doc__ strings
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
201 class PropertySub(DynamicClassAttribute):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
202 """This is a subclass of DynamicClassAttribute"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
203
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
204 class PropertySubSlots(DynamicClassAttribute):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
205 """This is a subclass of DynamicClassAttribute that defines __slots__"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
206 __slots__ = ()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
207
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
208 class PropertySubclassTests(unittest.TestCase):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
209
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
210 @unittest.skipIf(hasattr(PropertySubSlots, '__doc__'),
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
211 "__doc__ is already present, __slots__ will have no effect")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
212 def test_slots_docstring_copy_exception(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
213 try:
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
214 class Foo(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
215 @PropertySubSlots
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
216 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
217 """Trying to copy this docstring will raise an exception"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
218 return 1
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
219 print('\n',spam.__doc__)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
220 except AttributeError:
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
221 pass
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
222 else:
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
223 raise Exception("AttributeError not raised")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
224
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
225 @unittest.skipIf(sys.flags.optimize >= 2,
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
226 "Docstrings are omitted with -O2 and above")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
227 def test_docstring_copy(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
228 class Foo(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
229 @PropertySub
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
230 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
231 """spam wrapped in DynamicClassAttribute subclass"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
232 return 1
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
233 self.assertEqual(
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
234 Foo.__dict__['spam'].__doc__,
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
235 "spam wrapped in DynamicClassAttribute subclass")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
236
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
237 @unittest.skipIf(sys.flags.optimize >= 2,
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
238 "Docstrings are omitted with -O2 and above")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
239 def test_property_setter_copies_getter_docstring(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
240 class Foo(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
241 def __init__(self): self._spam = 1
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
242 @PropertySub
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
243 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
244 """spam wrapped in DynamicClassAttribute subclass"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
245 return self._spam
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
246 @spam.setter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
247 def spam(self, value):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
248 """this docstring is ignored"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
249 self._spam = value
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
250 foo = Foo()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
251 self.assertEqual(foo.spam, 1)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
252 foo.spam = 2
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
253 self.assertEqual(foo.spam, 2)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
254 self.assertEqual(
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
255 Foo.__dict__['spam'].__doc__,
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
256 "spam wrapped in DynamicClassAttribute subclass")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
257 class FooSub(Foo):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
258 spam = Foo.__dict__['spam']
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
259 @spam.setter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
260 def spam(self, value):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
261 """another ignored docstring"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
262 self._spam = 'eggs'
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
263 foosub = FooSub()
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
264 self.assertEqual(foosub.spam, 1)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
265 foosub.spam = 7
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
266 self.assertEqual(foosub.spam, 'eggs')
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
267 self.assertEqual(
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
268 FooSub.__dict__['spam'].__doc__,
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
269 "spam wrapped in DynamicClassAttribute subclass")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
270
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
271 @unittest.skipIf(sys.flags.optimize >= 2,
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
272 "Docstrings are omitted with -O2 and above")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
273 def test_property_new_getter_new_docstring(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
274
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
275 class Foo(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
276 @PropertySub
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
277 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
278 """a docstring"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
279 return 1
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
280 @spam.getter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
281 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
282 """a new docstring"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
283 return 2
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
284 self.assertEqual(Foo.__dict__['spam'].__doc__, "a new docstring")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
285 class FooBase(object):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
286 @PropertySub
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
287 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
288 """a docstring"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
289 return 1
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
290 class Foo2(FooBase):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
291 spam = FooBase.__dict__['spam']
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
292 @spam.getter
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
293 def spam(self):
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
294 """a new docstring"""
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
295 return 2
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
296 self.assertEqual(Foo.__dict__['spam'].__doc__, "a new docstring")
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
297
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
298
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
299
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
300 def test_main():
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
301 run_unittest(PropertyTests, PropertySubclassTests)
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
302
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
303 if __name__ == '__main__':
3752c94368dd Issue19030: commit tests for DynamicClassAttribute
Ethan Furman <ethan@stoneleaf.us>
parents:
diff changeset
304 test_main()