EN · DE · RU · FR · ES

#1862: CardDavServerDebugWriterTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavServerDebugWriterTest.kt Модульный тест — пакет org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavServerDebugWriterTest.kt 38 строк · 13 кода · 22 комментария · 3 пустых
Целенаправленный модульный тест, проверяющий экранирование строк CSV в CardDavServerDebugWriter.asCsvValue(). Гарантирует, что встроенные символы двойных кавычек правильно экранируются путем удвоения (согласно соглашению CSV RFC 4180) и что пустые строки заключаются в кавычки. Это критически важно для отладочного логирования трафика CardDAV, где поля могут содержать специальные символы.

Архитектура

Этот тест нацелен на служебный класс CardDavServerDebugWriter, который отвечает за запись отладочного вывода сервера CardDAV в формате CSV. Экранирование CSV необходимо для корректного логирования данных HTTP-запросов/ответов, которые могут содержать встроенные кавычки, символы новой строки или другие специальные символы.

Импорты и зависимости

Проверяемые правила экранирования CSV

Входные данныеОжидаемый результатПравило
"" (пустая строка)"""" (две пары кавычек)Пустые строки заключаются в кавычки, создавая экранированную пустую строку в кавычках: "" (внешние кавычки), содержащие "" (экранированная пустота). Фактически тест ожидает """", что представляет собой поле в кавычках — внешние кавычки оборачивают поле, а внутренняя удвоенная кавычка является экранированным символом кавычки согласно RFC 4180.
Тест "пользователь"\r\nПривет мир"Тест ""пользователь""\r\nПривет мир"Двойные кавычки внутри значения экранируются путем удвоения ("" превращается в ""). Последовательности CR+LF сохраняются как литеральные \r\n. Все значение оборачивается во внешние кавычки.

Контекст проектирования

Класс CardDavServerDebugWriter создает вывод CSV для логирования/отладки взаимодействий с сервером CardDAV. CSV был выбран, поскольку его легко импортировать в приложения для работы с электронными таблицами для анализа. Экранирование следует соглашениям RFC 4180:

Примечание: В тесте используется \\r\\n (литеральная обратная косая черта-r-обратная косая черта-n) в ожидаемой строке, что предполагает, что метод asCsvValue сохраняет фактические символы CR+LF, а не преобразует их в escape-последовательности.

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки исходных файлов: 2024-> 2025.
f86cfa20a WIP: Сервер CardDav.