Kaydet (Commit) 10c476db authored tarafından Amaury Forgeot d'Arc's avatar Amaury Forgeot d'Arc

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.
üst a2d1d7e3
...@@ -6,7 +6,7 @@ import io ...@@ -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): ...@@ -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): ...@@ -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)
......
...@@ -270,7 +270,7 @@ _set_str(const char *name, PyObject **target, PyObject *src, const char *dflt) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment