def test_sender_TypedField(self): h = EmailHeader() a = "*****@*****.**" # Set using actual object h.sender = Address(a, Address.CAT_EMAIL) # In this case, the type is Address, not EmailAddress, but we don't # care since EmailAddress.istypeof(h.sender) is True self.assertNotEqual(EmailAddress, type(h.sender)) self.assertEqual(Address, type(h.sender)) self.assertTrue(EmailAddress.istypeof(h.sender)) # Set using "aliased" object h.sender = EmailAddress(a) # In this case it is actually an EmailAddress, not just an Address # (but isinstance returns True) self.assertEqual(EmailAddress, type(h.sender)) self.assertNotEqual(Address, type(h.sender)) self.assertTrue(isinstance(h.sender, Address)) self.assertTrue(EmailAddress.istypeof(h.sender)) h.sender = a self.assertTrue(EmailAddress.istypeof(h.sender)) bad_object = 42 self.assertRaises(ValueError, setattr, h, 'sender', bad_object) # Just because it's an Address isn't good enough. It needs to have # the right category. ipv4_object = Address(a, Address.CAT_IPV4) self.assertRaises(ValueError, setattr, h, 'sender', ipv4_object)
def test_istypeof(self): a = "*****@*****.**" addr1 = EmailAddress(a) self.assertTrue(Address.istypeof(addr1)) self.assertTrue(EmailAddress.istypeof(addr1)) # Address with no category set addr2 = Address(a) self.assertTrue(Address.istypeof(addr2)) self.assertFalse(EmailAddress.istypeof(addr2)) # Even though the isinstance check fails, the istypeof check should # succeed addr2.category = Address.CAT_EMAIL self.assertTrue(Address.istypeof(addr2)) self.assertTrue(EmailAddress.istypeof(addr2)) self.assertFalse(isinstance(addr2, EmailAddress)) # Address with category set to something other than CAT_EMAIL addr2.category = Address.CAT_IPV4 self.assertTrue(Address.istypeof(addr2)) self.assertFalse(EmailAddress.istypeof(addr2))