]> granicus.if.org Git - python/commitdiff
#12586: Fix a small oversight in the new email policy header setting code.
authorR David Murray <rdmurray@bitdance.com>
Sat, 26 May 2012 02:53:12 +0000 (22:53 -0400)
committerR David Murray <rdmurray@bitdance.com>
Sat, 26 May 2012 02:53:12 +0000 (22:53 -0400)
This is a danger of focusing on unit tests: sometimes you forget
to do the integration tests.

Lib/email/policy.py
Lib/test/test_email/test__headerregistry.py

index ea90a8f11b6bbb32b3a8acf95bbd193d6fc75d0f..18946c32151be23b2e3347a2817ccb3bde31b325 100644 (file)
@@ -104,7 +104,7 @@ class EmailPolicy(Policy):
         """
         if hasattr(value, 'name') and value.name.lower() == name.lower():
             return (name, value)
-        if len(value.splitlines())>1:
+        if isinstance(value, str) and len(value.splitlines())>1:
             raise ValueError("Header values may not contain linefeed "
                              "or carriage return characters")
         return (name, self.header_factory(name, value))
index 4398e29c91afc63ec3c12bad27262eee94738a9e..23bc5ffc557c9e94b8fdb785e8f952b3b5160e8b 100644 (file)
@@ -3,6 +3,7 @@ import textwrap
 import unittest
 from email import errors
 from email import policy
+from email.message import Message
 from test.test_email import TestEmailBase
 from email import _headerregistry
 # Address and Group are public but I'm not sure where to put them yet.
@@ -168,6 +169,12 @@ class TestDateHeader(TestHeaderBase):
         with self.assertRaises(AttributeError):
             h.datetime = 'foo'
 
+    def test_set_date_header_from_datetime(self):
+        m = Message(policy=policy.default)
+        m['Date'] = self.dt
+        self.assertEqual(m['Date'], self.datestring)
+        self.assertEqual(m['Date'].datetime, self.dt)
+
 
 class TestAddressHeader(TestHeaderBase):
 
@@ -625,6 +632,20 @@ class TestAddressAndGroup(TestEmailBase):
         self.assertEqual(g.addresses, tuple())
         self.assertEqual(str(g), 'foo bar:;')
 
+    def test_set_message_header_from_address(self):
+        a = Address('foo', 'bar', 'example.com')
+        m = Message(policy=policy.default)
+        m['To'] = a
+        self.assertEqual(m['to'], 'foo <bar@example.com>')
+        self.assertEqual(m['to'].addresses, (a,))
+
+    def test_set_message_header_from_group(self):
+        g = Group('foo bar')
+        m = Message(policy=policy.default)
+        m['To'] = g
+        self.assertEqual(m['to'], 'foo bar:;')
+        self.assertEqual(m['to'].addresses, g.addresses)
+
 
 class TestFolding(TestHeaderBase):
 
@@ -713,5 +734,6 @@ class TestFolding(TestHeaderBase):
                         'Date: Sat, 02 Feb 2002 17:00:06 -0800\n')
 
 
+
 if __name__ == '__main__':
     unittest.main()