Correct test_cvs on Windows, as suggested by Raghuram Devarakonda

in issue1395. All other places in this file already use newline=''...

Also check that csv.reader is given an iterable returning strings.
This commit is contained in:
Amaury Forgeot d'Arc 2007-11-19 21:20:21 +00:00
parent a2d1d7e3b2
commit 10c476db2c
2 changed files with 17 additions and 3 deletions

View file

@ -6,7 +6,7 @@ import io
import sys import sys
import os import os
import unittest import unittest
from io import StringIO from io import StringIO, BytesIO
from tempfile import TemporaryFile from tempfile import TemporaryFile
import csv import csv
import gc import gc
@ -211,6 +211,10 @@ class Test_Csv(unittest.TestCase):
['ab\0c'], None, strict = 1) ['ab\0c'], None, strict = 1)
self._read_test(['"ab"c'], [['abc']], doublequote = 0) self._read_test(['"ab"c'], [['abc']], doublequote = 0)
self.assertRaises(csv.Error, self._read_test,
[b'ab\0c'], None)
def test_read_eol(self): def test_read_eol(self):
self._read_test(['a,b'], [['a','b']]) self._read_test(['a,b'], [['a','b']])
self._read_test(['a,b\n'], [['a','b']]) self._read_test(['a,b\n'], [['a','b']])
@ -375,7 +379,7 @@ class TestDialectRegistry(unittest.TestCase):
class TestCsvBase(unittest.TestCase): class TestCsvBase(unittest.TestCase):
def readerAssertEqual(self, input, expected_result): def readerAssertEqual(self, input, expected_result):
with TemporaryFile("w+") as fileobj: with TemporaryFile("w+", newline='') as fileobj:
fileobj.write(input) fileobj.write(input)
fileobj.seek(0) fileobj.seek(0)
reader = csv.reader(fileobj, dialect = self.dialect) reader = csv.reader(fileobj, dialect = self.dialect)

View file

@ -270,7 +270,7 @@ _set_str(const char *name, PyObject **target, PyObject *src, const char *dflt)
*target = NULL; *target = NULL;
else if (!IS_BASESTRING(src)) { else if (!IS_BASESTRING(src)) {
PyErr_Format(PyExc_TypeError, PyErr_Format(PyExc_TypeError,
"\"%s\" must be an string", name); "\"%s\" must be a string", name);
return -1; return -1;
} }
else { else {
@ -793,6 +793,16 @@ Reader_iternext(ReaderObj *self)
"newline inside string"); "newline inside string");
return NULL; 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; ++self->line_num;
line = PyUnicode_AsUnicode(lineobj); line = PyUnicode_AsUnicode(lineobj);
linelen = PyUnicode_GetSize(lineobj); linelen = PyUnicode_GetSize(lineobj);