mirror of
https://github.com/sasjs/core.git
synced 2025-12-10 22:14:35 +00:00
fix: mp_base64copy.sas fixes, removed renegade % symbol and issue with truncation at character 76. Added two tests, including one to test double byte encoded characters.
This commit is contained in:
@@ -76,7 +76,7 @@ run;
|
|||||||
|
|
||||||
%if &outfound=0 %then %do;
|
%if &outfound=0 %then %do;
|
||||||
filename &outref temp lrecl=2097088;
|
filename &outref temp lrecl=2097088;
|
||||||
%%end;
|
%end;
|
||||||
|
|
||||||
%if &action=ENCODE %then %do;
|
%if &action=ENCODE %then %do;
|
||||||
data _null_;
|
data _null_;
|
||||||
@@ -84,12 +84,12 @@ run;
|
|||||||
retain line "";
|
retain line "";
|
||||||
infile &inref recfm=F lrecl= 1 end=eof;
|
infile &inref recfm=F lrecl= 1 end=eof;
|
||||||
input @1 stream $char1.;
|
input @1 stream $char1.;
|
||||||
file &outref lrecl=76;
|
file &outref recfm=N;
|
||||||
substr(line,(_N_-(CEIL(_N_/57)-1)*57),1) = byte(rank(stream));
|
substr(line,(_N_-(CEIL(_N_/57)-1)*57),1) = byte(rank(stream));
|
||||||
if mod(_N_,57)=0 or EOF then do;
|
if mod(_N_,57)=0 or EOF then do;
|
||||||
if eof then b64=put(trim(line),$base64X76.);
|
if eof then b64=put(trim(line),$base64X76.);
|
||||||
else b64=put(line, $base64X76.);
|
else b64=put(line, $base64X76.);
|
||||||
put b64;
|
put b64 + (-1) @;
|
||||||
line="";
|
line="";
|
||||||
end;
|
end;
|
||||||
run;
|
run;
|
||||||
@@ -101,19 +101,13 @@ run;
|
|||||||
fileout = fopen("&outref",'O',3,'B');
|
fileout = fopen("&outref",'O',3,'B');
|
||||||
char= '20'x;
|
char= '20'x;
|
||||||
do while(fread(filein)=0);
|
do while(fread(filein)=0);
|
||||||
raw="1234";
|
length raw $4;
|
||||||
do i=1 to 4;
|
do i=1 to 4;
|
||||||
rc=fget(filein,char,1);
|
rc=fget(filein,char,1);
|
||||||
substr(raw,i,1)=char;
|
substr(raw,i,1)=char;
|
||||||
end;
|
end;
|
||||||
val="123";
|
rc = fput(fileout,input(raw,$base64X4.));
|
||||||
val=input(raw,$base64X4.);
|
rc = fwrite(fileout);
|
||||||
do i=1 to 3;
|
|
||||||
length byte $1;
|
|
||||||
byte=byte(rank(substr(val,i,1)));
|
|
||||||
rc = fput(fileout, byte);
|
|
||||||
end;
|
|
||||||
rc =fwrite(fileout);
|
|
||||||
end;
|
end;
|
||||||
rc = fclose(filein);
|
rc = fclose(filein);
|
||||||
rc = fclose(fileout);
|
rc = fclose(fileout);
|
||||||
|
|||||||
67
tests/base/mp_base64copy.test.sas
Normal file
67
tests/base/mp_base64copy.test.sas
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/**
|
||||||
|
@file
|
||||||
|
@brief Testing mp_base64copy.sas macro
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mp_base64copy.sas
|
||||||
|
@li mp_assert.sas
|
||||||
|
|
||||||
|
**/
|
||||||
|
|
||||||
|
|
||||||
|
/* TEST 1 - regular base64 decode */
|
||||||
|
|
||||||
|
%let string1=base ik ally;
|
||||||
|
filename tmp temp;
|
||||||
|
data _null_;
|
||||||
|
file tmp;
|
||||||
|
put "&string1";
|
||||||
|
run;
|
||||||
|
%mp_base64copy(inref=tmp, outref=myref, action=ENCODE)
|
||||||
|
|
||||||
|
data _null_;
|
||||||
|
infile myref;
|
||||||
|
input;
|
||||||
|
put _infile_;
|
||||||
|
run;
|
||||||
|
%mp_base64copy(inref=myref, outref=mynewref, action=DECODE)
|
||||||
|
data _null_;
|
||||||
|
infile mynewref lrecl=5000;
|
||||||
|
input;
|
||||||
|
put _infile_;
|
||||||
|
call symputx('string1_check',_infile_);
|
||||||
|
stop;
|
||||||
|
run;
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=("&string1"="&string1_check"),
|
||||||
|
desc=Basic String Compare,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
/* multibyte string check */
|
||||||
|
|
||||||
|
filename tmp2 temp;
|
||||||
|
data _null_;
|
||||||
|
file tmp2;
|
||||||
|
put "'╤', '╔', '╗', '═', '╧', '╚', '╝', '║', '╟', '─', '┼', '║', '╢', '│'";
|
||||||
|
run;
|
||||||
|
%mp_base64copy(inref=tmp2, outref=myref2, action=ENCODE)
|
||||||
|
|
||||||
|
%mp_base64copy(inref=myref2, outref=newref2, action=DECODE)
|
||||||
|
data _null_;
|
||||||
|
infile newref2 lrecl=5000;
|
||||||
|
input;
|
||||||
|
list;
|
||||||
|
/* do not print the string to the log else viya 3.5 throws exception */
|
||||||
|
if trim(_infile_)=
|
||||||
|
"'╤', '╔', '╗', '═', '╧', '╚', '╝', '║', '╟', '─', '┼', '║', '╢', '│'"
|
||||||
|
then call symputx('check2',1);
|
||||||
|
else call symputx('check2',0);
|
||||||
|
stop;
|
||||||
|
run;
|
||||||
|
%mp_assert(
|
||||||
|
iftrue=("&check2"="1"),
|
||||||
|
desc=Double Byte String Compare,
|
||||||
|
outds=work.test_results
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user