Mercurial > cpython-lru_cache-weakref
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 |
| 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() |
