test_delegator.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. "Test delegator, coverage 100%."
  2. from idlelib.delegator import Delegator
  3. import unittest
  4. class DelegatorTest(unittest.TestCase):
  5. def test_mydel(self):
  6. # Test a simple use scenario.
  7. # Initialize an int delegator.
  8. mydel = Delegator(int)
  9. self.assertIs(mydel.delegate, int)
  10. self.assertEqual(mydel._Delegator__cache, set())
  11. # Trying to access a non-attribute of int fails.
  12. self.assertRaises(AttributeError, mydel.__getattr__, 'xyz')
  13. # Add real int attribute 'bit_length' by accessing it.
  14. bl = mydel.bit_length
  15. self.assertIs(bl, int.bit_length)
  16. self.assertIs(mydel.__dict__['bit_length'], int.bit_length)
  17. self.assertEqual(mydel._Delegator__cache, {'bit_length'})
  18. # Add attribute 'numerator'.
  19. mydel.numerator
  20. self.assertEqual(mydel._Delegator__cache, {'bit_length', 'numerator'})
  21. # Delete 'numerator'.
  22. del mydel.numerator
  23. self.assertNotIn('numerator', mydel.__dict__)
  24. # The current implementation leaves it in the name cache.
  25. # self.assertIn('numerator', mydel._Delegator__cache)
  26. # However, this is not required and not part of the specification
  27. # Change delegate to float, first resetting the attributes.
  28. mydel.setdelegate(float) # calls resetcache
  29. self.assertNotIn('bit_length', mydel.__dict__)
  30. self.assertEqual(mydel._Delegator__cache, set())
  31. self.assertIs(mydel.delegate, float)
  32. if __name__ == '__main__':
  33. unittest.main(verbosity=2, exit=2)