Publié le :
Test CREATION_INTERNE

Test de la macro mp_base64copy

Ce code est également disponible en : Deutsch English Español
En attente de validation
Le script commence par définir une chaîne de caractères simple, l'écrit dans un fichier temporaire, puis l'encode en base64 à l'aide de `%mp_base64copy`. Le résultat encodé est ensuite décodé, et la chaîne originale est comparée à la chaîne décodée en utilisant `%mp_assert`. Une deuxième série de tests est effectuée avec une chaîne contenant des caractères multi-octets. Cette chaîne est également encodée, puis décodée, et une assertion est faite pour vérifier l'intégrité de la chaîne multi-octets après l'aller-retour encodage/décodage. Les résultats des assertions sont stockés dans `work.test_results`.
Analyse des données

Type : CREATION_INTERNE


Toutes les données utilisées (chaînes de test) sont définies et créées directement au sein du script via des variables macro ou des DATA steps écrivant dans des fichiers temporaires. Aucune donnée externe ou SASHELP n'est directement lue.

1 Bloc de code
DATA STEP / Macro (%mp_base64copy, %mp_assert) Data
Explication :
Ce bloc initialise une variable macro `string1` avec une chaîne de caractères simple. Un fichier temporaire `tmp` est créé et la valeur de `string1` y est écrite. La macro `%mp_base64copy` est ensuite appelée pour encoder le contenu de `tmp` (via `inref=tmp`) et stocker le résultat dans le fileref `myref`. Un `data _null_` lit `myref` et affiche son contenu dans le log (pour vérification intermédiaire). Le contenu de `myref` est ensuite décodé par `%mp_base64copy` dans `mynewref`. Enfin, un autre `data _null_` lit `mynewref`, récupère la chaîne décodée et la stocke dans la variable macro `string1_check`. La macro `%mp_assert` est utilisée pour comparer `string1` et `string1_check`, vérifiant ainsi que l'encodage/décodage a préservé l'intégrité de la chaîne originale.
Copié !
1%let string1=base ik ally;
2filename tmp temp;
3DATA _null_;
4 file tmp;
5 put "&string1";
6RUN;
7%mp_base64copy(inref=tmp, outref=myref, ACTION=ENCODE)
8 
9DATA _null_;
10 INFILE myref;
11 INPUT;
12 put _infile_;
13RUN;
14%mp_base64copy(inref=myref, outref=mynewref, ACTION=DECODE)
15DATA _null_;
16 INFILE mynewref lrecl=5000;
17 INPUT;
18 put _infile_;
19 call symputx('string1_check',_infile_);
20 stop;
21RUN;
22%mp_assert(
23 iftrue=("&string1"="&string1_check"),
24 desc=Basic String Compare,
25 outds=work.test_results
26)
2 Bloc de code
DATA STEP / Macro (%mp_base64copy, %mp_assert) Data
Explication :
Ce bloc teste la capacité de la macro `%mp_base64copy` à gérer des chaînes contenant des caractères multi-octets. Une chaîne littérale avec des caractères spéciaux est écrite dans un fichier temporaire `tmp2`. Cette chaîne est ensuite encodée en base64 dans `myref2`, puis décodée dans `newref2` à l'aide de `%mp_base64copy`. Un `data _null_` lit le contenu décodé de `newref2` et le compare à la chaîne originale. Le résultat de cette comparaison est stocké dans la variable macro `check2`. Enfin, `%mp_assert` est utilisé pour vérifier que `check2` est égal à '1', confirmant que la chaîne multi-octets a été correctement traitée tout au long du processus d'encodage et de décodage.
Copié !
1filename tmp2 temp lrecl=500;
2DATA _null_;
3 file tmp2;
4 put "'', '', '', '', '', '', '', '', '', '', '', '', '', ''";
5RUN;
6%mp_base64copy(inref=tmp2, outref=myref2, ACTION=ENCODE)
7 
8%mp_base64copy(inref=myref2, outref=newref2, ACTION=DECODE)
9DATA _null_;
10 INFILE newref2 lrecl=5000;
11 INPUT;
12 list;
13 /* do not print the string to the log else viya 3.5 throws exception */
14 IF trim(_infile_)=
15 "'', '', '', '', '', '', '', '', '', '', '', '', '', ''"
16 THEN call symputx('check2',1);
17 ELSE call symputx('check2',0);
18 stop;
19RUN;
20%mp_assert(
21 iftrue=("&check2"="1"),
22 desc=Double Byte String Compare,
23 outds=work.test_results
24)
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.