mirror of
https://github.com/sasjs/core.git
synced 2026-01-13 11:30:05 +00:00
chore: moving files to tidy up docs
This commit is contained in:
52
tests/crossplatform/mcf_string2file.test.sas
Normal file
52
tests/crossplatform/mcf_string2file.test.sas
Normal file
@@ -0,0 +1,52 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mm_webout macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mcf_string2file.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
|
||||
%mcf_string2file(wrap=YES, insert_cmplib=YES)
|
||||
|
||||
data _null_;
|
||||
rc=mcf_string2file(
|
||||
"%sysfunc(pathname(work))/newfile.txt"
|
||||
, "line1"
|
||||
, "APPEND");
|
||||
rc=mcf_string2file(
|
||||
"%sysfunc(pathname(work))/newfile.txt"
|
||||
, "line2"
|
||||
, "APPEND");
|
||||
run;
|
||||
|
||||
data _null_;
|
||||
infile "%sysfunc(pathname(work))/newfile.txt";
|
||||
input;
|
||||
if _n_=2 then call symputx('val',_infile_);
|
||||
run;
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(%str(&val)=%str(line2)),
|
||||
desc=Check if APPEND works
|
||||
)
|
||||
|
||||
data _null_;
|
||||
rc=mcf_string2file(
|
||||
"%sysfunc(pathname(work))/newfile.txt"
|
||||
, "creating"
|
||||
, "CREATE");
|
||||
run;
|
||||
|
||||
data _null_;
|
||||
infile "%sysfunc(pathname(work))/newfile.txt";
|
||||
input;
|
||||
if _n_=1 then call symputx('val2',_infile_);
|
||||
run;
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(%str(&val2)=%str(creating)),
|
||||
desc=Check if CREATE works
|
||||
)
|
||||
35
tests/crossplatform/mf_existfileref.test.sas
Normal file
35
tests/crossplatform/mf_existfileref.test.sas
Normal file
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mf_existfileref macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mf_existfileref.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
filename ref1 temp;
|
||||
filename ref2 temp;
|
||||
|
||||
data _null_;
|
||||
file ref1;
|
||||
put 'exists';
|
||||
run;
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(%mf_existfileref(ref1)=1),
|
||||
desc=Checking fileref WITH target file exists,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(%mf_existfileref(ref2)=1),
|
||||
desc=Checking fileref WITHOUT target file exists,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(%mf_existfileref(ref3)=0),
|
||||
desc=Checking non-existant fref does not exist,
|
||||
outds=work.test_results
|
||||
)
|
||||
41
tests/crossplatform/mf_getapploc.test.sas
Normal file
41
tests/crossplatform/mf_getapploc.test.sas
Normal file
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mf_getapploc macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mf_getapploc.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(
|
||||
"%mf_getapploc(/some/loc/tests/services/x/service)"="/some/loc"
|
||||
),
|
||||
desc=Checking test appLoc matches,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(
|
||||
"%mf_getapploc(/some/loc/tests/services/tests/service)"="/some/loc"
|
||||
),
|
||||
desc=Checking nested services appLoc matches,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(
|
||||
"%mf_getapploc(/some/area/services/admin/service)"="/some/area"
|
||||
),
|
||||
desc=Checking services appLoc matches,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(
|
||||
"%mf_getapploc(/some/area/jobs/jobs/job)"="/some/area"
|
||||
),
|
||||
desc=Checking jobs appLoc matches,
|
||||
outds=work.test_results
|
||||
)
|
||||
60
tests/crossplatform/mf_getvarlist.test.sas
Normal file
60
tests/crossplatform/mf_getvarlist.test.sas
Normal file
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mf_getvarlist macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mf_getvarlist.sas
|
||||
|
||||
**/
|
||||
|
||||
|
||||
%let test1=%mf_getvarlist(sashelp.class);
|
||||
%let test2=%mf_getvarlist(sashelp.class,dlm=X);
|
||||
%let test3=%mf_getvarlist(sashelp.class,dlm=%str(,),quote=double);
|
||||
%let test4=%mf_getvarlist(sashelp.class,typefilter=N);
|
||||
%let test5=%mf_getvarlist(sashelp.class,typefilter=C);
|
||||
|
||||
data work.test_results;
|
||||
length test_description $256 test_result $4 test_comments base result $256;
|
||||
test_description="Basic test";
|
||||
base=symget('test1');
|
||||
result='Name Sex Age Height Weight';
|
||||
if base=result then test_result='PASS';
|
||||
else test_result='FAIL';
|
||||
test_comments="Comparing "!!trim(base)!!' vs '!!trim(result);
|
||||
output;
|
||||
|
||||
test_description="DLM test";
|
||||
base=symget('test2');
|
||||
result='NameXSexXAgeXHeightXWeight';
|
||||
if base=result then test_result='PASS';
|
||||
else test_result='FAIL';
|
||||
test_comments="Comparing "!!trim(base)!!' vs '!!trim(result);
|
||||
output;
|
||||
|
||||
test_description="DLM + quote test";
|
||||
base=symget('test3');
|
||||
result='"Name","Sex","Age","Height","Weight"';
|
||||
if base=result then test_result='PASS';
|
||||
else test_result='FAIL';
|
||||
test_comments="Comparing "!!trim(base)!!' vs '!!trim(result);
|
||||
output;
|
||||
|
||||
test_description="Numeric Filter";
|
||||
base=symget('test4');
|
||||
result='Age Height Weight';
|
||||
if base=result then test_result='PASS';
|
||||
else test_result='FAIL';
|
||||
test_comments="Comparing "!!trim(base)!!' vs '!!trim(result);
|
||||
output;
|
||||
|
||||
test_description="Char Filter";
|
||||
base=symget('test5');
|
||||
result='Name Sex';
|
||||
if base=result then test_result='PASS';
|
||||
else test_result='FAIL';
|
||||
test_comments="Comparing "!!trim(base)!!' vs '!!trim(result);
|
||||
output;
|
||||
|
||||
drop base result;
|
||||
run;
|
||||
36
tests/crossplatform/mp_abort.test.nofix.sas
Normal file
36
tests/crossplatform/mp_abort.test.nofix.sas
Normal file
@@ -0,0 +1,36 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_abort macro
|
||||
@details This is an unfixed problem with mp_abort when using the
|
||||
'unclosed macro' technique. This is only relevant for 9.4m3 environments,
|
||||
which can suffer from hung multibridge sessions from %abort and endsas.
|
||||
|
||||
The issue is that when called within a macro, within a %include, AND that
|
||||
macro contains subsequent logic, the service does not end cleanly - rather,
|
||||
we see:
|
||||
|
||||
ERROR: %EVAL function has no expression to evaluate, or %IF statement has no condition.
|
||||
ERROR: The macro TEST will stop executing.
|
||||
|
||||
We are not able to test this without a 9.4m3 environment, it is marked as
|
||||
nofix.
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_abort.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
%macro test();
|
||||
|
||||
filename blah temp;
|
||||
data _null_;
|
||||
file blah;
|
||||
put '%mp_abort();';
|
||||
run;
|
||||
%inc blah;
|
||||
|
||||
%if 1=1 %then %put Houston - we have a problem here;
|
||||
%mend test;
|
||||
|
||||
%test()
|
||||
32
tests/crossplatform/mp_assertcolvals.test.sas
Normal file
32
tests/crossplatform/mp_assertcolvals.test.sas
Normal file
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_assertcolvals macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_assertcolvals.sas
|
||||
|
||||
**/
|
||||
|
||||
|
||||
data work.checkds;
|
||||
do checkval='Jane','James','Jill';
|
||||
output;
|
||||
end;
|
||||
run;
|
||||
%mp_assertcolvals(sashelp.class.name,
|
||||
checkvals=work.checkds.checkval,
|
||||
desc=At least one value has a match,
|
||||
test=ANYVAL
|
||||
)
|
||||
|
||||
data work.check;
|
||||
do val='M','F';
|
||||
output;
|
||||
end;
|
||||
run;
|
||||
%mp_assertcolvals(sashelp.class.sex,
|
||||
checkvals=work.check.val,
|
||||
desc=All values have a match,
|
||||
test=ALLVALS
|
||||
)
|
||||
|
||||
60
tests/crossplatform/mp_assertdsobs.test.sas
Normal file
60
tests/crossplatform/mp_assertdsobs.test.sas
Normal file
@@ -0,0 +1,60 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_assertdsobs.sas macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_assertdsobs.sas
|
||||
@li mp_assertcolvals.sas
|
||||
|
||||
**/
|
||||
|
||||
|
||||
data work.somedata;
|
||||
do x=1 to 15;
|
||||
output;
|
||||
end;
|
||||
run;
|
||||
|
||||
%mp_assertdsobs(work.somedata,
|
||||
test=ATLEAST 15,
|
||||
outds=work.test_the_test
|
||||
)
|
||||
|
||||
%mp_assertdsobs(work.somedata,
|
||||
test=ATMOST 15,
|
||||
outds=work.test_the_test
|
||||
)
|
||||
|
||||
data work.check;
|
||||
val='PASS';
|
||||
run;
|
||||
%mp_assertcolvals(work.test_the_test.test_result,
|
||||
checkvals=work.check.val,
|
||||
desc=Testing ATLEAST / ATMOST for passes,
|
||||
test=ALLVALS
|
||||
)
|
||||
|
||||
%mp_assertdsobs(work.somedata,
|
||||
test=ATLEAST 16,
|
||||
outds=work.test_the_test2
|
||||
)
|
||||
%mp_assertdsobs(work.somedata,
|
||||
test=ATMOST 14,
|
||||
outds=work.test_the_test2
|
||||
)
|
||||
|
||||
data _null_;
|
||||
set work.test_the_test2;
|
||||
putlog (_all_)(=);
|
||||
run;
|
||||
|
||||
data work.check2;
|
||||
val='FAIL';
|
||||
run;
|
||||
%mp_assertcolvals(work.test_the_test2.test_result,
|
||||
checkvals=work.check2.val,
|
||||
desc=Testing ATLEAST / ATMOST for failures,
|
||||
test=ALLVALS
|
||||
)
|
||||
|
||||
|
||||
67
tests/crossplatform/mp_base64copy.test.sas
Normal file
67
tests/crossplatform/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
|
||||
)
|
||||
28
tests/crossplatform/mp_ds2fmtds.test.sas
Normal file
28
tests/crossplatform/mp_ds2fmtds.test.sas
Normal file
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_ds2fmtds.sas macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_ds2fmtds.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
proc sql;
|
||||
create table test as select * from dictionary.tables where libname='SASHELP';
|
||||
|
||||
filename inc temp;
|
||||
data _null_;
|
||||
set work.test;
|
||||
file inc;
|
||||
line=cats('%mp_ds2fmtds(sashelp.',memname,',',memname,')');
|
||||
put line;
|
||||
run;
|
||||
|
||||
%inc inc;
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(&syscc=0),
|
||||
desc=Checking tables were created successfully,
|
||||
outds=work.test_results
|
||||
)
|
||||
31
tests/crossplatform/mp_ds2inserts.test.sas
Normal file
31
tests/crossplatform/mp_ds2inserts.test.sas
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_ds2inserts.sas macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_ds2inserts.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
/**
|
||||
* test 1 - rebuild an existing dataset
|
||||
* Cars is a great dataset - it contains leading spaces, and formatted numerics
|
||||
*/
|
||||
|
||||
%mp_ds2inserts(sashelp.cars,outref=testref,schema=work,outds=test)
|
||||
|
||||
data work.test;
|
||||
set sashelp.cars;
|
||||
stop;
|
||||
proc sql;
|
||||
%inc testref;
|
||||
|
||||
proc compare base=sashelp.cars compare=work.test;
|
||||
quit;
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(&sysinfo=1),
|
||||
desc=sashelp.cars is identical except for ds label,
|
||||
outds=work.test_results
|
||||
)
|
||||
148
tests/crossplatform/mp_filtercheck.test.sas
Normal file
148
tests/crossplatform/mp_filtercheck.test.sas
Normal file
@@ -0,0 +1,148 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_filtercheck macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_filtercheck.sas
|
||||
@li mp_assertdsobs.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
|
||||
/* valid filter */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,AND,1,AGE,=,12
|
||||
AND,AND,1,SEX,<=,"'M'"
|
||||
AND,OR,2,Name,NOT IN,"('Jane','Alfred')"
|
||||
AND,OR,2,Weight,>=,77.7
|
||||
AND,OR,2,Weight,NE,77.7
|
||||
;;;;
|
||||
run;
|
||||
|
||||
%mp_filtercheck(work.inds,
|
||||
targetds=sashelp.class,
|
||||
outds=work.badrecords,
|
||||
abort=NO
|
||||
)
|
||||
%let syscc=0;
|
||||
%mp_assertdsobs(work.badrecords,
|
||||
desc=Valid filter query,
|
||||
test=EMPTY,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* invalid column */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,AND,1,invalid,=,12
|
||||
AND,AND,1,SEX,<=,"'M'"
|
||||
AND,OR,2,Name,NOT IN,"('Jane','Alfred')"
|
||||
AND,OR,2,Weight,>=,7
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtercheck(work.inds,
|
||||
targetds=sashelp.class,
|
||||
outds=work.badrecords,
|
||||
abort=NO
|
||||
)
|
||||
%let syscc=0;
|
||||
%mp_assertdsobs(work.badrecords,
|
||||
desc=Invalid column name,
|
||||
test=HASOBS,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* invalid raw value */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,OR,2,Name,NOT IN,"(''''Jane','Alfred')"
|
||||
;;;;
|
||||
run;
|
||||
|
||||
%mp_filtercheck(work.inds,
|
||||
targetds=sashelp.class,
|
||||
outds=work.badrecords,
|
||||
abort=NO
|
||||
)
|
||||
%let syscc=0;
|
||||
%mp_assertdsobs(work.badrecords,
|
||||
desc=Invalid raw value,
|
||||
test=HASOBS,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* Code injection - column name */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,AND,1,%abort,=,12
|
||||
AND,OR,2,Weight,>=,7
|
||||
;;;;
|
||||
run;
|
||||
|
||||
%mp_filtercheck(work.inds,
|
||||
targetds=sashelp.class,
|
||||
outds=work.badrecords,
|
||||
abort=NO
|
||||
)
|
||||
%let syscc=0;
|
||||
%mp_assertdsobs(work.badrecords,
|
||||
desc=Code injection - column name,
|
||||
test=HASOBS,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* Code injection - raw values*/
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,AND,1,age,=,;;%abort
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtercheck(work.inds,
|
||||
targetds=sashelp.class,
|
||||
outds=work.badrecords,
|
||||
abort=NO
|
||||
)
|
||||
%let syscc=0;
|
||||
%mp_assertdsobs(work.badrecords,
|
||||
desc=Code injection - raw value abort,
|
||||
test=HASOBS,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* Supply variables with incorrect types */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:8;
|
||||
datalines4;
|
||||
AND,AND,1,age,=,0
|
||||
;;;;
|
||||
run;
|
||||
%let syscc=0;
|
||||
%mp_filtercheck(work.inds,
|
||||
targetds=sashelp.class,
|
||||
outds=work.badrecords,
|
||||
abort=NO
|
||||
)
|
||||
%mp_assert(iftrue=(&syscc=42),
|
||||
desc=Throw error if RAW_VALUE is incorrect,
|
||||
outds=work.test_results
|
||||
)
|
||||
%let syscc=0;
|
||||
122
tests/crossplatform/mp_filtergenerate.test.sas
Normal file
122
tests/crossplatform/mp_filtergenerate.test.sas
Normal file
@@ -0,0 +1,122 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_filtergenerate macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_filtergenerate.sas
|
||||
@li mp_filtercheck.sas
|
||||
@li mp_assertdsobs.sas
|
||||
|
||||
**/
|
||||
|
||||
options source2;
|
||||
|
||||
/* valid filter */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,AND,1,AGE,>,5
|
||||
AND,AND,1,SEX,NE,"'M'"
|
||||
AND,OR,2,Name,NOT IN,"('Jane','Janet')"
|
||||
AND,OR,2,Weight,>=,84.6
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtercheck(work.inds,targetds=sashelp.class)
|
||||
%mp_filtergenerate(work.inds,outref=myfilter)
|
||||
data work.test;
|
||||
set sashelp.class;
|
||||
where %inc myfilter;;
|
||||
run;
|
||||
%mp_assertdsobs(work.test,
|
||||
desc=Valid filter,
|
||||
test=EQUALS 8,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* empty filter (return all records) */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtercheck(work.inds,targetds=sashelp.class)
|
||||
%mp_filtergenerate(work.inds,outref=myfilter)
|
||||
data work.test;
|
||||
set sashelp.class;
|
||||
where %inc myfilter;;
|
||||
run;
|
||||
%mp_assertdsobs(work.test,
|
||||
desc=Empty filter (return all records) ,
|
||||
test=EQUALS 19,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* single line filter */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,OR,2,Name,IN,"('Jane','Janet')"
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtercheck(work.inds,targetds=sashelp.class)
|
||||
%mp_filtergenerate(work.inds,outref=myfilter)
|
||||
data work.test;
|
||||
set sashelp.class;
|
||||
where %inc myfilter;;
|
||||
run;
|
||||
%mp_assertdsobs(work.test,
|
||||
desc=Single line filter ,
|
||||
test=EQUALS 2,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* single line 2 group filter */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
OR,OR,2,Name,IN,"('Jane','Janet')"
|
||||
OR,OR,3,Name,IN,"('James')"
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtercheck(work.inds,targetds=sashelp.class)
|
||||
%mp_filtergenerate(work.inds,outref=myfilter)
|
||||
data work.test;
|
||||
set sashelp.class;
|
||||
where %inc myfilter;;
|
||||
run;
|
||||
%mp_assertdsobs(work.test,
|
||||
desc=Single line 2 group filter ,
|
||||
test=EQUALS 3,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* filter with nothing returned */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,OR,2,Name,IN,"('Jane','Janet')"
|
||||
AND,OR,3,Name,IN,"('James')"
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtercheck(work.inds,targetds=sashelp.class)
|
||||
%mp_filtergenerate(work.inds,outref=myfilter)
|
||||
data work.test;
|
||||
set sashelp.class;
|
||||
where %inc myfilter;;
|
||||
run;
|
||||
%mp_assertdsobs(work.test,
|
||||
desc=Filter with nothing returned,
|
||||
test=EQUALS 0,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
100
tests/crossplatform/mp_filtervalidate.test.sas
Normal file
100
tests/crossplatform/mp_filtervalidate.test.sas
Normal file
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_filtervalidate macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_filtergenerate.sas
|
||||
@li mp_filtervalidate.sas
|
||||
@li mp_assertdsobs.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
|
||||
/* valid filter */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,AND,1,AGE,>,5
|
||||
AND,AND,1,SEX,NE,"'M'"
|
||||
AND,OR,2,Name,NOT IN,"('Jane','Janet')"
|
||||
AND,OR,2,Weight,>=,84.6
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtergenerate(work.inds,outref=myfilter)
|
||||
%mp_filtervalidate(myfilter,sashelp.class,outds=work.results,abort=NO)
|
||||
%mp_assertdsobs(work.results,
|
||||
desc=Valid filter,
|
||||
test=EMPTY,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* empty filter (return all records) */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtergenerate(work.inds,outref=myfilter)
|
||||
%mp_filtervalidate(myfilter,sashelp.class,outds=work.results,abort=NO)
|
||||
%mp_assertdsobs(work.results,
|
||||
desc=Empty filter,
|
||||
test=EMPTY,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
|
||||
|
||||
/* invalid filter - char var, num val */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,AND,1,SEX,NE,2
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtergenerate(work.inds,outref=myfilter)
|
||||
%mp_filtervalidate(myfilter,sashelp.class,outds=work.results,abort=NO)
|
||||
%let syscc=0;
|
||||
%let test3=0;
|
||||
data _null_;
|
||||
set work.results;
|
||||
if REASON_CD=:'VALIDATION_ERROR' then call symputx('test3',1);
|
||||
putlog (_all_)(=);
|
||||
stop;
|
||||
run;
|
||||
%mp_assert(
|
||||
iftrue=(&test3=1),
|
||||
desc=Checking char var could not receive num val,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* invalid filter - num var, char val */
|
||||
data work.inds;
|
||||
infile datalines4 dsd;
|
||||
input GROUP_LOGIC:$3. SUBGROUP_LOGIC:$3. SUBGROUP_ID:8. VARIABLE_NM:$32.
|
||||
OPERATOR_NM:$10. RAW_VALUE:$4000.;
|
||||
datalines4;
|
||||
AND,AND,1,age,NE,"'M'"
|
||||
;;;;
|
||||
run;
|
||||
%mp_filtergenerate(work.inds,outref=myfilter)
|
||||
%mp_filtervalidate(myfilter,sashelp.class,outds=work.results,abort=NO)
|
||||
%let syscc=0;
|
||||
%let test4=0;
|
||||
data _null_;
|
||||
set work.results;
|
||||
if REASON_CD=:'VALIDATION_ERROR' then call symputx('test4',1);
|
||||
putlog (_all_)(=);
|
||||
stop;
|
||||
run;
|
||||
%mp_assert(
|
||||
iftrue=(&test4=1),
|
||||
desc=Checking num var could not receive char val,
|
||||
outds=work.test_results
|
||||
)
|
||||
23
tests/crossplatform/mp_getddl.test.sas
Normal file
23
tests/crossplatform/mp_getddl.test.sas
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_getddl.sas macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_getddl.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
data test(index=(pk=(x y)/unique /nomiss));
|
||||
x=1;
|
||||
y='blah';
|
||||
label x='blah';
|
||||
run;
|
||||
proc sql; describe table &syslast;
|
||||
%mp_getddl(work,test,flavour=tsql,showlog=YES)
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(&syscc=0),
|
||||
desc=mp_getddl runs without errors,
|
||||
outds=work.test_results
|
||||
)
|
||||
42
tests/crossplatform/mp_jsonout.test.sas
Normal file
42
tests/crossplatform/mp_jsonout.test.sas
Normal file
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_jsonout.sas macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_jsonout.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
filename webref temp;
|
||||
|
||||
data demo;
|
||||
dtval=date();
|
||||
format dtval date9.;
|
||||
compare=put(date(),date9.);
|
||||
call symputx('compare',compare);
|
||||
run;
|
||||
|
||||
%mp_jsonout(OPEN,jref=webref)
|
||||
%mp_jsonout(OBJ,demo,jref=webref,fmt=Y)
|
||||
%mp_jsonout(CLOSE,jref=webref)
|
||||
|
||||
data _null_;
|
||||
infile webref;
|
||||
input;
|
||||
putlog _infile_;
|
||||
run;
|
||||
|
||||
libname web JSON fileref=webref;
|
||||
%let dtval=0;
|
||||
data work.test;
|
||||
set web.demo;
|
||||
call symputx('dtval',dtval);
|
||||
run;
|
||||
|
||||
|
||||
%mp_assert(
|
||||
iftrue=(&dtval=&compare),
|
||||
desc=Checking tables were created successfully,
|
||||
outds=work.test_results
|
||||
)
|
||||
42
tests/crossplatform/mp_lib2inserts.test.sas
Normal file
42
tests/crossplatform/mp_lib2inserts.test.sas
Normal file
@@ -0,0 +1,42 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_ds2inserts.sas macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mf_mkdir.sas
|
||||
@li mp_getddl.sas
|
||||
@li mp_lib2inserts.sas
|
||||
@li mp_assert.sas
|
||||
|
||||
**/
|
||||
|
||||
/* grab 20 datasets from SASHELP */
|
||||
%let path=%sysfunc(pathname(work));
|
||||
%mf_mkdir(&path)
|
||||
libname sashlp "&path";
|
||||
proc sql noprint;
|
||||
create table members as
|
||||
select distinct lowcase(memname) as memname
|
||||
from dictionary.tables
|
||||
where upcase(libname)="SASHELP"
|
||||
and memtype='DATA'; /* exclude views */
|
||||
data _null_;
|
||||
set work.members;
|
||||
call execute(cats('data sashlp.',memname,';set sashelp.',memname,';run;'));
|
||||
if _n_>20 then stop;
|
||||
run;
|
||||
|
||||
/* export DDL and inserts */
|
||||
%mp_getddl(sashlp, schema=work, fref=tempref)
|
||||
%mp_lib2inserts(sashlp, schema=work, outref=tempref,maxobs=50)
|
||||
|
||||
/* check if it actually runs */
|
||||
options source2;
|
||||
%inc tempref;
|
||||
|
||||
/* without errors.. */
|
||||
%mp_assert(
|
||||
iftrue=(&syscc=0),
|
||||
desc=Able to export 20 tables from sashelp using mp_lib2inserts,
|
||||
outds=work.test_results
|
||||
)
|
||||
50
tests/crossplatform/mp_searchcols.test.sas
Normal file
50
tests/crossplatform/mp_searchcols.test.sas
Normal file
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_searchcols.sas
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_searchcols.sas
|
||||
@li mp_assertdsobs.sas
|
||||
|
||||
|
||||
**/
|
||||
|
||||
|
||||
/** Test 1 - full col match */
|
||||
data example1;
|
||||
var1=1;
|
||||
var2=2;
|
||||
var3=3;
|
||||
data example2;
|
||||
var1=1;
|
||||
var2=2;
|
||||
data example3;
|
||||
var2=2;
|
||||
var3=3;
|
||||
data example4;
|
||||
matchmehere=1;
|
||||
data example5;
|
||||
hereyoucan_matchme_also=1;
|
||||
data example6;
|
||||
do_not_forget_me=1;
|
||||
data example7;
|
||||
we_shall_not_forget=1;
|
||||
run;
|
||||
|
||||
%mp_searchcols(libs=work,cols=var1 var2,outds=testme)
|
||||
|
||||
%mp_assertdsobs(work.testme,
|
||||
desc=Test1 - check exact variables are found,
|
||||
test=EQUALS 3,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/* test 2 - wildcard match */
|
||||
|
||||
%mp_searchcols(libs=work,cols=matchme forget,match=WILD, outds=testme2)
|
||||
|
||||
%mp_assertdsobs(work.testme2,
|
||||
desc=Test1 - check fuzzy matches are found,
|
||||
test=EQUALS 4,
|
||||
outds=work.test_results
|
||||
)
|
||||
62
tests/crossplatform/mp_validatecol.test.sas
Normal file
62
tests/crossplatform/mp_validatecol.test.sas
Normal file
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_validatecol.sas macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_assertdsobs.sas
|
||||
@li mp_validatecol.sas
|
||||
|
||||
**/
|
||||
|
||||
|
||||
/**
|
||||
* Test 1 - LIBDS
|
||||
*/
|
||||
data test1;
|
||||
infile datalines4 dsd;
|
||||
input;
|
||||
libds=_infile_;
|
||||
%mp_validatecol(libds,LIBDS,is_libds)
|
||||
if is_libds=1;
|
||||
datalines4;
|
||||
some.libname
|
||||
!lib.blah
|
||||
%abort
|
||||
definite.ok
|
||||
not.ok!
|
||||
nineletrs._
|
||||
;;;;
|
||||
run;
|
||||
%mp_assertdsobs(work.test1,
|
||||
desc=Testing LIBDS,
|
||||
test=EQUALS 2,
|
||||
outds=work.test_results
|
||||
)
|
||||
|
||||
/**
|
||||
* Test 2 - ISNUM
|
||||
*/
|
||||
data test2;
|
||||
infile datalines4 dsd;
|
||||
input;
|
||||
infile=_infile_;
|
||||
%mp_validatecol(infile,ISNUM,is_numeric)
|
||||
if is_numeric=1;
|
||||
datalines4;
|
||||
1
|
||||
0001
|
||||
1e6
|
||||
-44
|
||||
above are good
|
||||
the rest are bad
|
||||
%abort
|
||||
1&somethingverybad.
|
||||
&
|
||||
+-1
|
||||
;;;;
|
||||
run;
|
||||
%mp_assertdsobs(work.test2,
|
||||
desc=Test2 - ISNUM,
|
||||
test=EQUALS 4,
|
||||
outds=work.test_results
|
||||
)
|
||||
Reference in New Issue
Block a user