80 %LOCAL l_macname; %LET l_macname=&sysmacroname;
 
   84 libname _tmp 
"&i_root.";
 
   85 %let i_root=%sysfunc (pathname(_tmp));
 
   89 %_sasunit_initErrorHandler;
 
   92 %IF %_sasunit_handleError( &l_macname
 
   94                          , (&sysscp. NE WIN) AND (&sysscp. NE LINUX)
 
   95                          , Invalid operating system - only WIN and LINUX) 
 
  102 %IF %_sasunit_handleError( &l_macname
 
  104                          , (&sysver. NE 9.1) AND (&sysver. NE 9.2) AND (&sysver. NE 9.3)
 
  105                          , Invalid SAS version - only SAS 9.1 to 9.3) 
 
  110 %IF &i_testcoverage. NE 1 %THEN %DO;
 
  111    %LET i_testcoverage = 0;
 
  115    %IF %_sasunit_handleError( &l_macname
 
  118                             , Invalid SAS version 
for test coverage assessment - only 9.3 supported) 
 
  124 %LET l_target_abs=%_sasunit_abspath(&i_root,&io_target);
 
  125 %IF %_sasunit_handleError(&l_macname, InvalidTargetDir, 
 
  126    "&l_target_abs" EQ 
"" OR NOT %_sasunit_existDir(&l_target_abs), 
 
  127    Error in parameter io_target: target directory does not exist) 
 
  130 LIBNAME target 
"&l_target_abs";
 
  131 %IF %_sasunit_handleError(&l_macname, ErrorTargetLib, 
 
  132    %quote(&syslibrc) NE 0, 
 
  133    Error in parameter io_target: target directory &l_target_abs. cannot be assigned as a SAS library) 
 
  137 %IF %_sasunit_handleError(&l_macname, ErrorTargetLibNotWritable, 
 
  138    %quote(&syserr) NE 0, 
 
  139    Error in parameter io_target: target directory not writeable) 
 
  142    DROP TABLE target._test;
 
  147 %IF 
