Files
troupe-standup/wizard-work/beam/test_csv.py
T

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")