from test_support import verbose, verify import rfc822, sys try: from cStringIO import StringIO except ImportError: from StringIO import StringIO def test(msg, results): fp = StringIO() fp.write(msg) fp.seek(0) m = rfc822.Message(fp) i = 0 for n, a in m.getaddrlist('to') + m.getaddrlist('cc'): if verbose: print 'name:', repr(n), 'addr:', repr(a) try: mn, ma = results[i][0], results[i][1] except IndexError: print 'extra parsed address:', repr(n), repr(a) continue i = i + 1 if mn == n and ma == a: if verbose: print ' [matched]' else: if verbose: print ' [no match]' print 'not found:', repr(n), repr(a) out = m.getdate('date') if out: if verbose: print 'Date:', m.getheader('date') if out == (1999, 1, 13, 23, 57, 35, 0, 0, 0): if verbose: print ' [matched]' else: if verbose: print ' [no match]' print 'Date conversion failed:', out # Note: all test cases must have the same date (in various formats), # or no date! test('''Date: Wed, 13 Jan 1999 23:57:35 -0500 From: Guido van Rossum To: "Guido van \t : Rossum" Subject: test2 test2 ''', [('Guido van\n\t : Rossum', 'guido@python.org')]) test('''From: Barry Date: 13-Jan-1999 23:57:35 EST test''', [('Guido: the Barbarian', 'guido@python.org'), ('Guido: the Madman', 'guido@python.org') ]) test('''To: "The monster with the very long name: Guido" Date: Wed, 13 Jan 1999 23:57:35 -0500 test''', [('The monster with\n the very long name: Guido', 'guido@python.org')]) test('''To: "Amit J. Patel" CC: Mike Fletcher , "'string-sig@python.org'" Cc: fooz@bat.com, bart@toof.com Cc: goit@lip.com Date: Wed, 13 Jan 1999 23:57:35 -0500 test''', [('Amit J. Patel', 'amitp@Theory.Stanford.EDU'), ('Mike Fletcher', 'mfletch@vrtelecom.com'), ("'string-sig@python.org'", 'string-sig@python.org'), ('', 'fooz@bat.com'), ('', 'bart@toof.com'), ('', 'goit@lip.com'), ]) # This one is just twisted. I don't know what the proper result should be, # but it shouldn't be to infloop, which is what used to happen! test('''To: <[smtp:dd47@mail.xxx.edu]_at_hmhq@hdq-mdm1-imgout.companay.com> Date: Wed, 13 Jan 1999 23:57:35 -0500 test''', [('', ''), ('', 'dd47@mail.xxx.edu'), ('', '_at_hmhq@hdq-mdm1-imgout.companay.com') ]) # This exercises the old commas-in-a-full-name bug, which should be doing the # right thing in recent versions of the module. test('''To: "last, first" test''', [('last, first', 'userid@foo.net'), ]) test('''To: (Comment stuff) "Quoted name"@somewhere.com test''', [('Comment stuff', '"Quoted name"@somewhere.com'), ]) test('''To: : Cc: goit@lip.com Date: Wed, 13 Jan 1999 23:57:35 -0500 test''', [('', 'goit@lip.com')]) test('''To: guido@[132.151.1.21] foo''', [('', 'guido@[132.151.1.21]')]) msg = rfc822.Message(StringIO('''To: "last, first" test ''')) verify(msg.get("to") == '"last, first" ') verify(msg.get("TO") == '"last, first" ') verify(msg.get("No-Such-Header") is None) verify(msg.get("No-Such-Header", "No-Such-Value") == "No-Such-Value") verify(not msg.has_key("New-Header")) verify(msg.setdefault("New-Header", "New-Value") == "New-Value") verify(msg.setdefault("New-Header", "Different-Value") == "New-Value") verify(msg["new-header"] == "New-Value") verify(msg.setdefault("Another-Header") == "") verify(msg["another-header"] == "")