]> granicus.if.org Git - python/commitdiff
Correct test_cvs on Windows, as suggested by Raghuram Devarakonda
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Mon, 19 Nov 2007 21:20:21 +0000 (21:20 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Mon, 19 Nov 2007 21:20:21 +0000 (21:20 +0000)
in issue1395. All other places in this file already use newline=''...

Also check that csv.reader is given an iterable returning strings.

Lib/test/test_csv.py
Modules/_csv.c

index 6c1c5426f3138579515167602b6f6ab8636afae5..f53c5ea36f7ddcec8b640fc781ebcbec57ac545f 100644 (file)
@@ -6,7 +6,7 @@ import io
 import sys
 import os
 import unittest
-from io import StringIO
+from io import StringIO, BytesIO
 from tempfile import TemporaryFile
 import csv
 import gc
@@ -211,6 +211,10 @@ class Test_Csv(unittest.TestCase):
                           ['ab\0c'], None, strict = 1)
         self._read_test(['"ab"c'], [['abc']], doublequote = 0)
 
+        self.assertRaises(csv.Error, self._read_test,
+                          [b'ab\0c'], None)
+
+
     def test_read_eol(self):
         self._read_test(['a,b'], [['a','b']])
         self._read_test(['a,b\n'], [['a','b']])
@@ -375,7 +379,7 @@ class TestDialectRegistry(unittest.TestCase):
 
 class TestCsvBase(unittest.TestCase):
     def readerAssertEqual(self, input, expected_result):
-        with TemporaryFile("w+") as fileobj:
+        with TemporaryFile("w+", newline='') as fileobj:
             fileobj.write(input)
             fileobj.seek(0)
             reader = csv.reader(fileobj, dialect = self.dialect)
index 10cf96f6b034c74cbd86e24541829b4a20495329..75cafb26085b024ef145725b70c5efb8ff32a12c 100644 (file)
@@ -270,7 +270,7 @@ _set_str(const char *name, PyObject **target, PyObject *src, const char *dflt)
                        *target = NULL;
                else if (!IS_BASESTRING(src)) {
                        PyErr_Format(PyExc_TypeError, 
-                                    "\"%s\" must be an string", name);
+                                    "\"%s\" must be a string", name);
                        return -1;
                }
                else {
@@ -793,6 +793,16 @@ Reader_iternext(ReaderObj *self)
                                             "newline inside string");
                         return NULL;
                 }
+               if (!PyUnicode_Check(lineobj))
+               {
+                       PyErr_Format(error_obj,
+                                    "Iterator should return strings, "
+                                    "not %.200s "
+                                    "(did you open the file in text mode?)",
+                                    lineobj->ob_type->tp_name
+                               );
+                       return NULL;
+               }
                 ++self->line_num;
                 line = PyUnicode_AsUnicode(lineobj);
                 linelen = PyUnicode_GetSize(lineobj);