EN · DE · RU · FR · ES

#1864 : CardDavXmlUtilsTest.kt

projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavXmlUtilsTest.kt Test unitaire — package org.projectforge.carddav, projectforge-carddav/src/test/kotlin/org/projectforge/carddav/CardDavXmlUtilsTest.kt 99 lignes · 70 code · 22 commentaires · 7 lignes vides
Suite de tests complète pour les fonctions utilitaires XML dans CardDavXmlUtils : 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.

Architecture

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.

Importations

Méthodes testées

1. getRootElement(xml) — Extraction de l'élément racine

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 :

Ceci 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.

2. extractContactIds(xml) — Extraction des identifiants de contact Multiget

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()).

3. getElementName(xml, name) — Résolution de nom d'élément avec espace de noms

Recherche un élément nommé dans le XML et retourne son nom qualifié incluant le préfixe d'espace de noms :

Ceci 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.

4. extractElementValue(xml, name) — Extraction du contenu d'un élément

Extrait le contenu textuel d'un élément nommé à partir du XML, en gérant :

5. escapeXml(xml) — Échappement des entités XML

Échappe cinq caractères spéciaux XML selon la spécification XML 1.0 :

L'entrée de test <hurzel test="dkfsld"> & ' est échappée en &lt;hurzel test=&quot;dkfsld&quot;&gt; &amp; &apos;.

L'approche basée sur les expressions régulières est rapide mais fragile — elle ne peut pas gérer du XML arbitraire avec des sections CDATA, des instructions de traitement ou des structures profondément imbriquées. Elle fonctionne correctement uniquement pour les schémas XML CardDAV prévisibles définis dans les RFC pertinentes.

Modèle de données de test

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.

Historique Git

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