"&i_overwrite" NE 
"1" %then %LET i_overwrite=0;
 
  148 %IF &i_overwrite %THEN %LET l_newdb=1;
 
  149 %ELSE %LET l_newdb=%eval(NOT %sysfunc(exist(target.tsu)));
 
  152 %IF &l_newdb %THEN %DO;
 
  154    CREATE TABLE target.tsu (        
 
  155        tsu_project    CHAR(255)        
 
  157       ,tsu_target     CHAR(255)        
 
  158       ,tsu_sasunit    CHAR(255)        
 
  159       ,tsu_sasautos   CHAR(255)        
 
  161       ,tsu_sasautos&i CHAR(255)        
 
  163       ,tsu_autoexec   CHAR(255)        
 
  164       ,tsu_sascfg     CHAR(255)        
 
  165       ,tsu_sasuser    CHAR(255)        
 
  166       ,tsu_testdata   CHAR(255)        
 
  167       ,tsu_refdata    CHAR(255)        
 
  169       ,tsu_lastinit   INT FORMAT=datetime21.2 
 
  170       ,tsu_lastrep    INT FORMAT=datetime21.2 
 
  172    INSERT INTO target.tsu VALUES (
 
  173    "",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",
"",0,0
 
  176    CREATE TABLE target.scn (                    
 
  177        scn_id           INT FORMAT=z3.          
 
  180       ,scn_start        INT FORMAT=datetime21.2 
 
  181       ,scn_end          INT FORMAT=datetime21.2 
 
  184       ,scn_warningcount INT                     
 
  187    CREATE TABLE target.cas (        
 
  188        cas_scnid INT FORMAT=z3.        
 
  189       ,cas_id    INT FORMAT=z3.        
 
  194       ,cas_start INT FORMAT=datetime21.2  
 
  195       ,cas_end   INT FORMAT=datetime21.2  
 
  198    CREATE TABLE target.tst (        
 
  199        tst_scnid INT FORMAT=z3.        
 
  200       ,tst_casid INT FORMAT=z3.        
 
  201       ,tst_id    INT FORMAT=z3.        
 
  209 %IF %_sasunit_handleError(&l_macname, ErrorCreateDB, 
 
  211    Error on creation of test database) 
 
  217    FILE 
"%sysfunc(pathname(work))/x.cmd" encoding=pcoem850;
 
  218    PUT 
"&g_removedir ""&l_target_abs/log""&g_endcommand";
 
  219    PUT 
"&g_removedir ""&l_target_abs/tst""&g_endcommand";
 
  220    PUT 
"&g_removedir ""&l_target_abs/rep""&g_endcommand";
 
  221    PUT 
"&g_makedir ""&l_target_abs/log""&g_endcommand";
 
  222    PUT 
"&g_makedir ""&l_target_abs/tst""&g_endcommand";
 
  223    PUT 
"&g_makedir ""&l_target_abs/rep""&g_endcommand";
 
  225 %
if &sysscp. = LINUX %then %
do;
 
  226    %_sasunit_xcmd(chmod u+x 
"%sysfunc(pathname(work))/x.cmd")
 
  228 %_sasunit_xcmd(
"%sysfunc(pathname(work))/x.cmd")
 
  230 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/x.cmd);
 
  235 %LOCAL l_col_testcoverage_exists;
 
  237   dsid=open(
'target.tsu');
 
  238   varcheck=varnum(dsid,
'tsu_testcoverage');
 
  239   CALL SYMPUTX(
'l_col_testcoverage_exists',varcheck);
 
  242    %IF (NOT &l_col_testcoverage_exists.) %THEN %DO;
 
  243       ALTER TABLE target.tsu
 
  244          ADD tsu_testcoverage INT;
 
  247    UPDATE target.tsu SET tsu_testcoverage = &i_testcoverage.;
 
  251 %IF %_sasunit_handleError(&l_macname, NoLogDir, 
 
  252    NOT %_sasunit_existdir(&l_target_abs/log), 
 
  253    folder &l_target_abs/log does not exist) 
 
  255 %IF %_sasunit_handleError(&l_macname, NoTstDir, 
 
  256    NOT %_sasunit_existdir(&l_target_abs/tst), 
 
  257    folder &l_target_abs/tst does not exist) 
 
  259 %IF %_sasunit_handleError(&l_macname, NoRepDir, 
 
  260    NOT %_sasunit_existdir(&l_target_abs/rep), 
 
  261    folder &l_target_abs/rep does not exist) 
 
  264    UPDATE target.tsu SET tsu_target = 
"&io_target";
 
  270    SELECT tsu_project INTO :l_project FROM target.tsu;
 
  272 %LET l_project=&l_project;
 
  273 %IF 
"&i_project" NE 
"" %THEN %LET l_project=&i_project;
 
  274 %IF %_sasunit_handleError(&l_macname, MissingProjectName, 
 
  276    Parameter i_project must be specified) 
 
  279    UPDATE target.tsu SET tsu_project = 
"&l_project";
 
  285    SELECT tsu_root INTO :l_root FROM target.tsu;
 
  288 %IF 
"&i_root" NE 
"" %THEN %LET l_root=&i_root;
 
  289 %IF %_sasunit_handleError(&l_macname, InvalidRoot, 
 
  290    "&l_root" NE 
"" AND NOT %_sasunit_existdir(&l_root),
 
  291    %str(Error in parameter i_root: folder must exist when specified)) 
 
  294    UPDATE target.tsu SET tsu_root = 
"&l_root";
 
  298 %LOCAL l_sasunit l_sasunit_abs;
 
  300    SELECT tsu_sasunit INTO :l_sasunit FROM target.tsu;
 
  302 %LET l_sasunit=&l_sasunit;
 
  303 %IF 
"&i_sasunit" NE 
"" %THEN %LET l_sasunit=&i_sasunit;
 
  304 %LET l_sasunit_abs=%_sasunit_abspath(&l_root,&l_sasunit);
 
  305 %IF %_sasunit_handleError(&l_macname, InvalidSASUnitDir, 
 
  306    "&l_sasunit_abs" EQ 
"" OR NOT %sysfunc(fileexist(&l_sasunit_abs/_sasunit_scenario.sas)), 
 
  307    Error in parameter i_sasunit: SASUnit macro programs not found) 
 
  310    UPDATE target.tsu SET tsu_sasunit = 
"&l_sasunit";
 
  314 %LOCAL l_autoexec l_autoexec_abs;
 
  316    SELECT tsu_autoexec INTO :l_autoexec FROM target.tsu;
 
  318 %LET l_autoexec=&l_autoexec;
 
  319 %*** because we need to specify a real blank (%str( )) as parameter, ***;
 
  320 %*** we need to use a different method of assignment.                ***;
 
  321 %IF "&i_autoexec" NE "" %THEN %LET l_autoexec=%trim(&i_autoexec);
 
  322 %LET l_autoexec_abs=%_sasunit_abspath(&l_root,&l_autoexec);
 
  323 %IF %_sasunit_handleError(&l_macname, AutoexecNotFound, 
 
  324    "&l_autoexec" NE "" AND NOT %sysfunc(fileexist(&l_autoexec_abs%str( ))), 
 
  325    Error in parameter i_autoexec: file not found) 
 
  328    UPDATE target.tsu SET tsu_autoexec = "&l_autoexec";
 
  332 %LOCAL l_sascfg l_sascfg_abs;
 
  334    SELECT tsu_sascfg INTO :l_sascfg FROM target.tsu;
 
  336 %LET l_sascfg=&l_sascfg;
 
  337 %IF "&i_sascfg" NE "" %THEN %LET l_sascfg=&i_sascfg;
 
  338 %LET l_sascfg_abs=%_sasunit_abspath(&l_root,&l_sascfg);
 
  339 %IF %_sasunit_handleError(&l_macname, SASCfgNotFound, 
 
  340    "&l_sascfg" NE "" AND NOT %sysfunc(fileexist(&l_sascfg_abs%str( ))), 
 
  341    Error in parameter i_sascfg: file not found) 
 
  344    UPDATE target.tsu SET tsu_sascfg = "&l_sascfg";
 
  348 %LOCAL l_sasuser l_sasuser_abs;
 
  350    SELECT tsu_sasuser INTO :l_sasuser FROM target.tsu;
 
  352 %LET l_sasuser=&l_sasuser;
 
  353 %IF "&i_sasuser" NE "" %THEN %LET l_sasuser=&i_sasuser;
 
  354 %LET l_sasuser_abs=%_sasunit_abspath(&l_root,&l_sasuser);
 
  355 %IF %_sasunit_handleError(&l_macname, InvalidSasuser, 
 
  356    "&l_sasuser_abs" NE "" AND NOT %_sasunit_existdir(&l_sasuser_abs), 
 
  357    Error in parameter i_sasuser: folder not found) 
 
  360    UPDATE target.tsu SET tsu_sasuser = "&l_sasuser";
 
  364 %LOCAL l_testdata l_testdata_abs;
 
  366    SELECT tsu_testdata INTO :l_testdata FROM target.tsu;
 
  368 %LET l_testdata=&l_testdata;
 
  369 %IF "&i_testdata" NE "" %THEN %LET l_testdata=&i_testdata;
 
  370 %LET l_testdata_abs=%_sasunit_abspath(&l_root,&l_testdata);
 
  371 %IF %_sasunit_handleError(&l_macname, InvalidTestdata, 
 
  372    "&l_testdata_abs" NE "" AND NOT %_sasunit_existdir(&l_testdata_abs), 
 
  373    Error in parameter i_testdata: folder not found) 
 
  376    UPDATE target.tsu SET tsu_testdata = "&l_testdata";
 
  380 %LOCAL l_refdata l_refdata_abs;
 
  382    SELECT tsu_refdata INTO :l_refdata FROM target.tsu;
 
  384 %LET l_refdata=&l_refdata;
 
  385 %IF "&i_refdata" NE "" %THEN %LET l_refdata=&i_refdata;
 
  386 %LET l_refdata_abs=%_sasunit_abspath(&l_root,&l_refdata);
 
  387 %IF %_sasunit_handleError(&l_macname, InvalidRefdata, 
 
  388    "&l_refdata_abs" NE "" AND NOT %_sasunit_existdir(&l_refdata_abs), 
 
  389    Error in parameter i_refdata: folder not found) 
 
  392    UPDATE target.tsu SET tsu_refdata = "&l_refdata";
 
  396 %LOCAL l_doc l_doc_abs;
 
  398    SELECT tsu_doc INTO :l_doc FROM target.tsu;
 
  401 %IF "&i_doc" NE "" %THEN %LET l_doc=&i_doc;
 
  402 %LET l_doc_abs=%_sasunit_abspath(&l_root,&l_doc);
 
  403 %IF %_sasunit_handleError(&l_macname, InvalidDoc, 
 
  404    "&l_doc_abs" NE "" AND NOT %_sasunit_existdir(&l_doc_abs), 
 
  405    Error in parameter i_doc: folder not found) 
 
  408    UPDATE target.tsu SET tsu_doc = "&l_doc";
 
  412 %LOCAL restore_sasautos l_sasautos l_sasautos_abs i;
 
  413 %LET restore_sasautos=%sysfunc(getoption(sasautos));
 
  416    SELECT tsu_sasautos INTO :l_sasautos FROM target.tsu;
 
  418 %LET l_sasautos=&l_sasautos;
 
  419 %IF "&i_sasautos" NE "" %THEN %LET l_sasautos=&i_sasautos;
 
  420 %LET l_sasautos_abs=%_sasunit_abspath(&l_root,&l_sasautos);
 
  421 %IF %_sasunit_handleError(&l_macname, InvalidSASAutos, 
 
  422    "&l_sasautos_abs" NE "" AND NOT %_sasunit_existdir(&l_sasautos_abs), 
 
  423    Error in parameter i_sasautos: folder not found) 
 
  426    UPDATE target.tsu SET tsu_sasautos = "&l_sasautos";
 
  431    SELECT tsu_sasautos&i INTO :l_sasautos FROM target.tsu;
 
  433 %LET l_sasautos=&l_sasautos;
 
  434 %IF "&&i_sasautos&i" NE "" %THEN %LET l_sasautos=&&i_sasautos&i;
 
  435 %LET l_sasautos_abs=%_sasunit_abspath(&l_root,&l_sasautos);
 
  436 %IF %_sasunit_handleError(&l_macname, InvalidSASAutosN, 
 
  437    "&l_sasautos_abs" NE "" AND NOT %_sasunit_existdir(&l_sasautos_abs), 
 
  438    Error in parameter i_sasautos&i: folder not found) 
 
  441    UPDATE target.tsu SET tsu_sasautos&i = "&l_sasautos";
 
  446 %_sasunit_loadEnvironment (
 
  449 %IF "&g_error_code" NE "" %THEN %GOTO errexit;
 
  451 %if &sysscp. = WIN %then %do; 
 
  453    options noxwait xsync xmin;
 
  460 %LET l_work = %sysfunc(pathname(work));
 
  461 PROC DATASETS NOLIST NOWARN LIB=work;
 
  466    FILE "%sysfunc(pathname(work))/x.cmd";
 
  467    PUT "&g_removedir ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
 
  468    PUT "&g_makedir ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
 
  469 %IF %length(&g_sasuser) %THEN %DO;
 
  470    PUT "&g_copydir ""&g_sasuser"" ""%sysfunc(pathname(work))/sasuser""&g_endcommand";
 
  473 %if &sysscp. = LINUX %then %do;
 
  474    %_sasunit_xcmd(chmod u+x "%sysfunc(pathname(work))/x.cmd")
 
  476 %_sasunit_xcmd("%sysfunc(pathname(work))/x.cmd")
 
  478 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/x.cmd);
 
  481    FILE "&l_work/run.sas";
 
  482    PUT "LIBNAME awork ""&l_work"";";
 
  483    PUT "DATA awork.check; RUN;";
 
  486 %IF "&g_autoexec" NE "" %THEN %DO;
 
  487    %LET l_parms=&l_parms -autoexec ""&g_autoexec"";
 
  489 %IF "&g_sascfg" NE "" %THEN %DO;
 
  490    %IF &sysscp. = LINUX %THEN %DO;
 
  491           %IF "&g_sascfg" NE "" %THEN %DO;
 
  492              options SET=SASCFGPATH "&g_sascfg.";
 
  496       %LET l_parms=&l_parms -config ""&g_sascfg"";
 
  503    _sCmdString LENGTH = $32000
 
  506    "%sysfunc(pathname(work))/xxx.cmd"
 
  509 %IF &sysscp. = LINUX %THEN %DO;
 
  514         !! "-sysin &l_work./run.sas "
 
  515         !! "-initstmt ""%nrstr(%%_sasunit_scenario%(io_target=)&g_target%nrstr(%);)"" "
 
  516         !! "-log  &g_log./000.log "
 
  517         !! "-print &g_log./000.lst "
 
  521         !! "-mcompilenote all "
 
  522         !! "-sasautos &g_sasunit "
 
  523         !! "-sasuser %sysfunc(pathname(work))/sasuser "
 
  528    """" !! &g_sasstart !! """"
 
  531         !! "-sysin ""&l_work./run.sas"" "
 
  532         !! "-initstmt ""%nrstr(%%%_sasunit_scenario%(io_target=)&g_target%nrstr(%);)"" "
 
  533         !! "-log   ""&g_log./000.log"" "
 
  534         !! "-print ""&g_log./000.lst"" "
 
  539         !! "-mcompilenote all "
 
  540         !! "-sasautos ""&g_sasunit"" "
 
  541         !! "-sasuser ""%sysfunc(pathname(work))/sasuser"" "
 
  548 %IF &sysscp. = LINUX %THEN %DO;
 
  549   %_sasunit_xcmd(chmod u+x "%sysfunc(pathname(work))/xxx.cmd");
 
  550   %_sasunit_xcmd(sed -i -e 's/\r
 
  553 %_sasunit_xcmd("%sysfunc(pathname(work))/xxx.cmd")
 
  554 %LET l_rc=_sasunit_delfile(%sysfunc(pathname(work))/xxx.cmd);
 
  555 %LET l_sysrc = &sysrc;
 
  557 %IF %_sasunit_handleError(&l_macname, ErrorSASCall2, 
 
  558    NOT %sysfunc(exist(work.check)), 
 
  559    Error spawning SAS process in initialization) 
 
  562 PROC DATASETS NOLIST NOWARN LIB=work;
 
  566 %LET l_rc=%_sasunit_delFile(&l_work/run.sas);
 
  571       SET tsu_lastinit = %sysfunc(datetime())
 
  576 %PUT ============================ SASUnit has been initialized successfully ==========================;
 
  582    %PUT &g_error: ===================== Error! Testsuite aborted! ===========================================;