CardDavXmlUtilsTest.ktCardDavXmlUtils: extracción del elemento raíz, análisis de ID de contacto desde solicitudes multiget, extracción de nombre/valor de elementos XML con soporte de espacios de nombres y escape de entidades XML. Estas utilidades forman la columna vertebral del análisis XML del manejador del protocolo CardDAV.CardDavXmlUtils proporciona un análisis XML ligero sin un analizador DOM/SAX completo — utilizando extracción basada en expresiones regulares para cargas útiles XML específicas de CardDAV. Este enfoque se elige porque las cargas útiles XML de CardDAV son estructuralmente predecibles (definidas por los RFC 4918, 6352) y críticas para el rendimiento.
Extrae el nombre del elemento raíz XML de una cadena, manejando la declaración XML opcional (<?xml ... ?>) y elementos con prefijo de espacio de nombres (d:multistatus). Las pruebas cubren:
<d:multistatus xmlns:d="DAV:"> → multistatus<?xml version="1.0"?>, devuelve multistatusEsto es crítico para que el manejador de respuesta PROPFIND/REPORT envíe al constructor de respuesta correcto según el tipo de elemento raíz.
Analiza el cuerpo de una solicitud REPORT addressbook-multiget de CardDAV para extraer los ID de contacto de ProjectForge de los elementos <d:href>. Las pruebas analizan una carga útil XML realista con tres entradas <d:href>{ruta}/ProjectForge-{id}.vcf</d:href> y verifican la extracción correcta de los ID 7833476, 7858940, 7859171.
El método utiliza coincidencia de expresiones regulares en el patrón de nombre de archivo ProjectForge-{id}.vcf dentro de los elementos href. El resultado es un Sequence<Int> (evaluación perezosa vía .toList()).
Encuentra un elemento nombrado en XML y devuelve su nombre calificado incluyendo el prefijo del espacio de nombres:
propd:propExtrae el contenido de texto de un elemento nombrado desde XML, manejando:
<etag> </etag> → " " (preserva espacios en blanco)<etag /> → null (sin contenido de texto)<d:etag /> → null<d:sync-token>123456</d:sync-token> → 123456Escapa cinco caracteres especiales XML según la especificación XML 1.0:
< → <> → > (manejado; la entrada de prueba contiene >)" → "& → &' → '<hurzel test="dkfsld"> & ' se escapa a <hurzel test="dkfsld"> & '.
Todas las pruebas utilizan la función de ámbito let de Kotlin con literales de cadena sin procesar ("""...""") para los datos de prueba XML. Se utilizan trimIndent() y trimMargin() para limpiar los fixtures de prueba multilínea mientras se preserva la estructura XML.
868d6abb7 2025 -> 2026 63081666f Encabezados de archivos fuente: 2024-> 2025. 5167dab99 WIP: Carddav 6c1daac93 WIP: Carddav 0d7a81f91 WIP: Carddav dc3936193 WIP: Carddav (Thunderbird funciona, solo lectura, incluyendo imágenes etc.) caee35750 WIP: Carddav 2ad0cfe66 WIP: Carddav