diff options
author | Terry Jan Reedy <tjreedy@udel.edu> | 2013-06-30 22:37:51 (GMT) |
---|---|---|
committer | Terry Jan Reedy <tjreedy@udel.edu> | 2013-06-30 22:37:51 (GMT) |
commit | 7afadc856b2f0d960250a0e5924b6b69e6abc417 (patch) | |
tree | fa8ebc52d8d0d6f8d16337b005756ee7a62c2478 /Lib/idlelib | |
parent | 53b1c24f54d43c0815108b77ec931ad37d28aa87 (diff) | |
parent | acd5f81149df7bdda5a755adec50c9efcfe5e0cb (diff) | |
download | cpython-7afadc856b2f0d960250a0e5924b6b69e6abc417.zip cpython-7afadc856b2f0d960250a0e5924b6b69e6abc417.tar.gz cpython-7afadc856b2f0d960250a0e5924b6b69e6abc417.tar.bz2 |
Merge with 3.3
Diffstat (limited to 'Lib/idlelib')
-rw-r--r-- | Lib/idlelib/Delegator.py | 4 | ||||
-rw-r--r-- | Lib/idlelib/idle_test/test_delegator.py | 37 |
2 files changed, 39 insertions, 2 deletions
diff --git a/Lib/idlelib/Delegator.py b/Lib/idlelib/Delegator.py index 362c7cdf..c476516 100644 --- a/Lib/idlelib/Delegator.py +++ b/Lib/idlelib/Delegator.py @@ -4,12 +4,12 @@ class Delegator: def __init__(self, delegate=None): self.delegate = delegate - self.__cache = {} + self.__cache = set() def __getattr__(self, name): attr = getattr(self.delegate, name) # May raise AttributeError setattr(self, name, attr) - self.__cache[name] = attr + self.__cache.add(name) return attr def resetcache(self): diff --git a/Lib/idlelib/idle_test/test_delegator.py b/Lib/idlelib/idle_test/test_delegator.py new file mode 100644 index 0000000..b8ae5ee --- /dev/null +++ b/Lib/idlelib/idle_test/test_delegator.py @@ -0,0 +1,37 @@ +import unittest +from idlelib.Delegator import Delegator + +class DelegatorTest(unittest.TestCase): + + def test_mydel(self): + # test a simple use scenario + + # initialize + mydel = Delegator(int) + self.assertIs(mydel.delegate, int) + self.assertEqual(mydel._Delegator__cache, set()) + + # add an attribute: + self.assertRaises(AttributeError, mydel.__getattr__, 'xyz') + bl = mydel.bit_length + self.assertIs(bl, int.bit_length) + self.assertIs(mydel.__dict__['bit_length'], int.bit_length) + self.assertEqual(mydel._Delegator__cache, {'bit_length'}) + + # add a second attribute + mydel.numerator + self.assertEqual(mydel._Delegator__cache, {'bit_length', 'numerator'}) + + # delete the second (which, however, leaves it in the name cache) + del mydel.numerator + self.assertNotIn('numerator', mydel.__dict__) + self.assertIn('numerator', mydel._Delegator__cache) + + # reset by calling .setdelegate, which calls .resetcache + mydel.setdelegate(float) + self.assertIs(mydel.delegate, float) + self.assertNotIn('bit_length', mydel.__dict__) + self.assertEqual(mydel._Delegator__cache, set()) + +if __name__ == '__main__': + unittest.main(verbosity=2, exit=2) |