/******************************************************************************
 * Programme : Unit tests for the mp_replace macro
 * Reference : UNITTED7AB
 * Source    : https://www.wearecas.eu/de/sampleCode/UNITTED7AB
 ******************************************************************************/

/* --- BLOC 1 --- */
%let test1="&sasjswork/file.txt";
%let str=replace/me;
%let rep=with/this;
data _null_;
  file &test1;
  put 'blahblah';
  put "blahblah&str.blah";
  put 'blahblahblah';
run;

/* --- BLOC 2 --- */
%mp_assertscope(SNAPSHOT)
%mp_replace(&test1, findvar=str, replacevar=rep)
%mp_assertscope(COMPARE)

/* --- BLOC 3 --- */
data _null_;
  infile &test1;
  input;
  if _n_=2 then call symputx('test1result',_infile_);
run;

%mp_assert(
  iftrue=("&test1result" = "blahblah&rep.blah"),
  desc=Checking first replace,
  outds=work.test_results
)

/* --- BLOC 4 --- */
%let test2="&sasjswork/file2.txt";
%let str=%str(replacewith trailing spaces   );
%let rep=%str( with more spaces  );
data _null_;
  file &test2 lrecl=500;
  put 'blahblah';
  put "blahblah&str.blah&str. replace &str.X";
  put "blahbreplacewith&str.spacesahblah";
run;

/* --- BLOC 5 --- */
%mp_replace(&test2, findvar=str, replacevar=rep)

data _null_;
  infile &test2 lrecl=500;
  input;
  if _n_=2 then call symputx('test2resulta',_infile_);
  if _n_=3 then call symputx('test2resultb',_infile_);
run;

%mp_assert(
  iftrue=("&test2resulta" = "blahblah&rep.blah&rep. replace &rep.X"),
  desc=Checking second replace 2nd row,
  outds=work.test_results
)

/* --- BLOC 6 --- */
%let test3="&sasjswork/file3.txt";
%let str=%str(replace.string.with.dots   );
%let rep=%str( more.dots);
data _null_;
  file &test3 lrecl=500;
  put 'blahblah';
  put "blahblah&str.blah&str. replace &str.X";
  put "blahbreplacewith&str.spacesahblah";
run;

/* --- BLOC 7 --- */
%mp_replace(&test3, findvar=str, replacevar=rep)

data _null_;
  infile &test3 lrecl=500;
  input;
  if _n_=2 then call symputx('test3resulta',_infile_);
  if _n_=3 then call symputx('test3resultb',_infile_);
run;

%mp_assert(
  iftrue=("&test3resulta" = "blahblah&rep.blah&rep. replace &rep.X"),
  desc=Checking third replace 2nd row (dots),
  outds=work.test_results
)

