1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
# -*- coding: utf-8 -*-
import unittest
from formencode import Invalid
from formencode.validators import Email
class TestEmail(unittest.TestCase):
def setUp(self):
self.validator = Email()
def validate(self, *args):
try:
return self.validator.to_python(*args)
except Invalid as e:
return unicode(e)
def message(self, message_name, username, domain):
email = '@'.join((username, domain))
return self.validator.message(
message_name, email, username=username, domain=domain)
def test_invalid_email_addresses(self):
invalid_usernames = [
# (username, domain, message_name),
('foo\tbar', 'formencode.org', 'badUsername'),
('foo\nbar', 'formencode.org', 'badUsername'),
('test', '', 'noAt'),
('test', 'foobar', 'badDomain'),
('test', 'foobar.5', 'badDomain'),
('test', 'foo..bar.com', 'badDomain'),
('test', '.foo.bar.com', 'badDomain'),
('foo,bar', 'formencode.org', 'badUsername')]
for username, domain, message_name in invalid_usernames:
email = '@'.join(el for el in (username, domain) if el)
error = self.validate(email)
expected = self.message(message_name, username, domain)
self.assertEqual(error, expected)
def test_valid_email_addresses(self):
valid_email_addresses = [
# (email address, expected email address),
(' test@foo.com ', 'test@foo.com'),
('Test@foo.com', 'Test@foo.com'),
('nobody@xn--m7r7ml7t24h.com', 'nobody@xn--m7r7ml7t24h.com'),
('o*reilly@test.com', 'o*reilly@test.com'),
('foo+bar@example.com', 'foo+bar@example.com'),
('foo.bar@example.com', 'foo.bar@example.com'),
('foo!bar@example.com', 'foo!bar@example.com'),
('foo{bar}@example.com', 'foo{bar}@example.com'),
# examples from RFC 3696
# punting on the difficult and extremely uncommon ones
#('"Abc\@def"@example.com', '"Abc\@def"@example.com'),
#('"Fred Bloggs"@example.com', '"Fred Bloggs"@example.com'),
#('"Joe\\Blow"@example.com', '"Joe\\Blow"@example.com'),
#('"Abc@def"@example.com', '"Abc@def"@example.com'),
('customer/department=shipping@example.com',
'customer/department=shipping@example.com'),
('$A12345@example.com', '$A12345@example.com'),
('!def!xyz%abc@example.com', '!def!xyz%abc@example.com'),
('_somename@example.com', '_somename@example.com')]
for email, expected in valid_email_addresses:
self.assertEqual(self.validate(email), expected)
|