CardDavXmlUtilsTest.ktCardDavXmlUtils : extraction de l'élément racine, analyse des identifiants de contact à partir de requêtes multiget, extraction du nom/valeur d'élément XML avec support des espaces de noms, et échappement des entités XML. Ces utilitaires constituent l'épine dorsale de l'analyse XML du gestionnaire de protocole CardDAV.CardDavXmlUtils fournit une analyse XML légère sans analyseur DOM/SAX complet — en utilisant une extraction basée sur des expressions régulières pour les charges utiles XML spécifiques à CardDAV. Cette approche est choisie car les charges utiles XML CardDAV sont structurellement prévisibles (définies par les RFC 4918, 6352) et critiques pour les performances.
Extrait le nom de l'élément racine XML d'une chaîne, en gérant la déclaration XML optionnelle (<?xml ... ?>) et les éléments préfixés par un espace de noms (d:multistatus). Les tests couvrent :
<d:multistatus xmlns:d="DAV:"> → multistatus<?xml version="1.0"?>, retourne multistatusCeci est essentiel pour que le gestionnaire de réponse PROPFIND/REPORT puisse diriger vers le bon constructeur de réponse en fonction du type d'élément racine.
Analyse le corps d'une requête REPORT addressbook-multiget CardDAV pour extraire les identifiants de contact ProjectForge des éléments <d:href>. Les tests analysent une charge utile XML réaliste avec trois entrées <d:href>{chemin}/ProjectForge-{id}.vcf</d:href> et vérifient l'extraction correcte des identifiants 7833476, 7858940, 7859171.
La méthode utilise une correspondance regex sur le motif de nom de fichier ProjectForge-{id}.vcf dans les éléments href. Le résultat est un Sequence<Int> (évaluation paresseuse via .toList()).
Recherche un élément nommé dans le XML et retourne son nom qualifié incluant le préfixe d'espace de noms :
propd:propCeci est utilisé lorsque le serveur a besoin de connaître le nom qualifié exact pour la génération d'éléments de réponse.
Extrait le contenu textuel d'un élément nommé à partir du XML, en gérant :
<etag> </etag> → " " (préserve les espaces blancs)<etag /> → null (pas de contenu textuel)<d:etag /> → null<d:sync-token>123456</d:sync-token> → 123456Échappe cinq caractères spéciaux XML selon la spécification XML 1.0 :
< → <> → > (géré ; l'entrée de test contient >)" → "& → &' → 'L'entrée de test <hurzel test="dkfsld"> & ' est échappée en <hurzel test="dkfsld"> & '.
Tous les tests utilisent la fonction de portée let de Kotlin avec des littéraux de chaîne bruts ("""...""") pour les données de test XML. trimIndent() et trimMargin() sont utilisés pour nettoyer les fixtures de test multilignes tout en préservant la structure XML.
868d6abb7 2025 -> 2026 63081666f En-têtes des fichiers source : 2024 -> 2025. 5167dab99 WIP : Carddav 6c1daac93 WIP : Carddav 0d7a81f91 WIP : Carddav dc3936193 WIP : Carddav (Thunderbird fonctionne, lecture seule, incluant images etc.) caee35750 WIP : Carddav 2ad0cfe66 WIP : Carddav