Esempio n. 1
0
def test_address_compare():
    a = EmailAddress("*****@*****.**")
    b = EmailAddress("*****@*****.**")
    also_a = EmailAddress("*****@*****.**")

    ok_(a == also_a)
    #eq_(False, a != "I am also A <*****@*****.**>")
    ok_(a != 'crap')
    ok_(a != None)
    ok_(a != b)

    u = UrlAddress("http://hello.com")
    ok_(u == "http://hello.com")

    # make sure it works for sets:
    s = set()
    s.add(a)
    s.add(also_a)
    eq_(1, len(s))
    s.add(u)
    s.add(u)
    eq_(2, len(s))

    # test string comparison
    ok_(a == a.address)
    ok_(not (a != a.address))

    ok_(b != a.address)
    ok_(not (b == a.address))
Esempio n. 2
0
def test_address_full_spec_smart_quote_display_name():
    eq_(EmailAddress('foo', '*****@*****.**').full_spec(), 'foo <*****@*****.**>')
    eq_(
        EmailAddress('()<>[]:;@,.', '*****@*****.**').full_spec(),
        '"()<>[]:;@,." <*****@*****.**>')
    eq_(EmailAddress('"', '*****@*****.**').full_spec(), '"\\"" <*****@*****.**>')
    eq_(EmailAddress('\\', '*****@*****.**').full_spec(), '"\\\\" <*****@*****.**>')
