diff options
| author | Barry Warsaw | 2007-06-21 10:23:40 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2007-06-21 10:23:40 -0400 |
| commit | 6c1ccc236bc24d8b3bb04807ba4b24e8a7a0d18e (patch) | |
| tree | fe4787d9b79e27ea361b33a4f98a12d2e695f16b /Mailman/testing | |
| parent | 3a86b40fe4e3b28c2d9f4e3bbd2cc0eeefe31453 (diff) | |
| download | mailman-6c1ccc236bc24d8b3bb04807ba4b24e8a7a0d18e.tar.gz mailman-6c1ccc236bc24d8b3bb04807ba4b24e8a7a0d18e.tar.zst mailman-6c1ccc236bc24d8b3bb04807ba4b24e8a7a0d18e.zip | |
Convert the CookHeaders tests in test_handlers to using doctests, split up
into several sub-documents.
Defaults.py.in: Removed OLD_STYLE_PREFIXING. So-called 'new style' prefixing
is the default and only option now.
CookHeaders.py is updated to the new API and some (but not all) of the code
has been updated to more modern Python idioms.
reply_goes_to_list attribute has been changed from a strict integer to a
munepy enum called ReplyToMunging.
RFC 2369 headers List-Subscribe and List-Unsubscribe now use the preferred
-join and -leave addresses instead of the -request address with a subject
value.
Diffstat (limited to 'Mailman/testing')
| -rw-r--r-- | Mailman/testing/test_cook_headers.py | 35 | ||||
| -rw-r--r-- | Mailman/testing/test_handlers.py | 348 |
2 files changed, 35 insertions, 348 deletions
diff --git a/Mailman/testing/test_cook_headers.py b/Mailman/testing/test_cook_headers.py new file mode 100644 index 000000000..ec8997858 --- /dev/null +++ b/Mailman/testing/test_cook_headers.py @@ -0,0 +1,35 @@ +# Copyright (C) 2007 by the Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, +# USA. + +"""Doctest harness for the CookHeaders handler.""" + +import os +import doctest +import unittest + +options = (doctest.ELLIPSIS + | doctest.NORMALIZE_WHITESPACE + | doctest.REPORT_NDIFF) + + +def test_suite(): + suite = unittest.TestSuite() + for filename in ('ack-headers', 'cook-headers', 'subject-munging', + 'reply-to'): + path = os.path.join('..', 'docs', filename + '.txt') + suite.addTest(doctest.DocFileSuite(path, optionflags=options)) + return suite diff --git a/Mailman/testing/test_handlers.py b/Mailman/testing/test_handlers.py index e6a846412..b44a1c2cc 100644 --- a/Mailman/testing/test_handlers.py +++ b/Mailman/testing/test_handlers.py @@ -39,7 +39,6 @@ from Mailman.testing.base import TestBase from Mailman.Handlers import Acknowledge from Mailman.Handlers import AfterDelivery from Mailman.Handlers import Approve -from Mailman.Handlers import CookHeaders from Mailman.Handlers import FileRecips from Mailman.Handlers import Hold from Mailman.Handlers import MimeDel @@ -136,352 +135,6 @@ X-BeenThere: %s -class TestCookHeaders(TestBase): - def test_transform_noack_to_xack(self): - eq = self.assertEqual - msg = email.message_from_string("""\ -X-Ack: yes - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {'noack': 1}) - eq(len(msg.get_all('x-ack')), 1) - eq(msg['x-ack'], 'no') - - def test_original_sender(self): - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - msgdata = {} - CookHeaders.process(self._mlist, msg, msgdata) - self.assertEqual(msgdata.get('original_sender'), 'aperson@example.org') - - def test_no_original_sender(self): - msg = email.message_from_string("""\ -Subject: about this message - -""", Message.Message) - msgdata = {} - CookHeaders.process(self._mlist, msg, msgdata) - self.assertEqual(msgdata.get('original_sender'), '') - - def test_xbeenthere(self): - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(msg['x-beenthere'], '_xtest@example.com') - - def test_multiple_xbeentheres(self): - eq = self.assertEqual - msg = email.message_from_string("""\ -From: aperson@example.org -X-BeenThere: alist@another.example.com - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - eq(len(msg.get_all('x-beenthere')), 2) - beentheres = msg.get_all('x-beenthere') - beentheres.sort() - eq(beentheres, ['_xtest@example.com', 'alist@another.example.com']) - - def test_nonexisting_mmversion(self): - eq = self.assertEqual - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - eq(msg['x-mailman-version'], Version.VERSION) - - def test_existing_mmversion(self): - eq = self.assertEqual - msg = email.message_from_string("""\ -From: aperson@example.org -X-Mailman-Version: 3000 - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - eq(len(msg.get_all('x-mailman-version')), 1) - eq(msg['x-mailman-version'], '3000') - - def test_nonexisting_precedence(self): - eq = self.assertEqual - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - eq(msg['precedence'], 'list') - - def test_existing_precedence(self): - eq = self.assertEqual - msg = email.message_from_string("""\ -From: aperson@example.org -Precedence: junk - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - eq(len(msg.get_all('precedence')), 1) - eq(msg['precedence'], 'junk') - - def test_subject_munging_no_subject(self): - self._mlist.subject_prefix = '[XTEST] ' - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - msgdata = {} - CookHeaders.process(self._mlist, msg, msgdata) - self.assertEqual(msgdata.get('origsubj'), '') - self.assertEqual(str(msg['subject']), '[XTEST] (no subject)') - - def test_subject_munging(self): - self._mlist.subject_prefix = '[XTEST] ' - msg = email.message_from_string("""\ -From: aperson@example.org -Subject: About Mailman... - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(msg['subject'], '[XTEST] About Mailman...') - - def test_no_subject_munging_for_digests(self): - self._mlist.subject_prefix = '[XTEST] ' - msg = email.message_from_string("""\ -From: aperson@example.org -Subject: About Mailman... - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {'isdigest': 1}) - self.assertEqual(msg['subject'], 'About Mailman...') - - def test_no_subject_munging_for_fasttrack(self): - self._mlist.subject_prefix = '[XTEST] ' - msg = email.message_from_string("""\ -From: aperson@example.org -Subject: About Mailman... - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {'_fasttrack': 1}) - self.assertEqual(msg['subject'], 'About Mailman...') - - def test_no_subject_munging_has_prefix(self): - self._mlist.subject_prefix = '[XTEST] ' - msg = email.message_from_string("""\ -From: aperson@example.org -Subject: Re: [XTEST] About Mailman... - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(msg['subject'], 'Re: [XTEST] About Mailman...') - - def test_subject_munging_i18n(self): - self._mlist.subject_prefix = '[XTEST]' - msg = Message.Message() - msg['Subject'] = '=?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=' - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(unicode(msg['subject']), - u'[XTEST] \u30e1\u30fc\u30eb\u30de\u30f3') - self.assertEqual(msg['subject'], - '[XTEST] =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=') - self._mlist.subject_prefix = '[XTEST %d]' - self._mlist.post_id = 456 - msg = Message.Message() - msg['Subject'] = '=?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=' - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(unicode(msg['subject']), - u'[XTEST 456] \u30e1\u30fc\u30eb\u30de\u30f3') - self.assertEqual(msg['subject'], - '[XTEST 456] =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=') - msg = Message.Message() - msg['Subject' - ] = 'Re: [XTEST 123] =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=' - CookHeaders.process(self._mlist, msg, {}) - # next code suceeds if python email patch tracker #1681333 is applied. - #self.assertEqual(unicode(msg['subject']), - # u'[XTEST 456] Re: \u30e1\u30fc\u30eb\u30de\u30f3') - self.assertEqual(msg['subject'], - '[XTEST 456] Re: =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=') - - def test_subject_munging_prefix_number(self): - self._mlist.subject_prefix = '[XTEST %d]' - self._mlist.post_id = 456 - msg = Message.Message() - msg['Subject'] = 'About Mailman...' - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(msg['subject'], '[XTEST 456] About Mailman...') - msg = Message.Message() - msg['Subject'] = 'Re: [XTEST 123] About Mailman...' - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(msg['subject'], '[XTEST 456] Re: About Mailman...') - - def test_subject_munging_prefix_newstyle(self): - self._mlist.subject_prefix = '[XTEST]' - config.OLD_STYLE_PREFIXING = False - msg = Message.Message() - msg['Subject'] = 'Re: [XTEST] About Mailman...' - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(msg['subject'], '[XTEST] Re: About Mailman...') - - def test_subject_munging_prefix_crooked(self): - # In this test case, we get an extra space between the prefix and - # the original subject. It's because the original is crooked. - # Note that isubject starting by '\n ' is generated by some version of - # Eudora Japanese edition. - self._mlist.subject_prefix = '[XTEST]' - msg = Message.Message() - msg['Subject'] = '\n About Mailman...' - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(str(msg['subject']), '[XTEST] About Mailman...') - del msg['subject'] - msg['Subject'] = '\n =?iso-2022-jp?b?GyRCJWEhPCVrJV4lcxsoQg==?=' - CookHeaders.process(self._mlist, msg, {}) - self.assertEqual(str(msg['subject']), - '[XTEST] =?iso-2022-jp?b?IBskQiVhITwlayVeJXMbKEI=?=') - - def test_reply_to_list(self): - eq = self.assertEqual - mlist = self._mlist - mlist.reply_goes_to_list = 1 - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - CookHeaders.process(mlist, msg, {}) - eq(msg['reply-to'], '_xtest@example.com') - eq(msg.get_all('reply-to'), ['_xtest@example.com']) - - def test_reply_to_list_with_strip(self): - eq = self.assertEqual - mlist = self._mlist - mlist.reply_goes_to_list = 1 - mlist.first_strip_reply_to = 1 - msg = email.message_from_string("""\ -From: aperson@example.org -Reply-To: bperson@example.com - -""", Message.Message) - CookHeaders.process(mlist, msg, {}) - eq(msg['reply-to'], '_xtest@example.com') - eq(msg.get_all('reply-to'), ['_xtest@example.com']) - - def test_reply_to_explicit(self): - eq = self.assertEqual - mlist = self._mlist - mlist.reply_goes_to_list = 2 - mlist.reply_to_address = 'mlist@example.com' - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - CookHeaders.process(mlist, msg, {}) - eq(msg['reply-to'], 'mlist@example.com') - eq(msg.get_all('reply-to'), ['mlist@example.com']) - - def test_reply_to_explicit_with_strip(self): - eq = self.assertEqual - mlist = self._mlist - mlist.reply_goes_to_list = 2 - mlist.first_strip_reply_to = 1 - mlist.reply_to_address = 'mlist@example.com' - msg = email.message_from_string("""\ -From: aperson@example.org -Reply-To: bperson@example.com - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - eq(msg['reply-to'], 'mlist@example.com') - eq(msg.get_all('reply-to'), ['mlist@example.com']) - - def test_reply_to_extends_to_list(self): - eq = self.assertEqual - mlist = self._mlist - mlist.reply_goes_to_list = 1 - mlist.first_strip_reply_to = 0 - msg = email.message_from_string("""\ -From: aperson@example.org -Reply-To: bperson@example.com - -""", Message.Message) - CookHeaders.process(mlist, msg, {}) - eq(msg['reply-to'], 'bperson@example.com, _xtest@example.com') - - def test_reply_to_extends_to_explicit(self): - eq = self.assertEqual - mlist = self._mlist - mlist.reply_goes_to_list = 2 - mlist.first_strip_reply_to = 0 - mlist.reply_to_address = 'mlist@example.com' - msg = email.message_from_string("""\ -From: aperson@example.org -Reply-To: bperson@example.com - -""", Message.Message) - CookHeaders.process(mlist, msg, {}) - eq(msg['reply-to'], 'mlist@example.com, bperson@example.com') - - def test_list_headers_nolist(self): - eq = self.assertEqual - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {'_nolist': 1}) - eq(msg['list-id'], None) - eq(msg['list-help'], None) - eq(msg['list-unsubscribe'], None) - eq(msg['list-subscribe'], None) - eq(msg['list-post'], None) - eq(msg['list-archive'], None) - - def test_list_headers(self): - eq = self.assertEqual - self._mlist.archive = 1 - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - oldval = config.DEFAULT_URL_HOST - config.DEFAULT_URL_HOST = 'www.example.com' - try: - CookHeaders.process(self._mlist, msg, {}) - finally: - config.DEFAULT_URL_HOST = oldval - eq(msg['list-id'], '<_xtest.example.com>') - eq(msg['list-help'], '<mailto:_xtest-request@example.com?subject=help>') - eq(msg['list-unsubscribe'], - '<http://www.example.com/mailman/listinfo/_xtest@example.com>,' - '\n\t<mailto:_xtest-request@example.com?subject=unsubscribe>') - eq(msg['list-subscribe'], - '<http://www.example.com/mailman/listinfo/_xtest@example.com>,' - '\n\t<mailto:_xtest-request@example.com?subject=subscribe>') - eq(msg['list-post'], '<mailto:_xtest@example.com>') - eq(msg['list-archive'], - '<http://www.example.com/pipermail/_xtest@example.com>') - - def test_list_headers_with_description(self): - eq = self.assertEqual - self._mlist.archive = 1 - self._mlist.description = 'A Test List' - msg = email.message_from_string("""\ -From: aperson@example.org - -""", Message.Message) - CookHeaders.process(self._mlist, msg, {}) - eq(unicode(msg['list-id']), u'A Test List <_xtest.example.com>') - eq(msg['list-help'], '<mailto:_xtest-request@example.com?subject=help>') - eq(msg['list-unsubscribe'], - '<http://www.example.com/mailman/listinfo/_xtest@example.com>,' - '\n\t<mailto:_xtest-request@example.com?subject=unsubscribe>') - eq(msg['list-subscribe'], - '<http://www.example.com/mailman/listinfo/_xtest@example.com>,' - '\n\t<mailto:_xtest-request@example.com?subject=subscribe>') - eq(msg['list-post'], '<mailto:_xtest@example.com>') - - - class TestFileRecips(TestBase): def test_short_circuit(self): msgdata = {'recips': 1} @@ -1399,7 +1052,6 @@ Mailman rocks! def test_suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestApprove)) - suite.addTest(unittest.makeSuite(TestCookHeaders)) suite.addTest(unittest.makeSuite(TestFileRecips)) suite.addTest(unittest.makeSuite(TestHold)) suite.addTest(unittest.makeSuite(TestMimeDel)) |
