배경
csv.writer는 임의의 문자열을 lineterminator로 받을 수 있어야 한다 (CPython 호환). 현재 RustPython은 lineterminator를 단일 바이트(csv_core::Terminator)로만 저장하기 때문에 '\r\n', '\n', '\r', '\0' 등 단일/이중 바이트 케이스는 통과하지만 '!@#' 같은 멀티캐릭터 종결자는 저장·출력하지 못한다.
그 결과 Lib/test/test_csv.py의 test_write_lineterminator가 @unittest.expectedFailure로 마킹되어 있다. (해당 테스트는 '!@#' 서브케이스에서만 실패)
import csv, io
s = io.StringIO()
csv.writer(s, lineterminator="!@#").writerow(["a", "b"])
# 기대: 'a,b!@#'
목표
- writer가 멀티캐릭터
lineterminator를 온전히 저장하고 출력하도록 한다.
test_write_lineterminator(test_csv.py:266)의 @unittest.expectedFailure # TODO: RUSTPYTHON 마킹을 제거(언마크)한다.
스코프
멀티캐릭터 lineterminator에 한정한다. 아래는 이 이슈에서 제외하고 별도 후속으로 다룬다.
수용 기준
cargo run --release -- -m test test_csv에서 test_write_lineterminator 통과 및 마킹 제거.
- 기존 통과 케이스(
'\r\n', '\n', '\r', '\0') 회귀 없음.
test_lineterminator(1280), test_writer_dialect_attrs(175) 회귀 없음.
- QUOTE_ALL / QUOTE_NONNUMERIC 경로에서도 멀티캐릭터 종결자가 절단되지 않음.
참고
배경
csv.writer는 임의의 문자열을lineterminator로 받을 수 있어야 한다 (CPython 호환). 현재 RustPython은lineterminator를 단일 바이트(csv_core::Terminator)로만 저장하기 때문에'\r\n','\n','\r','\0'등 단일/이중 바이트 케이스는 통과하지만'!@#'같은 멀티캐릭터 종결자는 저장·출력하지 못한다.그 결과
Lib/test/test_csv.py의test_write_lineterminator가@unittest.expectedFailure로 마킹되어 있다. (해당 테스트는'!@#'서브케이스에서만 실패)목표
lineterminator를 온전히 저장하고 출력하도록 한다.test_write_lineterminator(test_csv.py:266)의@unittest.expectedFailure # TODO: RUSTPYTHON마킹을 제거(언마크)한다.스코프
멀티캐릭터 lineterminator에 한정한다. 아래는 이 이슈에서 제외하고 별도 후속으로 다룬다.
수용 기준
cargo run --release -- -m test test_csv에서test_write_lineterminator통과 및 마킹 제거.'\r\n','\n','\r','\0') 회귀 없음.test_lineterminator(1280),test_writer_dialect_attrs(175) 회귀 없음.참고