Skip to content

Commit 2a89f1b

Browse files
committed
[GR-23285] Make test_csv pass.
PullRequest: graalpython/1680
2 parents 86c03b1 + 28416bb commit 2a89f1b

File tree

4 files changed

+62
-10
lines changed

4 files changed

+62
-10
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_set.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,3 +485,37 @@ def iterate_and_update(it):
485485

486486
s = {1, 2}
487487
assert_raises(RuntimeError, iterate_and_update, s)
488+
489+
# copied and modified test_collections.py#test_issue_4920
490+
# the original will always fail on graalpython due to different set order
491+
def test_MutableSet_pop():
492+
class MySet(MutableSet):
493+
__slots__=['__s']
494+
def __init__(self,items=None):
495+
if items is None:
496+
items=[]
497+
self.__s=set(items)
498+
def __contains__(self,v):
499+
return v in self.__s
500+
def __iter__(self):
501+
return iter(self.__s)
502+
def __len__(self):
503+
return len(self.__s)
504+
def add(self,v):
505+
result=v not in self.__s
506+
self.__s.add(v)
507+
return result
508+
def discard(self,v):
509+
result=v in self.__s
510+
self.__s.discard(v)
511+
return result
512+
def __repr__(self):
513+
return "MySet(%s)" % repr(list(self))
514+
l = [5,43]
515+
s = MySet(l)
516+
v1 = s.pop()
517+
assert v1 in l
518+
v2 = s.pop()
519+
assert v2 in l
520+
assert v1 != v2
521+
assert len(s) == 0

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_csv.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
*graalpython.lib-python.3.test.test_csv.KeyOrderingTest.test_ordered_dict_reader
2+
*graalpython.lib-python.3.test.test_csv.KeyOrderingTest.test_ordering_for_the_dict_reader_and_writer
23
*graalpython.lib-python.3.test.test_csv.MiscTestCase.test__all__
34
*graalpython.lib-python.3.test.test_csv.TestArrayWrites.test_char_write
45
*graalpython.lib-python.3.test.test_csv.TestArrayWrites.test_double_write
@@ -40,7 +41,10 @@
4041
*graalpython.lib-python.3.test.test_csv.TestDialectRegistry.test_space_dialect
4142
*graalpython.lib-python.3.test.test_csv.TestDialectUnix.test_simple_reader
4243
*graalpython.lib-python.3.test.test_csv.TestDialectUnix.test_simple_writer
44+
*graalpython.lib-python.3.test.test_csv.TestDialectValidity.test_delimiter
4345
*graalpython.lib-python.3.test.test_csv.TestDialectValidity.test_invalid_chars
46+
*graalpython.lib-python.3.test.test_csv.TestDialectValidity.test_lineterminator
47+
*graalpython.lib-python.3.test.test_csv.TestDialectValidity.test_quoting
4448
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_read_dict_fieldnames_chain
4549
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_read_dict_fieldnames_from_file
4650
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_read_dict_fields
@@ -53,9 +57,12 @@
5357
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_read_short
5458
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_read_with_blanks
5559
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_typo_in_extrasaction_raises_error
60+
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_write_field_not_in_field_names_ignore
5661
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_write_field_not_in_field_names_raise
5762
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_write_fields_not_in_fieldnames
63+
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_write_multiple_dict_rows
5864
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_write_no_fields
65+
*graalpython.lib-python.3.test.test_csv.TestDictFields.test_write_simple_dict
5966
*graalpython.lib-python.3.test.test_csv.TestEscapedExcel.test_escape_fieldsep
6067
*graalpython.lib-python.3.test.test_csv.TestEscapedExcel.test_read_escape_fieldsep
6168
*graalpython.lib-python.3.test.test_csv.TestLeaks.test_create_read
@@ -72,9 +79,11 @@
7279
*graalpython.lib-python.3.test.test_csv.TestSniffer.test_sniff
7380
*graalpython.lib-python.3.test.test_csv.TestUnicode.test_unicode_read
7481
*graalpython.lib-python.3.test.test_csv.TestUnicode.test_unicode_write
82+
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_read_bigfield
7583
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_read_eol
7684
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_read_escape
7785
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_read_linenum
86+
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_read_oddinputs
7887
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_read_quoting
7988
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_reader_arg_valid
8089
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_reader_attrs
@@ -84,6 +93,7 @@
8493
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_write_arg_valid
8594
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_write_bigfield
8695
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_write_escape
96+
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_write_iterable
8797
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_write_quoting
8898
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_writer_arg_valid
8999
*graalpython.lib-python.3.test.test_csv.Test_Csv.test_writer_attrs

graalpython/lib-python/3/_csv.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,15 @@ def __new__(cls, dialect = None, **kwargs):
120120
def set_char(x):
121121
if x is None:
122122
return None
123-
if isinstance(x, str) and len(x) <= 1:
123+
if not isinstance(x, str):
124+
raise TypeError('"%s" must be string, not %s' % (name, type(x).__name__))
125+
if len(x) == 1:
124126
return x
125-
raise TypeError("%r must be a 1-character string" % (name,))
127+
raise TypeError('"%s" must be a 1-character string' % (name,))
126128
def set_str(x):
127129
if isinstance(x, str):
128130
return x
129-
raise TypeError("%r must be a string" % (name,))
131+
raise TypeError('"%s" must be a string' % (name))
130132
def set_quoting(x):
131133
if x in range(4):
132134
return x
@@ -257,8 +259,7 @@ def __next__(self):
257259
raise
258260

259261
self.line_num += 1
260-
261-
if '\0' in line:
262+
if isinstance(line, str) and '\0' in line or isinstance(line, bytes) and line.index(0) >=0:
262263
raise Error("line contains NULL byte")
263264
pos = 0
264265
while pos < len(line):
@@ -504,16 +505,20 @@ def _join_append(self, field, quoted, quote_empty):
504505

505506

506507
def writerow(self, row):
508+
if row is None:
509+
raise Error
510+
507511
dialect = self.dialect
508-
try:
509-
rowlen = len(row)
510-
except TypeError:
511-
raise Error("sequence expected")
512512

513513
# join all fields in internal buffer
514514
self._join_reset()
515515

516+
fields = []
516517
for field in row:
518+
fields.append(field)
519+
520+
rowlen = len(fields)
521+
for field in fields:
517522
quoted = False
518523
if dialect.quoting == QUOTE_NONNUMERIC:
519524
try:
@@ -526,6 +531,8 @@ def writerow(self, row):
526531
quoted = True
527532

528533
if field is None:
534+
if dialect.quoting == QUOTE_NONE:
535+
raise Error
529536
value = ""
530537
elif isinstance(field, float):
531538
value = repr(field)
@@ -589,7 +596,7 @@ def field_size_limit(limit=undefined):
589596
old_limit = _field_limit
590597

591598
if limit is not undefined:
592-
if not isinstance(limit, (int, long)):
599+
if not isinstance(limit, int):
593600
raise TypeError("int expected, got %s" %
594601
(limit.__class__.__name__,))
595602
_field_limit = limit

graalpython/lib-python/3/test/test_collections.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,6 +1400,7 @@ def test_issue_5647(self):
14001400
s &= WithSet('cdef') # This used to fail
14011401
self.assertEqual(set(s), set('cd'))
14021402

1403+
@support.impl_detail("relies on element order in a set", graalvm=False)
14031404
def test_issue_4920(self):
14041405
# MutableSet.pop() method did not work
14051406
class MySet(MutableSet):

0 commit comments

Comments
 (0)