Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Mark failing tests
  • Loading branch information
ShaharNaveh committed Jul 25, 2025
commit d8aa0f3c58a944705a5cbd67f42e216a036f8c3e
56 changes: 56 additions & 0 deletions Lib/test/test_csv.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,14 @@ def _test_arg_valid(self, ctor, arg):
self.assertRaises(ValueError, ctor, arg,
quotechar='\x85', lineterminator='\x85')

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_reader_arg_valid(self):
self._test_arg_valid(csv.reader, [])
self.assertRaises(OSError, csv.reader, BadIterable())

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_writer_arg_valid(self):
self._test_arg_valid(csv.writer, StringIO())
class BadWriter:
Expand Down Expand Up @@ -210,6 +214,8 @@ def test_write_bigfield(self):
self._write_test([bigstring,bigstring], '%s,%s' % \
(bigstring, bigstring))

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_write_quoting(self):
self._write_test(['a',1,'p,q'], 'a,1,"p,q"')
self._write_error_test(csv.Error, ['a',1,'p,q'],
Expand All @@ -227,6 +233,8 @@ def test_write_quoting(self):
self._write_test(['a','',None,1], '"a","",,"1"',
quoting = csv.QUOTE_NOTNULL)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_write_escape(self):
self._write_test(['a',1,'p,q'], 'a,1,"p,q"',
escapechar='\\')
Expand Down Expand Up @@ -258,6 +266,8 @@ def test_write_escape(self):
self._write_test(['C\\', '6', '7', 'X"'], 'C\\\\,6,7,"X"""',
escapechar='\\', quoting=csv.QUOTE_MINIMAL)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_write_lineterminator(self):
for lineterminator in '\r\n', '\n', '\r', '!@#', '\0':
with self.subTest(lineterminator=lineterminator):
Expand All @@ -271,6 +281,8 @@ def test_write_lineterminator(self):
f'1,2{lineterminator}'
f'"\r","\n"{lineterminator}')

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_write_iterable(self):
self._write_test(iter(['a', 1, 'p,q']), 'a,1,"p,q"')
self._write_test(iter(['a', 1, None]), 'a,1,')
Expand Down Expand Up @@ -313,6 +325,8 @@ def test_writerows_with_none(self):
self.assertEqual(fileobj.read(), 'a\r\n""\r\n')


# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_write_empty_fields(self):
self._write_test((), '')
self._write_test([''], '""')
Expand All @@ -326,6 +340,8 @@ def test_write_empty_fields(self):
self._write_test(['', ''], ',')
self._write_test([None, None], ',')

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_write_empty_fields_space_delimiter(self):
self._write_test([''], '""', delimiter=' ', skipinitialspace=False)
self._write_test([''], '""', delimiter=' ', skipinitialspace=True)
Expand Down Expand Up @@ -366,6 +382,8 @@ def _read_test(self, input, expect, **kwargs):
result = list(reader)
self.assertEqual(result, expect)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_oddinputs(self):
self._read_test([], [])
self._read_test([''], [[]])
Expand All @@ -376,6 +394,8 @@ def test_read_oddinputs(self):
self.assertRaises(csv.Error, self._read_test,
[b'abc'], None)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_eol(self):
self._read_test(['a,b', 'c,d'], [['a','b'], ['c','d']])
self._read_test(['a,b\n', 'c,d\n'], [['a','b'], ['c','d']])
Expand All @@ -390,6 +410,8 @@ def test_read_eol(self):
with self.assertRaisesRegex(csv.Error, errmsg):
next(csv.reader(['a,b\r\nc,d']))

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_eof(self):
self._read_test(['a,"'], [['a', '']])
self._read_test(['"a'], [['a']])
Expand All @@ -399,6 +421,8 @@ def test_read_eof(self):
self.assertRaises(csv.Error, self._read_test,
['^'], [], escapechar='^', strict=True)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_nul(self):
self._read_test(['\0'], [['\0']])
self._read_test(['a,\0b,c'], [['a', '\0b', 'c']])
Expand All @@ -411,6 +435,8 @@ def test_read_delimiter(self):
self._read_test(['a;b;c'], [['a', 'b', 'c']], delimiter=';')
self._read_test(['a\0b\0c'], [['a', 'b', 'c']], delimiter='\0')

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_escape(self):
self._read_test(['a,\\b,c'], [['a', 'b', 'c']], escapechar='\\')
self._read_test(['a,b\\,c'], [['a', 'b,c']], escapechar='\\')
Expand All @@ -423,6 +449,8 @@ def test_read_escape(self):
self._read_test(['a,\\b,c'], [['a', '\\b', 'c']], escapechar=None)
self._read_test(['a,\\b,c'], [['a', '\\b', 'c']])

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_quoting(self):
self._read_test(['1,",3,",5'], [['1', ',3,', '5']])
self._read_test(['1,",3,",5'], [['1', '"', '3', '"', '5']],
Expand Down Expand Up @@ -459,6 +487,8 @@ def test_read_quoting(self):
self._read_test(['1\\.5,\\.5,"\\.5"'], [[1.5, 0.5, ".5"]],
quoting=csv.QUOTE_STRINGS, escapechar='\\')

# TODO: RUSTPYTHON; panic
@unittest.skip("TODO: RUSTPYTHON; slice index starts at 1 but ends at 0")
def test_read_skipinitialspace(self):
self._read_test(['no space, space, spaces,\ttab'],
[['no space', 'space', 'spaces', '\ttab']],
Expand All @@ -473,6 +503,8 @@ def test_read_skipinitialspace(self):
[[None, None, None]],
skipinitialspace=True, quoting=csv.QUOTE_STRINGS)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_space_delimiter(self):
self._read_test(['a b', ' a ', ' ', ''],
[['a', '', '', 'b'], ['', '', 'a', '', ''], ['', '', ''], []],
Expand Down Expand Up @@ -512,6 +544,8 @@ def test_read_linenum(self):
self.assertRaises(StopIteration, next, r)
self.assertEqual(r.line_num, 3)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_roundtrip_quoteed_newlines(self):
rows = [
['\na', 'b\nc', 'd\n'],
Expand All @@ -530,6 +564,8 @@ def test_roundtrip_quoteed_newlines(self):
for i, row in enumerate(csv.reader(fileobj)):
self.assertEqual(row, rows[i])

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_roundtrip_escaped_unquoted_newlines(self):
rows = [
['\na', 'b\nc', 'd\n'],
Expand Down Expand Up @@ -644,6 +680,8 @@ def compare_dialect_123(self, expected, *writeargs, **kwwriteargs):
fileobj.seek(0)
self.assertEqual(fileobj.read(), expected)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_dialect_apply(self):
class testA(csv.excel):
delimiter = "\t"
Expand Down Expand Up @@ -679,6 +717,8 @@ def test_copy(self):
dialect = csv.get_dialect(name)
self.assertRaises(TypeError, copy.copy, dialect)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_pickle(self):
for name in csv.list_dialects():
dialect = csv.get_dialect(name)
Expand Down Expand Up @@ -765,6 +805,8 @@ def test_quoted_quote(self):
'"I see," said the blind man',
'as he picked up his hammer and saw']])

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_quoted_nl(self):
input = '''\
1,2,3,"""I see,""
Expand Down Expand Up @@ -805,15 +847,21 @@ class EscapedExcel(csv.excel):
class TestEscapedExcel(TestCsvBase):
dialect = EscapedExcel()

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_escape_fieldsep(self):
self.writerAssertEqual([['abc,def']], 'abc\\,def\r\n')

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_escape_fieldsep(self):
self.readerAssertEqual('abc\\,def\r\n', [['abc,def']])

class TestDialectUnix(TestCsvBase):
dialect = 'unix'

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_simple_writer(self):
self.writerAssertEqual([[1, 'abc def', 'abc']], '"1","abc def","abc"\n')

Expand All @@ -830,6 +878,8 @@ class TestQuotedEscapedExcel(TestCsvBase):
def test_write_escape_fieldsep(self):
self.writerAssertEqual([['abc,def']], '"abc,def"\r\n')

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_escape_fieldsep(self):
self.readerAssertEqual('"abc\\,def"\r\n', [['abc,def']])

Expand Down Expand Up @@ -1026,6 +1076,8 @@ def test_read_multi(self):
"s1": 'abc',
"s2": 'def'})

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_read_with_blanks(self):
reader = csv.DictReader(["1,2,abc,4,5,6\r\n","\r\n",
"1,2,abc,4,5,6\r\n"],
Expand Down Expand Up @@ -1077,6 +1129,8 @@ def test_float_write(self):
fileobj.seek(0)
self.assertEqual(fileobj.read(), expected)

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_char_write(self):
import array, string
a = array.array('w', string.ascii_letters)
Expand Down Expand Up @@ -1224,6 +1278,8 @@ class mydialect(csv.Dialect):
self.assertEqual(str(cm.exception),
'"lineterminator" must be a string')

# TODO: RUSTPYTHON
@unittest.expectedFailure
def test_invalid_chars(self):
def create_invalid(field_name, value, **kwargs):
class mydialect(csv.Dialect):
Expand Down
Loading