Publié le :
Test CREATION_INTERNE

Test de la macro mp_dirlist pour la liste de répertoires

Ce code est également disponible en : Deutsch English Español
En attente de validation
Attention : Ce code nécessite des droits administrateur.
Le script initialise un répertoire racine temporaire dans le répertoire de travail SAS©, puis y construit une hiérarchie de sous-répertoires (a, b, a/d, a/e, a/e/f) à l'aide de la macro `%mf_mkdir`. Un jeu de données SAS© (`test.ds1`) est créé dans le répertoire le plus profond (`&root/a/e/f`) pour simuler un contenu. Plusieurs appels à `%mp_dirlist` sont effectués avec des paramètres `maxdepth` variés (MAX, 2, 0) afin de tester la capacité de la macro à lister les répertoires à différentes profondeurs. Pour chaque test, le script utilise les macros `%mf_nobs` pour compter les observations dans les jeux de données de sortie de `mp_dirlist` et `%mp_assert` pour valider que ces nombres correspondent aux attentes. Des cas spécifiques pour un répertoire vide (`&root/b`) et un répertoire inexistant (`&root/notexisting`) sont également testés pour assurer la robustesse de la macro.
Analyse des données

Type : CREATION_INTERNE


Le script crée une structure de répertoires et un jeu de données SAS temporaires à des fins de test. Aucune donnée externe ou provenant de la bibliothèque `SASHELP` n'est utilisée directement pour le processus de test. Les données de test sont générées sur place.

1 Bloc de code
MACRO mf_mkdir / DATA STEP Data
Explication :
Ce bloc de code initialise une variable macro `root` pointant vers un nouveau sous-répertoire 'top' dans le répertoire de travail temporaire (`work`). Il utilise ensuite la macro `%mf_mkdir` à plusieurs reprises pour créer une hiérarchie de répertoires imbriqués. Une libname `test` est définie pour pointer vers le répertoire le plus profond. Enfin, un jeu de données `ds1` est créé dans cette bibliothèque, servant de donnée de test.
Copié !
1%let root=%sysfunc(pathname(work))/top;
2%mf_mkdir(&root)
3%mf_mkdir(&root/a)
4%mf_mkdir(&root/b)
5%mf_mkdir(&root/a/d)
6%mf_mkdir(&root/a/e)
7%mf_mkdir(&root/a/e/f)
8LIBNAME test '&root/a/e/f';
9DATA test.ds1;
10 x=1;
11RUN;
2 Bloc de code
MACRO mp_dirlist / MACRO mp_assert
Explication :
Ce bloc teste la macro `%mp_dirlist` en lui demandant de lister tous les niveaux de répertoires sous `&root` (avec `maxdepth=MAX`). La macro `%mf_nobs` est utilisée pour compter les observations dans le jeu de données de sortie `work.myTable`. `%mp_assert` vérifie que le nombre d'observations est égal à 6, ce qui correspond au nombre total de répertoires créés.
Copié !
1%mp_dirlist(path=&root, outds=myTable, maxdepth=MAX)
2 
3%mp_assert(
4 iftrue=(%mf_nobs(work.mytable)=6),
5 desc=All levels returned,
6 outds=work.test_results
7)
3 Bloc de code
MACRO mp_dirlist / MACRO mp_assert
Explication :
Ce test appelle `%mp_dirlist` avec `maxdepth=2`, ce qui signifie que seuls les répertoires des deux premiers niveaux de profondeur (à partir de `&root`) doivent être listés. `%mp_assert` est utilisé pour confirmer que le jeu de données `work.myTable2` contient 5 observations, validant ainsi la limitation de profondeur.
Copié !
1%mp_dirlist(path=&root, outds=myTable2, maxdepth=2)
2 
3%mp_assert(
4 iftrue=(%mf_nobs(work.mytable2)=5),
5 desc=Top two levels returned,
6 outds=work.test_results
7)
4 Bloc de code
MACRO mp_dirlist / MACRO mp_assert
Explication :
Ce bloc de code teste `%mp_dirlist` avec `maxdepth=0`, indiquant qu'uniquement le répertoire spécifié (`&root`) lui-même doit être retourné. `%mp_assert` vérifie que le jeu de données `work.myTable3` contient 2 observations, ce qui est le comportement attendu pour cette profondeur de liste (généralement le répertoire lui-même plus une entrée pour la métadonnée ou le parent).
Copié !
1%mp_dirlist(path=&root, outds=work.myTable3, maxdepth=0)
2 
3%mp_assert(
4 iftrue=(%mf_nobs(work.mytable3)=2),
5 desc=Top level returned,
6 outds=work.test_results
7)
5 Bloc de code
MACRO mp_dirlist / MACRO mp_assert
Explication :
Ce test valide le comportement de `%mp_dirlist` lorsqu'il est appliqué à un répertoire vide (`&root/b`). La macro `%mp_assert` est utilisée pour vérifier que le jeu de données de sortie `work.myTable4` ne contient aucune observation, comme attendu pour un répertoire sans sous-répertoires ni fichiers listables.
Copié !
1%mp_dirlist(path=&root/b, outds=work.myTable4)
2%mp_assert(
3 iftrue=(%mf_nobs(work.mytable4)=0),
4 desc=Empty TABLE for empty directory,
5 outds=work.test_results
6)
6 Bloc de code
MACRO mp_dirlist / MACRO mp_assert
Explication :
Le dernier bloc de code teste `%mp_dirlist` avec un chemin de répertoire qui n'existe pas (`&root/notexisting`). `%mp_assert` est utilisé pour confirmer que le jeu de données de sortie `work.myTable5` est vide, ce qui indique que la macro gère correctement les chemins invalides sans générer d'erreur et en retournant un résultat vide.
Copié !
1%mp_dirlist(path=&root/notexisting, outds=work.myTable5)
2%mp_assert(
3 iftrue=(%mf_nobs(work.mytable5)=0),
4 desc=Empty TABLE for non-existing directory,
5 outds=work.test_results
6)
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de. Ce fichier fait partie de SASUnit, le framework de test unitaire pour les programmes SAS(R). Pour les informations de copyright et les conditions d'utilisation sous la licence publique générale GNU Lesser, voir le fichier README.md inclus ou https://github.com/HMS-Analytical-Software/SASUnit/wiki/readme/.