home *** CD-ROM | disk | FTP | other *** search
- # Test case for property
- # more tests are in test_descr
-
- import unittest
- from test.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()
-