def test_angle_addr():
    "Grammar: angle-addr -> [ whitespace ] < addr-spec > [ whitespace ]"

    # pass angle-addr
    run_mailbox_test('<*****@*****.**>', '*****@*****.**')
    run_full_mailbox_test('Steve Jobs <*****@*****.**>',
                          EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('Steve Jobs < *****@*****.**>',
                          EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('Steve Jobs <*****@*****.** >',
                          EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('Steve Jobs < *****@*****.** >',
                          EmailAddress('Steve Jobs', '*****@*****.**'))

    # fail angle-addr
    run_full_mailbox_test('<*****@*****.**', None)
    run_full_mailbox_test('Steve Jobs [email protected]>', None)
    run_full_mailbox_test('*****@*****.**>', None)
    run_full_mailbox_test('Steve Jobs <*****@*****.**', None)
    run_full_mailbox_test('Steve Jobs <@[email protected]>', None)
    run_full_mailbox_test('<Steve Jobs <*****@*****.**>>', None)
    run_full_mailbox_test('<Steve Jobs <*****@*****.**>', None)
    run_full_mailbox_test('Steve Jobs <*****@*****.**>>', None)
    run_full_mailbox_test('<Steve Jobs> <*****@*****.**>', None)
    run_full_mailbox_test('<Steve Jobs <*****@*****.**>', None)
    run_full_mailbox_test('Steve Jobs> <*****@*****.**>', None)
    run_full_mailbox_test('Steve Jobs <<*****@*****.**>>', None)
    run_full_mailbox_test('Steve Jobs <<*****@*****.**>', None)
Esempio n. 4
0
def test_local_part():
    "Grammar: local-part -> dot-atom | quoted-string"

    # test length limits
    run_mailbox_test(''.join(['a'*128, '@b']), ''.join(['a'*128, '@b']))
    run_mailbox_test(''.join(['a'*1025, '@b']), None)

    # because qtext and quoted-pair are longer than 64 bytes (limit on local-part)
    # we use a sample in testing, every other for qtext and every fifth for quoted-pair
    sample_qtext = FULL_QTEXT[::2]
    sample_qpair = FULL_QUOTED_PAIR[::5]
    sample_qpair_without_slashes = sample_qpair[1::2]

    # pass dot-atom
    run_mailbox_test('*****@*****.**', '*****@*****.**')
    run_mailbox_test('*****@*****.**', '*****@*****.**')
    run_mailbox_test('*****@*****.**', '*****@*****.**')
    run_mailbox_test('!#$%&\'*+-/=?^_`{|}[email protected]', '!#$%&\'*+-/=?^_`{|}[email protected]')
    run_mailbox_test('AZaz09!#$%&\'*+-/=?^_`{|}[email protected]', 'AZaz09!#$%&\'*+-/=?^_`{|}[email protected]')
    run_mailbox_test('*****@*****.**', '*****@*****.**')
    run_mailbox_test(' [email protected]', '*****@*****.**')
    run_mailbox_test('  [email protected]', '*****@*****.**')

    # fail dot-atom
    run_mailbox_test(', [email protected]', None)
    run_mailbox_test(';;[email protected]', None)
    run_mailbox_test('"*****@*****.**', None)
    run_mailbox_test('steve"@apple.com', None)
    run_mailbox_test('*****@*****.**', None)

    # pass qtext
    for cnk in chunks(FULL_QTEXT, len(FULL_QTEXT) // 2):
        run_mailbox_test('"{0}"@b'.format(cnk), '"{0}"@b'.format(cnk))
    run_mailbox_test('" {0}"@b'.format(sample_qtext), '" {0}"@b'.format(sample_qtext))
    run_mailbox_test('"{0} "@b'.format(sample_qtext), '"{0} "@b'.format(sample_qtext))
    run_mailbox_test('" {0} "@b'.format(sample_qtext), '" {0} "@b'.format(sample_qtext))
    run_full_mailbox_test('"{0}" <"{0}"@b>'.format(sample_qtext),
        EmailAddress(sample_qtext, '"{0}"@b'.format(sample_qtext)))

    # fail qtext
    run_mailbox_test('"{0}@b'.format(sample_qtext), None)
    run_mailbox_test('{0}"@b'.format(sample_qtext), None)
    run_mailbox_test('{0}@b'.format(sample_qtext), None)
    run_mailbox_test('"{0}@b"'.format(sample_qtext), None)

    # pass quoted-pair
    for cnk in chunks(FULL_QUOTED_PAIR, len(FULL_QUOTED_PAIR) // 3):
        run_mailbox_test('"{0}"@b'.format(cnk), '"{0}"@b'.format(cnk))
    run_mailbox_test('" {0}"@b'.format(sample_qpair), '" {0}"@b'.format(sample_qpair))
    run_mailbox_test('"{0} "@b'.format(sample_qpair), '"{0} "@b'.format(sample_qpair))
    run_mailbox_test('" {0} "@b'.format(sample_qpair), '" {0} "@b'.format(sample_qpair))
    run_full_mailbox_test('"{0}" <"{0}"@b>'.format(sample_qpair),
        EmailAddress(sample_qpair_without_slashes, '"{0}"@b'.format(sample_qpair)))

    # fail quoted-pair
    run_mailbox_test('"{0}@b'.format(sample_qpair), None)
    run_mailbox_test('{0}"@b'.format(sample_qpair), None)
    run_mailbox_test('{0}@b'.format(sample_qpair), None)
    run_mailbox_test('"{0}@b"'.format(sample_qpair), None)
Esempio n. 5
0
def test_mailbox():
    "Grammar: mailbox -> name-addr | addr-spec"

    # sanity
    run_full_mailbox_test('Steve Jobs <*****@*****.**>', EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('"Steve Jobs" <*****@*****.**>', EmailAddress('Steve Jobs', '*****@*****.**'))

    run_mailbox_test('*****@*****.**', '*****@*****.**')
Esempio n. 6
0
def test_display_name__to_full_spec():
    eq_('"foo (\\"bar\\") blah" <*****@*****.**>',
        EmailAddress('foo ("bar") blah', '*****@*****.**').full_spec())
    eq_('"foo. bar" <*****@*****.**>',
        EmailAddress('foo. bar', '*****@*****.**').full_spec())
    eq_('"\\"\\"" <*****@*****.**>',
        EmailAddress('""', '*****@*****.**').full_spec()),
    eq_('=?utf-8?b?0J/RgNC40LLQtdGCINCc0LXQtNCy0LXQtA==?= <*****@*****.**>',
        EmailAddress(u'Привет Медвед', '*****@*****.**').full_spec())
Esempio n. 7
0
def test_display_name__update():
    # Given
    a = EmailAddress('foo bar', '*****@*****.**')
    eq_('foo bar <*****@*****.**>', a.full_spec())

    # When
    a.display_name = u'Привет Медвед'

    # Then
    eq_('=?utf-8?b?0J/RgNC40LLQtdGCINCc0LXQtNCy0LXQtA==?= <*****@*****.**>',
        a.full_spec())
Esempio n. 8
0
def test_comments():
    run_full_mailbox_test('(comment) Steve Jobs <*****@*****.**>', EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('Steve Jobs (comment) <*****@*****.**>', EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('Steve Jobs <(comment) [email protected]>', EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('Steve Jobs <[email protected] (comment)>', EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('Steve Jobs <*****@*****.**> (comment)', EmailAddress('Steve Jobs', '*****@*****.**'))

    run_full_mailbox_test('(comment)"Steve Jobs"<*****@*****.**>', EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('"Steve Jobs"(comment)<*****@*****.**>', EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('"Steve Jobs"<(comment)[email protected]>', EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('"Steve Jobs"<[email protected](comment)>', EmailAddress('Steve Jobs', '*****@*****.**'))
    run_full_mailbox_test('"Steve Jobs"<*****@*****.**>(comment)', EmailAddress('Steve Jobs', '*****@*****.**'))
def test_name_addr():
    "Grammar: name-addr -> [ display-name ] angle-addr"

    # sanity
    run_full_mailbox_test('Linus Torvalds [email protected]',
                          EmailAddress('Linus Torvalds', '*****@*****.**'))
    run_full_mailbox_test('Linus Torvalds <*****@*****.**>',
                          EmailAddress('Linus Torvalds', '*****@*****.**'))
    run_mailbox_test('Linus Torvalds', None)
    run_mailbox_test('Linus Torvalds <>', None)
    run_mailbox_test('*****@*****.**', '*****@*****.**')
    run_mailbox_test('<*****@*****.**>', '*****@*****.**')
    try:
        run_mailbox_test(' ', None)
    except ParserException:
        pass
Esempio n. 10
0
def test_addresslist_address_obj_list_input():
    al = [EmailAddress(u'Aurélien Berger  <*****@*****.**>'),
          UrlAddress('https://www.example.com')]
    lst = parse_list(al)
    eq_(2, len(lst))
    eq_('=?utf-8?q?Aur=C3=A9lien_Berger?= <*****@*****.**>',
        lst[0].full_spec())
    eq_('https://www.example.com', lst[1].full_spec())
Esempio n. 11
0
 def test_misspelled_email(self, mock_validate, mock_suggest):
     """Should correct a misspelled domain and pass it back."""
     email2 = '*****@*****.**'
     mock_suggest.return_value = email2
     mock_validate.return_value = EmailAddress('', email2)
     result, is_suggestion = get_valid_email(self.email)
     ok_(is_suggestion)
     # should return a string, not the EmailAddress instance
     ok_(isinstance(result, basestring))
     eq_(result, email2)
Esempio n. 12
0
def test_address_unicode_smart_quote_display_name():
    eq_(EmailAddress('foo',         '*****@*****.**').to_unicode(), u'foo <*****@*****.**>')
    eq_(EmailAddress('()<>[]:;@,.', '*****@*****.**').to_unicode(), u'"()<>[]:;@,." <*****@*****.**>')
    eq_(EmailAddress('"',           '*****@*****.**').to_unicode(), u'"\\"" <*****@*****.**>')
    eq_(EmailAddress('\\',          '*****@*****.**').to_unicode(), u'"\\\\" <*****@*****.**>')
    eq_(EmailAddress('Федот',       '*****@*****.**').to_unicode(), u'Федот <*****@*****.**>')
    eq_(EmailAddress('<Федот>',     '*****@*****.**').to_unicode(), u'"<Федот>" <*****@*****.**>')
Esempio n. 13
0
def test_requires_non_ascii():
    eq_(EmailAddress(None, '*****@*****.**').requires_non_ascii(), False)
    eq_(EmailAddress(None, 'foo@экзампл.рус').requires_non_ascii(), False)
    eq_(EmailAddress(None, '*****@*****.**').requires_non_ascii(), False)
    eq_(EmailAddress(None, 'foo@日本語。JP').requires_non_ascii(), True)
    eq_(EmailAddress(None, 'аджай@bar.com').requires_non_ascii(), True)
    eq_(EmailAddress(None, 'аджай@экзампл.рус').requires_non_ascii(), True)
def test_display_name():
    "Grammar: display-name -> word { [ whitespace ] word }"

    # pass atom display-name rfc
    run_full_mailbox_test('ABCDEFGHIJKLMNOPQRSTUVWXYZ <a@b>',
                          EmailAddress('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'a@b'))
    run_full_mailbox_test('abcdefghijklmnopqrstuvwzyz <a@b>',
                          EmailAddress('abcdefghijklmnopqrstuvwzyz', 'a@b'))
    run_full_mailbox_test('0123456789 <a@b>',
                          EmailAddress('0123456789', 'a@b'))
    run_full_mailbox_test('!#$%&\'*+-/=?^_`{|}~ <a@b>',
                          EmailAddress('!#$%&\'*+-/=?^_`{|}~', 'a@b'))
    run_full_mailbox_test('Bill <*****@*****.**>',
                          EmailAddress('Bill', '*****@*****.**'))
    run_full_mailbox_test('Bill Gates <*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill  Gates <*****@*****.**>',
                          EmailAddress('Bill  Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill Gates <*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test('Bill Gates<*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill Gates<*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill<*****@*****.**>',
                          EmailAddress('Bill', '*****@*****.**'))

    # pass atom display-name lax
    run_full_mailbox_test('ABCDEFGHIJKLMNOPQRSTUVWXYZ a@b',
                          EmailAddress('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'a@b'))
    run_full_mailbox_test('abcdefghijklmnopqrstuvwzyz a@b',
                          EmailAddress('abcdefghijklmnopqrstuvwzyz', 'a@b'))
    run_full_mailbox_test('0123456789 a@b', EmailAddress('0123456789', 'a@b'))
    run_full_mailbox_test('!#$%&\'*+-/=?^_`{|}~ a@b',
                          EmailAddress('!#$%&\'*+-/=?^_`{|}~', 'a@b'))
    run_full_mailbox_test('Bill [email protected]',
                          EmailAddress('Bill', '*****@*****.**'))
    run_full_mailbox_test('Bill Gates [email protected]',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill  Gates [email protected]',
                          EmailAddress('Bill  Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill Gates [email protected]',
                          EmailAddress('Bill Gates', '*****@*****.**'))

    # fail atom display-name rfc
    run_full_mailbox_test('< <*****@*****.**>', None)
    run_full_mailbox_test('< bill <*****@*****.**>', None)
    run_full_mailbox_test(' < bill <*****@*****.**>', None)

    # fail atom display-name lax
    run_full_mailbox_test('< *****@*****.**', None)
    run_full_mailbox_test('< bill [email protected]', None)
    run_full_mailbox_test(' < bill @microsoft.com', None)

    # pass display-name quoted-string rfc
    run_full_mailbox_test('"{0}" <a@b>'.format(FULL_QTEXT),
                          EmailAddress(FULL_QTEXT, 'a@b'))
    run_full_mailbox_test('"{0}" <a@b>'.format(FULL_QUOTED_PAIR),
                          EmailAddress(''.join(VALID_QUOTED_PAIR), 'a@b'))
    run_full_mailbox_test('"<a@b>" <a@b>', EmailAddress('<a@b>', 'a@b'))
    run_full_mailbox_test('"Bill" <*****@*****.**>',
                          EmailAddress('Bill', '*****@*****.**'))
    run_full_mailbox_test('"Bill Gates" <*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test('" Bill Gates" <*****@*****.**>',
                          EmailAddress(' Bill Gates', '*****@*****.**'))
    run_full_mailbox_test('"Bill Gates " <*****@*****.**>',
                          EmailAddress('Bill Gates ', '*****@*****.**'))
    run_full_mailbox_test('" Bill Gates " <*****@*****.**>',
                          EmailAddress(' Bill Gates ', '*****@*****.**'))
    run_full_mailbox_test(' " Bill Gates "<*****@*****.**>',
                          EmailAddress(' Bill Gates ', '*****@*****.**'))

    # fail display-name quoted-string rfc
    run_mailbox_test('"{0} <a@b>"'.format(FULL_QUOTED_PAIR), None)
    run_mailbox_test('"{0} <a@b>'.format(FULL_QTEXT), None)
    run_mailbox_test('{0}" <a@b>'.format(FULL_QUOTED_PAIR), None)
    run_mailbox_test('{0} <a@b>'.format(FULL_QUOTED_PAIR), None)
    run_mailbox_test(u'{0} <a@b>'.format(''.join(CONTROL_CHARS)), None)
    run_mailbox_test(u'"{0}" <a@b>'.format(''.join(CONTROL_CHARS)), None)
    for cc in CONTROL_CHARS:
        run_mailbox_test(u'"{0}" <a@b>'.format(cc), None)
        run_mailbox_test(u'{0} <a@b>'.format(cc), None)

    # pass display-name quoted-string lax
    run_full_mailbox_test('"{0}" a@b'.format(FULL_QTEXT),
                          EmailAddress(FULL_QTEXT, 'a@b'))
    run_full_mailbox_test('"{0}" a@b'.format(FULL_QUOTED_PAIR),
                          EmailAddress(''.join(VALID_QUOTED_PAIR), 'a@b'))
    run_full_mailbox_test('"a@b" a@b', EmailAddress('a@b', 'a@b'))
    run_full_mailbox_test('"Bill" [email protected]',
                          EmailAddress('Bill', '*****@*****.**'))
    run_full_mailbox_test('"Bill Gates" [email protected]',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test('" Bill Gates" [email protected]',
                          EmailAddress(' Bill Gates', '*****@*****.**'))
    run_full_mailbox_test('"Bill Gates " [email protected]',
                          EmailAddress('Bill Gates ', '*****@*****.**'))
    run_full_mailbox_test('" Bill Gates " [email protected]',
                          EmailAddress(' Bill Gates ', '*****@*****.**'))

    # fail display-name quoted-string lax
    run_mailbox_test('"Bill Gates"*****@*****.**', None)
    run_mailbox_test('"{0} a@b"'.format(FULL_QUOTED_PAIR), None)
    run_mailbox_test('"{0} a@b'.format(FULL_QTEXT), None)
    run_mailbox_test('{0}" a@b'.format(FULL_QUOTED_PAIR), None)
    run_mailbox_test('{0} a@b'.format(FULL_QUOTED_PAIR), None)
    run_mailbox_test(u'{0} a@b'.format(''.join(CONTROL_CHARS)), None)
    run_mailbox_test(u'"{0}" a@b'.format(''.join(CONTROL_CHARS)), None)
    for cc in CONTROL_CHARS:
        run_mailbox_test(u'{0} a@b'.format(cc), None)
        run_mailbox_test(u'"{0}" a@b'.format(cc), None)

    # pass unicode display-name sanity
    run_full_mailbox_test(u'Bill <*****@*****.**>',
                          EmailAddress(u'Bill', '*****@*****.**'))
    run_full_mailbox_test(u'ϐill <*****@*****.**>',
                          EmailAddress(u'ϐill', '*****@*****.**'))
    run_full_mailbox_test(u'ϐΙλλ <*****@*****.**>',
                          EmailAddress(u'ϐΙλλ', '*****@*****.**'))
    run_full_mailbox_test(u'ϐΙλλ Γαθεσ <*****@*****.**>',
                          EmailAddress(u'ϐΙλλ Γαθεσ', '*****@*****.**'))
    run_full_mailbox_test(u'BΙλλ Γαθεσ <*****@*****.**>',
                          EmailAddress(u'BΙλλ Γαθεσ', '*****@*****.**'))
    run_full_mailbox_test(u'Bill Γαθεσ <*****@*****.**>',
                          EmailAddress(u'Bill Γαθεσ', '*****@*****.**'))

    # fail unicode display-name, sanity
    run_mailbox_test('ϐΙλλ Γαθεσ <*****@*****.**>', None)
Esempio n. 15
0
def test_display_name():
    "Grammar: display-name -> word { [ whitespace ] word }"

    # pass atom display-name rfc
    run_full_mailbox_test('ABCDEFGHIJKLMNOPQRSTUVWXYZ <a@b>',
                          EmailAddress('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'a@b'))
    run_full_mailbox_test('abcdefghijklmnopqrstuvwzyz <a@b>',
                          EmailAddress('abcdefghijklmnopqrstuvwzyz', 'a@b'))
    run_full_mailbox_test('0123456789 <a@b>',
                          EmailAddress('0123456789', 'a@b'))
    run_full_mailbox_test('!#$%&\'*+-/=?^_`{|}~ <a@b>',
                          EmailAddress('!#$%&\'*+-/=?^_`{|}~', 'a@b'))
    run_full_mailbox_test('Bill <*****@*****.**>',
                          EmailAddress('Bill', '*****@*****.**'))
    run_full_mailbox_test('Bill Gates <*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill  Gates <*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill Gates <*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test('Bill Gates<*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill Gates<*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test(' Bill<*****@*****.**>',
                          EmailAddress('Bill', '*****@*****.**'))

    # fail atom display-name rfc
    run_full_mailbox_test('< <*****@*****.**>', None)
    run_full_mailbox_test('< bill <*****@*****.**>', None)
    run_full_mailbox_test(' < bill <*****@*****.**>', None)

    # pass display-name quoted-string rfc
    run_full_mailbox_test('"{0}" <a@b>'.format(FULL_QTEXT),
                          EmailAddress(FULL_QTEXT, 'a@b'))
    run_full_mailbox_test('"{0}" <a@b>'.format(FULL_QUOTED_PAIR),
                          EmailAddress(''.join(VALID_QUOTED_PAIR), 'a@b'))
    run_full_mailbox_test('"<a@b>" <a@b>', EmailAddress('<a@b>', 'a@b'))
    run_full_mailbox_test('"Bill" <*****@*****.**>',
                          EmailAddress('Bill', '*****@*****.**'))
    run_full_mailbox_test('"Bill Gates" <*****@*****.**>',
                          EmailAddress('Bill Gates', '*****@*****.**'))
    run_full_mailbox_test('" Bill Gates" <*****@*****.**>',
                          EmailAddress(' Bill Gates', '*****@*****.**'))
    run_full_mailbox_test('"Bill Gates " <*****@*****.**>',
                          EmailAddress('Bill Gates ', '*****@*****.**'))
    run_full_mailbox_test('" Bill Gates " <*****@*****.**>',
                          EmailAddress(' Bill Gates ', '*****@*****.**'))
    run_full_mailbox_test(' " Bill Gates "<*****@*****.**>',
                          EmailAddress(' Bill Gates ', '*****@*****.**'))

    # fail display-name quoted-string rfc
    run_mailbox_test('"{0} <a@b>"'.format(FULL_QUOTED_PAIR), None)
    run_mailbox_test('"{0} <a@b>'.format(FULL_QTEXT), None)
    run_mailbox_test('{0}" <a@b>'.format(FULL_QUOTED_PAIR), None)
    run_mailbox_test('{0} <a@b>'.format(FULL_QUOTED_PAIR), None)
    run_mailbox_test(u'{0} <a@b>'.format(''.join(CONTROL_CHARS)), None)
    run_mailbox_test(u'"{0}" <a@b>'.format(''.join(CONTROL_CHARS)), None)
    for cc in CONTROL_CHARS:

        # FIXME: In Python 3 subgroup of separator symbols is treated as
        # FIXME: allowed. We need to figure out why.
        if six.PY3 and ord(cc) in [0x1c, 0x1d, 0x1e, 0x1f]:
            continue

        run_mailbox_test(u'"{0}" <a@b>'.format(cc), None)
        run_mailbox_test(u'{0} <a@b>'.format(cc), None)

    # pass unicode display-name sanity
    run_full_mailbox_test(u'Bill <*****@*****.**>',
                          EmailAddress(u'Bill', '*****@*****.**'))
    run_full_mailbox_test(u'ϐill <*****@*****.**>',
                          EmailAddress(u'ϐill', '*****@*****.**'))
    run_full_mailbox_test(u'ϐΙλλ <*****@*****.**>',
                          EmailAddress(u'ϐΙλλ', '*****@*****.**'))
    run_full_mailbox_test(u'ϐΙλλ Γαθεσ <*****@*****.**>',
                          EmailAddress(u'ϐΙλλ Γαθεσ', '*****@*****.**'))
    run_full_mailbox_test(u'BΙλλ Γαθεσ <*****@*****.**>',
                          EmailAddress(u'BΙλλ Γαθεσ', '*****@*****.**'))
    run_full_mailbox_test(u'Bill Γαθεσ <*****@*****.**>',
                          EmailAddress(u'Bill Γαθεσ', '*****@*****.**'))

    # period in display name
    run_full_mailbox_test(u'Bill. Gates. <*****@*****.**>',
                          EmailAddress(u'Bill. Gates.', '*****@*****.**'))

    # name addr without display name
    run_full_mailbox_test(u'<*****@*****.**>',
                          EmailAddress(None, '*****@*****.**'))
def test_unicode_special_chars():
    # unicode, special chars, no quotes
    run_full_mailbox_test(u'foo © bar <*****@*****.**>',
                          EmailAddress(u'foo © bar', '*****@*****.**'),
                          '=?utf-8?q?foo_=C2=A9_bar?= <*****@*****.**>')
    run_full_mailbox_test(u'foo œ bar <*****@*****.**>',
                          EmailAddress(u'foo œ bar', '*****@*****.**'),
                          '=?utf-8?q?foo_=C5=93_bar?= <*****@*****.**>')
    run_full_mailbox_test(u'foo – bar <*****@*****.**>',
                          EmailAddress(u'foo – bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKAkyBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo Ǽ bar <*****@*****.**>',
                          EmailAddress(u'foo Ǽ bar', '*****@*****.**'),
                          '=?utf-8?q?foo_=C7=BC_bar?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ₤ bar <*****@*****.**>',
                          EmailAddress(u'foo ₤ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKCpCBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo Ω bar <*****@*****.**>',
                          EmailAddress(u'foo Ω bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKEpiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ↵ bar <*****@*****.**>',
                          EmailAddress(u'foo ↵ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKGtSBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ∑ bar <*****@*****.**>',
                          EmailAddress(u'foo ∑ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKIkSBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ⏲ bar <*****@*****.**>',
                          EmailAddress(u'foo ⏲ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKPsiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo Ⓐ bar <*****@*****.**>',
                          EmailAddress(u'foo Ⓐ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKStiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ▒ bar <*****@*****.**>',
                          EmailAddress(u'foo ▒ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKWkiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ▲ bar <*****@*****.**>',
                          EmailAddress(u'foo ▲ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKWsiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ⚔ bar <*****@*****.**>',
                          EmailAddress(u'foo ⚔ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKalCBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ✎ bar <*****@*****.**>',
                          EmailAddress(u'foo ✎ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKcjiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ⠂ bar <*****@*****.**>',
                          EmailAddress(u'foo ⠂ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKggiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo ⬀ bar <*****@*****.**>',
                          EmailAddress(u'foo ⬀ bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKsgCBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo 💩 bar <*****@*****.**>',
                          EmailAddress(u'foo 💩 bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIPCfkqkgYmFy?= <*****@*****.**>')

    # unicode, special chars, quotes
    # Note that quotes are removed from the parsed display name
    run_full_mailbox_test(u'"foo © bar" <*****@*****.**>',
                          EmailAddress(u'foo © bar', u'*****@*****.**'),
                          '=?utf-8?q?foo_=C2=A9_bar?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo œ bar" <*****@*****.**>',
                          EmailAddress(u'foo œ bar', u'*****@*****.**'),
                          '=?utf-8?q?foo_=C5=93_bar?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo – bar" <*****@*****.**>',
                          EmailAddress(u'foo – bar', '*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKAkyBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo Ǽ bar" <*****@*****.**>',
                          EmailAddress(u'foo Ǽ bar', u'*****@*****.**'),
                          '=?utf-8?q?foo_=C7=BC_bar?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo Ω bar" <*****@*****.**>',
                          EmailAddress(u'foo Ω bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKEpiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo ↵ bar" <*****@*****.**>',
                          EmailAddress(u'foo ↵ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKGtSBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo ∑ bar" <*****@*****.**>',
                          EmailAddress(u'foo ∑ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKIkSBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo ⏲ bar" <*****@*****.**>',
                          EmailAddress(u'foo ⏲ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKPsiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo Ⓐ bar" <*****@*****.**>',
                          EmailAddress(u'foo Ⓐ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKStiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo ▒ bar" <*****@*****.**>',
                          EmailAddress(u'foo ▒ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKWkiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo ▲ bar" <*****@*****.**>',
                          EmailAddress(u'foo ▲ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKWsiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo ⚔ bar" <*****@*****.**>',
                          EmailAddress(u'foo ⚔ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKalCBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo ✎ bar" <*****@*****.**>',
                          EmailAddress(u'foo ✎ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKcjiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo ⠂ bar" <*****@*****.**>',
                          EmailAddress(u'foo ⠂ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKggiBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo ⬀ bar" <*****@*****.**>',
                          EmailAddress(u'foo ⬀ bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIOKsgCBiYXI=?= <*****@*****.**>')
    run_full_mailbox_test(u'"foo 💩 bar" <*****@*****.**>',
                          EmailAddress(u'foo 💩 bar', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vIPCfkqkgYmFy?= <*****@*****.**>')

    # unicode, language specific punctuation, just test with !
    run_full_mailbox_test(u'fooǃ [email protected]',
                          EmailAddress(u'fooǃ', u'*****@*****.**'),
                          '=?utf-8?b?Zm9vx4M=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo‼ [email protected]',
                          EmailAddress(u'foo‼', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v4oC8?= <*****@*****.**>')
    run_full_mailbox_test(u'foo⁈ [email protected]',
                          EmailAddress(u'foo⁈', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v4oGI?= <*****@*****.**>')
    run_full_mailbox_test(u'foo⁉ [email protected]',
                          EmailAddress(u'foo⁉', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v4oGJ?= <*****@*****.**>')
    run_full_mailbox_test(u'foo❕ [email protected]',
                          EmailAddress(u'foo❕', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v4p2V?= <*****@*****.**>')
    run_full_mailbox_test(u'foo❗ [email protected]',
                          EmailAddress(u'foo❗', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v4p2X?= <*****@*****.**>')
    run_full_mailbox_test(u'foo❢ [email protected]',
                          EmailAddress(u'foo❢', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v4p2i?= <*****@*****.**>')
    run_full_mailbox_test(u'foo❣ [email protected]',
                          EmailAddress(u'foo❣', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v4p2j?= <*****@*****.**>')
    run_full_mailbox_test(u'fooꜝ [email protected]',
                          EmailAddress(u'fooꜝ', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v6pyd?= <*****@*****.**>')
    run_full_mailbox_test(u'fooꜞ [email protected]',
                          EmailAddress(u'fooꜞ', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v6pye?= <*****@*****.**>')
    run_full_mailbox_test(u'fooꜟ [email protected]',
                          EmailAddress(u'fooꜟ', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v6pyf?= <*****@*****.**>')
    run_full_mailbox_test(u'foo﹗ [email protected]',
                          EmailAddress(u'foo﹗', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v77mX?= <*****@*****.**>')
    run_full_mailbox_test(u'foo! [email protected]',
                          EmailAddress(u'foo!', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v77yB?= <*****@*****.**>')
    run_full_mailbox_test(u'foo՜ [email protected]',
                          EmailAddress(u'foo՜', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v1Zw=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo߹ [email protected]',
                          EmailAddress(u'foo߹', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v37k=?= <*****@*****.**>')
    run_full_mailbox_test(u'foo႟ [email protected]',
                          EmailAddress(u'foo႟', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v4YKf?= <*****@*****.**>')
    run_full_mailbox_test(u'foo᥄ [email protected]',
                          EmailAddress(u'foo᥄', u'*****@*****.**'),
                          '=?utf-8?b?Zm9v4aWE?= <*****@*****.**>')

    run_full_mailbox_test(u'foo ()[]@\\ bar <*****@*****.**>',
                          EmailAddress(u'foo ()[]@\\ bar', u'*****@*****.**'),
                          '"foo ()[]@\\\\ bar" <*****@*****.**>')
def test_unicode_display_name():
    # unicode, no quotes, display-name rfc
    run_full_mailbox_test(u'ö <{0}>'.format(u'*****@*****.**'),
                          EmailAddress(u'ö', '*****@*****.**'),
                          '=?utf-8?b?w7Y=?= <*****@*****.**>')
    run_full_mailbox_test(u'Föö <{0}>'.format(u'*****@*****.**'),
                          EmailAddress(u'Föö', '*****@*****.**'),
                          '=?utf-8?b?RsO2w7Y=?= <*****@*****.**>')
    run_full_mailbox_test(u'Foo ö <{0}>'.format(u'*****@*****.**'),
                          EmailAddress(u'Foo ö', '*****@*****.**'),
                          '=?utf-8?b?Rm9vIMO2?= <*****@*****.**>')
    run_full_mailbox_test(u'Foo Föö <{0}>'.format(u'*****@*****.**'),
                          EmailAddress(u'Foo Föö', '*****@*****.**'),
                          '=?utf-8?b?Rm9vIEbDtsO2?= <*****@*****.**>')
    run_full_mailbox_test(
        u'Foo Föö Foo <{0}>'.format(u'*****@*****.**'),
        EmailAddress(u'Foo Föö Foo', '*****@*****.**'),
        '=?utf-8?b?Rm9vIEbDtsO2IEZvbw==?= <*****@*****.**>')
    run_full_mailbox_test(
        u'Foo Föö Foo Föö <{0}>'.format(u'*****@*****.**'),
        EmailAddress(u'Foo Föö Foo Föö', '*****@*****.**'),
        '=?utf-8?b?Rm9vIEbDtsO2IEZvbyBGw7bDtg==?= <*****@*****.**>')

    # unicode, no quotes, display-name lax
    run_full_mailbox_test(u'ö {0}'.format(u'*****@*****.**'),
                          EmailAddress(u'ö', '*****@*****.**'),
                          '=?utf-8?b?w7Y=?= <*****@*****.**>')
    run_full_mailbox_test(u'Föö {0}'.format(u'*****@*****.**'),
                          EmailAddress(u'Föö', '*****@*****.**'),
                          '=?utf-8?b?RsO2w7Y=?= <*****@*****.**>')
    run_full_mailbox_test(u'Foo ö {0}'.format(u'*****@*****.**'),
                          EmailAddress(u'Foo ö', '*****@*****.**'),
                          '=?utf-8?b?Rm9vIMO2?= <*****@*****.**>')
    run_full_mailbox_test(u'Foo Föö {0}'.format(u'*****@*****.**'),
                          EmailAddress(u'Foo Föö', '*****@*****.**'),
                          '=?utf-8?b?Rm9vIEbDtsO2?= <*****@*****.**>')
    run_full_mailbox_test(
        u'Foo Föö Foo {0}'.format(u'*****@*****.**'),
        EmailAddress(u'Foo Föö Foo', '*****@*****.**'),
        '=?utf-8?b?Rm9vIEbDtsO2IEZvbw==?= <*****@*****.**>')
    run_full_mailbox_test(
        u'Foo Föö Foo Föö {0}'.format(u'*****@*****.**'),
        EmailAddress(u'Foo Föö Foo Föö', '*****@*****.**'),
        '=?utf-8?b?Rm9vIEbDtsO2IEZvbyBGw7bDtg==?= <*****@*****.**>')

    # unicode, quotes, display-name rfc
    # Note that redundant quotes are removed from the parsed address
    run_full_mailbox_test(u'"ö" <*****@*****.**>',
                          EmailAddress(u'ö', '*****@*****.**'),
                          '=?utf-8?b?w7Y=?= <*****@*****.**>')
    run_full_mailbox_test(u'"Föö" <*****@*****.**>',
                          EmailAddress(u'Föö', '*****@*****.**'),
                          '=?utf-8?b?RsO2w7Y=?= <*****@*****.**>')
    run_full_mailbox_test(u'"Foo ö" <*****@*****.**>',
                          EmailAddress(u'Foo ö', '*****@*****.**'),
                          '=?utf-8?b?Rm9vIMO2?= <*****@*****.**>')
    run_full_mailbox_test(u'"Foo Föö" <*****@*****.**>',
                          EmailAddress(u'Foo Föö', '*****@*****.**'),
                          '=?utf-8?b?Rm9vIEbDtsO2?= <*****@*****.**>')
    run_full_mailbox_test(
        u'"Foo Föö Foo" <*****@*****.**>',
        EmailAddress(u'Foo Föö Foo', '*****@*****.**'),
        '=?utf-8?b?Rm9vIEbDtsO2IEZvbw==?= <*****@*****.**>')
    run_full_mailbox_test(
        u'"Foo Föö Foo Föö" <*****@*****.**>',
        EmailAddress(u'Foo Föö Foo Föö', '*****@*****.**'),
        '=?utf-8?b?Rm9vIEbDtsO2IEZvbyBGw7bDtg==?= <*****@*****.**>')

    # unicode, quotes, display-name lax
    # Note that the quotes are removed from the parsed address
    run_full_mailbox_test(u'"ö" [email protected]',
                          EmailAddress(u'ö', '*****@*****.**'),
                          '=?utf-8?b?w7Y=?= <*****@*****.**>')
    run_full_mailbox_test(u'"Föö" [email protected]',
                          EmailAddress(u'Föö', '*****@*****.**'),
                          '=?utf-8?b?RsO2w7Y=?= <*****@*****.**>')
    run_full_mailbox_test(u'"Foo ö" [email protected]',
                          EmailAddress(u'Foo ö', '*****@*****.**'),
                          '=?utf-8?b?Rm9vIMO2?= <*****@*****.**>')
    run_full_mailbox_test(u'"Foo Föö" [email protected]',
                          EmailAddress(u'Foo Föö', '*****@*****.**'),
                          '=?utf-8?b?Rm9vIEbDtsO2?= <*****@*****.**>')
    run_full_mailbox_test(
        u'"Foo Föö Foo" [email protected]',
        EmailAddress(u'Foo Föö Foo', '*****@*****.**'),
        '=?utf-8?b?Rm9vIEbDtsO2IEZvbw==?= <*****@*****.**>')
    run_full_mailbox_test(
        u'"Foo Föö Foo Föö" [email protected]',
        EmailAddress(u'Foo Föö Foo Föö', '*****@*****.**'),
        '=?utf-8?b?Rm9vIEbDtsO2IEZvbyBGw7bDtg==?= <*****@*****.**>')

    # unicode, random language sampling, see: http://www.columbia.edu/~fdc/utf8/index.html
    run_full_mailbox_test(
        u'나는 유리를 먹을 수 있어요 <*****@*****.**>',
        EmailAddress(u'나는 유리를 먹을 수 있어요', '*****@*****.**'),
        '=?utf-8?b?64KY64qUIOycoOumrOulvCDrqLnsnYQg7IiYIOyeiOyWtOyalA==?= <*****@*****.**>'
    )
    run_full_mailbox_test(
        u'私はガラスを食べられます <*****@*****.**>',
        EmailAddress(u'私はガラスを食べられます', '*****@*****.**'),
        '=?utf-8?b?56eB44Gv44Ks44Op44K544KS6aOf44G544KJ44KM44G+44GZ?= <*****@*****.**>'
    )
    run_full_mailbox_test(
        u'ᛖᚴ ᚷᛖᛏ ᛖᛏᛁ <*****@*****.**>',
        EmailAddress(u'ᛖᚴ ᚷᛖᛏ ᛖᛏᛁ', '*****@*****.**'),
        '=?utf-8?b?4ZuW4Zq0IOGat+GbluGbjyDhm5bhm4/hm4E=?= <*****@*****.**>')
    run_full_mailbox_test(
        u'Falsches Üben von Xylophonmusik <*****@*****.**>',
        EmailAddress(u'Falsches Üben von Xylophonmusik', '*****@*****.**'),
        '=?utf-8?q?Falsches_=C3=9Cben_von_Xylophonmusik?= <*****@*****.**>')
    run_full_mailbox_test(
        u'Съешь же ещё этих <*****@*****.**>',
        EmailAddress(u'Съешь же ещё этих', '*****@*****.**'),
        '=?utf-8?b?0KHRitC10YjRjCDQttC1INC10YnRkSDRjdGC0LjRhQ==?= <*****@*****.**>'
    )
    run_full_mailbox_test(
        u'ξεσκεπάζω την <*****@*****.**>',
        EmailAddress(u'ξεσκεπάζω την', '*****@*****.**'),
        '=?utf-8?b?zr7Otc+DzrrOtc+AzqzOts+JIM+EzrfOvQ==?= <*****@*****.**>')

    # unicode + punctuation
    for i in u'''.!#$%&*+-/=?^_`{|}~''':
        run_full_mailbox_test(
            u'"ö {0}" <*****@*****.**>'.format(i),
            EmailAddress(u'ö {0}'.format(i), '*****@*****.**'))

@nottest
def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s) + 1))


@nottest
def run_test(string, expected_mlist):
    mlist = parse_list(string)
    assert_equal(mlist, expected_mlist)


BILL_AS = EmailAddress(None, '*****@*****.**')
STEVE_AS = EmailAddress(None, '*****@*****.**')
LINUS_AS = EmailAddress(None, '*****@*****.**')

BILL_MBX = EmailAddress('Bill Gates', '*****@*****.**')
STEVE_MBX = EmailAddress('Steve Jobs', '*****@*****.**')
LINUS_MBX = EmailAddress('Linus Torvalds', '*****@*****.**')


def test_sanity():
    addr_string = 'Bill Gates <*****@*****.**>, Steve Jobs <*****@*****.**>; [email protected]'
    run_test(addr_string, [BILL_MBX, STEVE_MBX, LINUS_AS])


def test_simple_valid():
    s = '''http://foo.com:8080; "Ev K." <*****@*****.**>, "Alex K" <*****@*****.**>, "Tom, S" <"tom+[a]"@s.com>'''
Esempio n. 19
0
def test_edge_cases():
    email = EmailAddress('"foo.bar@"@example.com')
    eq_('"foo.bar@"@example.com', email.address)
Esempio n. 20
0
def test_contains_non_ascii():
    eq_(EmailAddress(None, '*****@*****.**').contains_non_ascii(), False)
    eq_(EmailAddress(None, 'foo@экзампл.рус').contains_non_ascii(), True)
    eq_(EmailAddress(None, 'аджай@bar.com').contains_non_ascii(), True)
    eq_(EmailAddress(None, 'аджай@экзампл.рус').contains_non_ascii(), True)
Esempio n. 21
0
def test_contains_domain_literal():
    eq_(EmailAddress(None, '*****@*****.**').contains_domain_literal(), False)
    eq_(EmailAddress(None, 'foo@[1.2.3.4]').contains_domain_literal(), True)