36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
import sys
|
|
sys.path.insert(0, "/root/.hermes/wizard-outputs/beam")
|
|
from csv_rfc4180 import parse_csv, write, loads, dumps
|
|
|
|
def eq(a,b):
|
|
assert a==b, (a,b)
|
|
|
|
# basic
|
|
eq(parse_csv("a,b,c\n1,2,3\n"), [["a","b","c"],["1","2","3"]])
|
|
# quoted embedded comma
|
|
eq(parse_csv('a,"b,c",d\n'), [["a","b,c","d"]])
|
|
# quoted newline
|
|
eq(parse_csv('a,"b\nc",d\n'), [["a","b\nc","d"]])
|
|
# doubled quote
|
|
eq(parse_csv('a,"b""c",d\n'), [["a",'b"c',"d"]])
|
|
# CRLF
|
|
eq(parse_csv("a,b\r\n1,2\r\n"), [["a","b"],["1","2"]])
|
|
# BOM
|
|
eq(parse_csv("\ufeffa,b\n"), [["a","b"]])
|
|
# empty input
|
|
eq(parse_csv(""), [])
|
|
# trailing empty line -> blank record ['']
|
|
eq(parse_csv("a,b\n\n"), [["a","b"],[""]])
|
|
# ragged
|
|
eq(parse_csv("a,b,c\n1,2\n"), [["a","b","c"],["1","2"]])
|
|
# write roundtrip
|
|
data = [["name","note"],["Alice","has, comma"],["Bob","line1\nline2"],["C","quote\"here"]]
|
|
s = write(data)
|
|
print(repr(s))
|
|
eq(parse_csv(s), data)
|
|
# write quoting minimal
|
|
eq(write([["a b","c"]]), 'a b,c\r\n')
|
|
# empty field
|
|
eq(parse_csv("a,,c\n"), [["a","","c"]])
|
|
print("ALL TESTS PASSED")
|