00001
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046 %MACRO runSASUnit(
00047 i_source =
00048 ,i_recursive = 0
00049 );
00050 %LOCAL l_macname; %LET l_macname=&sysmacroname;
00051 %LOCAL d_dir d_examinee l_source;
00052 %_sasunit_tempFileName(d_dir);
00053 %_sasunit_tempFileName(d_examinee);
00054
00055
00056 %IF %_sasunit_handleError(&l_macname, NoTestDB,
00057 NOT %sysfunc(exist(target.tsu)) OR NOT %symexist(g_project),
00058 %nrstr(test database cannot be accessed, call %initSASUnit before %runSASUnit))
00059 %THEN %GOTO errexit;
00060
00061
00062 %IF "&i_recursive" NE "1" %THEN %LET i_recursive=0;
00063
00064
00065 %LET l_source = %_sasunit_abspath(&g_root, &i_source);
00066 %_sasunit_dir(i_path=&l_source, i_recursive=&i_recursive, o_out=&d_dir)
00067 %IF %_sasunit_handleError(&l_macname, NoSourceFiles,
00068 %_sasunit_nobs(&d_dir) EQ 0,
00069 Error in parameter i_source: no test scenarios found)
00070 %THEN %GOTO errexit;
00071
00072 %LOCAL l_nscn i;
00073 %DO i=1 %TO %_sasunit_nobs(&d_dir);
00074 %LOCAL l_scnfile&i l_scnchanged&i;
00075 %END;
00076 DATA _null_;
00077 SET &d_dir;
00078 CALL symput ('l_scnfile' !! left(put(_n_,8.)), trim(filename));
00079 CALL symput ('l_scnchanged' !! left(put(_n_,8.)), compress(put(changed,12.)));
00080 CALL symput ('l_nscn', compress(put(_n_,8.)));
00081 RUN;
00082
00083
00084 %LOCAL l_auto l_autonr;
00085 %LET l_auto=&g_sasautos;
00086 %LET l_autonr=0;
00087 %DO %WHILE("&l_auto" ne "");
00088 %LET l_auto=%quote(&l_auto/);
00089 %_sasunit_dir(i_path=&l_auto.*.sas, o_out=&d_dir)
00090 data &d_examinee;
00091 set %IF &l_autonr>0 %THEN &d_examinee; &d_dir(in=indir);
00092 if indir then auton=&l_autonr;
00093 run;
00094 %LET l_autonr = %eval(&l_autonr+1);
00095 %LET l_auto=;
00096 %IF %symexist(g_sasautos&l_autonr) %THEN %LET l_auto=&&g_sasautos&l_autonr;
00097 %END;
00098
00099
00100 %LOCAL l_scn l_scnid l_dorun l_scndesc l_sysrc;
00101 %DO i=1 %TO &l_nscn;
00102
00103 %LET l_scn = %_sasunit_stdPath(&g_root, &&l_scnfile&i);
00104
00105
00106 %_sasunit_checkScenario(
00107 i_scnfile = &&l_scnfile&i
00108 ,i_changed = &&l_scnchanged&i
00109 ,i_dir = &d_examinee
00110 ,r_scnid = l_scnid
00111 ,r_run = l_dorun
00112 )
00113
00114
00115 %IF &l_scnid = 0 %THEN %DO;
00116 PROC SQL NOPRINT;
00117 SELECT max(scn_id) INTO :l_scnid FROM target.scn;
00118 %IF &l_scnid=. %THEN %LET l_scnid=0;
00119 %LET l_scnid = %eval(&l_scnid+1);
00120 INSERT INTO target.scn VALUES (
00121 &l_scnid
00122 ,"&l_scn"
00123 ,"",.,.,.,.
00124 );
00125 QUIT;
00126 %END;
00127
00128 %ELSE %IF &l_dorun %THEN %DO;
00129 PROC SQL NOPRINT;
00130 DELETE FROM target.cas WHERE cas_scnid = &l_scnid;
00131 DELETE FROM target.tst WHERE tst_scnid = &l_scnid;
00132 QUIT;
00133 %END;
00134
00135 %IF &l_dorun %THEN %DO;
00136 %PUT ======== test scenario &l_scnid (&l_scn) will be run ========;
00137 %PUT;
00138 %PUT;
00139 %END;
00140 %ELSE %DO;
00141 %PUT ======== test scenario &l_scnid (&l_scn) will not be run ==;
00142 %PUT;
00143 %PUT;
00144 %END;
00145
00146
00147 %IF &l_dorun %THEN %DO;
00148
00149
00150 %_sasunit_getPgmDesc (i_pgmfile=&&l_scnfile&i, r_desc=l_scndesc)
00151 PROC SQL NOPRINT;
00152 UPDATE target.scn SET
00153 scn_desc = "&l_scndesc"
00154 ,scn_start = %sysfunc(datetime())
00155 WHERE scn_id = &l_scnid
00156 ;
00157 QUIT;
00158
00159
00160 DATA _null_;
00161 FILE "%sysfunc(pathname(work))/x.cmd";
00162 PUT "&g_removedir ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
00163 PUT "&g_makedir ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
00164 %IF %length(&g_sasuser) %THEN %DO;
00165 PUT "&g_copydir ""&g_sasuser"" ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
00166 %END;
00167 RUN;
00168 %if &sysscp. = LINUX %then %do;
00169 %_sasunit_xcmd(chmod u+x "%sysfunc(pathname(work))/x.cmd")
00170 %end;
00171 %_sasunit_xcmd("%sysfunc(pathname(work))/x.cmd")
00172 %LOCAL l_rc;
00173 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/x.cmd);
00174
00175
00176 %LOCAL l_parms l_parenthesis;
00177 %LET l_parms=;
00178 %LET l_parenthesis=(;
00179 %IF "&g_autoexec" NE "" %THEN %DO;
00180 %LET l_parms=&l_parms -autoexec "&g_autoexec";
00181 %END;
00182 %IF "&g_sascfg" NE "" %THEN %DO;
00183 %LET l_parms=&l_parms -config "&g_sascfg";
00184 %END;
00185 %ELSE %IF %length(%sysfunc(getoption(config))) NE 0 AND %index(%quote(%sysfunc(getoption(config))),%bquote(&l_parenthesis)) = 0 %THEN %DO;
00186 %LET l_parms=&l_parms -config "%sysfunc(getoption(config))";
00187 %END;
00188 %sysexec
00189 &g_sasstart
00190 &l_parms
00191 -sysin "&&l_scnfile&i"
00192 -initstmt "%nrstr(%_sasunit_scenario%(io_target=)&g_target%nrstr(%)%let g_scnid=)&l_scnid;"
00193 -log "&g_log/%substr(00&l_scnid,%length(&l_scnid)).log"
00194 -print "&g_testout/%substr(00&l_scnid,%length(&l_scnid)).lst"
00195 &g_splash
00196 -noovp
00197 -nosyntaxcheck
00198 -mautosource
00199 -mcompilenote all
00200 -sasautos "&g_sasunit"
00201 -sasuser "%sysfunc(pathname(work))/sasuser"
00202 -termstmt '%_sasunit_termScenario()'
00203 ;
00204 %LET l_sysrc = &sysrc;
00205
00206
00207 DATA _null_;
00208 FILE "%sysfunc(pathname(work))/x.cmd";
00209 PUT "&g_removedir ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
00210 RUN;
00211 %if &sysscp. = LINUX %then %do;
00212 %_sasunit_xcmd(chmod u+x "%sysfunc(pathname(work))/x.cmd")
00213 %end;
00214
00215 %_sasunit_xcmd("%sysfunc(pathname(work))/x.cmd")
00216 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/x.cmd);
00217
00218
00219 %LOCAL l_filled l_lstfile;
00220 %LET l_filled=0;
00221 %LET l_lstfile=&g_testout/%substr(00&l_scnid,%length(&l_scnid)).lst;
00222 DATA _null_;
00223 INFILE "&l_lstfile";
00224 INPUT;
00225 CALL symput ('l_filled','1');
00226 STOP;
00227 RUN;
00228 %IF NOT &l_filled %THEN %DO;
00229 %LET l_filled=%_sasunit_delfile(&l_lstfile);
00230 %END;
00231
00232
00233 PROC SQL NOPRINT;
00234 %LOCAL l_result0 l_result1 l_result2;
00235
00236 SELECT count(*) INTO :l_result0 FROM target.cas WHERE cas_scnid=&l_scnid AND cas_res=0;
00237 SELECT count(*) INTO :l_result1 FROM target.cas WHERE cas_scnid=&l_scnid AND cas_res=1;
00238 SELECT count(*) INTO :l_result2 FROM target.cas WHERE cas_scnid=&l_scnid AND cas_res=2;
00239
00240 %LOCAL l_result;
00241 %IF &l_result1 GT 0 %THEN %LET l_result=1;
00242 %ELSE %IF &l_result2 GT 0 %THEN %LET l_result=2;
00243 %ELSE %LET l_result=0;
00244
00245 UPDATE target.scn
00246 SET
00247 scn_end = %sysfunc(datetime())
00248 ,scn_rc = &l_sysrc
00249 ,scn_res = &l_result
00250 WHERE
00251 scn_id = &l_scnid
00252 ;
00253 QUIT;
00254
00255 %END;
00256 %END;
00257
00258 %GOTO exit;
00259 %errexit:
00260 %PUT;
00261 %PUT =========================== Error! runSASUnit aborted! ==========================================;
00262 %PUT;
00263 %PUT;
00264 %exit:
00265 PROC DATASETS NOLIST NOWARN LIB=%scan(&d_dir,1,.);
00266 DELETE %scan(&d_dir,2,.);
00267 DELETE %scan(&d_examinee,2,.);
00268 QUIT;
00269 %MEND runSASUnit;