[pypy-commit] pypy py3.3: add _csv test_delimiter test and replicate cpython error handling

numerodix noreply at buildbot.pypy.org
Sun Jul 27 10:25:54 CEST 2014


Author: Martin Matusiak <numerodix at gmail.com>
Branch: py3.3
Changeset: r72550:44f52293da32
Date: 2014-07-27 10:15 +0200
http://bitbucket.org/pypy/pypy/changeset/44f52293da32/

Log:	add _csv test_delimiter test and replicate cpython error handling

diff --git a/pypy/module/_csv/interp_csv.py b/pypy/module/_csv/interp_csv.py
--- a/pypy/module/_csv/interp_csv.py
+++ b/pypy/module/_csv/interp_csv.py
@@ -49,6 +49,8 @@
         return default
     if space.is_w(w_src, space.w_None):
         return u'\0'
+    if not space.isinstance_w(w_src, space.w_unicode):
+        raise oefmt(space.w_TypeError, '"%s" must be string, not %T', name, w_src)
     src = space.unicode_w(w_src)
     if len(src) == 1:
         return src[0]
@@ -109,7 +111,7 @@
 
     if dialect.delimiter == u'\0':
         raise OperationError(space.w_TypeError,
-                             space.wrap('delimiter must be set'))
+                             space.wrap('"delimiter" must be a 1-character string'))
 
     if space.is_w(w_quotechar, space.w_None) and w_quoting is None:
         tmp_quoting = QUOTE_NONE
diff --git a/pypy/module/_csv/test/test_dialect.py b/pypy/module/_csv/test/test_dialect.py
--- a/pypy/module/_csv/test/test_dialect.py
+++ b/pypy/module/_csv/test/test_dialect.py
@@ -80,6 +80,21 @@
         _csv.register_dialect('foo1', strict=_csv)    # :-/
         assert _csv.get_dialect('foo1').strict == True
 
+    def test_delimiter(self):
+        import _csv
+
+        exc_info = raises(TypeError, _csv.register_dialect, 'foo1', delimiter=":::")
+        assert exc_info.value.args[0] == '"delimiter" must be a 1-character string'
+
+        exc_info = raises(TypeError, _csv.register_dialect, 'foo1', delimiter="")
+        assert exc_info.value.args[0] == '"delimiter" must be a 1-character string'
+
+        exc_info = raises(TypeError, _csv.register_dialect, 'foo1', delimiter=b",")
+        assert exc_info.value.args[0] == '"delimiter" must be string, not bytes'
+
+        exc_info = raises(TypeError, _csv.register_dialect, 'foo1', delimiter=4)
+        assert exc_info.value.args[0] == '"delimiter" must be string, not int'
+
     def test_line_terminator(self):
         # lineterminator can be the empty string
         import _csv


More information about the pypy-commit mailing list