[Checkins] SVN: zc.metarecipe/trunk/src/zc/metarecipe/test Fixed: Testing support didn't catch type errors resulting from using

jim cvs-admin at zope.org
Mon Sep 24 16:00:35 UTC 2012


Log message for revision 127878:
  Fixed: Testing support didn't catch type errors resulting from using
         non-string data (especially unicode) in recipe options.
  

Changed:
  U   zc.metarecipe/trunk/src/zc/metarecipe/testing.py
  U   zc.metarecipe/trunk/src/zc/metarecipe/tests.py

-=-
Modified: zc.metarecipe/trunk/src/zc/metarecipe/testing.py
===================================================================
--- zc.metarecipe/trunk/src/zc/metarecipe/testing.py	2012-09-24 15:58:56 UTC (rev 127877)
+++ zc.metarecipe/trunk/src/zc/metarecipe/testing.py	2012-09-24 16:00:32 UTC (rev 127878)
@@ -8,5 +8,7 @@
     def __getitem__(self, name):
         print "[%s]" % name
         for k, v in sorted(self._raw[name].items()):
+            if not isinstance(v, str):
+                raise TypeError('Option values must be strings', v)
             print "%s = %s" % (k, v.replace("\n", "\n  ").strip())
         return self._raw[name]

Modified: zc.metarecipe/trunk/src/zc/metarecipe/tests.py
===================================================================
--- zc.metarecipe/trunk/src/zc/metarecipe/tests.py	2012-09-24 15:58:56 UTC (rev 127877)
+++ zc.metarecipe/trunk/src/zc/metarecipe/tests.py	2012-09-24 16:00:32 UTC (rev 127878)
@@ -12,11 +12,42 @@
 #
 ##############################################################################
 from zope.testing import setupstack
+import doctest
 import manuel.capture
 import manuel.doctest
 import manuel.testing
 import unittest
 
+def test_testing_error_on_unicode_and_other_types():
+    """
+    >>> import zc.metarecipe.testing
+    >>> buildout = zc.metarecipe.testing.Buildout()
+
+    Strings are cool:
+
+    >>> buildout._raw['x'] = dict(o='v')
+    >>> _ = buildout['x']
+    [x]
+    o = v
+
+    Unicode not so much:
+
+    >>> buildout._raw['x'] = dict(o=u'v')
+    >>> _ = buildout['x']
+    Traceback (most recent call last):
+    ...
+    TypeError: ('Option values must be strings', u'v')
+
+    Or other non strings:
+
+    >>> buildout._raw['x'] = dict(o=1)
+    >>> _ = buildout['x']
+    Traceback (most recent call last):
+    ...
+    TypeError: ('Option values must be strings', 1)
+
+    """
+
 def test_suite():
     return unittest.TestSuite((
         manuel.testing.TestSuite(
@@ -24,5 +55,6 @@
             'README.txt',
             setUp=setupstack.setUpDirectory, tearDown=setupstack.tearDown,
             ),
+        doctest.DocTestSuite(),
         ))
 



More information about the checkins mailing list