/
nv-lang
/
nova
Обзор
Документация
Войти
/
nv-lang
/
nova
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
std/src/encoding/csv_test.nv
63 строки
2 KB
Evgeniy Golovin
195: std/ -> std/src/ (git mv, module-path без изменений)
13 июл 2026, 01:13
13 июл 2026, 01:13
be4fcab
Код
Авторство
О чём код?
// SPDX-License-Identifier: MIT OR Apache-2.0 // std/encoding/csv_test.nv — публичный контракт Csv (RFC 4180 parse/encode). module encoding.csv_test import std.encoding.csv.{Csv, ParseCsvError} test "parse: простой CSV" { ro r = Csv.parse("a,b,c\n1,2,3\n") assert(r.len() == 2) assert(r[0] == ["a", "b", "c"]) assert(r[1] == ["1", "2", "3"]) } test "parse: quoted fields" { ro r = Csv.parse("\"hello, world\",foo\n") assert(r[0][0] == "hello, world") assert(r[0][1] == "foo") } test "parse: escaped quote (\"\")" { ro r = Csv.parse("\"He said \"\"hi\"\"\"\n") assert(r[0][0] == "He said \"hi\"") } test "parse: multiline в quoted field" { ro r = Csv.parse("\"line1\nline2\",x\n") assert(r[0][0] == "line1\nline2") } test "parse: ошибка — незакрытая quote" { ro r = with Fail[ParseCsvError] = |e| interrupt Some(e) { ro _ = Csv.parse("\"unterminated") None } assert(match r { Some(UnterminatedQuote { .. }) => true _ => false }) } test "encode: простой round-trip" { ro data [][]str = [["a", "b"], ["1", "2"]] ro s = Csv.encode(data) ro parsed = Csv.parse(s) assert(parsed == data) } test "encode: quoting запятых и кавычек" { ro data [][]str = [["hello, world", "x"]] ro s = Csv.encode(data) assert(s.contains("\"hello, world\"")) } test "encode: простое поле БЕЗ кавычек (пиннинг needs_quoting)" { // Пиннинг фикса D417-класса (2026-07-10): needs_quoting был always-true // (ведущий || = discarded closure) — каждый вывод квотился, round-trip // этого не ловил. Канон: поле без , " \n \r остаётся голым. ro data [][]str = [["plain", "x-1"]] ro s = Csv.encode(data) assert(s == "plain,x-1\n") assert(!s.contains("\"")) }