| # Test case for property |
| # more tests are in test_descr |
| |
| import unittest |
| from test.support import run_unittest |
| |
| class PropertyBase(Exception): |
| pass |
| |
| class PropertyGet(PropertyBase): |
| pass |
| |
| class PropertySet(PropertyBase): |
| pass |
| |
| class PropertyDel(PropertyBase): |
| pass |
| |
| class BaseClass(object): |
| def __init__(self): |
| self._spam = 5 |
| |
| @property |
| def spam(self): |
| """BaseClass.getter""" |
| return self._spam |
| |
| @spam.setter |
| def spam(self, value): |
| self._spam = value |
| |
| @spam.deleter |
| def spam(self): |
| del self._spam |
| |
| class SubClass(BaseClass): |
| |
| @BaseClass.spam.getter |
| def spam(self): |
| """SubClass.getter""" |
| raise PropertyGet(self._spam) |
| |
| @spam.setter |
| def spam(self, value): |
| raise PropertySet(self._spam) |
| |
| @spam.deleter |
| def spam(self): |
| raise PropertyDel(self._spam) |
| |
| class PropertyDocBase(object): |
| _spam = 1 |
| def _get_spam(self): |
| return self._spam |
| spam = property(_get_spam, doc="spam spam spam") |
| |
| class PropertyDocSub(PropertyDocBase): |
| @PropertyDocBase.spam.getter |
| def spam(self): |
| """The decorator does not use this doc string""" |
| return self._spam |
| |
| class PropertyTests(unittest.TestCase): |
| def test_property_decorator_baseclass(self): |
| # see #1620 |
| base = BaseClass() |
| self.assertEqual(base.spam, 5) |
| self.assertEqual(base._spam, 5) |
| base.spam = 10 |
| self.assertEqual(base.spam, 10) |
| self.assertEqual(base._spam, 10) |
| delattr(base, "spam") |
| self.assert_(not hasattr(base, "spam")) |
| self.assert_(not hasattr(base, "_spam")) |
| base.spam = 20 |
| self.assertEqual(base.spam, 20) |
| self.assertEqual(base._spam, 20) |
| self.assertEqual(base.__class__.spam.__doc__, "BaseClass.getter") |
| |
| def test_property_decorator_subclass(self): |
| # see #1620 |
| sub = SubClass() |
| self.assertRaises(PropertyGet, getattr, sub, "spam") |
| self.assertRaises(PropertySet, setattr, sub, "spam", None) |
| self.assertRaises(PropertyDel, delattr, sub, "spam") |
| self.assertEqual(sub.__class__.spam.__doc__, "SubClass.getter") |
| |
| def test_property_decorator_doc(self): |
| base = PropertyDocBase() |
| sub = PropertyDocSub() |
| self.assertEqual(base.__class__.spam.__doc__, "spam spam spam") |
| self.assertEqual(sub.__class__.spam.__doc__, "spam spam spam") |
| |
| def test_main(): |
| run_unittest(PropertyTests) |
| |
| if __name__ == '__main__': |
| test_main() |