]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #18189: add test_delegator for Idle Delegator class.
authorTerry Jan Reedy <tjreedy@udel.edu>
Sun, 30 Jun 2013 22:37:05 +0000 (18:37 -0400)
committerTerry Jan Reedy <tjreedy@udel.edu>
Sun, 30 Jun 2013 22:37:05 +0000 (18:37 -0400)
Also change private dict used as a set to a set.

Lib/idlelib/Delegator.py
Lib/idlelib/idle_test/test_delegator.py [new file with mode: 0644]

index 362c7cdfe24b5f03af75066aac01549cfe9bb5f8..c4765163f8062a41c6e08d90667bbf203171ddbe 100644 (file)
@@ -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 (file)
index 0000000..b8ae5ee
--- /dev/null
@@ -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)