23 %MACRO _reportAutonHTML (i_repdata = 
 
   31    %LOCAL d_rep1 d_rep2 l_tcg_res l_pgmLibraries l_pgmLib l_title l_logpath l_cAuton;
 
   33    %_tempFileName(d_rep1)
 
   34    %_tempFileName(d_rep2)
 
   36    PROC MEANS NOPRINT NWAY missing DATA=&i_repdata(KEEP=cas_auton pgm_id scn_id cas_id);
 
   37       class cas_auton pgm_id scn_id cas_id;
 
   38       OUTPUT OUT=&d_rep1. (rename=(_FREQ_=scn_tst));
 
   41    PROC MEANS NOPRINT NWAY missing DATA=&d_rep1.(KEEP=cas_auton pgm_id scn_id scn_tst);
 
   42       class cas_auton pgm_id scn_id;
 
   43       OUTPUT OUT=&d_rep2. (rename=(_FREQ_=scn_cas)) sum(scn_tst)=scn_tst;
 
   46    proc sort data=&i_repdata. out=work._auton_report;
 
   47       by cas_auton pgm_id scn_id;
 
   50    data work._auton_report;
 
   51       set work._auton_report;
 
   52       by cas_auton pgm_id scn_id;
 
   56    data work._auton_report;
 
   57       merge work._auton_report &d_rep2.;
 
   58       by cas_auton pgm_id scn_id;
 
   61    %IF &g_testcoverage. EQ 1 %THEN %DO;
 
   66       %let l_rc =%_delFile("&g_log/000.tcg");
 
   68       %let l_logpath=%_escapeBlanks(&g_log.);
 
   70       FILENAME allfiles "&l_logpath.
 
   84          SELECT DISTINCT cas_pgm 
 
   85          INTO :l_unitUnderTestList SEPARATED BY '*'
 
   86          FROM work._auton_report;
 
   89       DATA work._auton_report (COMPRESS=YES);
 
   91          SET work._auton_report;
 
   95       %LET l_listCount=%sysfunc(countw(&l_unitUnderTestList.,'*'));
 
   96       %do i = 1 %to &l_listCount;
 
   97          %LET l_currentUnit=%lowcase(%scan(&l_unitUnderTestList,&i,*));
 
   98          %IF "%sysfunc(compress(&l_currentUnit.))" EQ "" %THEN %DO;
 
  103             %let l_currentUnitLocation=;
 
  104             %let l_currentUnitFileName=;
 
  105             %IF (%SYSFUNC(FILEEXIST(&l_currentUnit.))) %THEN %DO; 
 
  106                %_getAbsPathComponents(
 
  107                        i_absPath         = &l_currentUnit
 
  108                      , o_fileName        = l_currentUnitFileName
 
  109                      , o_pathWithoutName = l_currentUnitLocation
 
  113                %IF (%SYSFUNC(FILEEXIST(&g_root./&l_currentUnit.))) %THEN %DO; 
 
  114                   %_getAbsPathComponents(
 
  115                        i_absPath         = &g_root./&l_currentUnit.
 
  116                      , o_fileName        = l_currentUnitFileName
 
  117                      , o_pathWithoutName = l_currentUnitLocation
 
  121                   %IF (%SYSFUNC(FILEEXIST(&g_sasunit./&l_currentUnit.))) %THEN %DO;
 
  122                       %_getAbsPathComponents(
 
  123                        i_absPath         = &g_sasunit./&l_currentUnit.
 
  124                      , o_fileName        = l_currentUnitFileName
 
  125                      , o_pathWithoutName = l_currentUnitLocation
 
  128                   %ELSE %IF (%SYSFUNC(FILEEXIST(&g_sasunit_os./&l_currentUnit.))) %THEN %DO;
 
  129                       %_getAbsPathComponents(
 
  130                        i_absPath         = &g_sasunit_os./&l_currentUnit.
 
  131                      , o_fileName        = l_currentUnitFileName
 
  132                      , o_pathWithoutName = l_currentUnitLocation
 
  137                      %DO %UNTIL ("&l_currentUnitLocation." NE "" OR &j. EQ 10);
 
  138                         %IF (%SYSFUNC(FILEEXIST(&&g_sasautos&j/&l_currentUnit.))) %THEN %DO;
 
  139                            %_getAbsPathComponents(
 
  140                                 i_absPath         = &&g_sasautos&j/&l_currentUnit.
 
  141                               , o_fileName        = l_currentUnitFileName
 
  142                               , o_pathWithoutName = l_currentUnitLocation
 
  145                         %LET j = %EVAL(&j + 1);
 
  152             %IF ("&l_currentUnitFileName." NE "" AND "&l_currentUnitLocation." NE "" 
 
  153                  AND %SYSFUNC(FILEEXIST(&l_currentUnitLocation./&l_currentUnitFileName.)) 
 
  154                  AND %SYSFUNC(FILEEXIST(&g_log./000.tcg)) ) %THEN %DO;
 
  155                  %_reporttcghtml(i_macroName                = &l_currentUnitFileName.
 
  156                                 ,i_macroLocation            = &l_currentUnitLocation.
 
  157                                 ,i_mCoverageName            = 000.tcg
 
  158                                 ,i_mCoverageLocation        = &g_log
 
  159                                 ,o_outputFile               = tcg_%SCAN(&l_currentUnitFileName.,1,.)
 
  160                                 ,o_outputPath               = &g_target/rep
 
  161                                 ,o_resVarName               = l_tcg_res
 
  168            UPDATE work._auton_report
 
  169              SET tcg_pct=&l_tcg_res.
 
  170             WHERE upcase(cas_pgm) EQ "%upcase(&l_currentUnit.)";
 
  177       SELECT DISTINCT cas_auton 
 
  178       INTO :l_pgmLibraries SEPARATED BY '§'
 
  179       FROM work._auton_report;
 
  186    %let l_title=%str(&g_nls_reportAuton_001 | &g_project - SASUnit &g_nls_reportAuton_002);
 
  187    title j=c "&l_title.";
 
  189    %if (&o_html.) %then %do;
 
  190       ods html4 file="&o_path./&o_file..html" 
 
  192                     headtext='<link href="tabs.css" rel="stylesheet" type="text/css"/><link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />'
 
  193                     metatext="http-equiv=""Content-Style-Type"" content=""text/css"" /><meta http-equiv=""Content-Language"" content=""&i_language."" /"
 
  194                     style=styles.SASUnit stylesheet=(URL="SAS_SASUnit.css");
 
  195       %_reportPageTopHTML(i_title   = &l_title.
 
  201    %LET l_listCount=%sysfunc(countw(&l_pgmLibraries.,'§'));
 
  202    %do i = 1 %to &l_listCount.;
 
  203       %LET l_pgmLib=%lowcase(%scan(&l_pgmLibraries,&i,§));
 
  205       %IF (l_pgmLib ne .) %THEN %DO;
 
  206          %LET l_cAuton=%sysfunc (putn(&l_pgmLib.,z3.))_;
 
  208       data work._current_auton;
 
  209          length pgmColumn scenarioColumn caseColumn assertColumn
 
  210                 %IF &g_testcoverage. EQ 1 %THEN %DO;
 
  214                 linkTitle0  linkTitle1  LinkTitle2  LinkTitle3
 
  215                 linkColumn0 linkColumn1 LinkColumn2 LinkColumn3 $1000
 
  216                 _autonColumn autonColumn cas_abs_path scn_abs_path $400;
 
  217          set work._auton_report (where=(cas_auton=&l_pgmLib.));
 
  218          ARRAY sa(0:9) tsu_sasautos tsu_sasautos1-tsu_sasautos9;
 
  220             pgmColumn="&g_nls_reportAuton_005."
 
  221             scenarioColumn="&g_nls_reportAuton_006."
 
  222             caseColumn="&g_nls_reportAuton_007."
 
  223             assertColumn="&g_nls_reportAuton_014."
 
  224             %IF &g_testcoverage. EQ 1 %THEN %DO;
 
  225                coverageColumn="&g_nls_reportAuton_016." [%]
 
  227             resultColumn="&g_nls_reportAuton_008.";
 
  229          if (cas_pgm="^_") then cas_pgm="";
 
  230          IF cas_auton = . THEN DO;
 
  231             cas_abs_path = resolve ('%_abspath(&g_root,' !! trim(cas_pgm) !! ')');   
 
  233          ELSE IF cas_auton = 0 THEN DO;
 
  234             cas_abs_path = resolve ('%_abspath(&g_sasunit,' !! trim(cas_pgm) !! ')');   
 
  236          ELSE IF cas_auton = 1 THEN DO;
 
  237             cas_abs_path = resolve ('%_abspath(&g_sasunit_os,' !! trim(cas_pgm) !! ')');   
 
  240             cas_abs_path = resolve ('%_abspath(&g_sasautos' !! put (cas_auton-2,1.) !! ',' !! trim(cas_pgm) !! ')');
 
  242          scn_abs_path = resolve ('%_abspath(&g_root,' !! trim(scn_path) !! ')');
 
  244          %_render_dataColumn(i_sourceColumn=scn_cas
 
  245                             ,o_targetColumn=caseColumn
 
  247          %_render_dataColumn(i_sourceColumn=scn_tst
 
  248                             ,o_targetColumn=assertColumn
 
  250          %_render_iconColumn(i_sourceColumn=scn_res
 
  252                             ,o_targetColumn=resultColumn
 
  254          if (cas_auton = .) then do;
 
  255             _autonColumn = "&g_nls_reportAuton_015.";
 
  258             if (cas_auton = 0) then do;
 
  259                _autonColumn = tsu_sasunit;
 
  260                linkTitle0   = symget("g_sasunit");
 
  262             else if (cas_auton = 1) then do;
 
  263                _autonColumn = tsu_sasunit_os;
 
  264                linkTitle0   = symget("g_sasunit_os");
 
  267                _autonColumn = sa(cas_auton-2);
 
  268                linkTitle0   = symget("g_sasautos" !! put(cas_auton-2, z1.));
 
  271             linkTitle0   = "&g_nls_reportAuton_009. " !! linkTitle0;
 
  273          %_render_dataColumn(i_sourceColumn=_autonColumn
 
  274                             ,i_linkColumn=LinkColumn0
 
  275                             ,i_linkTitle=LinkTitle0
 
  276                             ,o_targetColumn=autonColumn
 
  278          autonColumn="&g_nls_reportAuton_003.: " !! trim(autonColumn);
 
  280          *** Any destination that renders links shares this if ***;
 
  281          %if (&o_html.) %then %do;
 
  282             LinkTitle1 = "&g_nls_reportAuton_009." !! byte(13) !! cas_abs_path;
 
  283             LinkTitle2 = "&g_nls_reportAuton_010." !! byte(13) !! scn_abs_path;
 
  284             LinkTitle3 = "&g_nls_reportAuton_017. " !! cas_pgm;
 
  286             *** HTML-links are destinations specific ***;
 
  287             %if (&o_html.) %then %do;
 
  289                LinkColumn2 = catt("cas_overview.html
#SCN", put(scn_id,z3.), "_"); 
  290                if compress(cas_pgm) ne '' then do;
 
  291                   if index(cas_pgm,'/') GT 0 then do;
 
  292                      LinkColumn3 =  'tcg_'||trim(left(scan(substr(cas_pgm, findw(cas_pgm, scan(cas_pgm, countw(cas_pgm,'/'),'/'))),1,".") !! ".html"));
 
  295                      LinkColumn3 =  'tcg_'||trim(left(scan(cas_pgm,1,".") !! ".html"));
 
  300             %_render_dataColumn(i_sourceColumn=cas_pgm
 
  301                                ,i_linkColumn=LinkColumn1
 
  302                                ,i_linkTitle=LinkTitle1
 
  303                                ,o_targetColumn=pgmColumn
 
  305             %_render_dataColumn(i_sourceColumn=scn_id
 
  307                                ,i_linkColumn=LinkColumn2
 
  308                                ,i_linkTitle=LinkTitle2
 
  309                                ,o_targetColumn=scenarioColumn
 
  311             %IF &g_testcoverage. EQ 1 %THEN %DO;
 
  312                %_render_dataColumn(i_sourceColumn=tcg_pct
 
  314                                   ,i_linkColumn=LinkColumn3
 
  315                                   ,i_linkTitle=LinkTitle3
 
  316                                   ,o_targetColumn=coverageColumn
 
  322       %if (&i. = &l_listCount.) %then %do;
 
  323          %_reportFooter(o_html=&o_html.);
 
  326       %if (&o_html.) %then %do;
 
  327          ods html4 anchor="AUTON&l_cAuton.";
 
  330       proc report data=work._current_auton nowd missing spanrows
 
  331             style(lines)=blindData
 
  334          columns pgm_id pgmColumn scenarioColumn caseColumn assertColumn
 
  335             %IF &g_testcoverage. EQ 1 %THEN %DO;
 
  338                 resultColumn autonColumn;
 
  340          define autonColumn    / noprint;
 
  341          define pgm_id         / group noprint;
 
  342          define pgmColumn      / group;
 
  343          define scenarioColumn / group style(column)=[just=right];
 
  344          define caseColumn     / group style(column)=[just=right];
 
  345          define assertColumn   / group style(column)=[just=right];
 
  346          %IF &g_testcoverage. EQ 1 %THEN %DO;
 
  347              define coverageColumn / group style(column)=[just=right];
 
  349          define resultColumn / group style(COLUMN)=[background=white];
 
  351          compute before _page_;
 
  352             line @1 autonColumn $;
 
  356       *** Supress title between testcases ***;
 
  357       %if (&i. = 1) %then %do;
 
  361       *** Render separation line between program libraries ***;
 
  362       %if (&o_html. AND &i. ne &l_listCount.) %then %do;
 
  363          ods html4 text="^{RAW <hr size=
""1
"">}
"; 
  366       proc delete data=work._current_auton; 
  372    %if (&o_html.) %then %do; 
  381    proc delete data=work._auton_report; 
  383 %MEND _reportAutonHTML;