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! ===========================================;