class TestValidEmail(unittest.TestCase): """Lightly test email address ("addr-spec") validation against RFC 2822. http://www.faqs.org/rfcs/rfc2822.html """ def setUp(self): # Reset the validator state and errors before every test. self.validator = ValidEmail() c.errors = ErrorSet() def test_valid_emails(self): def test(email): result = self.validator.run(email) self.assertEqual(result, email) self.assertFalse(self.validator.has_errors) self.assertEqual(len(c.errors), 0) test('*****@*****.**') test('*****@*****.**') test('*****@*****.**') def _test_failure(self, email, error=errors.BAD_EMAIL): """Helper for testing bad emails.""" result = self.validator.run(email) self.assertEqual(result, None) self.assertTrue(self.validator.has_errors) self.assertTrue(c.errors.get((error, None))) def test_blank_email(self): self._test_failure('', errors.NO_EMAIL) self.setUp() self._test_failure(' ', errors.NO_EMAIL) def test_no_whitespace(self): self._test_failure('test @example.com') self.setUp() self._test_failure('test@ example.com') self.setUp() self._test_failure('test@example. com') self.setUp() self._test_failure("test@\texample.com") def test_no_hostname(self): self._test_failure('example') self.setUp() self._test_failure('example@') def test_no_username(self): self._test_failure('example.com') self.setUp() self._test_failure('@example.com') def test_two_hostnames(self): self._test_failure('[email protected]@example.com')