symbian-qemu-0.9.1-12/python-2.6.1/Lib/test/test_property.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 # Test case for property
       
     2 # more tests are in test_descr
       
     3 
       
     4 import unittest
       
     5 from test.test_support import run_unittest
       
     6 
       
     7 class PropertyBase(Exception):
       
     8     pass
       
     9 
       
    10 class PropertyGet(PropertyBase):
       
    11     pass
       
    12 
       
    13 class PropertySet(PropertyBase):
       
    14     pass
       
    15 
       
    16 class PropertyDel(PropertyBase):
       
    17     pass
       
    18 
       
    19 class BaseClass(object):
       
    20     def __init__(self):
       
    21         self._spam = 5
       
    22 
       
    23     @property
       
    24     def spam(self):
       
    25         """BaseClass.getter"""
       
    26         return self._spam
       
    27 
       
    28     @spam.setter
       
    29     def spam(self, value):
       
    30         self._spam = value
       
    31 
       
    32     @spam.deleter
       
    33     def spam(self):
       
    34         del self._spam
       
    35 
       
    36 class SubClass(BaseClass):
       
    37 
       
    38     @BaseClass.spam.getter
       
    39     def spam(self):
       
    40         """SubClass.getter"""
       
    41         raise PropertyGet(self._spam)
       
    42 
       
    43     @spam.setter
       
    44     def spam(self, value):
       
    45         raise PropertySet(self._spam)
       
    46 
       
    47     @spam.deleter
       
    48     def spam(self):
       
    49         raise PropertyDel(self._spam)
       
    50 
       
    51 class PropertyDocBase(object):
       
    52     _spam = 1
       
    53     def _get_spam(self):
       
    54         return self._spam
       
    55     spam = property(_get_spam, doc="spam spam spam")
       
    56 
       
    57 class PropertyDocSub(PropertyDocBase):
       
    58     @PropertyDocBase.spam.getter
       
    59     def spam(self):
       
    60         """The decorator does not use this doc string"""
       
    61         return self._spam
       
    62 
       
    63 class PropertyTests(unittest.TestCase):
       
    64     def test_property_decorator_baseclass(self):
       
    65         # see #1620
       
    66         base = BaseClass()
       
    67         self.assertEqual(base.spam, 5)
       
    68         self.assertEqual(base._spam, 5)
       
    69         base.spam = 10
       
    70         self.assertEqual(base.spam, 10)
       
    71         self.assertEqual(base._spam, 10)
       
    72         delattr(base, "spam")
       
    73         self.assert_(not hasattr(base, "spam"))
       
    74         self.assert_(not hasattr(base, "_spam"))
       
    75         base.spam = 20
       
    76         self.assertEqual(base.spam, 20)
       
    77         self.assertEqual(base._spam, 20)
       
    78         self.assertEqual(base.__class__.spam.__doc__, "BaseClass.getter")
       
    79 
       
    80     def test_property_decorator_subclass(self):
       
    81         # see #1620
       
    82         sub = SubClass()
       
    83         self.assertRaises(PropertyGet, getattr, sub, "spam")
       
    84         self.assertRaises(PropertySet, setattr, sub, "spam", None)
       
    85         self.assertRaises(PropertyDel, delattr, sub, "spam")
       
    86         self.assertEqual(sub.__class__.spam.__doc__, "SubClass.getter")
       
    87 
       
    88     def test_property_decorator_doc(self):
       
    89         base = PropertyDocBase()
       
    90         sub = PropertyDocSub()
       
    91         self.assertEqual(base.__class__.spam.__doc__, "spam spam spam")
       
    92         self.assertEqual(sub.__class__.spam.__doc__, "spam spam spam")
       
    93 
       
    94 def test_main():
       
    95     run_unittest(PropertyTests)
       
    96 
       
    97 if __name__ == '__main__':
       
    98     test_main()