[Python-checkins] cpython (2.7): Issue #18189: add test_delegator for Idle Delegator class.

terry.reedy python-checkins at python.org
Mon Jul 1 00:38:19 CEST 2013


http://hg.python.org/cpython/rev/231c122b44b6
changeset:   84399:231c122b44b6
branch:      2.7
parent:      84392:a568a5426a16
user:        Terry Jan Reedy <tjreedy at udel.edu>
date:        Sun Jun 30 18:36:53 2013 -0400
summary:
  Issue #18189: add test_delegator for Idle Delegator class.
Also change private dict used as a set to a set.

files:
  Lib/idlelib/Delegator.py                |   6 +-
  Lib/idlelib/idle_test/test_delegator.py |  37 +++++++++++++
  2 files changed, 40 insertions(+), 3 deletions(-)


diff --git a/Lib/idlelib/Delegator.py b/Lib/idlelib/Delegator.py
--- a/Lib/idlelib/Delegator.py
+++ b/Lib/idlelib/Delegator.py
@@ -4,16 +4,16 @@
 
     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):
-        for key in self.__cache.keys():
+        for key in self.__cache:
             try:
                 delattr(self, key)
             except AttributeError:
diff --git a/Lib/idlelib/idle_test/test_delegator.py b/Lib/idlelib/idle_test/test_delegator.py
new file mode 100644
--- /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)

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list