[Zope-Checkins] SVN: Zope/branches/2.9/ Collector #2263: 'field2ulines' did not convert empty string correctly.

Tres Seaver tseaver at palladion.com
Thu Jan 11 16:28:16 EST 2007


Log message for revision 71939:
  Collector #2263: 'field2ulines' did not convert empty string correctly.
  
  o Forward-port from 2.8 branch.
  

Changed:
  U   Zope/branches/2.9/doc/CHANGES.txt
  U   Zope/branches/2.9/lib/python/ZPublisher/Converters.py
  A   Zope/branches/2.9/lib/python/ZPublisher/tests/test_Converters.py

-=-
Modified: Zope/branches/2.9/doc/CHANGES.txt
===================================================================
--- Zope/branches/2.9/doc/CHANGES.txt	2007-01-11 20:57:52 UTC (rev 71938)
+++ Zope/branches/2.9/doc/CHANGES.txt	2007-01-11 21:28:15 UTC (rev 71939)
@@ -8,6 +8,9 @@
 
    Bugs fixed
 
+      - Collector #2263: 'field2ulines' did not convert empty string
+        correctly.
+
       - Reverted backward-incompatible fix for Collector #2191.
 
       - added Python 2.4.4 as optimal Python version to 'configure'

Modified: Zope/branches/2.9/lib/python/ZPublisher/Converters.py
===================================================================
--- Zope/branches/2.9/lib/python/ZPublisher/Converters.py	2007-01-11 20:57:52 UTC (rev 71938)
+++ Zope/branches/2.9/lib/python/ZPublisher/Converters.py	2007-01-11 21:28:15 UTC (rev 71939)
@@ -154,9 +154,18 @@
         return unicode(field2text(v.encode('utf8')),'utf8')
 field2utext = field2utext()
 
-class field2ulines(_unicode_converter):
-    def convert_unicode(self,v):
-        return field2utext.convert_unicode(v).split('\n')
+class field2ulines:
+    def __call__(self, v):
+        if hasattr(v,'read'):
+            v=v.read()
+        if isinstance(v, (ListType, TupleType)): 
+            return [field2ustring(x) for x in v]
+        v = unicode(v)
+        return self.convert_unicode(v)
+
+    def convert_unicode(self, v):
+        return field2utext.convert_unicode(v).splitlines()
+
 field2ulines = field2ulines()
 
 type_converters = {

Added: Zope/branches/2.9/lib/python/ZPublisher/tests/test_Converters.py
===================================================================
--- Zope/branches/2.9/lib/python/ZPublisher/tests/test_Converters.py	2007-01-11 20:57:52 UTC (rev 71938)
+++ Zope/branches/2.9/lib/python/ZPublisher/tests/test_Converters.py	2007-01-11 21:28:15 UTC (rev 71939)
@@ -0,0 +1,118 @@
+################################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors. All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE
+#
+################################################################################
+
+import unittest
+
+class ConvertersTests(unittest.TestCase):
+
+    def test_field2string_with_string(self):
+        from ZPublisher.Converters import field2string
+        to_convert = 'to_convert'
+        self.assertEqual(field2string(to_convert), to_convert)
+
+    def test_field2string_with_unicode_default_encoding(self):
+        from ZPublisher.Converters import field2string
+        to_convert = u'to_convert'
+        self.assertEqual(field2string(to_convert),
+                         to_convert.encode('iso-8859-15'))
+
+    def test_field2string_with_filelike_object(self):
+        from ZPublisher.Converters import field2string
+        to_convert = 'to_convert'
+        class Filelike:
+            def read(self):
+                return to_convert
+        self.assertEqual(field2string(Filelike()), to_convert)
+
+    #TODO def test_field2text....
+
+    #TODO def test_field2required....
+
+    #TODO def test_field2int....
+
+    #TODO def test_field2float....
+
+    #TODO def test_field2tokens....
+
+    def test_field2lines_with_list(self):
+        from ZPublisher.Converters import field2lines
+        to_convert = ['one', 'two']
+        self.assertEqual(field2lines(to_convert), to_convert)
+
+    def test_field2lines_with_tuple(self):
+        from ZPublisher.Converters import field2lines
+        to_convert = ('one', 'two')
+        self.assertEqual(field2lines(to_convert), list(to_convert))
+
+    def test_field2lines_with_empty_string(self):
+        from ZPublisher.Converters import field2lines
+        to_convert = ''
+        self.assertEqual(field2lines(to_convert), [])
+
+    def test_field2lines_with_string_no_newlines(self):
+        from ZPublisher.Converters import field2lines
+        to_convert = 'abc def ghi'
+        self.assertEqual(field2lines(to_convert), [to_convert])
+
+    def test_field2lines_with_string_with_newlines(self):
+        from ZPublisher.Converters import field2lines
+        to_convert = 'abc\ndef\nghi'
+        self.assertEqual(field2lines(to_convert), to_convert.splitlines())
+        
+
+    #TODO def test_field2date....
+
+    #TODO def test_field2date_international....
+
+    #TODO def test_field2boolean....
+
+    #TODO def test_field2ustring....
+
+    #TODO def test_field2utokens....
+
+    #TODO def test_field2utext....
+
+    def test_field2ulines_with_list(self):
+        from ZPublisher.Converters import field2ulines
+        to_convert = [u'one', 'two']
+        self.assertEqual(field2ulines(to_convert),
+                         [unicode(x) for x in to_convert])
+
+    def test_field2ulines_with_tuple(self):
+        from ZPublisher.Converters import field2ulines
+        to_convert = (u'one', 'two')
+        self.assertEqual(field2ulines(to_convert),
+                         [unicode(x) for x in to_convert])
+
+    def test_field2ulines_with_empty_string(self):
+        from ZPublisher.Converters import field2ulines
+        to_convert = ''
+        self.assertEqual(field2ulines(to_convert), [])
+
+    def test_field2ulines_with_string_no_newlines(self):
+        from ZPublisher.Converters import field2ulines
+        to_convert = u'abc def ghi'
+        self.assertEqual(field2ulines(to_convert), [to_convert])
+
+    def test_field2ulines_with_string_with_newlines(self):
+        from ZPublisher.Converters import field2ulines
+        to_convert = u'abc\ndef\nghi'
+        self.assertEqual(field2ulines(to_convert), to_convert.splitlines())
+
+
+
+def test_suite():
+    return unittest.TestSuite((unittest.makeSuite(ConvertersTests),))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: Zope/branches/2.9/lib/python/ZPublisher/tests/test_Converters.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native



More information about the Zope-Checkins mailing list