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

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


http://hg.python.org/cpython/rev/c7605471e8ae
changeset:   84400:c7605471e8ae
branch:      3.3
parent:      84397:c17fa2cbad43
user:        Terry Jan Reedy <tjreedy at udel.edu>
date:        Sun Jun 30 18:37:05 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                |   4 +-
  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
--- a/Lib/idlelib/Delegator.py
+++ b/Lib/idlelib/Delegator.py
@@ -4,12 +4,12 @@
 
     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
--- /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