From e23938763753b956f6df5d41772f997bf6e74edd Mon Sep 17 00:00:00 2001 From: JOEL IVEY Date: Mon, 14 Sep 2015 13:46:15 -0700 Subject: [PATCH] Updated Package Updated 3rd line of routines (previously 4th line) to indicate submission to OSEHRA and to show information about license. Added comments to Manual text concerning: 1) use of NMSPU as unit test namespace instead of ZZUT as well as including unit tests in distributions; 2) need for rapid running unit tests and identifying and fixing slow tests. --- ....docx => M-Unit Test Manual 14Sep2015.docx | Bin 923675 -> 925082 bytes M-Unit Test Manual 14Sep2015.pdf | Bin 0 -> 733570 bytes MASH-0_2-0_M-Unit_Test_150808.KID | 4504 ----------------- ...0.KID => MASH-0_2-0_M-Unit_Test_150914.KID | 3942 +++++++-------- Packman Message MASH_0.2_0_M_Unit_Test.txt | 3940 +++++++------- Routines/%ut.m | 6 +- Routines/%ut1.m | 7 +- Routines/%utcover.m | 7 +- Routines/%utt1.m | 9 +- Routines/%utt2.m | 7 +- Routines/%utt3.m | 7 +- Routines/%utt4.m | 7 +- Routines/%utt5.m | 7 +- Routines/%utt6.m | 7 +- Routines/%uttcovr.m | 7 +- Routines/ZZUTPOST.m | 7 +- Routines/ZZUTPRE.m | 5 +- 17 files changed, 3962 insertions(+), 8507 deletions(-) rename M-Unit Test Manual 10Aug2015.docx => M-Unit Test Manual 14Sep2015.docx (95%) create mode 100644 M-Unit Test Manual 14Sep2015.pdf delete mode 100644 MASH-0_2-0_M-Unit_Test_150808.KID rename MASH-0_2-0_M-Unit_Test_150810.KID => MASH-0_2-0_M-Unit_Test_150914.KID (97%) diff --git a/M-Unit Test Manual 10Aug2015.docx b/M-Unit Test Manual 14Sep2015.docx similarity index 95% rename from M-Unit Test Manual 10Aug2015.docx rename to M-Unit Test Manual 14Sep2015.docx index e6daa9452f93b6402a47d0c245eb343ab9cb1cf8..54c075cd6bb2089f3884d2a4e99787779cfd633c 100644 GIT binary patch delta 35899 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𝔏sE%edzwSF3ler0n$2N*- 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ƙ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
fJBLM!*EL2{tz1a4I;`I+E2231r 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⁣iV*fy)dxzV+P90U{ceo!)jrX)f`MQ}1e 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 z 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 S NMSP=$NAMESPACE -"RTN","ZZUTPRE",18,0) - ; -"RTN","ZZUTPRE",19,0) - N $ET S $ET="ZN NMSP D ^%ZTER S $EC=""""" -"RTN","ZZUTPRE",20,0) - ; -"RTN","ZZUTPRE",21,0) - ZN "%SYS" ; Go to SYS -"RTN","ZZUTPRE",22,0) - ; -"RTN","ZZUTPRE",23,0) - ; Props -"RTN","ZZUTPRE",24,0) - N % S %=##Class(Config.Namespaces).Get(NMSP,.PROP) ; Get all namespace properties -"RTN","ZZUTPRE",25,0) - I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT -"RTN","ZZUTPRE",26,0) - ; -"RTN","ZZUTPRE",27,0) - N DBG S DBG=PROP("Globals") ; get the database globals location -"RTN","ZZUTPRE",28,0) - N DBR S DBR=PROP("Routines") ; get the database routines location -"RTN","ZZUTPRE",29,0) - ; -"RTN","ZZUTPRE",30,0) - ; Map %ut globals away from %SYS -"RTN","ZZUTPRE",31,0) - N % S %=##class(Config.Configuration).GetGlobalMapping(NMSP,"%ut*","",DBG,DBG) -"RTN","ZZUTPRE",32,0) - I '% S %=##class(Config.Configuration).AddGlobalMapping(NMSP,"%ut*","",DBG,DBG) -"RTN","ZZUTPRE",33,0) - I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT -"RTN","ZZUTPRE",34,0) - ; -"RTN","ZZUTPRE",35,0) - ; Map %ut routines away from %SYS -"RTN","ZZUTPRE",36,0) - N PROPRTN S PROPRTN("Database")=DBR -"RTN","ZZUTPRE",37,0) - N % S %=##Class(Config.MapRoutines).Get(NMSP,"%ut*",.PROPRTN) -"RTN","ZZUTPRE",38,0) - N PROPRTN S PROPRTN("Database")=DBR ; Cache seems to like deleting this -"RTN","ZZUTPRE",39,0) - I '% S %=##Class(Config.MapRoutines).Create(NMSP,"%ut*",.PROPRTN) -"RTN","ZZUTPRE",40,0) - I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT -"RTN","ZZUTPRE",41,0) - ZN NMSP ; Go back -"RTN","ZZUTPRE",42,0) - QUIT -"RTN","ut") -0^1^B193491992 -"RTN","ut",1,0) -%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;08/07/15 19:58 -"RTN","ut",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","ut",3,0) - ; -"RTN","ut",4,0) - ; This routine and its companion, %ut1, provide the basic functionality for -"RTN","ut",5,0) - ; running unit tests on parts of M programs either at the command line level -"RTN","ut",6,0) - ; or via the M-Unit GUI application for windows operating systems. -"RTN","ut",7,0) - ; -"RTN","ut",8,0) - ; Original by Dr. Joel Ivey -"RTN","ut",9,0) - ; Contributions by Dr. Sam Habiel -"RTN","ut",10,0) - ; comments moved to %ut1 due to space requirements -"RTN","ut",11,0) - ; -"RTN","ut",12,0) - D ^%utt6 ; runs unit tests on all of it -"RTN","ut",13,0) - Q -"RTN","ut",14,0) - ; -"RTN","ut",15,0) -EN(%utRNAM,%utVERB,%utBREAK) ; .SR Entry point with primary test routine name, optional 1 for verbose output -"RTN","ut",16,0) - N %utLIST,%utROU,%ut -"RTN","ut",17,0) - I '+$G(%utVERB) S %utVERB=0 -"RTN","ut",18,0) - S %utLIST=1,%utROU(%utLIST)=%utRNAM -"RTN","ut",19,0) - K ^TMP("%ut",$J,"UTVALS") -"RTN","ut",20,0) - D SETUT -"RTN","ut",21,0) - D EN1(.%utROU,%utLIST) -"RTN","ut",22,0) - Q -"RTN","ut",23,0) - ; -"RTN","ut",24,0) -SETUT ; -"RTN","ut",25,0) - ; VEN/SMH 26JUL2013 -"RTN","ut",26,0) - I '($D(IO)#2) S IO=$P -"RTN","ut",27,0) - S U="^" -"RTN","ut",28,0) - ; VEN/SMH 26JUL2013 END -"RTN","ut",29,0) - ; -"RTN","ut",30,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",31,0) - S %ut("IO")=IO -"RTN","ut",32,0) - S %ut=1 ; set to identify unit test being run check with $$ISUTEST^%ut() -"RTN","ut",33,0) - ; -"RTN","ut",34,0) - ; ZEXCEPT: %utBREAK -"RTN","ut",35,0) - I $G(%utBREAK) S %ut("BREAK")=1 -"RTN","ut",36,0) - Q -"RTN","ut",37,0) - ; -"RTN","ut",38,0) -EN1(%utROU,%utLIST) ; -"RTN","ut",39,0) - ; VEN/SMH 26JUL2013 - This block is refactored to fix problems with -"RTN","ut",40,0) - ; SETUP and TEARDOWN not happening at the right time -"RTN","ut",41,0) - N %utERRL,%utK,%utI,%utJ,%utSTRT -"RTN","ut",42,0) - ; ZEXCEPT: %utVERB -- ARGUMENT TO EN -"RTN","ut",43,0) - ; ZEXCEPT: %utGUI -- CONDITIONALLY DEFINED BY GUINEXT -"RTN","ut",44,0) - ; ZEXCEPT: %ut -- NEWED IN EN -"RTN","ut",45,0) - ; -"RTN","ut",46,0) - ; Structure map for %ut -"RTN","ut",47,0) - ; -- CURR = Counter for routine number. Used as sub in %utROU -"RTN","ut",48,0) - ; -- ECNT = Entry point count in loop (cf. NERT); VEN/SMH - Needed? -"RTN","ut",49,0) - ; -- FAIL = Number of failures -"RTN","ut",50,0) - ; -- CHK = Number of checks ran (TF/EQ/FAIL) -"RTN","ut",51,0) - ; -- NENT = Number of entry points ran -"RTN","ut",52,0) - ; -- ERRN = Number of errors -"RTN","ut",53,0) - S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 -"RTN","ut",54,0) - ; -"RTN","ut",55,0) - ; -- GET LIST OF ROUTINES -- -"RTN","ut",56,0) - ; first get any tree of routines from this one -"RTN","ut",57,0) - D GETTREE^%ut1(.%utROU,.%utLIST) -"RTN","ut",58,0) - ; -"RTN","ut",59,0) - ; Now process each routine that has been referenced -"RTN","ut",60,0) - N CURRROU -"RTN","ut",61,0) - S %ut("CURR")=0 -"RTN","ut",62,0) - F S %ut("CURR")=%ut("CURR")+1 Q:'$D(%utROU(%ut("CURR"))) S CURRROU=%utROU(%ut("CURR")) D I $T(@("SHUTDOWN^"_CURRROU))'="" D @("SHUTDOWN^"_CURRROU) -"RTN","ut",63,0) - . ; 141018 - add ability to run STARTUP and SHUTDOWN in each routine JLI -"RTN","ut",64,0) - . I $T(@("STARTUP^"_CURRROU))'="" D @("STARTUP^"_CURRROU) ; 141018 -"RTN","ut",65,0) - . N %utETRY ; Test list to run -"RTN","ut",66,0) - . ; -"RTN","ut",67,0) - . ; Collect Test list. -"RTN","ut",68,0) - . D CHEKTEST^%ut1(%utROU(%ut("CURR")),.%ut,.%utETRY) -"RTN","ut",69,0) - . ; -"RTN","ut",70,0) - . ; if a SETUP entry point exists, save it off in %ut -"RTN","ut",71,0) - . S %ut("SETUP")="" ; 141018 need to clear any previous values JLI -"RTN","ut",72,0) - . N %utSETUP S %utSETUP="SETUP^"_%utROU(%ut("CURR")) -"RTN","ut",73,0) - . S %ut("LINE")=$T(@%utSETUP) I %ut("LINE")'="" S %ut("SETUP")=%utSETUP -"RTN","ut",74,0) - . K %utSETUP ; we're done! -"RTN","ut",75,0) - . ; -"RTN","ut",76,0) - . ; if a TEARDOWN entry point exists, ditto -"RTN","ut",77,0) - . S %ut("TEARDOWN")="" ; 141018 need to clear any previous values JLI -"RTN","ut",78,0) - . N %utTEARDOWN S %utTEARDOWN="TEARDOWN^"_%utROU(%ut("CURR")) -"RTN","ut",79,0) - . S %ut("LINE")=$T(@%utTEARDOWN) I %ut("LINE")'="" S %ut("TEARDOWN")=%utTEARDOWN -"RTN","ut",80,0) - . K %utTEARDOWN ; done here. -"RTN","ut",81,0) - . ; -"RTN","ut",82,0) - . ; VEN/SMH 26JUL2013 - this block changed to correct running of setup and teardown -"RTN","ut",83,0) - . ; run each of the specified entry points -"RTN","ut",84,0) - . ; -"RTN","ut",85,0) - . ; == THIS FOR/DO BLOCK IS THE CENTRAL TEST RUNNER == -"RTN","ut",86,0) - . S %utI=0 -"RTN","ut",87,0) - . F S %utI=$O(%utETRY(%utI)) Q:%utI'>0 S %ut("ENUM")=%ut("ERRN")+%ut("FAIL") D -"RTN","ut",88,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",89,0) - . . ; -"RTN","ut",90,0) - . . ; Run Set-up Code (only if present) -"RTN","ut",91,0) - . . S %ut("ENT")=$G(%ut("SETUP")) ; Current entry -"RTN","ut",92,0) - . . S %ut("NAME")="Set-up Code" -"RTN","ut",93,0) - . . D:%ut("ENT")]"" @%ut("ENT") -"RTN","ut",94,0) - . . ; -"RTN","ut",95,0) - . . ; Run actual test -"RTN","ut",96,0) - . . S %ut("ECNT")=%ut("ECNT")+1 -"RTN","ut",97,0) - . . S %ut("NAME")=%utETRY(%utI,"NAME") -"RTN","ut",98,0) - . . S %ut("ENT")=%utETRY(%utI)_"^"_%utROU(%ut("CURR")) -"RTN","ut",99,0) - . . I %utVERB,'$D(%utGUI) D VERBOSE1(.%utETRY,%utI) ; Say what we executed. -"RTN","ut",100,0) - . . D @%ut("ENT") -"RTN","ut",101,0) - . . ; -"RTN","ut",102,0) - . . ; Run Teardown Code (only if present) -"RTN","ut",103,0) - . . S %ut("ENT")=$G(%ut("TEARDOWN")) -"RTN","ut",104,0) - . . S %ut("NAME")="Teardown Code" -"RTN","ut",105,0) - . . D:%ut("ENT")]"" @%ut("ENT") -"RTN","ut",106,0) - . . ; -"RTN","ut",107,0) - . . ; ENUM = Number of errors + failures -"RTN","ut",108,0) - . . ; Only print out the success message [OK] If our error number remains -"RTN","ut",109,0) - . . ; the same as when we started the loop. -"RTN","ut",110,0) - . . I %utVERB,'$D(%utGUI) D -"RTN","ut",111,0) - . . . I %ut("ENUM")=(%ut("ERRN")+%ut("FAIL")) D VERBOSE(.%utETRY,%utI,1) I 1 -"RTN","ut",112,0) - . . . E D VERBOSE(.%utETRY,%utI,0) -"RTN","ut",113,0) - . . . Q -"RTN","ut",114,0) - . . Q -"RTN","ut",115,0) - . ; keep a %utCNT of number of entry points executed across all routines -"RTN","ut",116,0) - . S %ut("NENT")=%ut("NENT")+%ut("ENTN") -"RTN","ut",117,0) - . Q -"RTN","ut",118,0) - ; -"RTN","ut",119,0) - ; -- SHUTDOWN -- -"RTN","ut",120,0) - D SETIO^%ut1 -"RTN","ut",121,0) - W !!,"Ran ",%utLIST," Routine",$S(%utLIST>1:"s",1:""),", ",%ut("NENT")," Entry Tag",$S(%ut("NENT")>1:"s",1:"") -"RTN","ut",122,0) - W !,"Checked ",%ut("CHK")," test",$S(%ut("CHK")>1:"s",1:""),", with ",%ut("FAIL")," failure",$S(%ut("FAIL")'=1:"s",1:"")," and encountered ",%ut("ERRN")," error",$S(%ut("ERRN")'=1:"s",1:""),"." -"RTN","ut",123,0) - S ^TMP("%ut",$J,"UTVALS")=%utLIST_U_%ut("NENT")_U_%ut("CHK")_U_%ut("FAIL")_U_%ut("ERRN") ; JLI 150621 so programs running several sets of unit tests can generate totals -"RTN","ut",124,0) - D RESETIO^%ut1 -"RTN","ut",125,0) - Q -"RTN","ut",126,0) - ; -- end EN1 -"RTN","ut",127,0) -VERBOSE(%utETRY,%utI,SUCCESS) ; Say whether we succeeded or failed. -"RTN","ut",128,0) - ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut",129,0) - D SETIO^%ut1 -"RTN","ut",130,0) - N I F I=$X+3:1:73 W "-" -"RTN","ut",131,0) - W ?73 -"RTN","ut",132,0) - I $G(SUCCESS) W "[OK]" -"RTN","ut",133,0) - E W "[FAIL]" -"RTN","ut",134,0) - D RESETIO^%ut1 -"RTN","ut",135,0) - Q -"RTN","ut",136,0) - ; -"RTN","ut",137,0) -VERBOSE1(%utETRY,%utI) ; Print out the entry point info -"RTN","ut",138,0) - ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut",139,0) - D SETIO^%ut1 -"RTN","ut",140,0) - W !,%utETRY(%utI) I $G(%utETRY(%utI,"NAME"))'="" W " - ",%utETRY(%utI,"NAME") -"RTN","ut",141,0) - D RESETIO^%ut1 -"RTN","ut",142,0) - Q -"RTN","ut",143,0) - ; -"RTN","ut",144,0) -CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values -"RTN","ut",145,0) - I '$D(XTSTVAL) D NVLDARG^%ut1("CHKTF") Q -"RTN","ut",146,0) - D CHKTF^%ut1(XTSTVAL,$G(XTERMSG)) -"RTN","ut",147,0) - Q -"RTN","ut",148,0) - ; -"RTN","ut",149,0) -CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut",150,0) - I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG^%ut1("CHKEQ") Q -"RTN","ut",151,0) - D CHKEQ^%ut1(XTEXPECT,XTACTUAL,$G(XTERMSG)) -"RTN","ut",152,0) - Q -"RTN","ut",153,0) - ; -"RTN","ut",154,0) -FAIL(XTERMSG) ; Entry point for generating a failure message -"RTN","ut",155,0) - D FAIL^%ut1($G(XTERMSG)) -"RTN","ut",156,0) - Q -"RTN","ut",157,0) - ; -"RTN","ut",158,0) -SUCCEED ; Entry point for forcing a success (Thx David Whitten) -"RTN","ut",159,0) - ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut",160,0) - ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut",161,0) - ; Switch IO and write out the dot for activity -"RTN","ut",162,0) - I '$D(%utGUI) D -"RTN","ut",163,0) - . D SETIO^%ut1 -"RTN","ut",164,0) - . W "." -"RTN","ut",165,0) - . D RESETIO^%ut1 -"RTN","ut",166,0) - ; -"RTN","ut",167,0) - ; Increment test counter -"RTN","ut",168,0) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut",169,0) - QUIT -"RTN","ut",170,0) - ; -"RTN","ut",171,0) -CHKLEAKS(%utCODE,%utLOC,%utINPT) ; functionality to check for variable leaks on executing a section of code -"RTN","ut",172,0) - ; %utCODE - A string that specifies the code that is to be XECUTED and checked for leaks. -"RTN","ut",173,0) - ; this should be a complete piece of code (e.g., "S X=$$NOW^XLFDT()" or "D EN^%ut(""ROUNAME"")") -"RTN","ut",174,0) - ; %utLOC - A string that is used to indicate the code tested for variable leaks -"RTN","ut",175,0) - ; %utINPT - An optional variable which may be passed by reference. This may -"RTN","ut",176,0) - ; be used to pass any variable values, etc. into the code to be -"RTN","ut",177,0) - ; XECUTED. In this case, set the subscript to the variable name and the -"RTN","ut",178,0) - ; value of the subscripted variable to the desired value of the subscript. -"RTN","ut",179,0) - ; e.g., (using NAME as my current namespace) -"RTN","ut",180,0) - ; S CODE="S %utINPT=$$ENTRY^ROUTINE(ZZVALUE1,ZZVALUE2)" -"RTN","ut",181,0) - ; S NAMELOC="ENTRY^ROUTINE leak test" (or simply "ENTRY^ROUTINE") -"RTN","ut",182,0) - ; S NAMEINPT("ZZVALUE1")=ZZVALUE1 -"RTN","ut",183,0) - ; S NAMEINPT("ZZVALUE2")=ZZVALUE2 -"RTN","ut",184,0) - ; D CHKLEAKS^%ut(CODE,NAMELOC,.NAMEINPT) -"RTN","ut",185,0) - ; -"RTN","ut",186,0) - ; If part of a unit test, any leaked variables in ENTRY^ROUTINE which result -"RTN","ut",187,0) - ; from running the code with the variables indicated will be shown as FAILUREs. -"RTN","ut",188,0) - ; -"RTN","ut",189,0) - ; If called outside of a unit test, any leaked variables will be printed to the -"RTN","ut",190,0) - ; current device. -"RTN","ut",191,0) - ; -"RTN","ut",192,0) - N (%utCODE,%utLOC,%utINPT,DUZ,IO,U,%utERRL,%ut,%utGUI,%utERR,%utI,%utJ,%utK,%utLIST,%utROU,%utSTRT,XTGUISEP) -"RTN","ut",193,0) - ; ZEXCEPT: %ut - part of exclusive NEW TESTS FOR EXISTENCE ONLY -"RTN","ut",194,0) - ; ZEXCEPT: %utVAR - handled by exclusive NEW -"RTN","ut",195,0) - ; -"RTN","ut",196,0) - ; ACTIVATE ANY VARIABLES PASSED AS SUBSCRIPTS TO %utINPT TO THEIR VALUES -"RTN","ut",197,0) - S %utVAR=" " F S %utVAR=$O(%utINPT(%utVAR)) Q:%utVAR="" S (@%utVAR)=%utINPT(%utVAR) -"RTN","ut",198,0) - X %utCODE -"RTN","ut",199,0) - N ZZUTVAR S ZZUTVAR="%" -"RTN","ut",200,0) - I $G(%ut)=1 D -"RTN","ut",201,0) - . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) -"RTN","ut",202,0) - . F S ZZUTVAR=$O(@ZZUTVAR) Q:ZZUTVAR="" I $E(ZZUTVAR,1,3)'="%ut",'$D(%utINPT(ZZUTVAR)),",DUZ,IO,U,DTIME,ZZUTVAR,DT,%ut,XTGUISEP,"'[(","_ZZUTVAR_",") D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) -"RTN","ut",203,0) - . Q -"RTN","ut",204,0) - I '($G(%ut)=1) D -"RTN","ut",205,0) - . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR -"RTN","ut",206,0) - . F S ZZUTVAR=$O(@ZZUTVAR) Q:ZZUTVAR="" I $E(ZZUTVAR,1,3)'="%ut",'$D(%utINPT(ZZUTVAR)),",DUZ,IO,U,DTIME,ZZUTVAR,DT,%ut,XTGUISEP,"'[(","_ZZUTVAR_",") W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR -"RTN","ut",207,0) - . Q -"RTN","ut",208,0) - Q -"RTN","ut",209,0) - ; -"RTN","ut",210,0) -ERROR ; record errors -"RTN","ut",211,0) - ; ZEXCEPT: %utERRL,%utGUI,%utERR -CREATED IN SETUP, KILLED IN END -"RTN","ut",212,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",213,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut",214,0) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut",215,0) - I '$D(%utGUI) D ERROR1 -"RTN","ut",216,0) - I $D(%utGUI) D -"RTN","ut",217,0) - . S %ut("CNT")=%ut("CNT")+1 -"RTN","ut",218,0) - . S %utERR=%utERR+1 -"RTN","ut",219,0) - . S @%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"ERROR"_XTGUISEP_$S(+$SY=47:$ZS,1:$ZE) -"RTN","ut",220,0) - . Q -"RTN","ut",221,0) - S @($S(+$SY=47:"$ZS",1:"$ZE")_"="_""""""),$EC="" -"RTN","ut",222,0) - Q -"RTN","ut",223,0) - ; -"RTN","ut",224,0) -ERROR1 ; -"RTN","ut",225,0) - I $G(%ut("BREAK")) BREAK ; if we are asked to break upon error, please do so! -"RTN","ut",226,0) - ; ZEXCEPT: %utERRL -CREATED IN SETUP, KILLED IN END -"RTN","ut",227,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",228,0) - D SETIO^%ut1 -"RTN","ut",229,0) - W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - Error: " W $S(+$SY=47:$ZS,1:$ZE),! D -"RTN","ut",230,0) - . S %ut("ERRN")=%ut("ERRN")+1,%utERRL(%ut("ERRN"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=$S(+$SY=47:$ZS,1:$ZE),%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut",231,0) - . Q -"RTN","ut",232,0) - D RESETIO^%ut1 -"RTN","ut",233,0) - Q -"RTN","ut",234,0) - ; -"RTN","ut",235,0) -ISUTEST() ; .SUPPORTED API TO DETERMINE IF CURRENTLY IN UNIT TEST -"RTN","ut",236,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",237,0) - Q $G(%ut)=1 -"RTN","ut",238,0) - ; -"RTN","ut",239,0) -PICKSET ; .OPT Interactive selection of MUnit Test Group -"RTN","ut",240,0) - N DIC,Y,%utROU,%utLIST,DIR S DIC=17.9001,DIC(0)="AEQM" D ^DIC Q:Y'>0 W ! D GETSET(+Y,.%utROU,.%utLIST) N DIC,Y,%ut D SETUT D EN1(.%utROU,%utLIST) S DIR(0)="EA",DIR("A")="Enter RETURN to continue:" D ^DIR K DIR -"RTN","ut",241,0) - Q -"RTN","ut",242,0) - ; -"RTN","ut",243,0) -RUNSET(SETNAME,VERBOSE) ; .SR Run with Specified Selection of MUnit Test Group -"RTN","ut",244,0) - N Y,%utROU,%utLIST,%utVERB -"RTN","ut",245,0) - Q:$G(SETNAME)="" -"RTN","ut",246,0) - S %utVERB=$G(VERBOSE,0) -"RTN","ut",247,0) - S Y=+$$FIND1^DIC(17.9001,"","X",SETNAME) Q:Y'>0 -"RTN","ut",248,0) - D GETSET(Y,.%utROU,.%utLIST) -"RTN","ut",249,0) - N Y,SETNAME,%ut -"RTN","ut",250,0) - D SETUT -"RTN","ut",251,0) - D EN1(.%utROU,%utLIST) -"RTN","ut",252,0) - Q -"RTN","ut",253,0) - ; -"RTN","ut",254,0) - ; DOSET CAN BE USED TO RUN A SET OF TESTS BASED ON THE IEN IN THE MUNIT TEST GROUP file (#17.9001) -"RTN","ut",255,0) -DOSET(IEN,%utVERB) ; 140731 JLI added %utVERB as a second argument -"RTN","ut",256,0) - ; IEN - Internal entry number for selected set of tests in the MUNIT TEST GROUP file (#17.9001) -"RTN","ut",257,0) - ; %utVERB - optional input that indicates verbose output is permitted -"RTN","ut",258,0) - ; -"RTN","ut",259,0) - N %utROU,%utLIST -"RTN","ut",260,0) - I '$D(%utVERB) S %utVERB=0 -"RTN","ut",261,0) - S %utLIST=0 -"RTN","ut",262,0) - D GETSET($G(IEN),.%utROU,.%utLIST) -"RTN","ut",263,0) - I %utLIST>0 N IEN,%ut D SETUT,EN1(.%utROU,%utLIST) -"RTN","ut",264,0) - Q -"RTN","ut",265,0) - ; -"RTN","ut",266,0) -GETSET(IEN,%utROU,%utLIST) ; JLI 140731 - called from PICKSET, RUNSET, DOSET, GUISET -"RTN","ut",267,0) - N IENS,%utROOT -"RTN","ut",268,0) - S IENS=IEN_"," D GETS^DIQ(17.9001,IENS,"1*","","%utROOT") -"RTN","ut",269,0) - S %utLIST=0,IENS="" F S IENS=$O(%utROOT(17.90011,IENS)) Q:IENS="" S %utLIST=%utLIST+1,%utROU(%utLIST)=%utROOT(17.90011,IENS,.01) -"RTN","ut",270,0) - Q -"RTN","ut",271,0) - ; -"RTN","ut",272,0) -COV(NMSP,COVCODE,VERBOSITY) ; simply make it callable from %ut1 as well (along with other APIs) JLI 150101 -"RTN","ut",273,0) - D COV^%ut1(NMSP,COVCODE,+$G(VERBOSITY)) ; see COV^%ut1 for description of arguments -"RTN","ut",274,0) - Q -"RTN","ut",275,0) - ; -"RTN","ut",276,0) -MULTAPIS(TESTROUS) ; .SR - RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS -"RTN","ut",277,0) - ; input - TESTROUS - passed by reference -"RTN","ut",278,0) - ; see TESTONLY in routine %utcover for full description of TESTROUS argument -"RTN","ut",279,0) - D MULTAPIS^%utcover(.TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS -"RTN","ut",280,0) - Q -"RTN","ut",281,0) - ; -"RTN","ut",282,0) -COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ;.SR - run coverage analysis for multiple routines and entry points -"RTN","ut",283,0) - ; input ROUNMSP -"RTN","ut",284,0) - ; input TESTROUS - passed by reference -"RTN","ut",285,0) - ; input XCLDROUS - passed by reference -"RTN","ut",286,0) - ; input RESLTLVL -"RTN","ut",287,0) - ; see COVERAGE in routine %utcover for full description of arguments -"RTN","ut",288,0) - D COVERAGE^%utcover(ROUNMSP,.TESTROUS,.XCLDROUS,+$G(RESLTLVL)) -"RTN","ut",289,0) - Q -"RTN","ut",290,0) - ; -"RTN","ut",291,0) -GETUTVAL(UTDATA) ; .SR - returns totals for current unit test data in cumulative totals -"RTN","ut",292,0) - ; usage D GETUTVAL^%ut(.UTDATA) -"RTN","ut",293,0) - ; input - UTDATA - passed by reference -"RTN","ut",294,0) - ; -"RTN","ut",295,0) - ; subscripted values returned: -"RTN","ut",296,0) - ; 1) cumulative number of routines run; 2) cumulative number of entry tags; -"RTN","ut",297,0) - ; 3) cumulative number of tests; 4) cummulative number of failures; -"RTN","ut",298,0) - ; 5) cumulative number of errors -"RTN","ut",299,0) - N VALS,I,VAL -"RTN","ut",300,0) - S VALS=$G(^TMP("%ut",$J,"UTVALS")) I VALS="" Q -"RTN","ut",301,0) - F I=1:1 S VAL=$P(VALS,U,I) Q:VAL="" S UTDATA(I)=$G(UTDATA(I))+VAL -"RTN","ut",302,0) - K ^TMP("%ut",$J,"UTVALS") -"RTN","ut",303,0) - Q -"RTN","ut",304,0) - ; -"RTN","ut",305,0) -LSTUTVAL(UTDATA) ; .SR - lists cumulative totals in UTDATA array -"RTN","ut",306,0) - ; usage D LSTUTVAL^%ut(.UTDATA) -"RTN","ut",307,0) - ; input - UTDATA - passed by reference -"RTN","ut",308,0) - W !!!,"------------ SUMMARY ------------" -"RTN","ut",309,0) - W !,"Ran ",UTDATA(1)," Routine",$S(UTDATA(1)>1:"s",1:""),", ",UTDATA(2)," Entry Tag",$S(UTDATA(2)>1:"s",1:"") -"RTN","ut",310,0) - W !,"Checked ",UTDATA(3)," test",$S(UTDATA(3)>1:"s",1:""),", with ",UTDATA(4)," failure",$S(UTDATA(4)'=1:"s",1:"")," and encountered ",UTDATA(5)," error",$S(UTDATA(5)'=1:"s",1:""),"." -"RTN","ut",311,0) - Q -"RTN","ut",312,0) - ; -"RTN","ut",313,0) - ; -"RTN","ut",314,0) -GUISET(%utRSLT,XTSET) ; Entry point for GUI start with selected Test Set IEN - called by %ut-TEST GROUP LOAD rpc -"RTN","ut",315,0) - N %utROU,%utLIST,%ut -"RTN","ut",316,0) - D SETUT -"RTN","ut",317,0) - S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") -"RTN","ut",318,0) - D GETSET(XTSET,.%utROU,.%utLIST) -"RTN","ut",319,0) - D GETLIST(.%utROU,%utLIST,%ut("RSLT")) -"RTN","ut",320,0) - S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version -"RTN","ut",321,0) - S %utRSLT=%ut("RSLT") -"RTN","ut",322,0) - Q -"RTN","ut",323,0) - ; -"RTN","ut",324,0) -GUILOAD(%utRSLT,%utROUN) ; Entry point for GUI start with %utROUN containing primary routine name - called by %ut-TEST LOAD rpc -"RTN","ut",325,0) - N %utROU,%ut -"RTN","ut",326,0) - D SETUT -"RTN","ut",327,0) - S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") -"RTN","ut",328,0) - S %utROU(1)=%utROUN -"RTN","ut",329,0) - D GETLIST(.%utROU,1,%ut("RSLT")) -"RTN","ut",330,0) - S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version -"RTN","ut",331,0) - S %utRSLT=%ut("RSLT") -"RTN","ut",332,0) - Q -"RTN","ut",333,0) - ; -"RTN","ut",334,0) -GETLIST(%utROU,%utLIST,%utRSLT) ; called from GUISET, GUILOAD -"RTN","ut",335,0) - N I,%utROUL,%utROUN,%ut,XTCOMNT,XTVALUE,%utCNT -"RTN","ut",336,0) - S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) K @XTVALUE -"RTN","ut",337,0) - S %utCNT=0,XTCOMNT="" -"RTN","ut",338,0) - D GETTREE^%ut1(.%utROU,%utLIST) -"RTN","ut",339,0) - F I=1:1 Q:'$D(%utROU(I)) S %utROUL(%utROU(I))="" -"RTN","ut",340,0) - S %utROUN="" F S %utROUN=$O(%utROUL(%utROUN)) Q:%utROUN="" D LOAD(%utROUN,.%utCNT,XTVALUE,XTCOMNT,.%utROUL) -"RTN","ut",341,0) - M @%utRSLT=@XTVALUE -"RTN","ut",342,0) - K @%utRSLT@("SHUTDOWN") -"RTN","ut",343,0) - K @%utRSLT@("STARTUP") -"RTN","ut",344,0) - S @XTVALUE@("LASTROU")="" ; Use this to keep track of place in routines -"RTN","ut",345,0) - Q -"RTN","ut",346,0) - ; -"RTN","ut",347,0) - ; generate list of unit test routines, entry points and comments on test for entry point -"RTN","ut",348,0) -LOAD(%utROUN,%utNCNT,XTVALUE,XTCOMNT,%utROUL) ; called from GETLIST, and recursively from LOAD -"RTN","ut",349,0) - I $T(@("^"_%utROUN))="" S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_"^^*** ERROR - ROUTINE NAME NOT FOUND" Q -"RTN","ut",350,0) - S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_U_XTCOMNT -"RTN","ut",351,0) - ;N %utI,XTX1,XTX2,LINE -"RTN","ut",352,0) - N %utI,XTX1,XTX2,LINE,LIST,I -"RTN","ut",353,0) - ; 100622 JLI added code to identify STARTUP and TEARDOWN -"RTN","ut",354,0) - I $T(@("STARTUP^"_%utROUN))'="",'$D(@XTVALUE@("STARTUP")) S @XTVALUE@("STARTUP")="STARTUP^"_%utROUN -"RTN","ut",355,0) - I $T(@("SHUTDOWN^"_%utROUN))'="",'$D(@XTVALUE@("SHUTDOWN")) S @XTVALUE@("SHUTDOWN")="SHUTDOWN^"_%utROUN -"RTN","ut",356,0) - ; JLI 140731 handle @TEST identified test tags -"RTN","ut",357,0) - D NEWSTYLE^%ut1(.LIST,%utROUN) -"RTN","ut",358,0) - F I=1:1:LIST S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_LIST(I) -"RTN","ut",359,0) - ; JLI 140731 end of @TEST addition -"RTN","ut",360,0) - F %utI=1:1 S LINE=$T(@("XTENT+"_%utI_"^"_%utROUN)) S XTX1=$P(LINE,";",3) Q:XTX1="" S XTX2=$P(LINE,";",4),%utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_XTX1_U_XTX2 -"RTN","ut",361,0) - F %utI=1:1 S LINE=$T(@("XTROU+"_%utI_"^"_%utROUN)) S XTX1=$P(LINE,";",3) Q:XTX1="" S XTCOMNT=$P(LINE,";",4) I '$D(%utROUL(XTX1)) S %utROUL(XTX1)="" D LOAD(XTX1,.%utNCNT,XTVALUE,XTCOMNT,.%utROUL) -"RTN","ut",362,0) - Q -"RTN","ut",363,0) - ; -"RTN","ut",364,0) -GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - called by %ut-TEST NEXT rpc -"RTN","ut",365,0) - ; XTGUISEP - added 110719 to provide for changing separator for GUI -"RTN","ut",366,0) - ; return from ^ to another value ~~^~~ so that data returned -"RTN","ut",367,0) - ; is not affected by ^ values in the data - if not present -"RTN","ut",368,0) - ; sets value to default ^ -"RTN","ut",369,0) - N %utETRY,%utROUT,XTOLROU,XTVALUE,%utERR,%utGUI -"RTN","ut",370,0) - N %ut -"RTN","ut",371,0) - I $G(XTGUISEP)="" S XTGUISEP="^" -"RTN","ut",372,0) - D SETUT -"RTN","ut",373,0) - S %ut("LOC")=%utLOC -"RTN","ut",374,0) - S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 -"RTN","ut",375,0) - S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) -"RTN","ut",376,0) - S %ut("RSLT")=$NA(^TMP("GUINEXT",$J)) K @%ut("RSLT") -"RTN","ut",377,0) - S %utRSLT=%ut("RSLT") -"RTN","ut",378,0) - S %utETRY=$P(%utLOC,U),%utROUT=$P(%utLOC,U,2),XTOLROU=$G(@XTVALUE@("LASTROU")) -"RTN","ut",379,0) - S %utGUI=1 -"RTN","ut",380,0) - S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 -"RTN","ut",381,0) - ; I %utROUT'=XTOLROU D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ;140731 JLI - commented out -"RTN","ut",382,0) - ;D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ; 140731 JLI - replaced previous line - moves check for SHUTDOWN at end of processing -"RTN","ut",383,0) - D I %utROUT="" S @%utRSLT@(1)="" Q ; 141018 JLI - Have to leave XTVALUE intact, in case they simply run again for STARTUP, etc. -"RTN","ut",384,0) - . I XTOLROU="",$D(@XTVALUE@("STARTUP")) D -"RTN","ut",385,0) - . . S %ut("LOC")=@XTVALUE@("STARTUP") -"RTN","ut",386,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",387,0) - . . D @(@XTVALUE@("STARTUP")) -"RTN","ut",388,0) - . . Q -"RTN","ut",389,0) - . S @XTVALUE@("LASTROU")=%utROUT I %utROUT'="",$T(@("SETUP^"_%utROUT))'="" D -"RTN","ut",390,0) - . . S %ut("LOC")="SETUP^"_%utROUT -"RTN","ut",391,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",392,0) - . . D @("SETUP^"_%utROUT) -"RTN","ut",393,0) - . . Q -"RTN","ut",394,0) - . I %utROUT="",$D(@XTVALUE@("SHUTDOWN")) D -"RTN","ut",395,0) - . . S %ut("LOC")=@XTVALUE@("SHUTDOWN") -"RTN","ut",396,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",397,0) - . . D @(@XTVALUE@("SHUTDOWN")) -"RTN","ut",398,0) - . . Q -"RTN","ut",399,0) - . Q -"RTN","ut",400,0) - S %ut("LOC")=%utLOC -"RTN","ut",401,0) - S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 -"RTN","ut",402,0) - D ; to limit range of error trap so we continue through other tests -"RTN","ut",403,0) - . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",404,0) - . D @%ut("LOC") -"RTN","ut",405,0) - . Q -"RTN","ut",406,0) - I $T(@("TEARDOWN^"_%utROUT))'="" D -"RTN","ut",407,0) - . S %ut("LOC")="TEARDOWN^"_%utROUT -"RTN","ut",408,0) - . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",409,0) - . D @("TEARDOWN^"_%utROUT) -"RTN","ut",410,0) - . Q -"RTN","ut",411,0) - S @%ut("RSLT")@(1)=%ut("CHK")_XTGUISEP_(%ut("CNT")-1-%utERR)_XTGUISEP_%utERR -"RTN","ut",412,0) - Q -"RTN","ut",413,0) - ; -"RTN","ut1") -0^2^B201627914 -"RTN","ut1",1,0) -%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;08/08/15 16:20 -"RTN","ut1",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","ut1",3,0) - D ^%utt6 ; runs unit tests from several perspectives -"RTN","ut1",4,0) - Q -"RTN","ut1",5,0) - ; -"RTN","ut1",6,0) - ;following is original header from XTMUNIT1 in unreleased patch XT*7.3*81 VA code -"RTN","ut1",7,0) - ;XTMUNIT1 ;JLI/FO-OAK-CONTINUATION OF UNIT TEST ROUTINE ;2014-04-17 5:26 PM -"RTN","ut1",8,0) - ;;7.3;TOOLKIT;**81**;APR 25 1995;Build 24 -"RTN","ut1",9,0) - ; -"RTN","ut1",10,0) - ; -"RTN","ut1",11,0) - ; Original by Dr. Joel Ivey -"RTN","ut1",12,0) - ; Major contributions by Dr. Sam Habiel -"RTN","ut1",13,0) - ; -"RTN","ut1",14,0) - ; Changes: -"RTN","ut1",15,0) - ; 130726 SMH - Moved test collection logic from %utUNIT to here (multiple places) -"RTN","ut1",16,0) - ; 131218 SMH - dependence on XLFSTR removed -"RTN","ut1",17,0) - ; 131218 SMH - CHEKTEST refactored to use $TEXT instead of ^%ZOSF("LOAD") -"RTN","ut1",18,0) - ; 131218 SMH - CATCHERR now nulls out $ZS if on GT.M -"RTN","ut1",19,0) - ; -"RTN","ut1",20,0) - ; ------- COMMENTS moved from %ut due to space requirements -"RTN","ut1",21,0) - ; -"RTN","ut1",22,0) - ; 100622 JLI - corrected typo in comments where %utINPT was listed as %utINP -"RTN","ut1",23,0) - ; 100622 JLI - removed a comment which indicated data could potentially be returned from the called routine -"RTN","ut1",24,0) - ; in the %utINPT array. -"RTN","ut1",25,0) - ; 100622 JLI - added code to handle STARTUP and SHUTDOWN from GUI app -"RTN","ut1",26,0) - ; 110719 JLI - modified separators in GUI handling from ^ to ~~^~~ -"RTN","ut1",27,0) - ; in the variable XTGUISEP if using a newer version of the -"RTN","ut1",28,0) - ; GUI app (otherwise, it is simply set to ^) since results -"RTN","ut1",29,0) - ; with a series of ^ embedded disturbed the output reported -"RTN","ut1",30,0) - ; 130726 SMH - Fixed SETUP and TEARDOWN so that they run before/after each -"RTN","ut1",31,0) - ; test rather than once. General refactoring. -"RTN","ut1",32,0) - ; 130726 SMH - SETUT initialized IO in case it's not there to $P. Inits vars -"RTN","ut1",33,0) - ; using DT^DICRW. -"RTN","ut1",34,0) - ; 131217 SMH - Change call in SETUP to S U="^" instead of DT^DICRW -"RTN","ut1",35,0) - ; 131218 SMH - Any checks to $ZE will also check $ZS for GT.M. -"RTN","ut1",36,0) - ; 131218 SMH - Remove calls to %ZISUTL to manage devices to prevent dependence on VISTA. -"RTN","ut1",37,0) - ; Use %utNIT("DEV","OLD") for old devices -"RTN","ut1",38,0) - ; 140109 SMH - Add parameter %utBREAK - Break upon error -"RTN","ut1",39,0) - ; 1402 SMH - Break will cause the break to happen even on failed tests. -"RTN","ut1",40,0) - ; 140401 SMH - Added Succeed entry point for take it into your hands tester. -"RTN","ut1",41,0) - ; 140401 SMH - Reformatted the output of M-Unit so that the test's name -"RTN","ut1",42,0) - ; will print BEFORE the execution of the test. This has been -"RTN","ut1",43,0) - ; really confusing for beginning users of M-Unit, so this was -"RTN","ut1",44,0) - ; necessary. -"RTN","ut1",45,0) - ; 140401 SMH - OK message gets printed at the end of --- as [OK]. -"RTN","ut1",46,0) - ; 140401 SMH - FAIL message now prints. Previously, OK failed to be printed. -"RTN","ut1",47,0) - ; Unfortunately, that's rather passive aggressive. Now it -"RTN","ut1",48,0) - ; explicitly says that a test failed. -"RTN","ut1",49,0) - ; 140503 SMH - Fixed IO issues all over the routine. Much simpler now. -"RTN","ut1",50,0) - ; 140731 JLI - Combined routine changes between JLI and SMH -"RTN","ut1",51,0) - ; Moved routines from %utNIT and %utNIT1 to %ut and %ut1 -"RTN","ut1",52,0) - ; Updated unit test routines (%utt1 to %utt6) -"RTN","ut1",53,0) - ; Created M-UNIT TEST GROUP file at 17.9001 based on the 17.9001 file -"RTN","ut1",54,0) - ; 141030 JLI - Removed tag TESTCOVR and code under it, not necessary -"RTN","ut1",55,0) - ; since %uttcovr can handle all of the calling needed -"RTN","ut1",56,0) - ; Added call to run routine %utt6 if run from the top, -"RTN","ut1",57,0) - ; since this will run the full range of unit tests -"RTN","ut1",58,0) - ; Modified STARTUP and SHUTDOWN commands to handle in -"RTN","ut1",59,0) - ; each routine where they are available, since only -"RTN","ut1",60,0) - ; running one STARTUP and SHUTDOWN (the first seen by -"RTN","ut1",61,0) - ; the program) restricted their use in suites of multiple -"RTN","ut1",62,0) - ; tests. -"RTN","ut1",63,0) - ; 150101 JLI - Added COV entry to %ut (in addition to current in %ut1) so it is easier -"RTN","ut1",64,0) - ; to remember how to use it. -"RTN","ut1",65,0) - ; 150621 JLI - Added a global location to pick up summary data for a unit test call, so -"RTN","ut1",66,0) - ; programs running multiple calls can generate a summary if desired. -"RTN","ut1",67,0) - ; -"RTN","ut1",68,0) - ; -"RTN","ut1",69,0) -CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list. -"RTN","ut1",70,0) - ; %utROU - input - Name of routine to check for tags with @TEST attribute -"RTN","ut1",71,0) - ; %ut - input/output - passed by reference -"RTN","ut1",72,0) - ; %utUETRY - input/output - passed by reference -"RTN","ut1",73,0) - ; -"RTN","ut1",74,0) - ; Test list collected in two ways: -"RTN","ut1",75,0) - ; - @TEST on labellines -"RTN","ut1",76,0) - ; - Offsets of XTENT -"RTN","ut1",77,0) - ; -"RTN","ut1",78,0) - S %ut("ENTN")=0 ; Number of test, sub to %utUETRY. -"RTN","ut1",79,0) - ; -"RTN","ut1",80,0) - ; This stanza and everything below is for collecting @TEST. -"RTN","ut1",81,0) - ; VEN/SMH - block refactored to use $TEXT instead of ^%ZOSF("LOAD") -"RTN","ut1",82,0) - N I,LIST -"RTN","ut1",83,0) - S I=$L($T(@(U_%utROU))) I I<0 Q "-1^Invalid Routine Name" -"RTN","ut1",84,0) - D NEWSTYLE(.LIST,%utROU) -"RTN","ut1",85,0) - F I=1:1:LIST S %ut("ENTN")=%ut("ENTN")+1,%utUETRY(%ut("ENTN"))=$P(LIST(I),U),%utUETRY(%ut("ENTN"),"NAME")=$P(LIST(I),U,2,99) -"RTN","ut1",86,0) - ; -"RTN","ut1",87,0) - ; This Stanza is to collect XTENT offsets -"RTN","ut1",88,0) - N %utUI F %utUI=1:1 S %ut("ELIN")=$T(@("XTENT+"_%utUI_"^"_%utROU)) Q:$P(%ut("ELIN"),";",3)="" D -"RTN","ut1",89,0) - . S %ut("ENTN")=%ut("ENTN")+1,%utUETRY(%ut("ENTN"))=$P(%ut("ELIN"),";",3),%utUETRY(%ut("ENTN"),"NAME")=$P(%ut("ELIN"),";",4) -"RTN","ut1",90,0) - . Q -"RTN","ut1",91,0) - ; -"RTN","ut1",92,0) - QUIT -"RTN","ut1",93,0) - ; -"RTN","ut1",94,0) - ; VEN/SMH 26JUL2013 - Moved GETTREE here. -"RTN","ut1",95,0) -GETTREE(%utROU,%utULIST) ; -"RTN","ut1",96,0) - ; first get any other routines this one references for running subsequently -"RTN","ut1",97,0) - ; then any that they refer to as well -"RTN","ut1",98,0) - ; this builds a tree of all routines referred to by any routine including each only once -"RTN","ut1",99,0) - N %utUK,%utUI,%utUJ,%utURNAM,%utURLIN -"RTN","ut1",100,0) - F %utUK=1:1 Q:'$D(%utROU(%utUK)) D -"RTN","ut1",101,0) - . F %utUI=1:1 S %utURLIN=$T(@("XTROU+"_%utUI_"^"_%utROU(%utUK))) S %utURNAM=$P(%utURLIN,";",3) Q:%utURNAM="" D -"RTN","ut1",102,0) - . . F %utUJ=1:1:%utULIST I %utROU(%utUJ)=%utURNAM S %utURNAM="" Q -"RTN","ut1",103,0) - . . I %utURNAM'="",$T(@("+1^"_%utURNAM))="" W:'$D(XWBOS) "Referenced routine ",%utURNAM," not found.",! Q -"RTN","ut1",104,0) - . . S:%utURNAM'="" %utULIST=%utULIST+1,%utROU(%utULIST)=%utURNAM -"RTN","ut1",105,0) - QUIT -"RTN","ut1",106,0) - ; -"RTN","ut1",107,0) -NEWSTYLE(LIST,ROUNAME) ; JLI 140726 identify and return list of newstyle tags or entries for this routine -"RTN","ut1",108,0) - ; LIST - input, passed by reference - returns containing array with list of tags identified as tests -"RTN","ut1",109,0) - ; LIST indicates number of tags identified, LIST(n)=tag^test_info where tag is entry point for test -"RTN","ut1",110,0) - ; ROUNAME - input - routine name in which tests should be identified -"RTN","ut1",111,0) - ; -"RTN","ut1",112,0) - N I,VALUE,LINE -"RTN","ut1",113,0) - K LIST S LIST=0 -"RTN","ut1",114,0) - ; search routine by line for a tag and @TEST declaration -"RTN","ut1",115,0) - F I=1:1 S LINE=$T(@("+"_I_"^"_ROUNAME)) Q:LINE="" S VALUE=$$CHECKTAG(LINE) I VALUE'="" S LIST=LIST+1,LIST(LIST)=VALUE -"RTN","ut1",116,0) - Q -"RTN","ut1",117,0) - ; -"RTN","ut1",118,0) -CHECKTAG(LINE) ; JLI 140726 check line to determine @test TAG -"RTN","ut1",119,0) - ; LINE - input - Line of code to be checked -"RTN","ut1",120,0) - ; returns null line if not @TEST line, otherwise TAG^NOTE -"RTN","ut1",121,0) - N TAG,NOTE,CHAR -"RTN","ut1",122,0) - I $E(LINE)=" " Q "" ; test entry must have a tag -"RTN","ut1",123,0) - I $$UP(LINE)'["@TEST" Q "" ; must have @TEST declaration -"RTN","ut1",124,0) - I $P($$UP(LINE),"@TEST")["(" Q "" ; can't have an argument -"RTN","ut1",125,0) - S TAG=$P(LINE," "),LINE=$P(LINE," ",2,400),NOTE=$P($$UP(LINE),"@TEST"),LINE=$E(LINE,$L(NOTE)+5+1,$L(LINE)) -"RTN","ut1",126,0) - F Q:NOTE="" S CHAR=$E(NOTE),NOTE=$E(NOTE,2,$L(NOTE)) I " ;"'[CHAR Q ; -"RTN","ut1",127,0) - I $L(NOTE)'=0 Q "" ; @TEST must be first text on line -"RTN","ut1",128,0) - F Q:$E(LINE)'=" " S LINE=$E(LINE,2,$L(LINE)) ; remove leading spaces from test info -"RTN","ut1",129,0) - S TAG=TAG_U_LINE -"RTN","ut1",130,0) - Q TAG -"RTN","ut1",131,0) - ; -"RTN","ut1",132,0) -CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values -"RTN","ut1",133,0) - ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut1",134,0) - ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut1",135,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",136,0) - I '$D(XTSTVAL) D NVLDARG("CHKTF") Q -"RTN","ut1",137,0) - I $G(XTERMSG)="" S XTERMSG="no failure message provided" -"RTN","ut1",138,0) - S %ut("CHK")=$G(%ut("CHK"))+1 -"RTN","ut1",139,0) - I '$D(%utGUI) D -"RTN","ut1",140,0) - . D SETIO -"RTN","ut1",141,0) - . I 'XTSTVAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " D -"RTN","ut1",142,0) - . . W XTERMSG,! S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut1",143,0) - . . I $D(%ut("BREAK")) BREAK ; Break upon failure -"RTN","ut1",144,0) - . . Q -"RTN","ut1",145,0) - . I XTSTVAL W "." -"RTN","ut1",146,0) - . D RESETIO -"RTN","ut1",147,0) - . Q -"RTN","ut1",148,0) - I $D(%utGUI),'XTSTVAL S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 -"RTN","ut1",149,0) - Q -"RTN","ut1",150,0) - ; -"RTN","ut1",151,0) -CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut1",152,0) - N FAILMSG -"RTN","ut1",153,0) - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",154,0) - ; ZEXCEPT: %ut -- NEWED IN EN -"RTN","ut1",155,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",156,0) - I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG("CHKEQ") Q -"RTN","ut1",157,0) - S XTACTUAL=$G(XTACTUAL),XTEXPECT=$G(XTEXPECT) -"RTN","ut1",158,0) - I $G(XTERMSG)="" S XTERMSG="no failure message provided" -"RTN","ut1",159,0) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut1",160,0) - I XTEXPECT'=XTACTUAL S FAILMSG="<"_XTEXPECT_"> vs <"_XTACTUAL_"> - " -"RTN","ut1",161,0) - I '$D(%utGUI) D -"RTN","ut1",162,0) - . D SETIO -"RTN","ut1",163,0) - . I XTEXPECT'=XTACTUAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W FAILMSG,XTERMSG,! D -"RTN","ut1",164,0) - . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut1",165,0) - . . I $D(%ut("BREAK")) BREAK ; Break upon failure -"RTN","ut1",166,0) - . . Q -"RTN","ut1",167,0) - . E W "." -"RTN","ut1",168,0) - . D RESETIO -"RTN","ut1",169,0) - . Q -"RTN","ut1",170,0) - I $D(%utGUI),XTEXPECT'=XTACTUAL S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_FAILMSG_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 -"RTN","ut1",171,0) - Q -"RTN","ut1",172,0) - ; -"RTN","ut1",173,0) -FAIL(XTERMSG) ; Entry point for generating a failure message -"RTN","ut1",174,0) - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",175,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",176,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",177,0) - I $G(XTERMSG)="" S XTERMSG="no failure message provided" -"RTN","ut1",178,0) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut1",179,0) - I '$D(%utGUI) D -"RTN","ut1",180,0) - . D SETIO -"RTN","ut1",181,0) - . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D -"RTN","ut1",182,0) - . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut1",183,0) - . . I $D(%ut("BREAK")) BREAK ; Break upon failure -"RTN","ut1",184,0) - . . Q -"RTN","ut1",185,0) - . D RESETIO -"RTN","ut1",186,0) - . Q -"RTN","ut1",187,0) - I $D(%utGUI) S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 -"RTN","ut1",188,0) - Q -"RTN","ut1",189,0) - ; -"RTN","ut1",190,0) -NVLDARG(API) ; generate message for invalid arguments to test -"RTN","ut1",191,0) - N XTERMSG -"RTN","ut1",192,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",193,0) - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",194,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",195,0) - S XTERMSG="NO VALUES INPUT TO "_API_"^%ut - no evaluation possible" -"RTN","ut1",196,0) - I '$D(%utGUI) D -"RTN","ut1",197,0) - . D SETIO -"RTN","ut1",198,0) - . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D -"RTN","ut1",199,0) - . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut1",200,0) - . . Q -"RTN","ut1",201,0) - . D RESETIO -"RTN","ut1",202,0) - . Q -"RTN","ut1",203,0) - I $D(%utGUI) S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 -"RTN","ut1",204,0) - Q -"RTN","ut1",205,0) - ; -"RTN","ut1",206,0) -SETIO ; Set M-Unit Device to write the results to... -"RTN","ut1",207,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",208,0) - I $IO'=%ut("IO") S (IO(0),%ut("DEV","OLD"))=$IO USE %ut("IO") SET IO=$IO -"RTN","ut1",209,0) - QUIT -"RTN","ut1",210,0) - ; -"RTN","ut1",211,0) -RESETIO ; Reset $IO back to the original device if we changed it. -"RTN","ut1",212,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",213,0) - I $D(%ut("DEV","OLD")) S IO(0)=%ut("IO") U %ut("DEV","OLD") S IO=$IO K %ut("DEV","OLD") -"RTN","ut1",214,0) - QUIT -"RTN","ut1",215,0) - ; -"RTN","ut1",216,0) - ; VEN/SMH 17DEC2013 - Remove dependence on VISTA - Uppercase here instead of XLFSTR. -"RTN","ut1",217,0) -UP(X) ; -"RTN","ut1",218,0) - Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") -"RTN","ut1",219,0) - ; -"RTN","ut1",220,0) -COV(NMSP,COVCODE,VERBOSITY) ; VEN/SMH - PUBLIC ENTRY POINT; Coverage calculations -"RTN","ut1",221,0) - ; NMSP: Namespace of the routines to analyze. End with * to include all routines. -"RTN","ut1",222,0) - ; Not using * will only include the routine with NMSP name. -"RTN","ut1",223,0) - ; e.g. PSOM* will include all routines starting with PSOM -"RTN","ut1",224,0) - ; PSOM will only include PSOM. -"RTN","ut1",225,0) - ; COVCODE: Mumps code to run over which coverage will be calculated. Typically Unit Tests. -"RTN","ut1",226,0) - ; VERBOSITY (optional): Scalar from -1 to 3. -"RTN","ut1",227,0) - ; - -1 = Global output in ^TMP("%utCOVREPORT",$J) -"RTN","ut1",228,0) - ; - 0 = Print only total coverage -"RTN","ut1",229,0) - ; - 1 = Break down by routine -"RTN","ut1",230,0) - ; - 2 = Break down by routine and tag -"RTN","ut1",231,0) - ; - 3 = Break down by routine and tag, and print lines that didn't execute for each tag. -"RTN","ut1",232,0) - ; -"RTN","ut1",233,0) - ; ZEXCEPT: %utcovxx - SET and KILLED in this code at top level -"RTN","ut1",234,0) - Q:'(+$SY=47) ; GT.M only! -"RTN","ut1",235,0) - ; -"RTN","ut1",236,0) - ; ZEXCEPT: CTRAP - not really a variable -"RTN","ut1",237,0) - S VERBOSITY=+$G(VERBOSITY) ; Get 0 if not passed. -"RTN","ut1",238,0) - N %ZR ; GT.M specific -"RTN","ut1",239,0) - D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R(RTN)). -"RTN","ut1",240,0) - ; -"RTN","ut1",241,0) - N RN S RN="" -"RTN","ut1",242,0) - W !,"Loading routines to test coverage...",! -"RTN","ut1",243,0) - F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D -"RTN","ut1",244,0) - . N L2 S L2=$T(+2^@RN) -"RTN","ut1",245,0) - . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out -"RTN","ut1",246,0) - . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine -"RTN","ut1",247,0) - ; -"RTN","ut1",248,0) - N RTNS M RTNS=%ZR -"RTN","ut1",249,0) - K %ZR -"RTN","ut1",250,0) - ; -"RTN","ut1",251,0) - N GL -"RTN","ut1",252,0) - S GL=$NA(^TMP("%utCOVCOHORT",$J)) -"RTN","ut1",253,0) - I '$D(^TMP("%utcovrunning",$J)) K @GL -"RTN","ut1",254,0) - D RTNANAL(.RTNS,GL) -"RTN","ut1",255,0) - I '$D(^TMP("%utcovrunning",$J)) D -"RTN","ut1",256,0) - . K ^TMP("%utCOVCOHORTSAV",$J) -"RTN","ut1",257,0) - . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) -"RTN","ut1",258,0) - . K ^TMP("%utCOVRESULT",$J) -"RTN","ut1",259,0) - . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 -"RTN","ut1",260,0) - . VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M START PROFILING -"RTN","ut1",261,0) - . Q -"RTN","ut1",262,0) - DO ; Run the code, but keep our variables to ourselves. -"RTN","ut1",263,0) - . NEW $ETRAP,$ESTACK -"RTN","ut1",264,0) - . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" -"RTN","ut1",265,0) - . USE $PRINCIPAL:(CTRAP=$C(3)) -"RTN","ut1",266,0) - . NEW (DUZ,IO,COVCODE,U,DILOCKTM,DISYS,DT,DTIME,IOBS,IOF,IOM,ION,IOS,IOSL,IOST,IOT,IOXY) -"RTN","ut1",267,0) - . XECUTE COVCODE -"RTN","ut1",268,0) - . Q -"RTN","ut1",269,0) - ; GT.M STOP PROFILING if this is the original level that started it -"RTN","ut1",270,0) - I $D(^TMP("%utcovrunning",$J)),$D(%utcovxx) VIEW "TRACE":0:$NA(^TMP("%utCOVRESULT",$J)) K %utcovxx,^TMP("%utcovrunning",$J) -"RTN","ut1",271,0) - ; -"RTN","ut1",272,0) - I '$D(^TMP("%utcovrunning",$J)) D -"RTN","ut1",273,0) - . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J))) ; Venn diagram matching between globals -"RTN","ut1",274,0) - . ; Report -"RTN","ut1",275,0) - . I VERBOSITY=-1 D -"RTN","ut1",276,0) - . . K ^TMP("%utCOVREPORT",$J) -"RTN","ut1",277,0) - . . D COVRPTGL($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),$NA(^TMP("%utCOVREPORT",$J))) -"RTN","ut1",278,0) - . . Q -"RTN","ut1",279,0) - . E D COVRPT($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),VERBOSITY) -"RTN","ut1",280,0) - . Q -"RTN","ut1",281,0) - QUIT -"RTN","ut1",282,0) - ; -"RTN","ut1",283,0) -RTNANAL(RTNS,GL) ; [Private] - Routine Analysis -"RTN","ut1",284,0) - ; Create a global similar to the trace global produced by GT.M in GL -"RTN","ut1",285,0) - ; Only non-comment lines are stored. -"RTN","ut1",286,0) - ; A tag is always stored. Tag,0 is stored only if there is code on the tag line (format list or actual code). -"RTN","ut1",287,0) - ; tags by themselves don't count toward the total. -"RTN","ut1",288,0) - ; -"RTN","ut1",289,0) - N RTN S RTN="" -"RTN","ut1",290,0) - F S RTN=$O(RTNS(RTN)) Q:RTN="" D ; for each routine -"RTN","ut1",291,0) - . N TAG -"RTN","ut1",292,0) - . S TAG=RTN ; start the tags at the first -"RTN","ut1",293,0) - . N I,LN F I=2:1 S LN=$T(@TAG+I^@RTN) Q:LN="" D ; for each line, starting with the 3rd line (2 off the first tag) -"RTN","ut1",294,0) - . . I $E(LN)?1A D QUIT ; formal line -"RTN","ut1",295,0) - . . . N T ; Terminator -"RTN","ut1",296,0) - . . . N J F J=1:1:$L(LN) S T=$E(LN,J) Q:T'?1AN ; Loop to... -"RTN","ut1",297,0) - . . . S TAG=$E(LN,1,J-1) ; Get tag -"RTN","ut1",298,0) - . . . S @GL@(RTN,TAG)=TAG ; store line -"RTN","ut1",299,0) - . . . ;I T="(" S @GL@(RTN,TAG,0)=LN ; formal list -"RTN","ut1",300,0) - . . . I T="(" D ; formal list -"RTN","ut1",301,0) - . . . . N PCNT,STR,CHR S PCNT=0,STR=$E(LN,J+1,$L(LN)) -"RTN","ut1",302,0) - . . . . F S CHR=$E(STR),STR=$E(STR,2,$L(STR)) Q:(PCNT=0)&(CHR=")") D -"RTN","ut1",303,0) - . . . . . I CHR="(" S PCNT=PCNT+1 -"RTN","ut1",304,0) - . . . . . I CHR=")" S PCNT=PCNT-1 -"RTN","ut1",305,0) - . . . . . Q -"RTN","ut1",306,0) - . . . . S STR=$TR(STR,$C(9,32)) -"RTN","ut1",307,0) - . . . . I $E(STR)=";" QUIT -"RTN","ut1",308,0) - . . . . S @GL@(RTN,TAG,0)=LN -"RTN","ut1",309,0) - . . . . Q -"RTN","ut1",310,0) - . . . E D ; No formal list -"RTN","ut1",311,0) - . . . . N LNTR S LNTR=$P(LN,TAG,2,999),LNTR=$TR(LNTR,$C(9,32)) ; Get rest of line, Remove spaces and tabs -"RTN","ut1",312,0) - . . . . I $E(LNTR)=";" QUIT ; Comment -"RTN","ut1",313,0) - . . . . S @GL@(RTN,TAG,0)=LN ; Otherwise, store for testing -"RTN","ut1",314,0) - . . . S I=0 ; Start offsets from zero (first one at the for will be 1) -"RTN","ut1",315,0) - . . I $C(32,9)[$E(LN) D QUIT ; Regular line -"RTN","ut1",316,0) - . . . N LNTR S LNTR=$TR(LN,$C(32,9,46)) ; Remove all spaces and tabs - JLI 150202 remove periods as well -"RTN","ut1",317,0) - . . . I $E(LNTR)=";" QUIT ; Comment line -- don't want. -"RTN","ut1",318,0) - . . . S @GL@(RTN,TAG,I)=LN ; Record line -"RTN","ut1",319,0) - QUIT -"RTN","ut1",320,0) - ; -"RTN","ut1",321,0) -ACTLINES(GL) ; [Private] $$ ; Count active lines -"RTN","ut1",322,0) - ; -"RTN","ut1",323,0) - N CNT S CNT=0 -"RTN","ut1",324,0) - N REF S REF=GL -"RTN","ut1",325,0) - N GLQL S GLQL=$QL(GL) -"RTN","ut1",326,0) - F S REF=$Q(@REF) Q:REF="" Q:(GL'=$NA(@REF,GLQL)) D -"RTN","ut1",327,0) - . N REFQL S REFQL=$QL(REF) -"RTN","ut1",328,0) - . N LASTSUB S LASTSUB=$QS(REF,REFQL) -"RTN","ut1",329,0) - . I LASTSUB?1.N S CNT=CNT+1 -"RTN","ut1",330,0) - QUIT CNT -"RTN","ut1",331,0) - ; -"RTN","ut1",332,0) -COVCOV(C,R) ; [Private] - Analyze coverage Cohort vs Result -"RTN","ut1",333,0) - N RTN S RTN="" -"RTN","ut1",334,0) - F S RTN=$O(@C@(RTN)) Q:RTN="" D ; For each routine in cohort set -"RTN","ut1",335,0) - . I '$D(@R@(RTN)) QUIT ; Not present in result set -"RTN","ut1",336,0) - . N TAG S TAG="" -"RTN","ut1",337,0) - . F S TAG=$O(@R@(RTN,TAG)) Q:TAG="" D ; For each tag in the routine in the result set -"RTN","ut1",338,0) - . . N LN S LN="" -"RTN","ut1",339,0) - . . F S LN=$O(@R@(RTN,TAG,LN)) Q:LN="" D ; for each line in the tag in the routine in the result set -"RTN","ut1",340,0) - . . . I $D(@C@(RTN,TAG,LN)) K ^(LN) ; if present in cohort, kill off -"RTN","ut1",341,0) - QUIT -"RTN","ut1",342,0) - ; -"RTN","ut1",343,0) -COVRPT(C,S,R,V) ; [Private] - Coverage Report -"RTN","ut1",344,0) - ; C = COHORT - Global name -"RTN","ut1",345,0) - ; S = SURVIVORS - Global name -"RTN","ut1",346,0) - ; R = RESULT - Global name -"RTN","ut1",347,0) - ; V = Verbosity - Scalar from -1 to 3 -"RTN","ut1",348,0) - ; JLI 150702 - modified to be able to do unit tests on setting up the text via COVRPTLS -"RTN","ut1",349,0) - N X,I -"RTN","ut1",350,0) - S X=$NA(^TMP("%ut1-covrpt",$J)) K @X -"RTN","ut1",351,0) - D COVRPTLS(C,S,R,V,X) -"RTN","ut1",352,0) - I '$$ISUTEST^%ut() F I=1:1 W:$D(@X@(I)) !,@X@(I) I '$D(@X@(I)) K @X Q -"RTN","ut1",353,0) - Q -"RTN","ut1",354,0) - ; -"RTN","ut1",355,0) -COVRPTLS(C,S,R,V,X) ; -"RTN","ut1",356,0) - ; -"RTN","ut1",357,0) - N LINNUM S LINNUM=0 -"RTN","ut1",358,0) - N ORIGLINES S ORIGLINES=$$ACTLINES(C) -"RTN","ut1",359,0) - N LEFTLINES S LEFTLINES=$$ACTLINES(S) -"RTN","ut1",360,0) - ;W !! -"RTN","ut1",361,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",362,0) - ;W "ORIG: "_ORIGLINES,! -"RTN","ut1",363,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="ORIG: "_ORIGLINES -"RTN","ut1",364,0) - ;W "LEFT: "_LEFTLINES,! -"RTN","ut1",365,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="LEFT: "_LEFTLINES -"RTN","ut1",366,0) - ;W "COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00),! -"RTN","ut1",367,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00) -"RTN","ut1",368,0) - ;W !! -"RTN","ut1",369,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",370,0) - ;W "BY ROUTINE:",! -"RTN","ut1",371,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="BY ROUTINE:" -"RTN","ut1",372,0) - I V=0 QUIT ; No verbosity. Don't print routine detail -"RTN","ut1",373,0) - N RTN S RTN="" -"RTN","ut1",374,0) - F S RTN=$O(@C@(RTN)) Q:RTN="" D -"RTN","ut1",375,0) - . N O S O=$$ACTLINES($NA(@C@(RTN))) -"RTN","ut1",376,0) - . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",377,0) - . ;W ?3,RTN,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",378,0) - . N XX S XX=" "_RTN_" ",XX=$E(XX,1,20) -"RTN","ut1",379,0) - . S LINNUM=LINNUM+1,@X@(LINNUM)=XX+$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",380,0) - . I V=1 QUIT ; Just print the routine coverage for V=1 -"RTN","ut1",381,0) - . N TAG S TAG="" -"RTN","ut1",382,0) - . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D -"RTN","ut1",383,0) - . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) -"RTN","ut1",384,0) - . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",385,0) - . . ;W ?5,TAG,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",386,0) - . . S XX=" "_TAG_" ",XX=$E(XX,1,20) -"RTN","ut1",387,0) - . . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",388,0) - . . I V=2 QUIT ; Just print routine/tags coverage for V=2; V=3 print uncovered lines -"RTN","ut1",389,0) - . . N LN S LN="" -"RTN","ut1",390,0) - . . ;F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" W TAG_"+"_LN_": "_^(LN),! -"RTN","ut1",391,0) - . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S LINNUM=LINNUM+1,@X@(LINNUM)=TAG_"+"_LN_": "_^(LN) -"RTN","ut1",392,0) - . . Q -"RTN","ut1",393,0) - . Q -"RTN","ut1",394,0) - QUIT -"RTN","ut1",395,0) - ; -"RTN","ut1",396,0) -COVRPTGL(C,S,R,OUT) ; [Private] - Coverage Global for silent invokers -"RTN","ut1",397,0) - ; C = COHORT - Global name -"RTN","ut1",398,0) - ; S = SURVIVORS - Global name -"RTN","ut1",399,0) - ; R = RESULT - Global name -"RTN","ut1",400,0) - ; OUT = OUTPUT - Global name -"RTN","ut1",401,0) - ; -"RTN","ut1",402,0) - N O S O=$$ACTLINES(C) -"RTN","ut1",403,0) - N L S L=$$ACTLINES(S) -"RTN","ut1",404,0) - S @OUT=(O-L)_"/"_O -"RTN","ut1",405,0) - N RTN,TAG,LN S (RTN,TAG,LN)="" -"RTN","ut1",406,0) - F S RTN=$O(@C@(RTN)) Q:RTN="" D -"RTN","ut1",407,0) - . N O S O=$$ACTLINES($NA(@C@(RTN))) -"RTN","ut1",408,0) - . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",409,0) - . S @OUT@(RTN)=(O-L)_"/"_O -"RTN","ut1",410,0) - . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D -"RTN","ut1",411,0) - . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) -"RTN","ut1",412,0) - . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",413,0) - . . S @OUT@(RTN,TAG)=(O-L)_"/"_O -"RTN","ut1",414,0) - . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S @OUT@(RTN,TAG,LN)=@S@(RTN,TAG,LN) -"RTN","ut1",415,0) - QUIT -"RTN","ut1",416,0) - ; -"RTN","utcover") -0^10^B32213373 -"RTN","utcover",1,0) -%utcover ;JLI - generic coverage and unit test runner ;08/07/15 14:35 -"RTN","utcover",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","utcover",3,0) - D EN^%ut("%uttcovr") ; unit tests -"RTN","utcover",4,0) - Q -"RTN","utcover",5,0) - ; -"RTN","utcover",6,0) -MULTAPIS(TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS -"RTN","utcover",7,0) - ; can be run from %ut using D MULTAPIS^%ut(.TESTROUS) -"RTN","utcover",8,0) - ; input TESTROUS - passed by reference - array of routine names to run tests for -"RTN","utcover",9,0) - ; specify those to be called directly by including ^ as part of -"RTN","utcover",10,0) - ; TAG^ROUTINE or ^ROUTINE. -"RTN","utcover",11,0) - ; ROUTINE names without a ^ will be called as EN^%ut("ROUTINE") -"RTN","utcover",12,0) - ; Sometimes to get complete coverage, different entry points may -"RTN","utcover",13,0) - ; need to be called (e.g., at top and for VERBOSE), these should each -"RTN","utcover",14,0) - ; be included. -"RTN","utcover",15,0) - ; If the subscript is a number, it will take the list of comma separated -"RTN","utcover",16,0) - ; values as the routines. If the the subscript is not a number, it will -"RTN","utcover",17,0) - ; take it as a routine to be added to the list, then if the value of the -"RTN","utcover",18,0) - ; contains a comma separated list of routines, they will be added as well. -"RTN","utcover",19,0) - ; Thus a value of -"RTN","utcover",20,0) - ; TESTROUS(1)="A^ROU1,^ROU1,^ROU2,ROU3" -"RTN","utcover",21,0) - ; or a value of -"RTN","utcover",22,0) - ; TESTROUS("A^ROU1")="^ROU1,^ROU2,ROU3" -"RTN","utcover",23,0) - ; will both result in tests for -"RTN","utcover",24,0) - ; D A^ROU1,^ROU1,^ROU2,EN^%ut("ROU3") -"RTN","utcover",25,0) - K ^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",26,0) - M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS -"RTN","utcover",27,0) - D COVENTRY -"RTN","utcover",28,0) - K ^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",29,0) - Q -"RTN","utcover",30,0) - ; -"RTN","utcover",31,0) -COVENTRY ; setup of COVERAGE NEWs most variables, so TESTROUS passed by global -"RTN","utcover",32,0) - ; -"RTN","utcover",33,0) - N I,ROU,VAL,VALS,UTDATA,TESTS,TESTROUS -"RTN","utcover",34,0) - M TESTROUS=^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",35,0) - S ROU="" F S ROU=$O(TESTROUS(ROU)) Q:ROU="" D -"RTN","utcover",36,0) - . I ROU'=+ROU S TESTS(ROU)="" -"RTN","utcover",37,0) - . F I=1:1 S VAL=$P(TESTROUS(ROU),",",I) Q:VAL="" S TESTS(VAL)="" -"RTN","utcover",38,0) - . Q -"RTN","utcover",39,0) - S ROU="" F S ROU=$O(TESTS(ROU)) Q:ROU="" D -"RTN","utcover",40,0) - . W !!,"------------------- RUNNING ",ROU," -------------------" -"RTN","utcover",41,0) - . I ROU[U D @ROU -"RTN","utcover",42,0) - . I ROU'[U D @("EN^%ut("""_ROU_""")") -"RTN","utcover",43,0) - . D GETUTVAL^%ut(.UTDATA) -"RTN","utcover",44,0) - . Q -"RTN","utcover",45,0) - I $D(UTDATA) D LSTUTVAL^%ut(.UTDATA) -"RTN","utcover",46,0) - Q -"RTN","utcover",47,0) - ; -"RTN","utcover",48,0) -COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ; run coverage analysis for multiple routines and entry points -"RTN","utcover",49,0) - ; can be run from %ut using D COVERAGE^%ut(ROUNMSP,.TESTROUS,.XCLDROUS,RESLTLVL) -"RTN","utcover",50,0) - ; input ROUNMSP - Namespace for routine(s) to be analyzed -"RTN","utcover",51,0) - ; ROUNAME will result in only the routine ROUNAME being analyzed -"RTN","utcover",52,0) - ; ROUN* will result in all routines beginning with ROUN being analyzed -"RTN","utcover",53,0) - ; input TESTROUS - passed by reference - see TESTROUS description for JUSTTEST -"RTN","utcover",54,0) - ; input XCLDROUS - passed by reference - routines passed in a manner similar to TESTROUS, -"RTN","utcover",55,0) - ; but only the routine names, whether as arguments or a comma separated -"RTN","utcover",56,0) - ; list of routines, will be excluded from the analysis of coverage. These -"RTN","utcover",57,0) - ; would normally be names of routines which are only for unit tests, or -"RTN","utcover",58,0) - ; others which should not be included in the analysis for some reason. -"RTN","utcover",59,0) - ; input RESLTLVL - This value determines the amount of information to be generated for the -"RTN","utcover",60,0) - ; analysis. A missing or null value will be considered to be level 1 -"RTN","utcover",61,0) - ; 1 - Listing of analysis only for routine overall -"RTN","utcover",62,0) - ; 2 - Listing of analysis for routine overall and for each TAG -"RTN","utcover",63,0) - ; 3 - Full analysis for each tag, and lists out those lines which were -"RTN","utcover",64,0) - ; not executed during the analysis -"RTN","utcover",65,0) - ; -"RTN","utcover",66,0) - N I,ROU,TYPE,VAL,XCLUDE -"RTN","utcover",67,0) - S RESLTLVL=$G(RESLTLVL,1) -"RTN","utcover",68,0) - I (RESLTLVL<1) S RESLTLVL=1 -"RTN","utcover",69,0) - I (RESLTLVL>3) S RESLTLVL=3 -"RTN","utcover",70,0) - M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS ; -"RTN","utcover",71,0) - D COV^%ut1(ROUNMSP,"D COVENTRY^%utcover",-1) -"RTN","utcover",72,0) - K ^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",73,0) - S ROU="" F S ROU=$O(XCLDROUS(ROU)) Q:ROU="" D -"RTN","utcover",74,0) - . I ROU'=+ROU S XCLUDE(ROU)="" -"RTN","utcover",75,0) - . F I=1:1 S VAL=$P(XCLDROUS(ROU),",",I) Q:VAL="" S XCLUDE(VAL)="" -"RTN","utcover",76,0) - . Q -"RTN","utcover",77,0) - N TEXTGLOB S TEXTGLOB=$NA(^TMP("%utcover-text",$J)) K @TEXTGLOB -"RTN","utcover",78,0) - D LIST(.XCLUDE,RESLTLVL,TEXTGLOB) -"RTN","utcover",79,0) - F I=1:1 Q:'$D(@TEXTGLOB@(I)) W !,@TEXTGLOB@(I) -"RTN","utcover",80,0) - K @TEXTGLOB -"RTN","utcover",81,0) - Q -"RTN","utcover",82,0) - ; -"RTN","utcover",83,0) -LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; -"RTN","utcover",84,0) - ; ZEXCEPT: TYPE1 - NEWed and set below for recursion -"RTN","utcover",85,0) - ; input - ROULIST - a comma separated list of routine names that will -"RTN","utcover",86,0) - ; be used to identify desired routines. Any name -"RTN","utcover",87,0) - ; that begins with one of the specified values will -"RTN","utcover",88,0) - ; be included -"RTN","utcover",89,0) - ; input - TYPE - value indicating amount of detail desired -"RTN","utcover",90,0) - ; 3=full with listing of untouched lines -"RTN","utcover",91,0) - ; 2=moderated with listing by tags -"RTN","utcover",92,0) - ; 1=summary with listing by routine -"RTN","utcover",93,0) - ; input - TEXTGLOB - closed global location in which text is returned -"RTN","utcover",94,0) - ; input - GLOB - used for unit tests - specifies global to work with -"RTN","utcover",95,0) - ; so that coverage data is not impacted -"RTN","utcover",96,0) - ; -"RTN","utcover",97,0) - N CURRCOV,CURRLIN,LINCOV,LINE,LINTOT,ROULIST,ROUNAME,TAG,TOTCOV,TOTLIN,XVAL -"RTN","utcover",98,0) - ; -"RTN","utcover",99,0) - I '$D(LINNUM) S LINNUM=0 ; initialize on first entry -"RTN","utcover",100,0) - I '$D(GLOB) N GLOB S GLOB=$NA(^TMP("%utCOVREPORT",$J)) -"RTN","utcover",101,0) - D TRIMDATA(.XCLDROUS,GLOB) ; remove undesired routines from data -"RTN","utcover",102,0) - ; -"RTN","utcover",103,0) - N JOB,NAME,BASE -"RTN","utcover",104,0) - S TOTCOV=0,TOTLIN=0 -"RTN","utcover",105,0) - ; F NAME="%utCOVREPORT","%utCOVRESULT","%utCOVCOHORT","%utCOVCOHORTSAV" D -"RTN","utcover",106,0) - I TYPE>1 S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D -"RTN","utcover",107,0) - . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) -"RTN","utcover",108,0) - . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" -"RTN","utcover",109,0) - . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") -"RTN","utcover",110,0) - . I TYPE>1 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" - "_$S(TYPE=2:"Summary",1:"Detailed Breakdown") -"RTN","utcover",111,0) - . S TAG="" F S TAG=$O(@GLOB@(ROUNAME,TAG)) Q:TAG="" S XVAL=^(TAG) D -"RTN","utcover",112,0) - . . S LINCOV=$P(XVAL,"/"),LINTOT=$P(XVAL,"/",2) -"RTN","utcover",113,0) - . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" Tag "_TAG_"^"_ROUNAME_" "_LINCOV_" out of "_LINTOT_" lines covered" -"RTN","utcover",114,0) - . . I TYPE=2 Q -"RTN","utcover",115,0) - . . I LINCOV=LINTOT Q -"RTN","utcover",116,0) - . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" the following is a list of the lines **NOT** covered" -"RTN","utcover",117,0) - . . S LINE="" F S LINE=$O(@GLOB@(ROUNAME,TAG,LINE)) Q:LINE="" D -"RTN","utcover",118,0) - . . . I LINE=0 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_" "_@GLOB@(ROUNAME,TAG,LINE) Q -"RTN","utcover",119,0) - . . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_"+"_LINE_" "_@GLOB@(ROUNAME,TAG,LINE) -"RTN","utcover",120,0) - . . . Q -"RTN","utcover",121,0) - . . Q -"RTN","utcover",122,0) - . Q -"RTN","utcover",123,0) - ; for type=3 generate a summary at bottom after detail -"RTN","utcover",124,0) - I TYPE=3 N TYPE1 S TYPE1=2 D LIST(.XCLDROUS,2,TEXTGLOB,GLOB,.LINNUM) K TYPE1 -"RTN","utcover",125,0) - I TYPE=2,$G(TYPE1) Q ; CAME IN FROM ABOVE LINE -"RTN","utcover",126,0) - ; summarize by just routine name -"RTN","utcover",127,0) - S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" -"RTN","utcover",128,0) - S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D -"RTN","utcover",129,0) - . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) -"RTN","utcover",130,0) - . S TOTCOV=TOTCOV+CURRCOV,TOTLIN=TOTLIN+CURRLIN -"RTN","utcover",131,0) - . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") -"RTN","utcover",132,0) - . Q -"RTN","utcover",133,0) - S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" -"RTN","utcover",134,0) - S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Overall Analysis "_TOTCOV_" out of "_TOTLIN_" lines covered"_$S(TOTLIN>0:" ("_$P((100*TOTCOV)/TOTLIN,".")_"% coverage)",1:"") -"RTN","utcover",135,0) - Q -"RTN","utcover",136,0) - ; -"RTN","utcover",137,0) -TRIMDATA(ROULIST,GLOB) ; -"RTN","utcover",138,0) - N ROUNAME -"RTN","utcover",139,0) - S ROUNAME="" F S ROUNAME=$O(ROULIST(ROUNAME)) Q:ROUNAME="" K @GLOB@(ROUNAME) -"RTN","utcover",140,0) - Q -"RTN","utcover",141,0) - ; -"RTN","utt1") -0^3^B28361985 -"RTN","utt1",1,0) -%utt1 ; VEN/SMH - Testing routines for M-Unit;08/08/15 16:20 -"RTN","utt1",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","utt1",3,0) - ; -"RTN","utt1",4,0) - ; THIS ROUTINE IS THE UNIFIED UNIT TESTER FOR ALL OF M-UNIT. -"RTN","utt1",5,0) - ; -"RTN","utt1",6,0) - ; Dear Users, -"RTN","utt1",7,0) - ; -"RTN","utt1",8,0) - ; I know about about the irony of a test suite for the testing suite, -"RTN","utt1",9,0) - ; so stop snikering. Aside from that, it's actually going to be hard. -"RTN","utt1",10,0) - ; -"RTN","utt1",11,0) - ; Truly yours, -"RTN","utt1",12,0) - ; -"RTN","utt1",13,0) - ; Sam H -"RTN","utt1",14,0) - ; -"RTN","utt1",15,0) - D EN^%ut($T(+0),1) ; Run tests here, be verbose. -"RTN","utt1",16,0) - QUIT -"RTN","utt1",17,0) - ; -"RTN","utt1",18,0) -STARTUP ; M-Unit Start-Up - This runs before anything else. -"RTN","utt1",19,0) - ; ZEXCEPT: KBANCOUNT - created here, removed in SHUTDOWN -"RTN","utt1",20,0) - S ^TMP($J,"%ut","STARTUP")="" -"RTN","utt1",21,0) - S KBANCOUNT=1 -"RTN","utt1",22,0) - QUIT -"RTN","utt1",23,0) - ; -"RTN","utt1",24,0) -SHUTDOWN ; M-Unit Shutdown - This runs after everything else is done. -"RTN","utt1",25,0) - ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed here -"RTN","utt1",26,0) - K ^TMP($J,"%ut","STARTUP") -"RTN","utt1",27,0) - K KBANCOUNT -"RTN","utt1",28,0) - QUIT -"RTN","utt1",29,0) - ; -"RTN","utt1",30,0) - ; -"RTN","utt1",31,0) - ; -"RTN","utt1",32,0) -SETUP ; This runs before every test. -"RTN","utt1",33,0) - ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",34,0) - S KBANCOUNT=KBANCOUNT+1 -"RTN","utt1",35,0) - QUIT -"RTN","utt1",36,0) - ; -"RTN","utt1",37,0) -TEARDOWN ; This runs after every test -"RTN","utt1",38,0) - ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",39,0) - S KBANCOUNT=KBANCOUNT-1 -"RTN","utt1",40,0) - QUIT -"RTN","utt1",41,0) - ; -"RTN","utt1",42,0) - ; -"RTN","utt1",43,0) - ; -"RTN","utt1",44,0) -T1 ; @TEST - Make sure Start-up Ran -"RTN","utt1",45,0) - D CHKTF($D(^TMP($J,"%ut","STARTUP")),"Start-up node on ^TMP must exist") -"RTN","utt1",46,0) - QUIT -"RTN","utt1",47,0) - ; -"RTN","utt1",48,0) -T2 ; @TEST - Make sure Set-up runs -"RTN","utt1",49,0) - ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",50,0) - D CHKEQ(KBANCOUNT,2,"KBANCount not incremented properly at SETUP") -"RTN","utt1",51,0) - QUIT -"RTN","utt1",52,0) - ; -"RTN","utt1",53,0) -T3 ; @TEST - Make sure Teardown runs -"RTN","utt1",54,0) - ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",55,0) - D CHKEQ(KBANCOUNT,2,"KBANCount not decremented properly at TEARDOWN") -"RTN","utt1",56,0) - QUIT -"RTN","utt1",57,0) - ; -"RTN","utt1",58,0) -T4 ; Specified in XTMTAG -"RTN","utt1",59,0) - ; 140731 JLI - note that this will fail when run from the GUI runner, since it calls each tag separately -"RTN","utt1",60,0) - ; ZEXCEPT: %utETRY - newed and created in EN1^%ut -"RTN","utt1",61,0) - ; ZEXCEPT: %utGUI -- CONDITIONALLY DEFINED BY GUINEXT^%ut -"RTN","utt1",62,0) - I $G(%utGUI) D CHKEQ(%utETRY,"T4","T4 should be the value for %utETRY in the GUI Runner") -"RTN","utt1",63,0) - I '$G(%utGUI) D CHKEQ(%utETRY(4),"T4","T4 should be the collected as the fourth entry in %utETRY") -"RTN","utt1",64,0) - QUIT -"RTN","utt1",65,0) - ; -"RTN","utt1",66,0) -T5 ; ditto -"RTN","utt1",67,0) - ; ZEXCEPT: %ut - NEWed and created in EN1^%ut -"RTN","utt1",68,0) - D CHKTF(0,"This is an intentional failure.") -"RTN","utt1",69,0) - D CHKEQ(%ut("FAIL"),1,"By this point, we should have failed one test") -"RTN","utt1",70,0) - D FAIL^%ut("Intentionally throwing a failure") -"RTN","utt1",71,0) - D CHKEQ(%ut("FAIL"),2,"By this point, we should have failed two tests") -"RTN","utt1",72,0) - ; S %ut("FAIL")=0 ; Okay... Boy's and Girls... as the developer I can do that. -"RTN","utt1",73,0) - QUIT -"RTN","utt1",74,0) - ; -"RTN","utt1",75,0) -T6 ; ditto -"RTN","utt1",76,0) - ; ZEXCEPT: %ut - NEWed and created in EN1^%ut -"RTN","utt1",77,0) - N TESTCOUNT S TESTCOUNT=%ut("CHK") -"RTN","utt1",78,0) - D SUCCEED^%ut -"RTN","utt1",79,0) - D SUCCEED^%ut -"RTN","utt1",80,0) - D CHKEQ(%ut("CHK"),TESTCOUNT+2,"Succeed should increment the number of tests") -"RTN","utt1",81,0) - QUIT -"RTN","utt1",82,0) - ; -"RTN","utt1",83,0) -T7 ; Make sure we write to principal even though we are on another device -"RTN","utt1",84,0) - ; This is a rather difficult test to carry out for GT.M and Cache... -"RTN","utt1",85,0) - ; ZEXCEPT: GetEnviron,Util,delete,newversion,readonly - not really variables -"RTN","utt1",86,0) - N D -"RTN","utt1",87,0) - I +$SY=47 S D="/tmp/test.txt" ; All GT.M ; VMS not supported. -"RTN","utt1",88,0) - I +$SY=0 D ; All Cache -"RTN","utt1",89,0) - . I $ZVERSION(1)=2 S D=$SYSTEM.Util.GetEnviron("temp")_"\test.txt" I 1 ; Windows -"RTN","utt1",90,0) - . E S D="/tmp/test.txt" ; not windows; VMS not supported. -"RTN","utt1",91,0) - I +$SY=0 O D:"NWS" ; Cache new file -"RTN","utt1",92,0) - I +$SY=47 O D:(newversion) ; GT.M new file -"RTN","utt1",93,0) - U D -"RTN","utt1",94,0) - WRITE "HELLO",! -"RTN","utt1",95,0) - WRITE "HELLO",! -"RTN","utt1",96,0) - C D -"RTN","utt1",97,0) - ; -"RTN","utt1",98,0) - ; Now open back the file, and read the hello, but open in read only so -"RTN","utt1",99,0) - ; M-Unit will error out if it will write something out there. -"RTN","utt1",100,0) - ; -"RTN","utt1",101,0) - ; Per VISTA conventions, current IO device should be IO, old is IO(0). -"RTN","utt1",102,0) - ; -"RTN","utt1",103,0) - I +$SY=0 O D:"R" -"RTN","utt1",104,0) - I +$SY=47 O D:(readonly) -"RTN","utt1",105,0) - U D -"RTN","utt1",106,0) - N X READ X:1 -"RTN","utt1",107,0) - D CHKTF(X="HELLO") ; This should write to the screen the dot not to the file. -"RTN","utt1",108,0) - D CHKTF(($$LO($IO)=$$LO(D)),"IO device didn't get reset back") ; $$LO is b/c of a bug in Cache/Windows. $IO is not the same cas D. -"RTN","utt1",109,0) - I +$SY=0 C D:"D" -"RTN","utt1",110,0) - I +$SY=47 C D:(delete) -"RTN","utt1",111,0) - U $P -"RTN","utt1",112,0) - S IO=$IO -"RTN","utt1",113,0) - QUIT -"RTN","utt1",114,0) - ; -"RTN","utt1",115,0) - ; At the moment T8^%utt1 throws a fail, with no message -"RTN","utt1",116,0) - ; in the GUI runner. For some reason, both X and Y -"RTN","utt1",117,0) - ; variables are returned as null strings, while in the -"RTN","utt1",118,0) - ; command line runner, Y has a value containing the -"RTN","utt1",119,0) - ; word being sought -"RTN","utt1",120,0) - ; -"RTN","utt1",121,0) -T8 ; If IO starts with another device, write to that device as if it's the pricipal device -"RTN","utt1",122,0) - ; ZEXCEPT: GetEnviron,Util,delete,newversion,readonly - not really variables -"RTN","utt1",123,0) - N D -"RTN","utt1",124,0) - I +$SY=47 S D="/tmp/test.txt" ; All GT.M ; VMS not supported. -"RTN","utt1",125,0) - I +$SY=0 D ; All Cache -"RTN","utt1",126,0) - . I $ZVERSION(1)=2 S D=$SYSTEM.Util.GetEnviron("temp")_"\test.txt" I 1 ; Windows -"RTN","utt1",127,0) - . E S D="/tmp/test.txt" ; not windows; VMS not supported. -"RTN","utt1",128,0) - I +$SY=0 O D:"NWS" ; Cache new file -"RTN","utt1",129,0) - I +$SY=47 O D:(newversion) ; GT.M new file -"RTN","utt1",130,0) - S IO=D -"RTN","utt1",131,0) - U D -"RTN","utt1",132,0) - D ^%utt4 ; Run some Unit Tests -"RTN","utt1",133,0) - C D -"RTN","utt1",134,0) - I +$SY=0 O D:"R" ; Cache read only -"RTN","utt1",135,0) - I +$SY=47 O D:(readonly) ; GT.M read only -"RTN","utt1",136,0) - U D -"RTN","utt1",137,0) - N X,Y,Z R X:1,Y:1,Z:1 -"RTN","utt1",138,0) - I +$SY=0 C D:"D" -"RTN","utt1",139,0) - I +$SY=47 C D:(delete) -"RTN","utt1",140,0) - ;D CHKTF(Y["MAIN") ; JLI 140829 commented out, gui doesn't run verbose -"RTN","utt1",141,0) - D CHKTF((Y["MAIN")!(Z["Ran 1 Routine"),"Write to system during test didn't work") -"RTN","utt1",142,0) - S IO=$P -"RTN","utt1",143,0) - QUIT -"RTN","utt1",144,0) - ; -"RTN","utt1",145,0) -LO(X) Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") -"RTN","utt1",146,0) - ; Shortcut methods for M-Unit -"RTN","utt1",147,0) -CHKTF(X,Y) ; -"RTN","utt1",148,0) - D CHKTF^%ut(X,$G(Y)) -"RTN","utt1",149,0) - QUIT -"RTN","utt1",150,0) - ; -"RTN","utt1",151,0) -CHKEQ(A,B,M) ; -"RTN","utt1",152,0) - D CHKEQ^%ut(A,B,$G(M)) -"RTN","utt1",153,0) - QUIT -"RTN","utt1",154,0) - ; -"RTN","utt1",155,0) -XTENT ; Entry points -"RTN","utt1",156,0) - ;;T4;Entry point using XTMENT -"RTN","utt1",157,0) - ;;T5;Error count check -"RTN","utt1",158,0) - ;;T6;Succeed Entry Point -"RTN","utt1",159,0) - ;;T7;Make sure we write to principal even though we are on another device -"RTN","utt1",160,0) - ;;T8;If IO starts with another device, write to that device as if it's the pricipal device -"RTN","utt1",161,0) - ; -"RTN","utt1",162,0) -XTROU ; Routines containing additional tests -"RTN","utt1",163,0) - ;;%utt2; old %utNITU -"RTN","utt1",164,0) - ;;%utt4; old %utNITW -"RTN","utt1",165,0) - ;;%utt5; -"RTN","utt1",166,0) - ;;%utt6; -"RTN","utt1",167,0) - ;;%uttcovr;coverage related tests -"RTN","utt2") -0^4^B458008 -"RTN","utt2",1,0) -%utt2 ; VEN/SMH - Bad Ass Continuation of Unit Tests;08/07/15 13:28 -"RTN","utt2",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","utt2",3,0) - ; -"RTN","utt2",4,0) -T11 ; @TEST An @TEST Entry point in Another Routine invoked through XTROU offsets -"RTN","utt2",5,0) - D CHKTF^%ut(1) -"RTN","utt2",6,0) - QUIT -"RTN","utt2",7,0) -T12 ; -"RTN","utt2",8,0) - D CHKTF^%ut(1) -"RTN","utt2",9,0) - QUIT -"RTN","utt2",10,0) -XTENT ; -"RTN","utt2",11,0) - ;;T12;An XTENT offset entry point in Another Routine invoked through XTROU offsets -"RTN","utt3") -0^5^B1493136 -"RTN","utt3",1,0) -%utt3 ; VEN/SMH - Unit Tests Coverage Tests;08/07/15 13:29 -"RTN","utt3",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","utt3",3,0) -XTMUNITV ; VEN/SMH - Unit Tests Coverage Tests;2014-04-16 7:14 PM -"RTN","utt3",4,0) - ; -"RTN","utt3",5,0) - ; *** BE VERY CAREFUL IN MODIFIYING THIS ROUTINE *** -"RTN","utt3",6,0) - ; *** THE UNIT TEST COUNTS ACTIVE AND INACTIVE LINES OF CODE *** -"RTN","utt3",7,0) - ; *** IF YOU MODIFY THIS, MODIFY XTMUNITW AS WELL *** -"RTN","utt3",8,0) - ; -"RTN","utt3",9,0) - ; Coverage tester in %utt4 -"RTN","utt3",10,0) - ; 20 Lines of code -"RTN","utt3",11,0) - ; 5 do not run as they are dead code -"RTN","utt3",12,0) - ; Expected Coverage: 15/20 = 75% -"RTN","utt3",13,0) - ; -"RTN","utt3",14,0) -STARTUP ; Doesn't count -"RTN","utt3",15,0) - N X ; Counts -"RTN","utt3",16,0) - S X=1 ; Counts -"RTN","utt3",17,0) - QUIT ; Counts -"RTN","utt3",18,0) - ; -"RTN","utt3",19,0) -SHUTDOWN K X,Y QUIT ; Counts; ZEXCEPT: X,Y -"RTN","utt3",20,0) - ; -"RTN","utt3",21,0) -SETUP S Y=$G(Y)+1 QUIT ; Counts -"RTN","utt3",22,0) - ; -"RTN","utt3",23,0) -TEARDOWN ; Doesn't count -"RTN","utt3",24,0) - S Y=Y-1 ; Counts -"RTN","utt3",25,0) - QUIT ; Counts -"RTN","utt3",26,0) - ; -"RTN","utt3",27,0) -T1 ; @TEST Test 1 -"RTN","utt3",28,0) - D CHKTF^%ut($D(Y)) ; Counts -"RTN","utt3",29,0) - QUIT ; Counts -"RTN","utt3",30,0) - ; -"RTN","utt3",31,0) -T2 ; @TEST Test 2 -"RTN","utt3",32,0) - D INTERNAL(1) ; Counts -"RTN","utt3",33,0) - D CHKTF^%ut(1) ; Counts -"RTN","utt3",34,0) - QUIT ; Counts -"RTN","utt3",35,0) - S X=1 ; Dead code -"RTN","utt3",36,0) - QUIT ; Dead code -"RTN","utt3",37,0) - ; -"RTN","utt3",38,0) -INTERNAL(A) ; Counts -"RTN","utt3",39,0) - S A=A+1 ; Counts -"RTN","utt3",40,0) - QUIT ; Counts -"RTN","utt3",41,0) - S A=2 ; Dead code -"RTN","utt3",42,0) - S Y=2 ; Dead code -"RTN","utt3",43,0) - QUIT ; Dead code -"RTN","utt4") -0^6^B1392046 -"RTN","utt4",1,0) -%utt4 ; VEN/SMH/JLI - Coverage Test Runner;08/07/15 20:26 -"RTN","utt4",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","utt4",3,0) -XTMUNITW ; VEN/SMH - Coverage Test Runner;2014-04-17 3:30 PM -"RTN","utt4",4,0) - ;;7.3;KERNEL TOOLKIT;; -"RTN","utt4",5,0) - ; -"RTN","utt4",6,0) - ; This tests code in XTMUNITV for coverage -"RTN","utt4",7,0) - D EN^%ut($T(+0),1) QUIT -"RTN","utt4",8,0) - ; -"RTN","utt4",9,0) -MAIN ; @TEST - Test coverage calculations -"RTN","utt4",10,0) - Q:$D(^TMP("%uttcovr",$J)) ; already running coverage analysis from %uttcovr -"RTN","utt4",11,0) - Q:'(+$SY=47) ; GT.M ONLY -"RTN","utt4",12,0) - D COV^%ut1("%utt3","D EN^%ut(""%utt3"",1)",-1) ; Only produce output global. -"RTN","utt4",13,0) - D CHKEQ^%ut("14/19",^TMP("%utCOVREPORT",$J)) -"RTN","utt4",14,0) - D CHKEQ^%ut("2/5",^TMP("%utCOVREPORT",$J,"%utt3","INTERNAL")) -"RTN","utt4",15,0) - D CHKTF^%ut($D(^TMP("%utCOVREPORT",$J,"%utt3","T2",4))) -"RTN","utt4",16,0) - D CHKEQ^%ut("1/1",^TMP("%utCOVREPORT",$J,"%utt3","SETUP")) -"RTN","utt4",17,0) - QUIT -"RTN","utt5") -0^7^B22421637 -"RTN","utt5",1,0) -%utt5 ;JLI - test for aspects of MUnit functionality ;08/07/15 13:30 -"RTN","utt5",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","utt5",3,0) - Q -"RTN","utt5",4,0) - ; -"RTN","utt5",5,0) -OLDSTYLE ; -"RTN","utt5",6,0) - ; ZEXCEPT: %ut - Newed in EN^%zu -"RTN","utt5",7,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",8,0) - I $D(%utt6var) S %ut("ENT")="OLDSTYLE",%utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"OLDSTYLE")="" -"RTN","utt5",9,0) - D CHKEQ^%ut(5,5,"SET EQUAL ON PURPOSE - OLDSTYLE DONE") -"RTN","utt5",10,0) - D CHKTF^%ut(4=4,"MY EQUAL VALUE") -"RTN","utt5",11,0) - Q -"RTN","utt5",12,0) - ; -"RTN","utt5",13,0) -OLDSTYL1 ; -"RTN","utt5",14,0) - ; ZEXCEPT: %ut - Newed in EN^%zu -"RTN","utt5",15,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",16,0) - I $D(%utt6var) S %ut("ENT")="OLDSTYL1",%utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"OLDSTYL1")="" -"RTN","utt5",17,0) - D CHKEQ^%ut(4,4,"SET EQUAL ON PURPOSE - OLDSTYL1 DONE") -"RTN","utt5",18,0) - Q -"RTN","utt5",19,0) - ; -"RTN","utt5",20,0) -NEWSTYLE ; @TEST identify new style test indicator functionality -"RTN","utt5",21,0) - ; ZEXCEPT: %ut - Newed in EN^%zu -"RTN","utt5",22,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",23,0) - I $D(%utt6var) S %ut("ENT")="NEWSTYLE" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"NEWSTYLE")="" -"RTN","utt5",24,0) - D CHKEQ^%ut(4,4,"SET EQUAL ON PURPOSE - NEWSTYLE DONE") -"RTN","utt5",25,0) - Q -"RTN","utt5",26,0) - ; -"RTN","utt5",27,0) -BADCHKEQ ; -"RTN","utt5",28,0) - ; ZEXCEPT: %ut - Newed in EN^%zu -"RTN","utt5",29,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",30,0) - I $D(%utt6var) S %ut("ENT")="BADCHKEQ" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADCHKEQ")="" -"RTN","utt5",31,0) - D CHKEQ^%ut(4,3,"SET UNEQUAL ON PURPOSE - SHOULD FAIL") -"RTN","utt5",32,0) - Q -"RTN","utt5",33,0) - ; -"RTN","utt5",34,0) -BADCHKTF ; -"RTN","utt5",35,0) - ; ZEXCEPT: %ut - Newed in EN^%zu -"RTN","utt5",36,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",37,0) - I $D(%utt6var) S %ut("ENT")="BADCHKTF" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADCHKTF")="" -"RTN","utt5",38,0) - D CHKTF^%ut(0,"SET FALSE (0) ON PURPOSE - SHOULD FAIL") -"RTN","utt5",39,0) - Q -"RTN","utt5",40,0) - ; -"RTN","utt5",41,0) -BADERROR ; -"RTN","utt5",42,0) - ; ZEXCEPT: %ut - Newed in EN^%zu -"RTN","utt5",43,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",44,0) - N X -"RTN","utt5",45,0) - I $D(%utt6var) S %ut("ENT")="BADERROR" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADERROR")="" -"RTN","utt5",46,0) - ; following syntax error is on purpose to throw an error -"RTN","utt5",47,0) - S X= ; syntax error on purpose -"RTN","utt5",48,0) - Q -"RTN","utt5",49,0) - ; -"RTN","utt5",50,0) -CALLFAIL ; -"RTN","utt5",51,0) - ; ZEXCEPT: %ut - Newed in EN^%zu -"RTN","utt5",52,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",53,0) - N X -"RTN","utt5",54,0) - I $D(%utt6var) S %ut("ENT")="CALLFAIL" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"CALLFAIL")="" -"RTN","utt5",55,0) - D FAIL^%ut("Called FAIL to test it") -"RTN","utt5",56,0) - Q -"RTN","utt5",57,0) - ; -"RTN","utt5",58,0) -LEAKSOK ; -"RTN","utt5",59,0) - N CODE,LOCATN,MYVALS,X -"RTN","utt5",60,0) - S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSOK TEST",MYVALS("X")="" -"RTN","utt5",61,0) - D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find no leaks -"RTN","utt5",62,0) - Q -"RTN","utt5",63,0) - ; -"RTN","utt5",64,0) -LEAKSBAD ; -"RTN","utt5",65,0) - N CODE,LOCATN,MYVALS,X -"RTN","utt5",66,0) - S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSBAD TEST - X NOT SPECIFIED" -"RTN","utt5",67,0) - D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find X since it isn't indicated -"RTN","utt5",68,0) - Q -"RTN","utt5",69,0) - ; -"RTN","utt5",70,0) -NVLDARG1 ; -"RTN","utt5",71,0) - D CHKEQ^%ut(1) -"RTN","utt5",72,0) - Q -"RTN","utt5",73,0) - ; -"RTN","utt5",74,0) -ISUTEST ; -"RTN","utt5",75,0) - D CHKTF^%ut($$ISUTEST^%ut,"ISUTEST returned FALSE!") -"RTN","utt5",76,0) - Q -"RTN","utt5",77,0) - ; -"RTN","utt5",78,0) -BADFORM1(X) ; @TEST should not be selected - arguments -"RTN","utt5",79,0) - ; ZEXCEPT: %ut - Newed in EN^%zu -"RTN","utt5",80,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",81,0) - I $D(%utt6var) S %ut("ENT")="NEWSTYLE" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADFORM1")="" -"RTN","utt5",82,0) - D CHKEQ^%ut(4,3,"SHOULD NOT BE SELECTED - ARGUMENTS - BADFORM1") -"RTN","utt5",83,0) - Q -"RTN","utt5",84,0) - ; -"RTN","utt5",85,0) -BADFORM2 ; ABC @TEST should not be selected - @TEST NOT FIRST -"RTN","utt5",86,0) - ; ZEXCEPT: %ut - Newed in EN^%zu -"RTN","utt5",87,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",88,0) - I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADFORM2")="" -"RTN","utt5",89,0) - D CHKEQ^%ut(4,3,"SHOULD NOT BE SELECTED - @TEST NOT FIRST - BADFORM2") -"RTN","utt5",90,0) - Q -"RTN","utt5",91,0) - ; -"RTN","utt5",92,0) -STARTUP ; -"RTN","utt5",93,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",94,0) - ; ZEXCEPT: KBANCOUNT created here, killed in SHUTDOWN -"RTN","utt5",95,0) - I $D(%utt6var),$D(^TMP("%utt5",$J)) K ^TMP("%utt5",$J) -"RTN","utt5",96,0) - I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"STARTUP")="" -"RTN","utt5",97,0) - ; following brought from %utt1, since only one STARTUP can RUN in a set -"RTN","utt5",98,0) - I '$D(%utt6var) D -"RTN","utt5",99,0) - . S ^TMP($J,"%ut","STARTUP")="" -"RTN","utt5",100,0) - . S KBANCOUNT=1 -"RTN","utt5",101,0) - . Q -"RTN","utt5",102,0) - Q -"RTN","utt5",103,0) - ; -"RTN","utt5",104,0) -SHUTDOWN ; -"RTN","utt5",105,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",106,0) - ; ZEXCEPT: KBANCOUNT created in STARTUP, killed here -"RTN","utt5",107,0) - I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"SHUTDOWN")="" -"RTN","utt5",108,0) - ; following brought from %utt1, since only one SHUTDOWN can RUN in a set -"RTN","utt5",109,0) - I '$D(%utt6var) D -"RTN","utt5",110,0) - . K ^TMP($J,"%ut","STARTUP") -"RTN","utt5",111,0) - . K KBANCOUNT -"RTN","utt5",112,0) - . Q -"RTN","utt5",113,0) - Q -"RTN","utt5",114,0) - ; -"RTN","utt5",115,0) -SETUP ; -"RTN","utt5",116,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",117,0) - I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"SETUP")="" -"RTN","utt5",118,0) - Q -"RTN","utt5",119,0) - ; -"RTN","utt5",120,0) -TEARDOWN ; -"RTN","utt5",121,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",122,0) - I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"TEARDOWN")="" -"RTN","utt5",123,0) - Q -"RTN","utt5",124,0) - ; -"RTN","utt5",125,0) -XTENT ; -"RTN","utt5",126,0) - ;;OLDSTYLE; identify old style test indicator functionality -"RTN","utt5",127,0) - ;;OLDSTYL1; identify old style test indicator 2 -"RTN","utt5",128,0) - ;;BADCHKEQ; CHKEQ should fail on unequal value -"RTN","utt5",129,0) - ;;BADCHKTF; CHKTF should fail on false value -"RTN","utt5",130,0) - ;;BADERROR; throws an error on purpose -"RTN","utt5",131,0) - ;;CALLFAIL; called FAIL to test it -"RTN","utt5",132,0) - ;;LEAKSOK;check leaks should be ok -"RTN","utt5",133,0) - ;;LEAKSBAD;check leaks with leak -"RTN","utt5",134,0) - ;;NVLDARG1;check invalid arg in CHKEQ -"RTN","utt5",135,0) - ;;ISUTEST;check ISUTEST inside unit test -"RTN","utt6") -0^8^B30140551 -"RTN","utt6",1,0) -%utt6 ;JLI - Unit tests for MUnit functionality ;08/07/15 13:31 -"RTN","utt6",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","utt6",3,0) - ; -"RTN","utt6",4,0) - ; This routine uses ZZUTJLI2 as a test routine, it does not include the routine as an extension, -"RTN","utt6",5,0) - ; since it uses it for tests. -"RTN","utt6",6,0) - ; -"RTN","utt6",7,0) - ; ZZUTJLI2 currently contains 3 tests (2 old style, 1 new style), it also specifies STARTUP and -"RTN","utt6",8,0) - ; SHUTDOWN (should be 1 each) and SETUP and TEARDOWN (should be 3 each, 1 for each test) enteries, each of these -"RTN","utt6",9,0) - ; creates an entry under the ^TMP("ZZUTJLI2" global node, indicating function then continues the process. -"RTN","utt6",10,0) - ; Should be 2+3n entries (1+1 for STARTUP and SHUTDOWN, then 3 for each of the tests (SETUP, test, -"RTN","utt6",11,0) - ; and TEARDOWN). -"RTN","utt6",12,0) - ; -"RTN","utt6",13,0) - ; This first section is more of a functional test, since it checks the full unit test processing from both -"RTN","utt6",14,0) - ; a command line and a GUI call approach. Data for analysis is saved under ^TMP("ZZUTJLI2_C", for command -"RTN","utt6",15,0) - ; line and ^TMP("ZZUTJLI2_G", for gui processing. -"RTN","utt6",16,0) - ; -"RTN","utt6",17,0) - ; The counts for the command line processing are based on the number of unit test tags -"RTN","utt6",18,0) - ; determined for the GUI processing as well. The numbers are 2 (startup and shutdown) -"RTN","utt6",19,0) - ; + 3 x the number of tests present. -"RTN","utt6",20,0) - ; -"RTN","utt6",21,0) - ; run unit tests by command line -"RTN","utt6",22,0) - N VERBOSE -"RTN","utt6",23,0) - S VERBOSE=0 -"RTN","utt6",24,0) -VERBOSE ; -"RTN","utt6",25,0) - I '$D(VERBOSE) N VERBOSE S VERBOSE=1 -"RTN","utt6",26,0) - N ZZUTCNT,JLICNT,JLIEXPCT,JLII,JLIX,ZZUTRSLT,%utt5,%utt6,%utt6var -"RTN","utt6",27,0) - W !!,"RUNNING COMMAND LINE TESTS VIA DOSET^%ut",! -"RTN","utt6",28,0) - D DOSET^%ut(1,VERBOSE) ; run `1 in M-UNIT TEST GROUP file -"RTN","utt6",29,0) - ; -"RTN","utt6",30,0) - W !!!,"Running command line tests by RUNSET^%ut",! -"RTN","utt6",31,0) - D RUNSET^%ut("TESTS FOR UNIT TEST ROUTINES") -"RTN","utt6",32,0) - ; -"RTN","utt6",33,0) - ; Call GUISET to obtain list of tags via entry in M-UNIT TEST GROUP file -"RTN","utt6",34,0) - ; silent to the user -"RTN","utt6",35,0) - D GUISET^%ut(.%utt6,1) -"RTN","utt6",36,0) - K ^TMP("%utt6_GUISET",$J) M ^TMP("%utt6_GUISET",$J)=@%utt6 -"RTN","utt6",37,0) - ; -"RTN","utt6",38,0) - W !!!,"RUNNING COMMAND LINE UNIT TESTS FOR %utt5",! -"RTN","utt6",39,0) - N ZZUTCNT,JLICNT,JLIEXPCT,JLII,JLIX,ZZUTRSLT -"RTN","utt6",40,0) - S ZZUTCNT=0 -"RTN","utt6",41,0) - K ^TMP("%utt5",$J) ; kill any contents of data storage -"RTN","utt6",42,0) - D EN^%ut("%utt5",VERBOSE) ; should do STARTUP(1x), then SETUP, test, TEARDOWN (each together 3x) and SHUTDOWN (1x) -"RTN","utt6",43,0) - K ^TMP("%utt5_C",$J) M ^TMP("%utt5_C",$J)=^TMP("%utt5",$J) -"RTN","utt6",44,0) - ; -"RTN","utt6",45,0) - ; now run unit tests by GUI - first determines unit test tags -"RTN","utt6",46,0) - W !!!,"RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent",! -"RTN","utt6",47,0) - S ZZUTCNT=0 -"RTN","utt6",48,0) - K ^TMP("%utt5",$J),^TMP("%utt6",$J) -"RTN","utt6",49,0) - D GUILOAD^%ut(.%utt6,"%utt5") -"RTN","utt6",50,0) - M ^TMP("%utt6",$J)=@%utt6 -"RTN","utt6",51,0) - S %utt6=$NA(^TMP("%utt6",$J)) -"RTN","utt6",52,0) - ; then run each tag separately -"RTN","utt6",53,0) - ; JLICNT is count of unit test tags, which can be determined for GUI call for each unit test tag -"RTN","utt6",54,0) - S JLICNT=0 F JLII=1:1 S JLIX=$G(@%utt6@(JLII)) Q:JLIX="" I $P(JLIX,U,2)'="" S JLICNT=JLICNT+1 D GUINEXT^%ut(.ZZUTRSLT,$P(JLIX,U,2)_U_$P(JLIX,U)) -"RTN","utt6",55,0) - ; and close it with a null routine name -"RTN","utt6",56,0) - D GUINEXT^%ut(.ZZUTRSLT,"") -"RTN","utt6",57,0) - K ^TMP("%utt5_G",$J) M ^TMP("%utt5_G",$J)=^TMP("%utt5",$J) -"RTN","utt6",58,0) - S JLIEXPCT=2+(3*JLICNT) ; number of lines that should be in the global nodes for command line and GUI -"RTN","utt6",59,0) - ; -"RTN","utt6",60,0) - W !!,"NOW RUNNING UNIT TESTS FOR %uttcovr",!! -"RTN","utt6",61,0) - D EN^%ut("%uttcovr",VERBOSE) -"RTN","utt6",62,0) - ; -"RTN","utt6",63,0) - ; now run the unit tests in this routine -"RTN","utt6",64,0) - W !!,"NOW RUNNING UNIT TESTS FOR %utt6",!! -"RTN","utt6",65,0) - D EN^%ut("%utt6",VERBOSE) -"RTN","utt6",66,0) - K ^TMP("%utt5",$J),^TMP("%utt5_C",$J),^TMP("%utt5_G",$J),^TMP("%utt6",$J),^TMP("%utt6_GUISET",$J) -"RTN","utt6",67,0) - ; clean up after GUI calls as well -"RTN","utt6",68,0) - K ^TMP("GUI-MUNIT",$J),^TMP("GUINEXT",$J),^TMP("MUNIT-%utRSLT",$J) -"RTN","utt6",69,0) - Q -"RTN","utt6",70,0) - ; -"RTN","utt6",71,0) - ; -"RTN","utt6",72,0) - ; WARNING -- WARNING -- WARNING -"RTN","utt6",73,0) - ; If the number of NEW STYLE tests in %utt5 is increased (it is currently 1), then the following -"RTN","utt6",74,0) - ; test will need to be updated to reflect the change(s) -"RTN","utt6",75,0) - ; END OF WARNING -- END OF WARNING -- END OF WARNING -"RTN","utt6",76,0) - ; -"RTN","utt6",77,0) -NEWSTYLE ; tests return of valid new style or @TEST indicators -"RTN","utt6",78,0) - N LIST -"RTN","utt6",79,0) - D NEWSTYLE^%ut1(.LIST,"%utt5") -"RTN","utt6",80,0) - D CHKEQ^%ut(LIST,1,"Returned an incorrect number ("_LIST_") of New Style indicators - should be one") -"RTN","utt6",81,0) - I LIST>0 D CHKEQ^%ut(LIST(1),"NEWSTYLE^identify new style test indicator functionality","Returned incorrect TAG^reason "_LIST(1)) -"RTN","utt6",82,0) - I LIST>0 D CHKEQ^%ut($G(LIST(2)),"","Returned a value for LIST(2) - should not have any value (i.e., null)") -"RTN","utt6",83,0) - Q -"RTN","utt6",84,0) - ; -"RTN","utt6",85,0) -CKGUISET ; -"RTN","utt6",86,0) - ; ZEXCEPT: %utt6var - if present, is NEWed and created in code following VERBOSE -"RTN","utt6",87,0) - I '$D(%utt6var) Q -"RTN","utt6",88,0) - N MAX -"RTN","utt6",89,0) - S MAX=$O(^TMP("%utt6_GUISET",$J,""),-1) -"RTN","utt6",90,0) - D CHKTF^%ut(^TMP("%utt6_GUISET",$J,MAX)["%utt6^NEWSTYLE","GUISET returned incorrect list") -"RTN","utt6",91,0) - Q -"RTN","utt6",92,0) - ; -"RTN","utt6",93,0) -CHKCMDLN ; check command line processing of %utt5 -"RTN","utt6",94,0) - ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag -"RTN","utt6",95,0) - I '$D(%utt6var) Q -"RTN","utt6",96,0) - D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",97,0) - D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",98,0) - D CHKTF^%ut($O(^TMP("%utt5_C",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5_C",$J,1,""))_"' should be 'STARTUP'") -"RTN","utt6",99,0) - D CHKTF^%ut($O(^TMP("%utt5_C",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_C",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") -"RTN","utt6",100,0) - Q -"RTN","utt6",101,0) - ; -"RTN","utt6",102,0) -CHKGUI ; check GUI processing of %utt5 -"RTN","utt6",103,0) - ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag -"RTN","utt6",104,0) - I '$D(%utt6var) Q -"RTN","utt6",105,0) - D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",106,0) - D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",107,0) - D CHKTF^%ut($O(^TMP("%utt5_G",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5Z_G",1,""))_"' should be 'STARTUP'") -"RTN","utt6",108,0) - D CHKTF^%ut($O(^TMP("%utt5_G",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_G",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") -"RTN","utt6",109,0) - Q -"RTN","utt6",110,0) - ; -"RTN","utt6",111,0) -XTENT ; -"RTN","utt6",112,0) - ;;CHKCMDLN;check command line processing of %utt5 -"RTN","utt6",113,0) - ;;CHKGUI;check GUI processing of %utt5 -"RTN","utt6",114,0) - ;;CKGUISET;check list of tests returned by GUISET -"RTN","utt6",115,0) - ;;NEWSTYLE;test return of valid new style or @TEST indicators -"RTN","uttcovr") -0^9^B144155326 -"RTN","uttcovr",1,0) -%uttcovr ;JLI/JIVEYSOFT - runs coverage tests on %ut and %ut1 routines via unit tests ;08/08/15 16:20 -"RTN","uttcovr",2,0) - ;;0.2;MASH UTILITIES;;;Build 8 -"RTN","uttcovr",3,0) - ; -"RTN","uttcovr",4,0) - ; ZEXCEPT: DTIME - if present the value is Kernel timeout for reads -"RTN","uttcovr",5,0) - N RUNCODE,XCLUDE -"RTN","uttcovr",6,0) - ; -"RTN","uttcovr",7,0) - ; Have it run the following entry points or, if no ^, call EN^%ut with routine name -"RTN","uttcovr",8,0) - S RUNCODE(1)="^%utt1,%utt1,^%utt6,VERBOSE^%utt6,%uttcovr,^%ut,^%ut1,^%utcover" -"RTN","uttcovr",9,0) - S RUNCODE("ENTRY^%uttcovr")="" -"RTN","uttcovr",10,0) - I '(+$SY=47) D Q ; GT.M only! -"RTN","uttcovr",11,0) - . W !,"This coverage analysis is currently only available in GT.M" -"RTN","uttcovr",12,0) - . N VAL R !,"Do you want to run the same tests using MULTAPIS Y/N ? ",VAL:$G(DTIME,300) Q:'$T -"RTN","uttcovr",13,0) - . I "Yy"[$E(VAL) D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",14,0) - . Q -"RTN","uttcovr",15,0) - ; Have the analysis EXCLUDE the following routines from coverage - unit test routines -"RTN","uttcovr",16,0) - S XCLUDE(1)="%utt1,%utt2,%utt3,%utt4,%utt5,%utt6,%uttcovr" -"RTN","uttcovr",17,0) - S XCLUDE(2)="%utf2hex" ; a GT.M system file, although it wasn't showing up anyway -"RTN","uttcovr",18,0) - M ^TMP("%uttcovr",$J,"XCLUDE")=XCLUDE -"RTN","uttcovr",19,0) - D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) -"RTN","uttcovr",20,0) - Q -"RTN","uttcovr",21,0) - ; -"RTN","uttcovr",22,0) -ENTRY ; -"RTN","uttcovr",23,0) - K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",24,0) - M ^TMP("ENTRY^%uttcovr",$J,"VALS")=^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",25,0) - K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",26,0) - ; these tests run outside of unit tests to handle CHKLEAKS calls not in unit tests -"RTN","uttcovr",27,0) - ; they need data set, so they are called in here -"RTN","uttcovr",28,0) - ; LEAKSOK ; -"RTN","uttcovr",29,0) - N CODE,LOCATN,MYVALS,X,I -"RTN","uttcovr",30,0) - S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSOK TEST",MYVALS("X")="" -"RTN","uttcovr",31,0) - D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find no leaks -"RTN","uttcovr",32,0) - ; LEAKSBAD ; -"RTN","uttcovr",33,0) - N CODE,LOCATN,MYVALS,X -"RTN","uttcovr",34,0) - S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSBAD TEST - X NOT SPECIFIED" -"RTN","uttcovr",35,0) - D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find X since it isn't indicated -"RTN","uttcovr",36,0) - ; try to run coverage -"RTN","uttcovr",37,0) - W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at 3",!!! -"RTN","uttcovr",38,0) - D COV^%ut("%ut1","D EN^%ut(""%utt5"")",3) -"RTN","uttcovr",39,0) - W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at -1",!!! -"RTN","uttcovr",40,0) - D COV^%ut("%ut1","D EN^%ut(""%utt5"")",-1) -"RTN","uttcovr",41,0) - N RUNCODE S RUNCODE(1)="^%utt4,^%ut" -"RTN","uttcovr",42,0) - N XCLUDE M XCLUDE=^TMP("%uttcovr",$J,"XCLUDE") -"RTN","uttcovr",43,0) - W !,"xxxxxxxxxxxxxxxxxxxx GOING TO MULTAPIS for %utt4 and %ut",!!! -"RTN","uttcovr",44,0) - D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",45,0) - W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COVERAGE for %utt4 and %ut at 3",!!! -"RTN","uttcovr",46,0) - D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) -"RTN","uttcovr",47,0) - N GLT S GLT=$NA(^TMP("%uttcovr-text",$J)) K @GLT -"RTN","uttcovr",48,0) - W !,"xxxxxxxxxxxxxxxxxxxx LISTING DATA VIA LIST",!!! -"RTN","uttcovr",49,0) - D LIST^%utcover(.XCLUDE,3,GLT) ; get coverage for listing and trimdata in %utcover -"RTN","uttcovr",50,0) - F I=1:1 Q:'$D(@GLT@(I)) W !,@GLT@(I) -"RTN","uttcovr",51,0) - K @GLT -"RTN","uttcovr",52,0) - ; restore unit test totals from before entry -"RTN","uttcovr",53,0) - K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",54,0) - M ^TMP("%ut",$J,"UTVALS")=^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",55,0) - K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",56,0) - W !,"xxxxxxxxxxxxxxxxxxxx Finished in ENTRY^%uttcovr",!!! -"RTN","uttcovr",57,0) - Q -"RTN","uttcovr",58,0) - ; -"RTN","uttcovr",59,0) -RTNANAL ; @TEST - routine analysis -"RTN","uttcovr",60,0) - N ROUS,GLB -"RTN","uttcovr",61,0) - S ROUS("%utt4")="" -"RTN","uttcovr",62,0) - S GLB=$NA(^TMP("%uttcovr-rtnanal",$J)) K @GLB -"RTN","uttcovr",63,0) - D RTNANAL^%ut1(.ROUS,GLB) -"RTN","uttcovr",64,0) - D CHKTF^%ut($D(@GLB@("%utt4","MAIN"))>1,"Not enough 'MAIN' nodes found") -"RTN","uttcovr",65,0) - D CHKTF^%ut($G(@GLB@("%utt4","MAIN",2))["+$SY=47","Check for GT.M not found in expected line") -"RTN","uttcovr",66,0) - D CHKTF^%ut($G(@GLB@("%utt4","MAIN",8))=" QUIT","Final QUIT not on expected line") -"RTN","uttcovr",67,0) - K @GLB -"RTN","uttcovr",68,0) - Q -"RTN","uttcovr",69,0) - ; -"RTN","uttcovr",70,0) -COVCOV ; @TEST - check COVCOV - remove seen lines -"RTN","uttcovr",71,0) - N C,R -"RTN","uttcovr",72,0) - S C=$NA(^TMP("%uttcovr_C",$J)) -"RTN","uttcovr",73,0) - S R=$NA(^TMP("%uttcovr_R",$J)) -"RTN","uttcovr",74,0) - S @C@("ROU1")="" -"RTN","uttcovr",75,0) - S @C@("ROU2")="",@R@("ROU2")="" -"RTN","uttcovr",76,0) - S @C@("ROU2","TAG1")="",@R@("ROU2","TAG1")="" -"RTN","uttcovr",77,0) - S @C@("ROU2","TAG1",1)="AAA" -"RTN","uttcovr",78,0) - S @C@("ROU2","TAG1",2)="AAA",@R@("ROU2","TAG1",2)="AAA" -"RTN","uttcovr",79,0) - S @C@("ROU2","TAG1",3)="ABB",@R@("ROU2","TAG1",3)="ABB" -"RTN","uttcovr",80,0) - S @C@("ROU2","TAG2",6)="ACC" -"RTN","uttcovr",81,0) - S @C@("ROU2","TAG2",7)="ADD",@R@("ROU2","TAG2",7)="ADD" -"RTN","uttcovr",82,0) - S @C@("ROU3","TAG1",2)="BAA",@R@("ROU3","TAG1",2)="BAA" -"RTN","uttcovr",83,0) - S @C@("ROU3","TAG1",3)="CAA" -"RTN","uttcovr",84,0) - S @C@("ROU3","TAG1",4)="DAA" -"RTN","uttcovr",85,0) - S @C@("ROU3","TAG1",5)="EAA",@R@("ROU3","TAG1",5)="EAA" -"RTN","uttcovr",86,0) - S @C@("ROU3","TAG1",6)="FAA",@R@("ROU3","TAG1",6)="FAA" -"RTN","uttcovr",87,0) - D COVCOV^%ut1(C,R) -"RTN","uttcovr",88,0) - D CHKTF^%ut($D(@C@("ROU2","TAG1",1)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",89,0) - D CHKTF^%ut('$D(@C@("ROU2","TAG1",2)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",90,0) - D CHKTF^%ut($D(@C@("ROU2","TAG2",6)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",91,0) - D CHKTF^%ut('$D(@C@("ROU2","TAG2",7)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",92,0) - D CHKTF^%ut($D(@C@("ROU3","TAG1",4)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",93,0) - D CHKTF^%ut('$D(@C@("ROU3","TAG1",5)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",94,0) - K @C,@R -"RTN","uttcovr",95,0) - Q -"RTN","uttcovr",96,0) - ; -"RTN","uttcovr",97,0) -COVRPTGL ; @TEST - coverage report returning global -"RTN","uttcovr",98,0) - N GL1,GL2,GL3,GL4 -"RTN","uttcovr",99,0) - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 -"RTN","uttcovr",100,0) - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",101,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",102,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",103,0) - D SETGLOBS(GL1,GL2) -"RTN","uttcovr",104,0) - D COVRPTGL^%ut1(GL1,GL2,GL3,GL4) -"RTN","uttcovr",105,0) - D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES")),"0/9","Wrong number of lines covered f>>or ACTLINES") -"RTN","uttcovr",106,0) - D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES",9))," QUIT CNT","Wrong result for last l>>ine not covered for ACTLINES") -"RTN","uttcovr",107,0) - D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST")),"8/10","Wrong number of lines covered >>for CHEKTEST") -"RTN","uttcovr",108,0) - D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST",39))," . Q","Wrong result for last line >>not covered for CHEKTEST") -"RTN","uttcovr",109,0) - K @GL1,@GL2,@GL3,@GL4 -"RTN","uttcovr",110,0) - Q -"RTN","uttcovr",111,0) - ; -"RTN","uttcovr",112,0) -COVRPT ; @TEST -"RTN","uttcovr",113,0) - N GL1,GL2,GL3,GL4,VRBOSITY,GL5 -"RTN","uttcovr",114,0) - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 -"RTN","uttcovr",115,0) - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",116,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",117,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",118,0) - S GL5=$NA(^TMP("%ut1-covrpt",$J)) K @GL5 -"RTN","uttcovr",119,0) - D SETGLOBS(GL1,GL2) -"RTN","uttcovr",120,0) - S VRBOSITY=1 -"RTN","uttcovr",121,0) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",122,0) - D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL5@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",123,0) - D CHKEQ^%ut("42.11",$G(@GL5@(9)),"Verbosity 1 - not expected value for line 9") -"RTN","uttcovr",124,0) - D CHKTF^%ut('$D(@GL5@(10)),"Verbosity 1 - unexpected data in 10th line") -"RTN","uttcovr",125,0) - ; -"RTN","uttcovr",126,0) - S VRBOSITY=2 -"RTN","uttcovr",127,0) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",128,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",129,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(11)),"Verbosity 2 - not expected value for 11th line") -"RTN","uttcovr",130,0) - D CHKTF^%ut('$D(@GL5@(12)),"Verbosity 2 - unexpected data for 12th line") -"RTN","uttcovr",131,0) - ; -"RTN","uttcovr",132,0) - S VRBOSITY=3 -"RTN","uttcovr",133,0) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",134,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",135,0) - D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL5@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",136,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",137,0) - D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL5@(22)),"Verbosity 3 - unexpected value for line 22") -"RTN","uttcovr",138,0) - D CHKTF^%ut('$D(@GL5@(23)),"Verbosity 3 - unexpected line 23") -"RTN","uttcovr",139,0) - ; -"RTN","uttcovr",140,0) - K @GL1,@GL2,@GL3,@GL4,@GL5 -"RTN","uttcovr",141,0) - Q -"RTN","uttcovr",142,0) - ; -"RTN","uttcovr",143,0) -COVRPTLS ; @TEST - coverage report returning text in global -"RTN","uttcovr",144,0) - N GL1,GL2,GL3,GL4,VRBOSITY -"RTN","uttcovr",145,0) - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 -"RTN","uttcovr",146,0) - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",147,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",148,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",149,0) - D SETGLOBS(GL1,GL2) -"RTN","uttcovr",150,0) - S VRBOSITY=1 -"RTN","uttcovr",151,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",152,0) - D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL4@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",153,0) - D CHKEQ^%ut("42.11",$G(@GL4@(9)),"Verbosity 1 - not expected value for line 9") -"RTN","uttcovr",154,0) - D CHKTF^%ut('$D(@GL4@(10)),"Verbosity 1 - unexpected data in 10th line") -"RTN","uttcovr",155,0) - K @GL4 -"RTN","uttcovr",156,0) - ; -"RTN","uttcovr",157,0) - S VRBOSITY=2 -"RTN","uttcovr",158,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",159,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",160,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(11)),"Verbosity 2 - not expected value for 11th line") -"RTN","uttcovr",161,0) - D CHKTF^%ut('$D(@GL4@(12)),"Verbosity 2 - unexpected data for 12th line") -"RTN","uttcovr",162,0) - K @GL4 -"RTN","uttcovr",163,0) - ; -"RTN","uttcovr",164,0) - S VRBOSITY=3 -"RTN","uttcovr",165,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",166,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",167,0) - D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL4@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",168,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",169,0) - D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL4@(22)),"Verbosity 3 - unexpected value for line 22") -"RTN","uttcovr",170,0) - D CHKTF^%ut('$D(@GL4@(23)),"Verbosity 3 - unexpected line 23") -"RTN","uttcovr",171,0) - ; -"RTN","uttcovr",172,0) - K @GL1,@GL2,@GL3,@GL4 -"RTN","uttcovr",173,0) - Q -"RTN","uttcovr",174,0) - ; -"RTN","uttcovr",175,0) -TRIMDATA ; @TEST - TRIMDATA in %utcover -"RTN","uttcovr",176,0) - N GL1,XCLUD -"RTN","uttcovr",177,0) - S GL1=$NA(^TMP("%uttcovr-trimdata",$J)) K @GL1 -"RTN","uttcovr",178,0) - S @GL1@("GOOD",1)="1" -"RTN","uttcovr",179,0) - S @GL1@("BAD",1)="1" -"RTN","uttcovr",180,0) - S XCLUD("BAD")="" -"RTN","uttcovr",181,0) - D TRIMDATA^%utcover(.XCLUD,GL1) -"RTN","uttcovr",182,0) - D CHKTF^%ut($D(@GL1@("GOOD")),"GOOD ENTRY WAS REMOVED") -"RTN","uttcovr",183,0) - D CHKTF^%ut('$D(@GL1@("BAD")),"ENTRY WAS NOT TRIMMED") -"RTN","uttcovr",184,0) - K @GL1,XCLUD -"RTN","uttcovr",185,0) - Q -"RTN","uttcovr",186,0) - ; -"RTN","uttcovr",187,0) -LIST ; @TEST - LIST in %utcover -"RTN","uttcovr",188,0) - N GL1,GLT S GL1=$NA(^TMP("%uttcovr-list",$J)),GLT=$NA(^TMP("%uttcovr-text",$J)) -"RTN","uttcovr",189,0) - S @GL1@("%ut1")="89/160" -"RTN","uttcovr",190,0) - S @GL1@("%ut1","%ut1")="2/2" -"RTN","uttcovr",191,0) - S @GL1@("%ut1","ACTLINES")="0/8" -"RTN","uttcovr",192,0) - S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",193,0) - S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",194,0) - S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",195,0) - S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",196,0) - S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",197,0) - S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",198,0) - S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",199,0) - S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",200,0) - S @GL1@("%ut1","CHECKTAG")="11/11" -"RTN","uttcovr",201,0) - S @GL1@("%ut1","CHEKTEST")="10/10" -"RTN","uttcovr",202,0) - N XCLUD S XCLUD("%utt1")="" -"RTN","uttcovr",203,0) - D LIST^%utcover(.XCLUD,1,GLT,GL1) -"RTN","uttcovr",204,0) - D CHKEQ^%ut("Routine %ut1 89 out of 160 lines covered (55%)",$G(@GLT@(3)),"Verbosity 1 - Unexpected text for line 3") -"RTN","uttcovr",205,0) - D CHKEQ^%ut("Overall Analysis 89 out of 160 lines covered (55% coverage)",$G(@GLT@(6)),"Verbosity 1 - unexpected text for line 6") -"RTN","uttcovr",206,0) - D CHKTF^%ut('$D(@GLT@(7)),"Verbosity 1 - Unexpected line 7 present") -"RTN","uttcovr",207,0) - K @GLT -"RTN","uttcovr",208,0) - ; -"RTN","uttcovr",209,0) - D LIST^%utcover(.XCLUD,2,GLT,GL1) -"RTN","uttcovr",210,0) - D CHKEQ^%ut(" - Summary",$G(@GLT@(4)),"Verbosity 2 - unexpected text at line 4") -"RTN","uttcovr",211,0) - D CHKEQ^%ut(" Tag ACTLINES^%ut1 0 out of 8 lines covered",$G(@GLT@(6)),"Verbosity 2 - unexpected text at line 6") -"RTN","uttcovr",212,0) - D CHKEQ^%ut(" Tag CHEKTEST^%ut1 10 out of 10 lines covered",$G(@GLT@(8)),"Verbosity 2 - unexpected text at line 8") -"RTN","uttcovr",213,0) - D CHKTF^%ut($D(@GLT@(14)),"Verbosity 2 - expected line at line 14") -"RTN","uttcovr",214,0) - D CHKTF^%ut('$D(@GLT@(15)),"Verbosity 2 - unexpected line at line 15") -"RTN","uttcovr",215,0) - K @GLT -"RTN","uttcovr",216,0) - ; -"RTN","uttcovr",217,0) - D LIST^%utcover(.XCLUD,3,GLT,GL1) -"RTN","uttcovr",218,0) - D CHKEQ^%ut(" Tag %ut1^%ut1 2 out of 2 lines covered",$G(@GLT@(5)),"Verbosity 3 - Incorrect text at line 5") -"RTN","uttcovr",219,0) - D CHKEQ^%ut(" ACTLINES+9 QUIT CNT",$G(@GLT@(15)),"Verbosity 3 - incorrect line 15") -"RTN","uttcovr",220,0) - D CHKTF^%ut($D(@GLT@(31)),"Verbosity 3 - expected data in line 31") -"RTN","uttcovr",221,0) - D CHKTF^%ut('$D(@GLT@(32)),"Verbosity 3 - did not expect a line 32") -"RTN","uttcovr",222,0) - ; -"RTN","uttcovr",223,0) - K @GL1,@GLT -"RTN","uttcovr",224,0) - Q -"RTN","uttcovr",225,0) - ; -"RTN","uttcovr",226,0) -SETGLOBS(GL1,GL2) ; -"RTN","uttcovr",227,0) - S @GL1@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",228,0) - S @GL1@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",229,0) - S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",230,0) - S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",231,0) - S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",232,0) - S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",233,0) - S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",234,0) - S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",235,0) - S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",236,0) - S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",237,0) - S @GL1@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",238,0) - S @GL1@("%ut1","CHEKTEST",0)="CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list." -"RTN","uttcovr",239,0) - S @GL1@("%ut1","CHEKTEST",13)=" N I,LIST" -"RTN","uttcovr",240,0) - S @GL1@("%ut1","CHEKTEST",14)=" S I=$L($T(@(U_%utROU))) I I<0 Q ""-1^Invalid Routine Name""" -"RTN","uttcovr",241,0) - S @GL1@("%ut1","CHEKTEST",31)=" D NEWSTYLE(.LIST,%utROU)" -"RTN","uttcovr",242,0) - S @GL1@("%ut1","CHEKTEST",32)=" F I=1:1:LIST S %ut(""ENTN"")=%ut(""ENTN"")+1,%utUETRY(%ut(""ENTN""))=$P(LIST(I),U),%utUETRY(%ut(""ENTN""),""NAME"")=$P(LIST(I),U,2,99)" -"RTN","uttcovr",243,0) - S @GL1@("%ut1","CHEKTEST",37)=" N %utUI F %utUI=1:1 S %ut(""ELIN"")=$T(@(""XTENT+""_%utUI_""^""_%utROU)) Q:$P(%ut(""ELIN""),"";"",3)="""" D" -"RTN","uttcovr",244,0) - S @GL1@("%ut1","CHEKTEST",38)=" . S %ut(""ENTN"")=%ut(""ENTN"")+1,%utUETRY(%ut(""ENTN""))=$P(%ut(""ELIN""),"";"",3),%utUETRY(%ut(""ENTN""),""NAME"")=$P(%ut(""ELIN""),"";"",4)" -"RTN","uttcovr",245,0) - S @GL1@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",246,0) - S @GL1@("%ut1","CHEKTEST",41)=" QUIT" -"RTN","uttcovr",247,0) - S @GL1@("%ut1","CHEKTEST",9)=" S %ut(""ENTN"")=0 ; Number of test, sub to %utUETRY." -"RTN","uttcovr",248,0) - S @GL2@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",249,0) - S @GL2@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",250,0) - S @GL2@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",251,0) - S @GL2@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",252,0) - S @GL2@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",253,0) - S @GL2@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",254,0) - S @GL2@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",255,0) - S @GL2@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",256,0) - S @GL2@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",257,0) - S @GL2@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",258,0) - S @GL2@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",259,0) - S @GL2@("%ut1","CHEKTEST",38)=" . S %ut(""ENTN"")=%ut(""ENTN"")+1,%utUETRY(%ut(""ENTN""))=$P(%ut(""ELIN""),"";"",3),%utUETRY(%ut(""ENTN""),""NAME"")=$P(%ut(""ELIN""),"";"",4)" -"RTN","uttcovr",260,0) - S @GL2@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",261,0) - Q -"RTN","uttcovr",262,0) - ; -"SEC","^DIC",17.9001,17.9001,0,"AUDIT") -@ -"SEC","^DIC",17.9001,17.9001,0,"DD") -@ -"SEC","^DIC",17.9001,17.9001,0,"DEL") -@ -"SEC","^DIC",17.9001,17.9001,0,"LAYGO") -@ -"SEC","^DIC",17.9001,17.9001,0,"RD") -@ -"SEC","^DIC",17.9001,17.9001,0,"WR") -@ -"VER") -8.0^22.0 -"^DD",17.9001,17.9001,0) -FIELD^^2^3 -"^DD",17.9001,17.9001,0,"DT") -3140812 -"^DD",17.9001,17.9001,0,"IX","B",17.9001,.01) - -"^DD",17.9001,17.9001,0,"NM","MUNIT TEST GROUP") - -"^DD",17.9001,17.9001,0,"VRPK") -MASH -"^DD",17.9001,17.9001,.01,0) -NAME^RF^^0;1^K:$L(X)>30!(X?.N)!($L(X)<3)!'(X'?1P.E) X -"^DD",17.9001,17.9001,.01,1,0) -^.1 -"^DD",17.9001,17.9001,.01,1,1,0) -17.9001^B -"^DD",17.9001,17.9001,.01,1,1,1) -S ^%ut(17.9001,"B",$E(X,1,30),DA)="" -"^DD",17.9001,17.9001,.01,1,1,2) -K ^%ut(17.9001,"B",$E(X,1,30),DA) -"^DD",17.9001,17.9001,.01,3) -NAME MUST BE 3-30 CHARACTERS, NOT NUMERIC OR STARTING WITH PUNCTUATION -"^DD",17.9001,17.9001,1,0) -TEST ROUTINE^17.90011^^1;0 -"^DD",17.9001,17.9001,2,0) -DESCRIPTION FOR GROUP^17.90012^^2;0 -"^DD",17.9001,17.9001,2,21,0) -^^3^3^3140812^ -"^DD",17.9001,17.9001,2,21,1,0) -This word processing field provides a location for the developer to enter -"^DD",17.9001,17.9001,2,21,2,0) -a description of the purpose or function of the M-Unit Test Group, -"^DD",17.9001,17.9001,2,21,3,0) -including if desired comments on the various routines in the group. -"^DD",17.9001,17.9001,2,23,0) -^^3^3^3140812^ -"^DD",17.9001,17.9001,2,23,1,0) -This word processing field provides a location for the developer to enter -"^DD",17.9001,17.9001,2,23,2,0) -a description of the purpose or function of the M-Unit Test Group, -"^DD",17.9001,17.9001,2,23,3,0) -including if desired comments on the various routines in the group. -"^DD",17.9001,17.9001,2,"DT") -3140812 -"^DD",17.9001,17.90011,0) -TEST ROUTINE SUB-FIELD^^.01^1 -"^DD",17.9001,17.90011,0,"DT") -3140731 -"^DD",17.9001,17.90011,0,"IX","B",17.90011,.01) - -"^DD",17.9001,17.90011,0,"NM","TEST ROUTINE") - -"^DD",17.9001,17.90011,0,"UP") -17.9001 -"^DD",17.9001,17.90011,.01,0) -TEST ROUTINE^MF^^0;1^K:$L(X)>8!($L(X)<3) X -"^DD",17.9001,17.90011,.01,1,0) -^.1 -"^DD",17.9001,17.90011,.01,1,1,0) -17.90011^B -"^DD",17.9001,17.90011,.01,1,1,1) -S ^%ut(17.9001,DA(1),1,"B",$E(X,1,30),DA)="" -"^DD",17.9001,17.90011,.01,1,1,2) -K ^%ut(17.9001,DA(1),1,"B",$E(X,1,30),DA) -"^DD",17.9001,17.90011,.01,3) -This is a routine to be used for the MUnit Test Group. Answer must be 3-8 characters in length. -"^DD",17.9001,17.90011,.01,"DT") -3140731 -"^DD",17.9001,17.90012,0) -DESCRIPTION FOR GROUP SUB-FIELD^^.01^1 -"^DD",17.9001,17.90012,0,"DT") -3140812 -"^DD",17.9001,17.90012,0,"NM","DESCRIPTION FOR GROUP") - -"^DD",17.9001,17.90012,0,"UP") -17.9001 -"^DD",17.9001,17.90012,.01,0) -DESCRIPTION FOR GROUP^W^^0;1^Q -"^DD",17.9001,17.90012,.01,3) -Enter a description for the Unit Test Group -"^DD",17.9001,17.90012,.01,21,0) -^.001^3^3^3140812^^ -"^DD",17.9001,17.90012,.01,21,1,0) -This word processing field provides a location for the developer to enter -"^DD",17.9001,17.90012,.01,21,2,0) -a description of the purpose or function of the M-Unit Test Group, -"^DD",17.9001,17.90012,.01,21,3,0) -including if desired comments on the various routines in the group. -"^DD",17.9001,17.90012,.01,23,0) -^^3^3^3140812^ -"^DD",17.9001,17.90012,.01,23,1,0) -This word processing field provides a location for the developer to enter -"^DD",17.9001,17.90012,.01,23,2,0) -a description of the purpose or function of the M-Unit Test Group, -"^DD",17.9001,17.90012,.01,23,3,0) -including if desired comments on the various routines in the group. -"^DD",17.9001,17.90012,.01,"DT") -3140812 -"^DIC",17.9001,17.9001,0) -M-UNIT TEST GROUP^17.9001 -"^DIC",17.9001,17.9001,0,"GL") -^%ut(17.9001, -"^DIC",17.9001,"B","M-UNIT TEST GROUP",17.9001) - -**END** -**END** diff --git a/MASH-0_2-0_M-Unit_Test_150810.KID b/MASH-0_2-0_M-Unit_Test_150914.KID similarity index 97% rename from MASH-0_2-0_M-Unit_Test_150810.KID rename to MASH-0_2-0_M-Unit_Test_150914.KID index d4b02f5..329d6df 100644 --- a/MASH-0_2-0_M-Unit_Test_150810.KID +++ b/MASH-0_2-0_M-Unit_Test_150914.KID @@ -1,13 +1,13 @@ -KIDS Distribution saved on Aug 10, 2015@14:41:43 -Updated M-Unit Functionality +KIDS Distribution saved on Sep 14, 2015@12:42:37 +Updated M-Unit functionality **KIDS**:MASH*0.2*0^ **INSTALL NAME** MASH*0.2*0 "BLD",9544,0) -MASH*0.2*0^MASH UTILITIES^0^3150810^n +MASH*0.2*0^MASH UTILITIES^0^3150914^n "BLD",9544,1,0) -^^37^37^3150807^^^^ +^^40^40^3150914^^^^ "BLD",9544,1,1,0) Changes to functionality include: "BLD",9544,1,2,0) @@ -82,6 +82,12 @@ by GETUTVAL^%ut with a heading of SUMMARY. A potential problem with setting up the %ut namespace in the local "BLD",9544,1,37,0) instance was addressed by Sam Habiel in the preinstall routine ZZUTPRE. +"BLD",9544,1,38,0) + +"BLD",9544,1,39,0) +Added information on the license to the information on the submission +"BLD",9544,1,40,0) +to OSEHRA. "BLD",9544,4,0) ^9.64PA^17.9001^1 "BLD",9544,4,17.9001,0) @@ -91,7 +97,7 @@ y^y^f^^n^^y^o^n "BLD",9544,4,"B",17.9001,17.9001) "BLD",9544,6.3) -9 +11 "BLD",9544,"ABPKG") n "BLD",9544,"INI") @@ -125,25 +131,25 @@ ZZUTPOST "BLD",9544,"KRN",9.8,"NM",0) ^9.68A^10^10 "BLD",9544,"KRN",9.8,"NM",1,0) -ut^^0^B196411208 +ut^^0^B196383387 "BLD",9544,"KRN",9.8,"NM",2,0) -ut1^^0^B205876634 +ut1^^0^B205168514 "BLD",9544,"KRN",9.8,"NM",3,0) -utt1^^0^B29220013 +utt1^^0^B28788704 "BLD",9544,"KRN",9.8,"NM",4,0) -utt2^^0^B512658 +utt2^^0^B501728 "BLD",9544,"KRN",9.8,"NM",5,0) -utt3^^0^B1662421 +utt3^^0^B1628564 "BLD",9544,"KRN",9.8,"NM",6,0) -utt4^^0^B1555396 +utt4^^0^B1522726 "BLD",9544,"KRN",9.8,"NM",7,0) -utt5^^0^B23265101 +utt5^^0^B23054235 "BLD",9544,"KRN",9.8,"NM",8,0) -utt6^^0^B31141903 +utt6^^0^B30891565 "BLD",9544,"KRN",9.8,"NM",9,0) -uttcovr^^0^B147322146 +uttcovr^^0^B146530441 "BLD",9544,"KRN",9.8,"NM",10,0) -utcover^^0^B33175345 +utcover^^0^B32934852 "BLD",9544,"KRN",9.8,"NM","B","ut",1) "BLD",9544,"KRN",9.8,"NM","B","ut1",2) @@ -389,9 +395,9 @@ MASH UTILITIES^%u^Utilities associated with the M Advanced Shell "PKG",222,22,1,0) 0.2 "PKG",222,22,1,"PAH",1,0) -0^3150810^17 +0^3150914^17 "PKG",222,22,1,"PAH",1,1,0) -^^37^37^3150810 +^^40^40^3150914 "PKG",222,22,1,"PAH",1,1,1,0) Changes to functionality include: "PKG",222,22,1,"PAH",1,1,2,0) @@ -466,6 +472,12 @@ by GETUTVAL^%ut with a heading of SUMMARY. A potential problem with setting up the %ut namespace in the local "PKG",222,22,1,"PAH",1,1,37,0) instance was addressed by Sam Habiel in the preinstall routine ZZUTPRE. +"PKG",222,22,1,"PAH",1,1,38,0) + +"PKG",222,22,1,"PAH",1,1,39,0) +Added information on the license to the information on the submission +"PKG",222,22,1,"PAH",1,1,40,0) +to OSEHRA. "QUES","XPF1",0) Y "QUES","XPF1","??") @@ -539,3956 +551,3930 @@ D XPZ2^XPDIQ "RTN") 12 "RTN","ZZUTPOST") -0^^B31989504 +0^^B31712373 "RTN","ZZUTPOST",1,0) -%utPOST ;VEN-SMH/JLI - post install for M-Unit Test software ;08/10/15 14:34 +%utPOST ;VEN-SMH/JLI - post install for M-Unit Test software ;09/14/15 12:39 "RTN","ZZUTPOST",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;;Build 11 "RTN","ZZUTPOST",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ZZUTPOST",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey + ; Original routine authored by Sam H. Habiel 07/2013-04/2014 "RTN","ZZUTPOST",5,0) - ; Original routine authored by Sam H. Habiel 07/2013?04/2014 -"RTN","ZZUTPOST",6,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","ZZUTPOST",6,0) + ; "RTN","ZZUTPOST",7,0) - ; -"RTN","ZZUTPOST",8,0) N X,I -"RTN","ZZUTPOST",9,0) +"RTN","ZZUTPOST",8,0) I +$SY=47 D R X:$G(DTIME,300) D MES^XPDUTL(" ") +"RTN","ZZUTPOST",9,0) + . S X(1)=" " "RTN","ZZUTPOST",10,0) - . S X(1)=" " -"RTN","ZZUTPOST",11,0) . S X(2)="In the next section, as it tries to copy the ut* routines" -"RTN","ZZUTPOST",12,0) +"RTN","ZZUTPOST",11,0) . S X(3)="to %ut* routines watch for text that indicates the following:" -"RTN","ZZUTPOST",13,0) +"RTN","ZZUTPOST",12,0) . S X(4)=" " -"RTN","ZZUTPOST",14,0) +"RTN","ZZUTPOST",13,0) . S X(5)="cp: cannot create regular file `/_ut.m': Permission denied" -"RTN","ZZUTPOST",15,0) +"RTN","ZZUTPOST",14,0) . S X(6)=" " -"RTN","ZZUTPOST",16,0) +"RTN","ZZUTPOST",15,0) . S X(7)="If this is seen, respond Yes at the prompt after the attempt:" -"RTN","ZZUTPOST",17,0) +"RTN","ZZUTPOST",16,0) . S X(8)=" Press ENTER to continue: " -"RTN","ZZUTPOST",18,0) +"RTN","ZZUTPOST",17,0) . F I=1:1:18 D MES^XPDUTL(" ") ; create a blank screen for text +"RTN","ZZUTPOST",18,0) + . D MES^XPDUTL(.X) "RTN","ZZUTPOST",19,0) - . D MES^XPDUTL(.X) + . Q "RTN","ZZUTPOST",20,0) - . Q -"RTN","ZZUTPOST",21,0) D RENAME -"RTN","ZZUTPOST",22,0) +"RTN","ZZUTPOST",21,0) I +$SY=47 D R X:$G(DTIME,300) I "Yy"[$E($G(X)) D GTMPROB -"RTN","ZZUTPOST",23,0) +"RTN","ZZUTPOST",22,0) . K X -"RTN","ZZUTPOST",24,0) +"RTN","ZZUTPOST",23,0) . S X(1)=" " -"RTN","ZZUTPOST",25,0) +"RTN","ZZUTPOST",24,0) . S X(2)=" Your entry on the next line may not echo" -"RTN","ZZUTPOST",26,0) +"RTN","ZZUTPOST",25,0) . S X(3)="If error text was seen enter Y (and RETURN): NO// " -"RTN","ZZUTPOST",27,0) +"RTN","ZZUTPOST",26,0) . D MES^XPDUTL(.X) -"RTN","ZZUTPOST",28,0) +"RTN","ZZUTPOST",27,0) . Q -"RTN","ZZUTPOST",29,0) +"RTN","ZZUTPOST",28,0) Q +"RTN","ZZUTPOST",29,0) + ; "RTN","ZZUTPOST",30,0) - ; -"RTN","ZZUTPOST",31,0) RENAME ; -"RTN","ZZUTPOST",32,0) +"RTN","ZZUTPOST",31,0) N %S,%D ; Source, destination -"RTN","ZZUTPOST",33,0) +"RTN","ZZUTPOST",32,0) S U="^" -"RTN","ZZUTPOST",34,0) +"RTN","ZZUTPOST",33,0) S %S="ut^ut1^utcover^utt1^utt2^utt3^utt4^utt5^utt6^uttcovr" -"RTN","ZZUTPOST",35,0) +"RTN","ZZUTPOST",34,0) S %D="%ut^%ut1^%utcover^%utt1^%utt2^%utt3^%utt4^%utt5^%utt6^%uttcovr" +"RTN","ZZUTPOST",35,0) + ; "RTN","ZZUTPOST",36,0) - ; -"RTN","ZZUTPOST",37,0) MOVE ; rename % routines -"RTN","ZZUTPOST",38,0) +"RTN","ZZUTPOST",37,0) N %,X,Y,M -"RTN","ZZUTPOST",39,0) +"RTN","ZZUTPOST",38,0) F %=1:1:$L(%D,"^") D D MES(M) I +$SY=47 D MES(" ") -"RTN","ZZUTPOST",40,0) +"RTN","ZZUTPOST",39,0) . S M="",X=$P(%S,U,%) ; from -"RTN","ZZUTPOST",41,0) +"RTN","ZZUTPOST",40,0) . S Y=$P(%D,U,%) ; to -"RTN","ZZUTPOST",42,0) +"RTN","ZZUTPOST",41,0) . Q:X="" -"RTN","ZZUTPOST",43,0) +"RTN","ZZUTPOST",42,0) . S M="Routine: "_$J(X,8) -"RTN","ZZUTPOST",44,0) +"RTN","ZZUTPOST",43,0) . Q:Y="" I $T(^@X)="" S M=M_" Missing" Q -"RTN","ZZUTPOST",45,0) +"RTN","ZZUTPOST",44,0) . S M=M_" Loaded, " -"RTN","ZZUTPOST",46,0) +"RTN","ZZUTPOST",45,0) . D COPY(X,Y) -"RTN","ZZUTPOST",47,0) +"RTN","ZZUTPOST",46,0) . S M=M_"Saved as "_$J(Y,8) +"RTN","ZZUTPOST",47,0) + ; "RTN","ZZUTPOST",48,0) - ; -"RTN","ZZUTPOST",49,0) QUIT ; END +"RTN","ZZUTPOST",49,0) + ; "RTN","ZZUTPOST",50,0) - ; -"RTN","ZZUTPOST",51,0) COPY(FROM,TO) ; -"RTN","ZZUTPOST",52,0) +"RTN","ZZUTPOST",51,0) N XVAL -"RTN","ZZUTPOST",53,0) +"RTN","ZZUTPOST",52,0) I +$SYSTEM=0 S XVAL="ZL @FROM ZS @TO" X XVAL QUIT -"RTN","ZZUTPOST",54,0) +"RTN","ZZUTPOST",53,0) I +$SYSTEM=47 DO QUIT -"RTN","ZZUTPOST",55,0) +"RTN","ZZUTPOST",54,0) . S FROM=$$PATH(FROM) -"RTN","ZZUTPOST",56,0) +"RTN","ZZUTPOST",55,0) . S TO=$$PATH(TO,"WRITE") -"RTN","ZZUTPOST",57,0) +"RTN","ZZUTPOST",56,0) . N CMD S CMD="cp "_FROM_" "_TO -"RTN","ZZUTPOST",58,0) +"RTN","ZZUTPOST",57,0) . O "cp":(shell="/bin/sh":command=CMD:WRITEONLY)::"PIPE" -"RTN","ZZUTPOST",59,0) +"RTN","ZZUTPOST",58,0) . U "cp" C "cp" -"RTN","ZZUTPOST",60,0) +"RTN","ZZUTPOST",59,0) QUIT +"RTN","ZZUTPOST",60,0) + ; "RTN","ZZUTPOST",61,0) - ; -"RTN","ZZUTPOST",62,0) PATH(ROUTINE,MODE) ; for GT.M return source file with path for a routine -"RTN","ZZUTPOST",63,0) +"RTN","ZZUTPOST",62,0) ;input: ROUTINE=Name of routine -"RTN","ZZUTPOST",64,0) +"RTN","ZZUTPOST",63,0) ; MODE="READ" or "WRITE" defaults to READ -"RTN","ZZUTPOST",65,0) +"RTN","ZZUTPOST",64,0) ;output: Full filename +"RTN","ZZUTPOST",65,0) + ; "RTN","ZZUTPOST",66,0) - ; -"RTN","ZZUTPOST",67,0) S MODE=$G(MODE,"READ") ;set MODE to default value -"RTN","ZZUTPOST",68,0) +"RTN","ZZUTPOST",67,0) N FILE S FILE=$TR(ROUTINE,"%","_")_".m" ;convert rtn name to filename -"RTN","ZZUTPOST",69,0) +"RTN","ZZUTPOST",68,0) N ZRO S ZRO=$ZRO +"RTN","ZZUTPOST",69,0) + ; "RTN","ZZUTPOST",70,0) - ; -"RTN","ZZUTPOST",71,0) ; Get source routine -"RTN","ZZUTPOST",72,0) +"RTN","ZZUTPOST",71,0) N %ZR -"RTN","ZZUTPOST",73,0) +"RTN","ZZUTPOST",72,0) I MODE="READ" D SILENT^%RSEL(ROUTINE,"SRC") Q %ZR(ROUTINE)_FILE +"RTN","ZZUTPOST",73,0) + ; "RTN","ZZUTPOST",74,0) - ; -"RTN","ZZUTPOST",75,0) ; We are writing. Parse directories and get 1st routine directory -"RTN","ZZUTPOST",76,0) +"RTN","ZZUTPOST",75,0) N DIRS -"RTN","ZZUTPOST",77,0) +"RTN","ZZUTPOST",76,0) D PARSEZRO(.DIRS,ZRO) -"RTN","ZZUTPOST",78,0) +"RTN","ZZUTPOST",77,0) N PATH S PATH=$$ZRO1ST(.DIRS) -"RTN","ZZUTPOST",79,0) +"RTN","ZZUTPOST",78,0) ; -"RTN","ZZUTPOST",80,0) +"RTN","ZZUTPOST",79,0) QUIT PATH_FILE ;end of PATH return directory and filename +"RTN","ZZUTPOST",80,0) + ; "RTN","ZZUTPOST",81,0) ; "RTN","ZZUTPOST",82,0) - ; -"RTN","ZZUTPOST",83,0) PARSEZRO(DIRS,ZRO) ; Parse $zroutines properly into an array -"RTN","ZZUTPOST",84,0) +"RTN","ZZUTPOST",83,0) N PIECE -"RTN","ZZUTPOST",85,0) +"RTN","ZZUTPOST",84,0) N I -"RTN","ZZUTPOST",86,0) +"RTN","ZZUTPOST",85,0) F I=1:1:$L(ZRO," ") S PIECE(I)=$P(ZRO," ",I) -"RTN","ZZUTPOST",87,0) +"RTN","ZZUTPOST",86,0) N CNT S CNT=1 -"RTN","ZZUTPOST",88,0) +"RTN","ZZUTPOST",87,0) F I=0:0 S I=$O(PIECE(I)) Q:'I D -"RTN","ZZUTPOST",89,0) +"RTN","ZZUTPOST",88,0) . S DIRS(CNT)=$G(DIRS(CNT))_PIECE(I) -"RTN","ZZUTPOST",90,0) +"RTN","ZZUTPOST",89,0) . I DIRS(CNT)["("&(DIRS(CNT)[")") S CNT=CNT+1 QUIT -"RTN","ZZUTPOST",91,0) +"RTN","ZZUTPOST",90,0) . I DIRS(CNT)'["("&(DIRS(CNT)'[")") S CNT=CNT+1 QUIT -"RTN","ZZUTPOST",92,0) +"RTN","ZZUTPOST",91,0) . S DIRS(CNT)=DIRS(CNT)_" " ; prep for next piece +"RTN","ZZUTPOST",92,0) + QUIT "RTN","ZZUTPOST",93,0) - QUIT + ; "RTN","ZZUTPOST",94,0) - ; -"RTN","ZZUTPOST",95,0) ZRO1ST(DIRS) ; $$ Get first routine directory -"RTN","ZZUTPOST",96,0) +"RTN","ZZUTPOST",95,0) N OUT ; $$ return -"RTN","ZZUTPOST",97,0) +"RTN","ZZUTPOST",96,0) N %1 S %1=DIRS(1) ; 1st directory -"RTN","ZZUTPOST",98,0) +"RTN","ZZUTPOST",97,0) ; Parse with (...) -"RTN","ZZUTPOST",99,0) +"RTN","ZZUTPOST",98,0) I %1["(" DO -"RTN","ZZUTPOST",100,0) +"RTN","ZZUTPOST",99,0) . S OUT=$P(%1,"(",2) -"RTN","ZZUTPOST",101,0) +"RTN","ZZUTPOST",100,0) . I OUT[" " S OUT=$P(OUT," ") -"RTN","ZZUTPOST",102,0) +"RTN","ZZUTPOST",101,0) . E S OUT=$P(OUT,")") -"RTN","ZZUTPOST",103,0) +"RTN","ZZUTPOST",102,0) ; no parens -"RTN","ZZUTPOST",104,0) +"RTN","ZZUTPOST",103,0) E S OUT=%1 +"RTN","ZZUTPOST",104,0) + ; "RTN","ZZUTPOST",105,0) - ; -"RTN","ZZUTPOST",106,0) ; Add trailing slash -"RTN","ZZUTPOST",107,0) +"RTN","ZZUTPOST",106,0) I $E(OUT,$L(OUT))'="/" S OUT=OUT_"/" -"RTN","ZZUTPOST",108,0) +"RTN","ZZUTPOST",107,0) QUIT OUT +"RTN","ZZUTPOST",108,0) + ; "RTN","ZZUTPOST",109,0) - ; -"RTN","ZZUTPOST",110,0) MES(T,B) ;Write message. -"RTN","ZZUTPOST",111,0) +"RTN","ZZUTPOST",110,0) S B=$G(B) -"RTN","ZZUTPOST",112,0) +"RTN","ZZUTPOST",111,0) I $L($T(BMES^XPDUTL)) D BMES^XPDUTL(T):B,MES^XPDUTL(T):'B Q -"RTN","ZZUTPOST",113,0) +"RTN","ZZUTPOST",112,0) W:B ! W !,T -"RTN","ZZUTPOST",114,0) +"RTN","ZZUTPOST",113,0) Q +"RTN","ZZUTPOST",114,0) + ; "RTN","ZZUTPOST",115,0) - ; -"RTN","ZZUTPOST",116,0) TEST ; @TEST - TESTING TESTING +"RTN","ZZUTPOST",116,0) + ; "RTN","ZZUTPOST",117,0) - ; -"RTN","ZZUTPOST",118,0) N ZR S ZR="o(p r) /var/abc(/var/abc/r/) /abc/def $gtm_dist/libgtmutl.so vista.so" +"RTN","ZZUTPOST",118,0) + N DIRS D PARSEZRO(.DIRS,ZR) "RTN","ZZUTPOST",119,0) - N DIRS D PARSEZRO(.DIRS,ZR) + N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) "RTN","ZZUTPOST",120,0) - N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) -"RTN","ZZUTPOST",121,0) I FIRSTDIR'="p" S $EC=",U1," +"RTN","ZZUTPOST",121,0) + ; "RTN","ZZUTPOST",122,0) - ; -"RTN","ZZUTPOST",123,0) N ZR S ZR="/var/abc(/var/abc/r/) o(p r) /abc/def $gtm_dist/libgtmutl.so vista.so" +"RTN","ZZUTPOST",123,0) + N DIRS D PARSEZRO(.DIRS,ZR) "RTN","ZZUTPOST",124,0) - N DIRS D PARSEZRO(.DIRS,ZR) + N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) "RTN","ZZUTPOST",125,0) - N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) -"RTN","ZZUTPOST",126,0) I FIRSTDIR'="/var/abc/r/" S $EC=",U1," +"RTN","ZZUTPOST",126,0) + ; "RTN","ZZUTPOST",127,0) - ; -"RTN","ZZUTPOST",128,0) N ZR S ZR="/abc/def /var/abc(/var/abc/r/) o(p r) $gtm_dist/libgtmutl.so vista.so" -"RTN","ZZUTPOST",129,0) +"RTN","ZZUTPOST",128,0) N DIRS D PARSEZRO(.DIRS,ZR) -"RTN","ZZUTPOST",130,0) +"RTN","ZZUTPOST",129,0) N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) -"RTN","ZZUTPOST",131,0) +"RTN","ZZUTPOST",130,0) I FIRSTDIR'="/abc/def" S $EC=",U1," +"RTN","ZZUTPOST",131,0) + ; "RTN","ZZUTPOST",132,0) - ; -"RTN","ZZUTPOST",133,0) WRITE "All tests have run successfully!",! -"RTN","ZZUTPOST",134,0) +"RTN","ZZUTPOST",133,0) QUIT -"RTN","ZZUTPOST",135,0) +"RTN","ZZUTPOST",134,0) ; -"RTN","ZZUTPOST",136,0) +"RTN","ZZUTPOST",135,0) GTMPROB ; come here in case of error trying to run unit tests - checks whether renaming worked -"RTN","ZZUTPOST",137,0) +"RTN","ZZUTPOST",136,0) N X -"RTN","ZZUTPOST",138,0) +"RTN","ZZUTPOST",137,0) S X(1)=" " -"RTN","ZZUTPOST",139,0) +"RTN","ZZUTPOST",138,0) S X(2)="*** An error occurred during renaming of routines to %ut*." -"RTN","ZZUTPOST",140,0) +"RTN","ZZUTPOST",139,0) S X(3)="*** The renaming has been seen to fail on one type of Linux system." -"RTN","ZZUTPOST",141,0) +"RTN","ZZUTPOST",140,0) S X(4)="*** In this case, at the Linux command line copy each ut*.m routine" -"RTN","ZZUTPOST",142,0) +"RTN","ZZUTPOST",141,0) S X(5)="*** (ut.m, ut1.m, utt1.m, utt2.m, utt3.m, utt4.m, utt5.m, utt6.m, and " -"RTN","ZZUTPOST",143,0) +"RTN","ZZUTPOST",142,0) S X(6)="*** uttcovr.m) to _ut*.m (e.g., 'cp ut.m _ut.m', 'cp ut1.m _ut1.m'," -"RTN","ZZUTPOST",144,0) +"RTN","ZZUTPOST",143,0) S X(7)="*** 'cp utt1.m _utt1.m', etc., to 'cp uttcovr.m _uttcovr.m'). Then in GT.M" -"RTN","ZZUTPOST",145,0) +"RTN","ZZUTPOST",144,0) S X(8)="*** use the command 'ZLINK %ut', then 'ZLINK %ut1', etc., these may" -"RTN","ZZUTPOST",146,0) +"RTN","ZZUTPOST",145,0) S X(9)="*** indicate an undefined local variable error, but continue doing it." -"RTN","ZZUTPOST",147,0) +"RTN","ZZUTPOST",146,0) S X(10)="*** When complete, use the M command 'DO ^%utt1' to run the unit tests on" -"RTN","ZZUTPOST",148,0) +"RTN","ZZUTPOST",147,0) S X(11)="*** the %ut and %ut1 routines to confirm they are working" -"RTN","ZZUTPOST",149,0) +"RTN","ZZUTPOST",148,0) S X(12)=" " -"RTN","ZZUTPOST",150,0) +"RTN","ZZUTPOST",149,0) S X(13)=" Press Enter to continue: " -"RTN","ZZUTPOST",151,0) +"RTN","ZZUTPOST",150,0) D MES^XPDUTL(.X) -"RTN","ZZUTPOST",152,0) +"RTN","ZZUTPOST",151,0) R X:$G(DTIME,300) -"RTN","ZZUTPOST",153,0) +"RTN","ZZUTPOST",152,0) Q "RTN","ZZUTPRE") -0^^B6774005 +0^^B6681444 "RTN","ZZUTPRE",1,0) -%utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;08/10/15 14:35 +%utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;09/14/15 12:39 "RTN","ZZUTPRE",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;;Build 11 "RTN","ZZUTPRE",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ZZUTPRE",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","ZZUTPRE",5,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 +"RTN","ZZUTPRE",5,0) + ; "RTN","ZZUTPRE",6,0) ; "RTN","ZZUTPRE",7,0) - ; -"RTN","ZZUTPRE",8,0) ; The following is used to create, if it does not exist, the MASH UTILITIES -"RTN","ZZUTPRE",9,0) +"RTN","ZZUTPRE",8,0) ; package, and to assign the %u namespace to this package. This special -"RTN","ZZUTPRE",10,0) +"RTN","ZZUTPRE",9,0) ; processing is necessary, since the input transform currently will not accept a -"RTN","ZZUTPRE",11,0) +"RTN","ZZUTPRE",10,0) ; % or lower case character in the namespace. -"RTN","ZZUTPRE",12,0) +"RTN","ZZUTPRE",11,0) I '$D(^DIC(9.4,"B","MASH UTILITIES")) N DIC,X S DIC="^DIC(9.4,",DIC(0)="",X="MASH UTILITIES",DIC("DR")="1////%u;2///Utilities associated with the M Advanced Shell" D FILE^DICN -"RTN","ZZUTPRE",13,0) +"RTN","ZZUTPRE",12,0) ; and if necessary, as in CACHE, map %ut routine and namespace in the current account. -"RTN","ZZUTPRE",14,0) +"RTN","ZZUTPRE",13,0) I +$SY=0 D CACHEMAP ; This routine is CACHE specific -"RTN","ZZUTPRE",15,0) +"RTN","ZZUTPRE",14,0) Q -"RTN","ZZUTPRE",16,0) +"RTN","ZZUTPRE",15,0) ; The following code was provided by Sam Habiel to map % -"RTN","ZZUTPRE",17,0) +"RTN","ZZUTPRE",16,0) CACHEMAP ; Map %ut* Globals and Routines away from %SYS in Cache -"RTN","ZZUTPRE",18,0) +"RTN","ZZUTPRE",17,0) ; Get current namespace -"RTN","ZZUTPRE",19,0) +"RTN","ZZUTPRE",18,0) N NMSP -"RTN","ZZUTPRE",20,0) +"RTN","ZZUTPRE",19,0) I $P($P($ZV,") ",2),"(")<2012 S NMSP=$ZU(5) -"RTN","ZZUTPRE",21,0) +"RTN","ZZUTPRE",20,0) I $P($P($ZV,") ",2),"(")>2011 S NMSP=$NAMESPACE +"RTN","ZZUTPRE",21,0) + ; "RTN","ZZUTPRE",22,0) - ; -"RTN","ZZUTPRE",23,0) N $ET S $ET="ZN NMSP D ^%ZTER S $EC=""""" +"RTN","ZZUTPRE",23,0) + ; "RTN","ZZUTPRE",24,0) - ; -"RTN","ZZUTPRE",25,0) ZN "%SYS" ; Go to SYS +"RTN","ZZUTPRE",25,0) + ; "RTN","ZZUTPRE",26,0) - ; -"RTN","ZZUTPRE",27,0) ; Props -"RTN","ZZUTPRE",28,0) +"RTN","ZZUTPRE",27,0) N % S %=##Class(Config.Namespaces).Get(NMSP,.PROP) ; Get all namespace properties +"RTN","ZZUTPRE",28,0) + I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT "RTN","ZZUTPRE",29,0) - I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT + ; "RTN","ZZUTPRE",30,0) - ; -"RTN","ZZUTPRE",31,0) N DBG S DBG=PROP("Globals") ; get the database globals location -"RTN","ZZUTPRE",32,0) +"RTN","ZZUTPRE",31,0) N DBR S DBR=PROP("Routines") ; get the database routines location +"RTN","ZZUTPRE",32,0) + ; "RTN","ZZUTPRE",33,0) - ; -"RTN","ZZUTPRE",34,0) ; Map %ut globals away from %SYS -"RTN","ZZUTPRE",35,0) +"RTN","ZZUTPRE",34,0) N % S %=##class(Config.Configuration).GetGlobalMapping(NMSP,"%ut*","",DBG,DBG) -"RTN","ZZUTPRE",36,0) +"RTN","ZZUTPRE",35,0) I '% S %=##class(Config.Configuration).AddGlobalMapping(NMSP,"%ut*","",DBG,DBG) +"RTN","ZZUTPRE",36,0) + I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT "RTN","ZZUTPRE",37,0) - I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT -"RTN","ZZUTPRE",38,0) ; -"RTN","ZZUTPRE",39,0) +"RTN","ZZUTPRE",38,0) ; Map %ut routines away from %SYS -"RTN","ZZUTPRE",40,0) +"RTN","ZZUTPRE",39,0) N PROPRTN S PROPRTN("Database")=DBR -"RTN","ZZUTPRE",41,0) +"RTN","ZZUTPRE",40,0) N % S %=##Class(Config.MapRoutines).Get(NMSP,"%ut*",.PROPRTN) -"RTN","ZZUTPRE",42,0) +"RTN","ZZUTPRE",41,0) N PROPRTN S PROPRTN("Database")=DBR ; Cache seems to like deleting this -"RTN","ZZUTPRE",43,0) +"RTN","ZZUTPRE",42,0) I '% S %=##Class(Config.MapRoutines).Create(NMSP,"%ut*",.PROPRTN) -"RTN","ZZUTPRE",44,0) +"RTN","ZZUTPRE",43,0) I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT -"RTN","ZZUTPRE",45,0) +"RTN","ZZUTPRE",44,0) ZN NMSP ; Go back -"RTN","ZZUTPRE",46,0) +"RTN","ZZUTPRE",45,0) QUIT "RTN","ut") -0^1^B196411208 +0^1^B196383387 "RTN","ut",1,0) -%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;08/10/15 14:31 +%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;09/14/15 09:38 "RTN","ut",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;;Build 11 "RTN","ut",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ut",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","ut",5,0) ; Original routine authored by Joel L. Ivey as XTMUNIT while working for U.S. Department of Veterans Affairs 2003-2012 -"RTN","ut",6,0) +"RTN","ut",5,0) ; Includes addition of %utVERB and %utBREAK arguments and code related to them as well as other substantial additions authored by Sam Habiel 07/2013?04/2014 +"RTN","ut",6,0) + ; "RTN","ut",7,0) - ; -"RTN","ut",8,0) ; This routine and its companion, %ut1, provide the basic functionality for -"RTN","ut",9,0) +"RTN","ut",8,0) ; running unit tests on parts of M programs either at the command line level -"RTN","ut",10,0) +"RTN","ut",9,0) ; or via the M-Unit GUI application for windows operating systems. +"RTN","ut",10,0) + ; "RTN","ut",11,0) - ; -"RTN","ut",12,0) ; Original by Dr. Joel Ivey -"RTN","ut",13,0) +"RTN","ut",12,0) ; Contributions by Dr. Sam Habiel -"RTN","ut",14,0) +"RTN","ut",13,0) ; comments moved to %ut1 due to space requirements +"RTN","ut",14,0) + ; "RTN","ut",15,0) - ; -"RTN","ut",16,0) D ^%utt6 ; runs unit tests on all of it +"RTN","ut",16,0) + Q "RTN","ut",17,0) - Q + ; "RTN","ut",18,0) - ; -"RTN","ut",19,0) EN(%utRNAM,%utVERB,%utBREAK) ; .SR Entry point with primary test routine name, optional 1 for verbose output -"RTN","ut",20,0) +"RTN","ut",19,0) N %utLIST,%utROU,%ut -"RTN","ut",21,0) +"RTN","ut",20,0) I '+$G(%utVERB) S %utVERB=0 -"RTN","ut",22,0) +"RTN","ut",21,0) S %utLIST=1,%utROU(%utLIST)=%utRNAM +"RTN","ut",22,0) + K ^TMP("%ut",$J,"UTVALS") "RTN","ut",23,0) - K ^TMP("%ut",$J,"UTVALS") + D SETUT "RTN","ut",24,0) - D SETUT + D EN1(.%utROU,%utLIST) "RTN","ut",25,0) - D EN1(.%utROU,%utLIST) + Q "RTN","ut",26,0) - Q + ; "RTN","ut",27,0) - ; -"RTN","ut",28,0) SETUT ; -"RTN","ut",29,0) +"RTN","ut",28,0) ; VEN/SMH 26JUL2013 -"RTN","ut",30,0) +"RTN","ut",29,0) I '($D(IO)#2) S IO=$P -"RTN","ut",31,0) +"RTN","ut",30,0) S U="^" -"RTN","ut",32,0) +"RTN","ut",31,0) ; VEN/SMH 26JUL2013 END +"RTN","ut",32,0) + ; "RTN","ut",33,0) - ; + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",34,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",35,0) S %ut("IO")=IO -"RTN","ut",36,0) +"RTN","ut",35,0) S %ut=1 ; set to identify unit test being run check with $$ISUTEST^%ut() +"RTN","ut",36,0) + ; "RTN","ut",37,0) - ; -"RTN","ut",38,0) ; ZEXCEPT: %utBREAK -"RTN","ut",39,0) +"RTN","ut",38,0) I $G(%utBREAK) S %ut("BREAK")=1 +"RTN","ut",39,0) + Q "RTN","ut",40,0) - Q + ; "RTN","ut",41,0) - ; -"RTN","ut",42,0) EN1(%utROU,%utLIST) ; -"RTN","ut",43,0) +"RTN","ut",42,0) ; VEN/SMH 26JUL2013 - This block is refactored to fix problems with -"RTN","ut",44,0) +"RTN","ut",43,0) ; SETUP and TEARDOWN not happening at the right time -"RTN","ut",45,0) +"RTN","ut",44,0) N %utERRL,%utK,%utI,%utJ,%utSTRT -"RTN","ut",46,0) +"RTN","ut",45,0) ; ZEXCEPT: %utVERB -- ARGUMENT TO EN -"RTN","ut",47,0) +"RTN","ut",46,0) ; ZEXCEPT: %utGUI -- CONDITIONALLY DEFINED BY GUINEXT -"RTN","ut",48,0) +"RTN","ut",47,0) ; ZEXCEPT: %ut -- NEWED IN EN +"RTN","ut",48,0) + ; "RTN","ut",49,0) - ; -"RTN","ut",50,0) ; Structure map for %ut -"RTN","ut",51,0) +"RTN","ut",50,0) ; -- CURR = Counter for routine number. Used as sub in %utROU -"RTN","ut",52,0) +"RTN","ut",51,0) ; -- ECNT = Entry point count in loop (cf. NERT); VEN/SMH - Needed? -"RTN","ut",53,0) +"RTN","ut",52,0) ; -- FAIL = Number of failures -"RTN","ut",54,0) +"RTN","ut",53,0) ; -- CHK = Number of checks ran (TF/EQ/FAIL) -"RTN","ut",55,0) +"RTN","ut",54,0) ; -- NENT = Number of entry points ran -"RTN","ut",56,0) +"RTN","ut",55,0) ; -- ERRN = Number of errors -"RTN","ut",57,0) +"RTN","ut",56,0) S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 +"RTN","ut",57,0) + ; "RTN","ut",58,0) - ; -"RTN","ut",59,0) ; -- GET LIST OF ROUTINES -- -"RTN","ut",60,0) +"RTN","ut",59,0) ; first get any tree of routines from this one -"RTN","ut",61,0) +"RTN","ut",60,0) D GETTREE^%ut1(.%utROU,.%utLIST) +"RTN","ut",61,0) + ; "RTN","ut",62,0) - ; -"RTN","ut",63,0) ; Now process each routine that has been referenced -"RTN","ut",64,0) +"RTN","ut",63,0) N CURRROU -"RTN","ut",65,0) +"RTN","ut",64,0) S %ut("CURR")=0 -"RTN","ut",66,0) +"RTN","ut",65,0) F S %ut("CURR")=%ut("CURR")+1 Q:'$D(%utROU(%ut("CURR"))) S CURRROU=%utROU(%ut("CURR")) D I $T(@("SHUTDOWN^"_CURRROU))'="" D @("SHUTDOWN^"_CURRROU) -"RTN","ut",67,0) +"RTN","ut",66,0) . ; 141018 - add ability to run STARTUP and SHUTDOWN in each routine JLI -"RTN","ut",68,0) +"RTN","ut",67,0) . I $T(@("STARTUP^"_CURRROU))'="" D @("STARTUP^"_CURRROU) ; 141018 -"RTN","ut",69,0) +"RTN","ut",68,0) . N %utETRY ; Test list to run +"RTN","ut",69,0) + . ; "RTN","ut",70,0) - . ; -"RTN","ut",71,0) . ; Collect Test list. -"RTN","ut",72,0) +"RTN","ut",71,0) . D CHEKTEST^%ut1(%utROU(%ut("CURR")),.%ut,.%utETRY) +"RTN","ut",72,0) + . ; "RTN","ut",73,0) - . ; -"RTN","ut",74,0) . ; if a SETUP entry point exists, save it off in %ut -"RTN","ut",75,0) +"RTN","ut",74,0) . S %ut("SETUP")="" ; 141018 need to clear any previous values JLI -"RTN","ut",76,0) +"RTN","ut",75,0) . N %utSETUP S %utSETUP="SETUP^"_%utROU(%ut("CURR")) -"RTN","ut",77,0) +"RTN","ut",76,0) . S %ut("LINE")=$T(@%utSETUP) I %ut("LINE")'="" S %ut("SETUP")=%utSETUP -"RTN","ut",78,0) +"RTN","ut",77,0) . K %utSETUP ; we're done! +"RTN","ut",78,0) + . ; "RTN","ut",79,0) - . ; -"RTN","ut",80,0) . ; if a TEARDOWN entry point exists, ditto -"RTN","ut",81,0) +"RTN","ut",80,0) . S %ut("TEARDOWN")="" ; 141018 need to clear any previous values JLI -"RTN","ut",82,0) +"RTN","ut",81,0) . N %utTEARDOWN S %utTEARDOWN="TEARDOWN^"_%utROU(%ut("CURR")) -"RTN","ut",83,0) +"RTN","ut",82,0) . S %ut("LINE")=$T(@%utTEARDOWN) I %ut("LINE")'="" S %ut("TEARDOWN")=%utTEARDOWN -"RTN","ut",84,0) +"RTN","ut",83,0) . K %utTEARDOWN ; done here. +"RTN","ut",84,0) + . ; "RTN","ut",85,0) - . ; -"RTN","ut",86,0) . ; VEN/SMH 26JUL2013 - this block changed to correct running of setup and teardown -"RTN","ut",87,0) +"RTN","ut",86,0) . ; run each of the specified entry points -"RTN","ut",88,0) +"RTN","ut",87,0) . ; -"RTN","ut",89,0) +"RTN","ut",88,0) . ; == THIS FOR/DO BLOCK IS THE CENTRAL TEST RUNNER == -"RTN","ut",90,0) +"RTN","ut",89,0) . S %utI=0 -"RTN","ut",91,0) +"RTN","ut",90,0) . F S %utI=$O(%utETRY(%utI)) Q:%utI'>0 S %ut("ENUM")=%ut("ERRN")+%ut("FAIL") D -"RTN","ut",92,0) +"RTN","ut",91,0) . . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",92,0) + . . ; "RTN","ut",93,0) - . . ; -"RTN","ut",94,0) . . ; Run Set-up Code (only if present) -"RTN","ut",95,0) +"RTN","ut",94,0) . . S %ut("ENT")=$G(%ut("SETUP")) ; Current entry -"RTN","ut",96,0) +"RTN","ut",95,0) . . S %ut("NAME")="Set-up Code" +"RTN","ut",96,0) + . . D:%ut("ENT")]"" @%ut("ENT") "RTN","ut",97,0) - . . D:%ut("ENT")]"" @%ut("ENT") + . . ; "RTN","ut",98,0) - . . ; -"RTN","ut",99,0) . . ; Run actual test -"RTN","ut",100,0) +"RTN","ut",99,0) . . S %ut("ECNT")=%ut("ECNT")+1 -"RTN","ut",101,0) +"RTN","ut",100,0) . . S %ut("NAME")=%utETRY(%utI,"NAME") -"RTN","ut",102,0) +"RTN","ut",101,0) . . S %ut("ENT")=%utETRY(%utI)_"^"_%utROU(%ut("CURR")) -"RTN","ut",103,0) +"RTN","ut",102,0) . . I %utVERB,'$D(%utGUI) D VERBOSE1(.%utETRY,%utI) ; Say what we executed. -"RTN","ut",104,0) +"RTN","ut",103,0) . . D @%ut("ENT") +"RTN","ut",104,0) + . . ; "RTN","ut",105,0) - . . ; -"RTN","ut",106,0) . . ; Run Teardown Code (only if present) -"RTN","ut",107,0) +"RTN","ut",106,0) . . S %ut("ENT")=$G(%ut("TEARDOWN")) -"RTN","ut",108,0) +"RTN","ut",107,0) . . S %ut("NAME")="Teardown Code" -"RTN","ut",109,0) +"RTN","ut",108,0) . . D:%ut("ENT")]"" @%ut("ENT") -"RTN","ut",110,0) +"RTN","ut",109,0) . . ; -"RTN","ut",111,0) +"RTN","ut",110,0) . . ; ENUM = Number of errors + failures -"RTN","ut",112,0) +"RTN","ut",111,0) . . ; Only print out the success message [OK] If our error number remains -"RTN","ut",113,0) +"RTN","ut",112,0) . . ; the same as when we started the loop. -"RTN","ut",114,0) +"RTN","ut",113,0) . . I %utVERB,'$D(%utGUI) D -"RTN","ut",115,0) +"RTN","ut",114,0) . . . I %ut("ENUM")=(%ut("ERRN")+%ut("FAIL")) D VERBOSE(.%utETRY,%utI,1) I 1 -"RTN","ut",116,0) +"RTN","ut",115,0) . . . E D VERBOSE(.%utETRY,%utI,0) -"RTN","ut",117,0) +"RTN","ut",116,0) . . . Q -"RTN","ut",118,0) +"RTN","ut",117,0) . . Q -"RTN","ut",119,0) +"RTN","ut",118,0) . ; keep a %utCNT of number of entry points executed across all routines -"RTN","ut",120,0) +"RTN","ut",119,0) . S %ut("NENT")=%ut("NENT")+%ut("ENTN") +"RTN","ut",120,0) + . Q "RTN","ut",121,0) - . Q + ; "RTN","ut",122,0) - ; -"RTN","ut",123,0) ; -- SHUTDOWN -- +"RTN","ut",123,0) + D SETIO^%ut1 "RTN","ut",124,0) - D SETIO^%ut1 -"RTN","ut",125,0) W !!,"Ran ",%utLIST," Routine",$S(%utLIST>1:"s",1:""),", ",%ut("NENT")," Entry Tag",$S(%ut("NENT")>1:"s",1:"") -"RTN","ut",126,0) +"RTN","ut",125,0) W !,"Checked ",%ut("CHK")," test",$S(%ut("CHK")>1:"s",1:""),", with ",%ut("FAIL")," failure",$S(%ut("FAIL")'=1:"s",1:"")," and encountered ",%ut("ERRN")," error",$S(%ut("ERRN")'=1:"s",1:""),"." -"RTN","ut",127,0) +"RTN","ut",126,0) S ^TMP("%ut",$J,"UTVALS")=%utLIST_U_%ut("NENT")_U_%ut("CHK")_U_%ut("FAIL")_U_%ut("ERRN") ; JLI 150621 so programs running several sets of unit tests can generate totals +"RTN","ut",127,0) + D RESETIO^%ut1 "RTN","ut",128,0) - D RESETIO^%ut1 + Q "RTN","ut",129,0) - Q -"RTN","ut",130,0) ; -- end EN1 -"RTN","ut",131,0) +"RTN","ut",130,0) VERBOSE(%utETRY,%utI,SUCCESS) ; Say whether we succeeded or failed. +"RTN","ut",131,0) + ; ZEXCEPT: %ut - NEWED IN EN "RTN","ut",132,0) - ; ZEXCEPT: %ut - NEWED IN EN + D SETIO^%ut1 "RTN","ut",133,0) - D SETIO^%ut1 -"RTN","ut",134,0) N I F I=$X+3:1:73 W "-" -"RTN","ut",135,0) +"RTN","ut",134,0) W ?73 -"RTN","ut",136,0) +"RTN","ut",135,0) I $G(SUCCESS) W "[OK]" -"RTN","ut",137,0) +"RTN","ut",136,0) E W "[FAIL]" +"RTN","ut",137,0) + D RESETIO^%ut1 "RTN","ut",138,0) - D RESETIO^%ut1 + Q "RTN","ut",139,0) - Q + ; "RTN","ut",140,0) - ; -"RTN","ut",141,0) VERBOSE1(%utETRY,%utI) ; Print out the entry point info +"RTN","ut",141,0) + ; ZEXCEPT: %ut - NEWED IN EN "RTN","ut",142,0) - ; ZEXCEPT: %ut - NEWED IN EN + D SETIO^%ut1 "RTN","ut",143,0) - D SETIO^%ut1 -"RTN","ut",144,0) W !,%utETRY(%utI) I $G(%utETRY(%utI,"NAME"))'="" W " - ",%utETRY(%utI,"NAME") +"RTN","ut",144,0) + D RESETIO^%ut1 "RTN","ut",145,0) - D RESETIO^%ut1 + Q "RTN","ut",146,0) - Q + ; "RTN","ut",147,0) - ; -"RTN","ut",148,0) CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values -"RTN","ut",149,0) +"RTN","ut",148,0) I '$D(XTSTVAL) D NVLDARG^%ut1("CHKTF") Q -"RTN","ut",150,0) +"RTN","ut",149,0) D CHKTF^%ut1(XTSTVAL,$G(XTERMSG)) +"RTN","ut",150,0) + Q "RTN","ut",151,0) - Q + ; "RTN","ut",152,0) - ; -"RTN","ut",153,0) CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut",154,0) +"RTN","ut",153,0) I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG^%ut1("CHKEQ") Q -"RTN","ut",155,0) +"RTN","ut",154,0) D CHKEQ^%ut1(XTEXPECT,XTACTUAL,$G(XTERMSG)) +"RTN","ut",155,0) + Q "RTN","ut",156,0) - Q + ; "RTN","ut",157,0) - ; -"RTN","ut",158,0) FAIL(XTERMSG) ; Entry point for generating a failure message -"RTN","ut",159,0) +"RTN","ut",158,0) D FAIL^%ut1($G(XTERMSG)) +"RTN","ut",159,0) + Q "RTN","ut",160,0) - Q + ; "RTN","ut",161,0) - ; -"RTN","ut",162,0) SUCCEED ; Entry point for forcing a success (Thx David Whitten) -"RTN","ut",163,0) +"RTN","ut",162,0) ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut",164,0) +"RTN","ut",163,0) ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut",165,0) +"RTN","ut",164,0) ; Switch IO and write out the dot for activity -"RTN","ut",166,0) +"RTN","ut",165,0) I '$D(%utGUI) D -"RTN","ut",167,0) +"RTN","ut",166,0) . D SETIO^%ut1 -"RTN","ut",168,0) +"RTN","ut",167,0) . W "." -"RTN","ut",169,0) +"RTN","ut",168,0) . D RESETIO^%ut1 +"RTN","ut",169,0) + ; "RTN","ut",170,0) - ; -"RTN","ut",171,0) ; Increment test counter +"RTN","ut",171,0) + S %ut("CHK")=%ut("CHK")+1 "RTN","ut",172,0) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut",173,0) QUIT +"RTN","ut",173,0) + ; "RTN","ut",174,0) - ; -"RTN","ut",175,0) CHKLEAKS(%utCODE,%utLOC,%utINPT) ; functionality to check for variable leaks on executing a section of code -"RTN","ut",176,0) +"RTN","ut",175,0) ; %utCODE - A string that specifies the code that is to be XECUTED and checked for leaks. -"RTN","ut",177,0) +"RTN","ut",176,0) ; this should be a complete piece of code (e.g., "S X=$$NOW^XLFDT()" or "D EN^%ut(""ROUNAME"")") -"RTN","ut",178,0) +"RTN","ut",177,0) ; %utLOC - A string that is used to indicate the code tested for variable leaks -"RTN","ut",179,0) +"RTN","ut",178,0) ; %utINPT - An optional variable which may be passed by reference. This may -"RTN","ut",180,0) +"RTN","ut",179,0) ; be used to pass any variable values, etc. into the code to be -"RTN","ut",181,0) +"RTN","ut",180,0) ; XECUTED. In this case, set the subscript to the variable name and the -"RTN","ut",182,0) +"RTN","ut",181,0) ; value of the subscripted variable to the desired value of the subscript. -"RTN","ut",183,0) +"RTN","ut",182,0) ; e.g., (using NAME as my current namespace) -"RTN","ut",184,0) +"RTN","ut",183,0) ; S CODE="S %utINPT=$$ENTRY^ROUTINE(ZZVALUE1,ZZVALUE2)" -"RTN","ut",185,0) +"RTN","ut",184,0) ; S NAMELOC="ENTRY^ROUTINE leak test" (or simply "ENTRY^ROUTINE") -"RTN","ut",186,0) +"RTN","ut",185,0) ; S NAMEINPT("ZZVALUE1")=ZZVALUE1 -"RTN","ut",187,0) +"RTN","ut",186,0) ; S NAMEINPT("ZZVALUE2")=ZZVALUE2 -"RTN","ut",188,0) +"RTN","ut",187,0) ; D CHKLEAKS^%ut(CODE,NAMELOC,.NAMEINPT) +"RTN","ut",188,0) + ; "RTN","ut",189,0) - ; -"RTN","ut",190,0) ; If part of a unit test, any leaked variables in ENTRY^ROUTINE which result -"RTN","ut",191,0) +"RTN","ut",190,0) ; from running the code with the variables indicated will be shown as FAILUREs. +"RTN","ut",191,0) + ; "RTN","ut",192,0) - ; -"RTN","ut",193,0) ; If called outside of a unit test, any leaked variables will be printed to the -"RTN","ut",194,0) +"RTN","ut",193,0) ; current device. +"RTN","ut",194,0) + ; "RTN","ut",195,0) - ; -"RTN","ut",196,0) N (%utCODE,%utLOC,%utINPT,DUZ,IO,U,%utERRL,%ut,%utGUI,%utERR,%utI,%utJ,%utK,%utLIST,%utROU,%utSTRT,XTGUISEP) -"RTN","ut",197,0) +"RTN","ut",196,0) ; ZEXCEPT: %ut - part of exclusive NEW TESTS FOR EXISTENCE ONLY -"RTN","ut",198,0) +"RTN","ut",197,0) ; ZEXCEPT: %utVAR - handled by exclusive NEW +"RTN","ut",198,0) + ; "RTN","ut",199,0) - ; -"RTN","ut",200,0) ; ACTIVATE ANY VARIABLES PASSED AS SUBSCRIPTS TO %utINPT TO THEIR VALUES -"RTN","ut",201,0) +"RTN","ut",200,0) S %utVAR=" " F S %utVAR=$O(%utINPT(%utVAR)) Q:%utVAR="" S (@%utVAR)=%utINPT(%utVAR) -"RTN","ut",202,0) +"RTN","ut",201,0) X %utCODE -"RTN","ut",203,0) +"RTN","ut",202,0) N ZZUTVAR S ZZUTVAR="%" -"RTN","ut",204,0) +"RTN","ut",203,0) I $G(%ut)=1 D -"RTN","ut",205,0) +"RTN","ut",204,0) . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) -"RTN","ut",206,0) +"RTN","ut",205,0) . F S ZZUTVAR=$O(@ZZUTVAR) Q:ZZUTVAR="" I $E(ZZUTVAR,1,3)'="%ut",'$D(%utINPT(ZZUTVAR)),",DUZ,IO,U,DTIME,ZZUTVAR,DT,%ut,XTGUISEP,"'[(","_ZZUTVAR_",") D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) +"RTN","ut",206,0) + . Q "RTN","ut",207,0) - . Q -"RTN","ut",208,0) I '($G(%ut)=1) D -"RTN","ut",209,0) +"RTN","ut",208,0) . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR -"RTN","ut",210,0) +"RTN","ut",209,0) . F S ZZUTVAR=$O(@ZZUTVAR) Q:ZZUTVAR="" I $E(ZZUTVAR,1,3)'="%ut",'$D(%utINPT(ZZUTVAR)),",DUZ,IO,U,DTIME,ZZUTVAR,DT,%ut,XTGUISEP,"'[(","_ZZUTVAR_",") W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR +"RTN","ut",210,0) + . Q "RTN","ut",211,0) - . Q + Q "RTN","ut",212,0) - Q + ; "RTN","ut",213,0) - ; -"RTN","ut",214,0) ERROR ; record errors -"RTN","ut",215,0) +"RTN","ut",214,0) ; ZEXCEPT: %utERRL,%utGUI,%utERR -CREATED IN SETUP, KILLED IN END +"RTN","ut",215,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",216,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",217,0) ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut",218,0) +"RTN","ut",217,0) S %ut("CHK")=%ut("CHK")+1 -"RTN","ut",219,0) +"RTN","ut",218,0) I '$D(%utGUI) D ERROR1 -"RTN","ut",220,0) +"RTN","ut",219,0) I $D(%utGUI) D -"RTN","ut",221,0) +"RTN","ut",220,0) . S %ut("CNT")=%ut("CNT")+1 -"RTN","ut",222,0) +"RTN","ut",221,0) . S %utERR=%utERR+1 -"RTN","ut",223,0) +"RTN","ut",222,0) . S @%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"ERROR"_XTGUISEP_$S(+$SY=47:$ZS,1:$ZE) +"RTN","ut",223,0) + . Q "RTN","ut",224,0) - . Q -"RTN","ut",225,0) S @($S(+$SY=47:"$ZS",1:"$ZE")_"="_""""""),$EC="" +"RTN","ut",225,0) + Q "RTN","ut",226,0) - Q + ; "RTN","ut",227,0) - ; -"RTN","ut",228,0) ERROR1 ; -"RTN","ut",229,0) +"RTN","ut",228,0) I $G(%ut("BREAK")) BREAK ; if we are asked to break upon error, please do so! -"RTN","ut",230,0) +"RTN","ut",229,0) ; ZEXCEPT: %utERRL -CREATED IN SETUP, KILLED IN END +"RTN","ut",230,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",231,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",232,0) D SETIO^%ut1 -"RTN","ut",233,0) +"RTN","ut",232,0) W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - Error: " W $S(+$SY=47:$ZS,1:$ZE),! D -"RTN","ut",234,0) +"RTN","ut",233,0) . S %ut("ERRN")=%ut("ERRN")+1,%utERRL(%ut("ERRN"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=$S(+$SY=47:$ZS,1:$ZE),%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut",235,0) +"RTN","ut",234,0) . Q -"RTN","ut",236,0) +"RTN","ut",235,0) D RESETIO^%ut1 +"RTN","ut",236,0) + Q "RTN","ut",237,0) - Q + ; "RTN","ut",238,0) - ; -"RTN","ut",239,0) ISUTEST() ; .SUPPORTED API TO DETERMINE IF CURRENTLY IN UNIT TEST -"RTN","ut",240,0) +"RTN","ut",239,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",241,0) +"RTN","ut",240,0) Q $G(%ut)=1 +"RTN","ut",241,0) + ; "RTN","ut",242,0) - ; -"RTN","ut",243,0) PICKSET ; .OPT Interactive selection of MUnit Test Group -"RTN","ut",244,0) +"RTN","ut",243,0) N DIC,Y,%utROU,%utLIST,DIR S DIC=17.9001,DIC(0)="AEQM" D ^DIC Q:Y'>0 W ! D GETSET(+Y,.%utROU,.%utLIST) N DIC,Y,%ut D SETUT D EN1(.%utROU,%utLIST) S DIR(0)="EA",DIR("A")="Enter RETURN to continue:" D ^DIR K DIR +"RTN","ut",244,0) + Q "RTN","ut",245,0) - Q + ; "RTN","ut",246,0) - ; -"RTN","ut",247,0) RUNSET(SETNAME,VERBOSE) ; .SR Run with Specified Selection of MUnit Test Group -"RTN","ut",248,0) +"RTN","ut",247,0) N Y,%utROU,%utLIST,%utVERB -"RTN","ut",249,0) +"RTN","ut",248,0) Q:$G(SETNAME)="" -"RTN","ut",250,0) +"RTN","ut",249,0) S %utVERB=$G(VERBOSE,0) -"RTN","ut",251,0) +"RTN","ut",250,0) S Y=+$$FIND1^DIC(17.9001,"","X",SETNAME) Q:Y'>0 -"RTN","ut",252,0) +"RTN","ut",251,0) D GETSET(Y,.%utROU,.%utLIST) -"RTN","ut",253,0) +"RTN","ut",252,0) N Y,SETNAME,%ut -"RTN","ut",254,0) +"RTN","ut",253,0) D SETUT -"RTN","ut",255,0) +"RTN","ut",254,0) D EN1(.%utROU,%utLIST) +"RTN","ut",255,0) + Q "RTN","ut",256,0) - Q + ; "RTN","ut",257,0) - ; -"RTN","ut",258,0) ; DOSET CAN BE USED TO RUN A SET OF TESTS BASED ON THE IEN IN THE MUNIT TEST GROUP file (#17.9001) -"RTN","ut",259,0) +"RTN","ut",258,0) DOSET(IEN,%utVERB) ; 140731 JLI added %utVERB as a second argument -"RTN","ut",260,0) +"RTN","ut",259,0) ; IEN - Internal entry number for selected set of tests in the MUNIT TEST GROUP file (#17.9001) -"RTN","ut",261,0) +"RTN","ut",260,0) ; %utVERB - optional input that indicates verbose output is permitted +"RTN","ut",261,0) + ; "RTN","ut",262,0) - ; -"RTN","ut",263,0) N %utROU,%utLIST -"RTN","ut",264,0) +"RTN","ut",263,0) I '$D(%utVERB) S %utVERB=0 -"RTN","ut",265,0) +"RTN","ut",264,0) S %utLIST=0 -"RTN","ut",266,0) +"RTN","ut",265,0) D GETSET($G(IEN),.%utROU,.%utLIST) -"RTN","ut",267,0) +"RTN","ut",266,0) I %utLIST>0 N IEN,%ut D SETUT,EN1(.%utROU,%utLIST) +"RTN","ut",267,0) + Q "RTN","ut",268,0) - Q + ; "RTN","ut",269,0) - ; -"RTN","ut",270,0) GETSET(IEN,%utROU,%utLIST) ; JLI 140731 - called from PICKSET, RUNSET, DOSET, GUISET -"RTN","ut",271,0) +"RTN","ut",270,0) N IENS,%utROOT -"RTN","ut",272,0) +"RTN","ut",271,0) S IENS=IEN_"," D GETS^DIQ(17.9001,IENS,"1*","","%utROOT") -"RTN","ut",273,0) +"RTN","ut",272,0) S %utLIST=0,IENS="" F S IENS=$O(%utROOT(17.90011,IENS)) Q:IENS="" S %utLIST=%utLIST+1,%utROU(%utLIST)=%utROOT(17.90011,IENS,.01) +"RTN","ut",273,0) + Q "RTN","ut",274,0) - Q + ; "RTN","ut",275,0) - ; -"RTN","ut",276,0) COV(NMSP,COVCODE,VERBOSITY) ; simply make it callable from %ut1 as well (along with other APIs) JLI 150101 -"RTN","ut",277,0) +"RTN","ut",276,0) D COV^%ut1(NMSP,COVCODE,+$G(VERBOSITY)) ; see COV^%ut1 for description of arguments +"RTN","ut",277,0) + Q "RTN","ut",278,0) - Q + ; "RTN","ut",279,0) - ; -"RTN","ut",280,0) MULTAPIS(TESTROUS) ; .SR - RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS -"RTN","ut",281,0) +"RTN","ut",280,0) ; input - TESTROUS - passed by reference -"RTN","ut",282,0) +"RTN","ut",281,0) ; see TESTONLY in routine %utcover for full description of TESTROUS argument -"RTN","ut",283,0) +"RTN","ut",282,0) D MULTAPIS^%utcover(.TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS +"RTN","ut",283,0) + Q "RTN","ut",284,0) - Q + ; "RTN","ut",285,0) - ; -"RTN","ut",286,0) COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ;.SR - run coverage analysis for multiple routines and entry points -"RTN","ut",287,0) +"RTN","ut",286,0) ; input ROUNMSP -"RTN","ut",288,0) +"RTN","ut",287,0) ; input TESTROUS - passed by reference -"RTN","ut",289,0) +"RTN","ut",288,0) ; input XCLDROUS - passed by reference -"RTN","ut",290,0) +"RTN","ut",289,0) ; input RESLTLVL -"RTN","ut",291,0) +"RTN","ut",290,0) ; see COVERAGE in routine %utcover for full description of arguments -"RTN","ut",292,0) +"RTN","ut",291,0) D COVERAGE^%utcover(ROUNMSP,.TESTROUS,.XCLDROUS,+$G(RESLTLVL)) +"RTN","ut",292,0) + Q "RTN","ut",293,0) - Q + ; "RTN","ut",294,0) - ; -"RTN","ut",295,0) GETUTVAL(UTDATA) ; .SR - returns totals for current unit test data in cumulative totals -"RTN","ut",296,0) +"RTN","ut",295,0) ; usage D GETUTVAL^%ut(.UTDATA) +"RTN","ut",296,0) + ; input - UTDATA - passed by reference "RTN","ut",297,0) - ; input - UTDATA - passed by reference + ; "RTN","ut",298,0) - ; -"RTN","ut",299,0) ; subscripted values returned: -"RTN","ut",300,0) +"RTN","ut",299,0) ; 1) cumulative number of routines run; 2) cumulative number of entry tags; -"RTN","ut",301,0) +"RTN","ut",300,0) ; 3) cumulative number of tests; 4) cummulative number of failures; -"RTN","ut",302,0) +"RTN","ut",301,0) ; 5) cumulative number of errors -"RTN","ut",303,0) +"RTN","ut",302,0) N VALS,I,VAL -"RTN","ut",304,0) +"RTN","ut",303,0) S VALS=$G(^TMP("%ut",$J,"UTVALS")) I VALS="" Q -"RTN","ut",305,0) +"RTN","ut",304,0) F I=1:1 S VAL=$P(VALS,U,I) Q:VAL="" S UTDATA(I)=$G(UTDATA(I))+VAL -"RTN","ut",306,0) +"RTN","ut",305,0) K ^TMP("%ut",$J,"UTVALS") +"RTN","ut",306,0) + Q "RTN","ut",307,0) - Q -"RTN","ut",308,0) ; -"RTN","ut",309,0) +"RTN","ut",308,0) LSTUTVAL(UTDATA) ; .SR - lists cumulative totals in UTDATA array -"RTN","ut",310,0) +"RTN","ut",309,0) ; usage D LSTUTVAL^%ut(.UTDATA) -"RTN","ut",311,0) +"RTN","ut",310,0) ; input - UTDATA - passed by reference -"RTN","ut",312,0) +"RTN","ut",311,0) W !!!,"------------ SUMMARY ------------" -"RTN","ut",313,0) +"RTN","ut",312,0) W !,"Ran ",UTDATA(1)," Routine",$S(UTDATA(1)>1:"s",1:""),", ",UTDATA(2)," Entry Tag",$S(UTDATA(2)>1:"s",1:"") -"RTN","ut",314,0) +"RTN","ut",313,0) W !,"Checked ",UTDATA(3)," test",$S(UTDATA(3)>1:"s",1:""),", with ",UTDATA(4)," failure",$S(UTDATA(4)'=1:"s",1:"")," and encountered ",UTDATA(5)," error",$S(UTDATA(5)'=1:"s",1:""),"." -"RTN","ut",315,0) +"RTN","ut",314,0) Q +"RTN","ut",315,0) + ; "RTN","ut",316,0) ; "RTN","ut",317,0) - ; -"RTN","ut",318,0) GUISET(%utRSLT,XTSET) ; Entry point for GUI start with selected Test Set IEN - called by %ut-TEST GROUP LOAD rpc -"RTN","ut",319,0) +"RTN","ut",318,0) N %utROU,%utLIST,%ut +"RTN","ut",319,0) + D SETUT "RTN","ut",320,0) - D SETUT + S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") "RTN","ut",321,0) - S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") -"RTN","ut",322,0) D GETSET(XTSET,.%utROU,.%utLIST) -"RTN","ut",323,0) +"RTN","ut",322,0) D GETLIST(.%utROU,%utLIST,%ut("RSLT")) +"RTN","ut",323,0) + S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version "RTN","ut",324,0) - S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version + S %utRSLT=%ut("RSLT") "RTN","ut",325,0) - S %utRSLT=%ut("RSLT") + Q "RTN","ut",326,0) - Q + ; "RTN","ut",327,0) - ; -"RTN","ut",328,0) GUILOAD(%utRSLT,%utROUN) ; Entry point for GUI start with %utROUN containing primary routine name - called by %ut-TEST LOAD rpc -"RTN","ut",329,0) +"RTN","ut",328,0) N %utROU,%ut +"RTN","ut",329,0) + D SETUT "RTN","ut",330,0) - D SETUT -"RTN","ut",331,0) S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") -"RTN","ut",332,0) +"RTN","ut",331,0) S %utROU(1)=%utROUN -"RTN","ut",333,0) +"RTN","ut",332,0) D GETLIST(.%utROU,1,%ut("RSLT")) -"RTN","ut",334,0) +"RTN","ut",333,0) S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version +"RTN","ut",334,0) + S %utRSLT=%ut("RSLT") "RTN","ut",335,0) - S %utRSLT=%ut("RSLT") + Q "RTN","ut",336,0) - Q + ; "RTN","ut",337,0) - ; -"RTN","ut",338,0) GETLIST(%utROU,%utLIST,%utRSLT) ; called from GUISET, GUILOAD -"RTN","ut",339,0) +"RTN","ut",338,0) N I,%utROUL,%utROUN,%ut,XTCOMNT,XTVALUE,%utCNT -"RTN","ut",340,0) +"RTN","ut",339,0) S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) K @XTVALUE -"RTN","ut",341,0) +"RTN","ut",340,0) S %utCNT=0,XTCOMNT="" -"RTN","ut",342,0) +"RTN","ut",341,0) D GETTREE^%ut1(.%utROU,%utLIST) -"RTN","ut",343,0) +"RTN","ut",342,0) F I=1:1 Q:'$D(%utROU(I)) S %utROUL(%utROU(I))="" -"RTN","ut",344,0) +"RTN","ut",343,0) S %utROUN="" F S %utROUN=$O(%utROUL(%utROUN)) Q:%utROUN="" D LOAD(%utROUN,.%utCNT,XTVALUE,XTCOMNT,.%utROUL) -"RTN","ut",345,0) +"RTN","ut",344,0) M @%utRSLT=@XTVALUE -"RTN","ut",346,0) +"RTN","ut",345,0) K @%utRSLT@("SHUTDOWN") -"RTN","ut",347,0) +"RTN","ut",346,0) K @%utRSLT@("STARTUP") -"RTN","ut",348,0) +"RTN","ut",347,0) S @XTVALUE@("LASTROU")="" ; Use this to keep track of place in routines +"RTN","ut",348,0) + Q "RTN","ut",349,0) - Q + ; "RTN","ut",350,0) - ; -"RTN","ut",351,0) ; generate list of unit test routines, entry points and comments on test for entry point -"RTN","ut",352,0) +"RTN","ut",351,0) LOAD(%utROUN,%utNCNT,XTVALUE,XTCOMNT,%utROUL) ; called from GETLIST, and recursively from LOAD -"RTN","ut",353,0) +"RTN","ut",352,0) I $T(@("^"_%utROUN))="" S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_"^^*** ERROR - ROUTINE NAME NOT FOUND" Q -"RTN","ut",354,0) +"RTN","ut",353,0) S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_U_XTCOMNT -"RTN","ut",355,0) +"RTN","ut",354,0) ;N %utI,XTX1,XTX2,LINE -"RTN","ut",356,0) +"RTN","ut",355,0) N %utI,XTX1,XTX2,LINE,LIST,I -"RTN","ut",357,0) +"RTN","ut",356,0) ; 100622 JLI added code to identify STARTUP and TEARDOWN -"RTN","ut",358,0) +"RTN","ut",357,0) I $T(@("STARTUP^"_%utROUN))'="",'$D(@XTVALUE@("STARTUP")) S @XTVALUE@("STARTUP")="STARTUP^"_%utROUN -"RTN","ut",359,0) +"RTN","ut",358,0) I $T(@("SHUTDOWN^"_%utROUN))'="",'$D(@XTVALUE@("SHUTDOWN")) S @XTVALUE@("SHUTDOWN")="SHUTDOWN^"_%utROUN -"RTN","ut",360,0) +"RTN","ut",359,0) ; JLI 140731 handle @TEST identified test tags -"RTN","ut",361,0) +"RTN","ut",360,0) D NEWSTYLE^%ut1(.LIST,%utROUN) -"RTN","ut",362,0) +"RTN","ut",361,0) F I=1:1:LIST S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_LIST(I) -"RTN","ut",363,0) +"RTN","ut",362,0) ; JLI 140731 end of @TEST addition -"RTN","ut",364,0) +"RTN","ut",363,0) F %utI=1:1 S LINE=$T(@("XTENT+"_%utI_"^"_%utROUN)) S XTX1=$P(LINE,";",3) Q:XTX1="" S XTX2=$P(LINE,";",4),%utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_XTX1_U_XTX2 -"RTN","ut",365,0) +"RTN","ut",364,0) F %utI=1:1 S LINE=$T(@("XTROU+"_%utI_"^"_%utROUN)) S XTX1=$P(LINE,";",3) Q:XTX1="" S XTCOMNT=$P(LINE,";",4) I '$D(%utROUL(XTX1)) S %utROUL(XTX1)="" D LOAD(XTX1,.%utNCNT,XTVALUE,XTCOMNT,.%utROUL) -"RTN","ut",366,0) +"RTN","ut",365,0) Q -"RTN","ut",367,0) +"RTN","ut",366,0) ; -"RTN","ut",368,0) +"RTN","ut",367,0) GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - called by %ut-TEST NEXT rpc -"RTN","ut",369,0) +"RTN","ut",368,0) ; XTGUISEP - added 110719 to provide for changing separator for GUI -"RTN","ut",370,0) +"RTN","ut",369,0) ; return from ^ to another value ~~^~~ so that data returned -"RTN","ut",371,0) +"RTN","ut",370,0) ; is not affected by ^ values in the data - if not present -"RTN","ut",372,0) +"RTN","ut",371,0) ; sets value to default ^ -"RTN","ut",373,0) +"RTN","ut",372,0) N %utETRY,%utROUT,XTOLROU,XTVALUE,%utERR,%utGUI -"RTN","ut",374,0) +"RTN","ut",373,0) N %ut -"RTN","ut",375,0) +"RTN","ut",374,0) I $G(XTGUISEP)="" S XTGUISEP="^" -"RTN","ut",376,0) +"RTN","ut",375,0) D SETUT +"RTN","ut",376,0) + S %ut("LOC")=%utLOC "RTN","ut",377,0) - S %ut("LOC")=%utLOC -"RTN","ut",378,0) S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 -"RTN","ut",379,0) +"RTN","ut",378,0) S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) -"RTN","ut",380,0) +"RTN","ut",379,0) S %ut("RSLT")=$NA(^TMP("GUINEXT",$J)) K @%ut("RSLT") -"RTN","ut",381,0) +"RTN","ut",380,0) S %utRSLT=%ut("RSLT") -"RTN","ut",382,0) +"RTN","ut",381,0) S %utETRY=$P(%utLOC,U),%utROUT=$P(%utLOC,U,2),XTOLROU=$G(@XTVALUE@("LASTROU")) -"RTN","ut",383,0) +"RTN","ut",382,0) S %utGUI=1 +"RTN","ut",383,0) + S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 "RTN","ut",384,0) - S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 -"RTN","ut",385,0) ; I %utROUT'=XTOLROU D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ;140731 JLI - commented out -"RTN","ut",386,0) +"RTN","ut",385,0) ;D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ; 140731 JLI - replaced previous line - moves check for SHUTDOWN at end of processing -"RTN","ut",387,0) +"RTN","ut",386,0) D I %utROUT="" S @%utRSLT@(1)="" Q ; 141018 JLI - Have to leave XTVALUE intact, in case they simply run again for STARTUP, etc. -"RTN","ut",388,0) +"RTN","ut",387,0) . I XTOLROU="",$D(@XTVALUE@("STARTUP")) D -"RTN","ut",389,0) +"RTN","ut",388,0) . . S %ut("LOC")=@XTVALUE@("STARTUP") +"RTN","ut",389,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" "RTN","ut",390,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",391,0) . . D @(@XTVALUE@("STARTUP")) +"RTN","ut",391,0) + . . Q "RTN","ut",392,0) - . . Q -"RTN","ut",393,0) . S @XTVALUE@("LASTROU")=%utROUT I %utROUT'="",$T(@("SETUP^"_%utROUT))'="" D -"RTN","ut",394,0) +"RTN","ut",393,0) . . S %ut("LOC")="SETUP^"_%utROUT +"RTN","ut",394,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" "RTN","ut",395,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",396,0) . . D @("SETUP^"_%utROUT) +"RTN","ut",396,0) + . . Q "RTN","ut",397,0) - . . Q -"RTN","ut",398,0) . I %utROUT="",$D(@XTVALUE@("SHUTDOWN")) D -"RTN","ut",399,0) +"RTN","ut",398,0) . . S %ut("LOC")=@XTVALUE@("SHUTDOWN") -"RTN","ut",400,0) +"RTN","ut",399,0) . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",401,0) +"RTN","ut",400,0) . . D @(@XTVALUE@("SHUTDOWN")) -"RTN","ut",402,0) +"RTN","ut",401,0) . . Q +"RTN","ut",402,0) + . Q "RTN","ut",403,0) - . Q -"RTN","ut",404,0) S %ut("LOC")=%utLOC -"RTN","ut",405,0) +"RTN","ut",404,0) S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 -"RTN","ut",406,0) +"RTN","ut",405,0) D ; to limit range of error trap so we continue through other tests +"RTN","ut",406,0) + . N $ETRAP S $ETRAP="D ERROR^%ut" "RTN","ut",407,0) - . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",408,0) . D @%ut("LOC") +"RTN","ut",408,0) + . Q "RTN","ut",409,0) - . Q -"RTN","ut",410,0) I $T(@("TEARDOWN^"_%utROUT))'="" D -"RTN","ut",411,0) +"RTN","ut",410,0) . S %ut("LOC")="TEARDOWN^"_%utROUT -"RTN","ut",412,0) +"RTN","ut",411,0) . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",413,0) +"RTN","ut",412,0) . D @("TEARDOWN^"_%utROUT) -"RTN","ut",414,0) +"RTN","ut",413,0) . Q -"RTN","ut",415,0) +"RTN","ut",414,0) S @%ut("RSLT")@(1)=%ut("CHK")_XTGUISEP_(%ut("CNT")-1-%utERR)_XTGUISEP_%utERR +"RTN","ut",415,0) + K ^TMP("%ut",$J,"UTVALS") "RTN","ut",416,0) Q "RTN","ut",417,0) ; "RTN","ut1") -0^2^B205876634 +0^2^B205168514 "RTN","ut1",1,0) -%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;08/10/15 14:32 +%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;09/14/15 09:37 "RTN","ut1",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 11 "RTN","ut1",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ut1",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","ut1",5,0) ; Original routine authored by Joel L. Ivey as XTMUNIT1 while working for U.S. Department of Veterans Affairs 2003-2012 -"RTN","ut1",6,0) +"RTN","ut1",5,0) ; Includes addition of original COV entry and code related coverage analysis as well as other substantial additions authored by Sam Habiel 07/2013?04/2014 -"RTN","ut1",7,0) +"RTN","ut1",6,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","ut1",7,0) + ; "RTN","ut1",8,0) - ; -"RTN","ut1",9,0) D ^%utt6 ; runs unit tests from several perspectives -"RTN","ut1",10,0) +"RTN","ut1",9,0) Q -"RTN","ut1",11,0) +"RTN","ut1",10,0) ; -"RTN","ut1",12,0) +"RTN","ut1",11,0) ;following is original header from XTMUNIT1 in unreleased patch XT*7.3*81 VA code -"RTN","ut1",13,0) +"RTN","ut1",12,0) ;XTMUNIT1 ;JLI/FO-OAK-CONTINUATION OF UNIT TEST ROUTINE ;2014-04-17 5:26 PM -"RTN","ut1",14,0) +"RTN","ut1",13,0) ;;7.3;TOOLKIT;**81**;APR 25 1995;Build 24 +"RTN","ut1",14,0) + ; "RTN","ut1",15,0) ; "RTN","ut1",16,0) - ; -"RTN","ut1",17,0) ; Original by Dr. Joel Ivey -"RTN","ut1",18,0) +"RTN","ut1",17,0) ; Major contributions by Dr. Sam Habiel +"RTN","ut1",18,0) + ; "RTN","ut1",19,0) - ; -"RTN","ut1",20,0) ; Changes: -"RTN","ut1",21,0) +"RTN","ut1",20,0) ; 130726 SMH - Moved test collection logic from %utUNIT to here (multiple places) -"RTN","ut1",22,0) +"RTN","ut1",21,0) ; 131218 SMH - dependence on XLFSTR removed -"RTN","ut1",23,0) +"RTN","ut1",22,0) ; 131218 SMH - CHEKTEST refactored to use $TEXT instead of ^%ZOSF("LOAD") -"RTN","ut1",24,0) +"RTN","ut1",23,0) ; 131218 SMH - CATCHERR now nulls out $ZS if on GT.M +"RTN","ut1",24,0) + ; "RTN","ut1",25,0) - ; -"RTN","ut1",26,0) ; ------- COMMENTS moved from %ut due to space requirements -"RTN","ut1",27,0) +"RTN","ut1",26,0) ; -"RTN","ut1",28,0) +"RTN","ut1",27,0) ; 100622 JLI - corrected typo in comments where %utINPT was listed as %utINP -"RTN","ut1",29,0) +"RTN","ut1",28,0) ; 100622 JLI - removed a comment which indicated data could potentially be returned from the called routine -"RTN","ut1",30,0) +"RTN","ut1",29,0) ; in the %utINPT array. -"RTN","ut1",31,0) +"RTN","ut1",30,0) ; 100622 JLI - added code to handle STARTUP and SHUTDOWN from GUI app -"RTN","ut1",32,0) +"RTN","ut1",31,0) ; 110719 JLI - modified separators in GUI handling from ^ to ~~^~~ -"RTN","ut1",33,0) +"RTN","ut1",32,0) ; in the variable XTGUISEP if using a newer version of the -"RTN","ut1",34,0) +"RTN","ut1",33,0) ; GUI app (otherwise, it is simply set to ^) since results -"RTN","ut1",35,0) +"RTN","ut1",34,0) ; with a series of ^ embedded disturbed the output reported -"RTN","ut1",36,0) +"RTN","ut1",35,0) ; 130726 SMH - Fixed SETUP and TEARDOWN so that they run before/after each -"RTN","ut1",37,0) +"RTN","ut1",36,0) ; test rather than once. General refactoring. -"RTN","ut1",38,0) +"RTN","ut1",37,0) ; 130726 SMH - SETUT initialized IO in case it's not there to $P. Inits vars -"RTN","ut1",39,0) +"RTN","ut1",38,0) ; using DT^DICRW. -"RTN","ut1",40,0) +"RTN","ut1",39,0) ; 131217 SMH - Change call in SETUP to S U="^" instead of DT^DICRW -"RTN","ut1",41,0) +"RTN","ut1",40,0) ; 131218 SMH - Any checks to $ZE will also check $ZS for GT.M. -"RTN","ut1",42,0) +"RTN","ut1",41,0) ; 131218 SMH - Remove calls to %ZISUTL to manage devices to prevent dependence on VISTA. -"RTN","ut1",43,0) +"RTN","ut1",42,0) ; Use %utNIT("DEV","OLD") for old devices -"RTN","ut1",44,0) +"RTN","ut1",43,0) ; 140109 SMH - Add parameter %utBREAK - Break upon error -"RTN","ut1",45,0) +"RTN","ut1",44,0) ; 1402 SMH - Break will cause the break to happen even on failed tests. -"RTN","ut1",46,0) +"RTN","ut1",45,0) ; 140401 SMH - Added Succeed entry point for take it into your hands tester. -"RTN","ut1",47,0) +"RTN","ut1",46,0) ; 140401 SMH - Reformatted the output of M-Unit so that the test's name -"RTN","ut1",48,0) +"RTN","ut1",47,0) ; will print BEFORE the execution of the test. This has been -"RTN","ut1",49,0) +"RTN","ut1",48,0) ; really confusing for beginning users of M-Unit, so this was -"RTN","ut1",50,0) +"RTN","ut1",49,0) ; necessary. -"RTN","ut1",51,0) +"RTN","ut1",50,0) ; 140401 SMH - OK message gets printed at the end of --- as [OK]. -"RTN","ut1",52,0) +"RTN","ut1",51,0) ; 140401 SMH - FAIL message now prints. Previously, OK failed to be printed. -"RTN","ut1",53,0) +"RTN","ut1",52,0) ; Unfortunately, that's rather passive aggressive. Now it -"RTN","ut1",54,0) +"RTN","ut1",53,0) ; explicitly says that a test failed. -"RTN","ut1",55,0) +"RTN","ut1",54,0) ; 140503 SMH - Fixed IO issues all over the routine. Much simpler now. -"RTN","ut1",56,0) +"RTN","ut1",55,0) ; 140731 JLI - Combined routine changes between JLI and SMH -"RTN","ut1",57,0) +"RTN","ut1",56,0) ; Moved routines from %utNIT and %utNIT1 to %ut and %ut1 -"RTN","ut1",58,0) +"RTN","ut1",57,0) ; Updated unit test routines (%utt1 to %utt6) -"RTN","ut1",59,0) +"RTN","ut1",58,0) ; Created M-UNIT TEST GROUP file at 17.9001 based on the 17.9001 file -"RTN","ut1",60,0) +"RTN","ut1",59,0) ; 141030 JLI - Removed tag TESTCOVR and code under it, not necessary -"RTN","ut1",61,0) +"RTN","ut1",60,0) ; since %uttcovr can handle all of the calling needed -"RTN","ut1",62,0) +"RTN","ut1",61,0) ; Added call to run routine %utt6 if run from the top, -"RTN","ut1",63,0) +"RTN","ut1",62,0) ; since this will run the full range of unit tests -"RTN","ut1",64,0) +"RTN","ut1",63,0) ; Modified STARTUP and SHUTDOWN commands to handle in -"RTN","ut1",65,0) +"RTN","ut1",64,0) ; each routine where they are available, since only -"RTN","ut1",66,0) +"RTN","ut1",65,0) ; running one STARTUP and SHUTDOWN (the first seen by -"RTN","ut1",67,0) +"RTN","ut1",66,0) ; the program) restricted their use in suites of multiple -"RTN","ut1",68,0) +"RTN","ut1",67,0) ; tests. -"RTN","ut1",69,0) +"RTN","ut1",68,0) ; 150101 JLI - Added COV entry to %ut (in addition to current in %ut1) so it is easier -"RTN","ut1",70,0) +"RTN","ut1",69,0) ; to remember how to use it. -"RTN","ut1",71,0) +"RTN","ut1",70,0) ; 150621 JLI - Added a global location to pick up summary data for a unit test call, so -"RTN","ut1",72,0) +"RTN","ut1",71,0) ; programs running multiple calls can generate a summary if desired. +"RTN","ut1",72,0) + ; "RTN","ut1",73,0) ; "RTN","ut1",74,0) - ; -"RTN","ut1",75,0) CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list. -"RTN","ut1",76,0) +"RTN","ut1",75,0) ; %utROU - input - Name of routine to check for tags with @TEST attribute -"RTN","ut1",77,0) +"RTN","ut1",76,0) ; %ut - input/output - passed by reference -"RTN","ut1",78,0) +"RTN","ut1",77,0) ; %utUETRY - input/output - passed by reference +"RTN","ut1",78,0) + ; "RTN","ut1",79,0) - ; -"RTN","ut1",80,0) ; Test list collected in two ways: -"RTN","ut1",81,0) +"RTN","ut1",80,0) ; - @TEST on labellines -"RTN","ut1",82,0) +"RTN","ut1",81,0) ; - Offsets of XTENT +"RTN","ut1",82,0) + ; "RTN","ut1",83,0) - ; -"RTN","ut1",84,0) S %ut("ENTN")=0 ; Number of test, sub to %utUETRY. +"RTN","ut1",84,0) + ; "RTN","ut1",85,0) - ; -"RTN","ut1",86,0) ; This stanza and everything below is for collecting @TEST. -"RTN","ut1",87,0) +"RTN","ut1",86,0) ; VEN/SMH - block refactored to use $TEXT instead of ^%ZOSF("LOAD") -"RTN","ut1",88,0) +"RTN","ut1",87,0) N I,LIST -"RTN","ut1",89,0) +"RTN","ut1",88,0) S I=$L($T(@(U_%utROU))) I I<0 Q "-1^Invalid Routine Name" -"RTN","ut1",90,0) +"RTN","ut1",89,0) D NEWSTYLE(.LIST,%utROU) -"RTN","ut1",91,0) +"RTN","ut1",90,0) F I=1:1:LIST S %ut("ENTN")=%ut("ENTN")+1,%utUETRY(%ut("ENTN"))=$P(LIST(I),U),%utUETRY(%ut("ENTN"),"NAME")=$P(LIST(I),U,2,99) +"RTN","ut1",91,0) + ; "RTN","ut1",92,0) - ; -"RTN","ut1",93,0) ; This Stanza is to collect XTENT offsets -"RTN","ut1",94,0) +"RTN","ut1",93,0) N %utUI F %utUI=1:1 S %ut("ELIN")=$T(@("XTENT+"_%utUI_"^"_%utROU)) Q:$P(%ut("ELIN"),";",3)="" D -"RTN","ut1",95,0) +"RTN","ut1",94,0) . S %ut("ENTN")=%ut("ENTN")+1,%utUETRY(%ut("ENTN"))=$P(%ut("ELIN"),";",3),%utUETRY(%ut("ENTN"),"NAME")=$P(%ut("ELIN"),";",4) +"RTN","ut1",95,0) + . Q "RTN","ut1",96,0) - . Q + ; "RTN","ut1",97,0) - ; + QUIT "RTN","ut1",98,0) - QUIT + ; "RTN","ut1",99,0) - ; -"RTN","ut1",100,0) ; VEN/SMH 26JUL2013 - Moved GETTREE here. -"RTN","ut1",101,0) +"RTN","ut1",100,0) GETTREE(%utROU,%utULIST) ; -"RTN","ut1",102,0) +"RTN","ut1",101,0) ; first get any other routines this one references for running subsequently -"RTN","ut1",103,0) +"RTN","ut1",102,0) ; then any that they refer to as well -"RTN","ut1",104,0) +"RTN","ut1",103,0) ; this builds a tree of all routines referred to by any routine including each only once -"RTN","ut1",105,0) +"RTN","ut1",104,0) N %utUK,%utUI,%utUJ,%utURNAM,%utURLIN -"RTN","ut1",106,0) +"RTN","ut1",105,0) F %utUK=1:1 Q:'$D(%utROU(%utUK)) D -"RTN","ut1",107,0) +"RTN","ut1",106,0) . F %utUI=1:1 S %utURLIN=$T(@("XTROU+"_%utUI_"^"_%utROU(%utUK))) S %utURNAM=$P(%utURLIN,";",3) Q:%utURNAM="" D -"RTN","ut1",108,0) +"RTN","ut1",107,0) . . F %utUJ=1:1:%utULIST I %utROU(%utUJ)=%utURNAM S %utURNAM="" Q -"RTN","ut1",109,0) +"RTN","ut1",108,0) . . I %utURNAM'="",$T(@("+1^"_%utURNAM))="" W:'$D(XWBOS) "Referenced routine ",%utURNAM," not found.",! Q -"RTN","ut1",110,0) +"RTN","ut1",109,0) . . S:%utURNAM'="" %utULIST=%utULIST+1,%utROU(%utULIST)=%utURNAM +"RTN","ut1",110,0) + QUIT "RTN","ut1",111,0) - QUIT + ; "RTN","ut1",112,0) - ; -"RTN","ut1",113,0) NEWSTYLE(LIST,ROUNAME) ; JLI 140726 identify and return list of newstyle tags or entries for this routine -"RTN","ut1",114,0) +"RTN","ut1",113,0) ; LIST - input, passed by reference - returns containing array with list of tags identified as tests -"RTN","ut1",115,0) +"RTN","ut1",114,0) ; LIST indicates number of tags identified, LIST(n)=tag^test_info where tag is entry point for test -"RTN","ut1",116,0) +"RTN","ut1",115,0) ; ROUNAME - input - routine name in which tests should be identified +"RTN","ut1",116,0) + ; "RTN","ut1",117,0) - ; -"RTN","ut1",118,0) N I,VALUE,LINE -"RTN","ut1",119,0) +"RTN","ut1",118,0) K LIST S LIST=0 -"RTN","ut1",120,0) +"RTN","ut1",119,0) ; search routine by line for a tag and @TEST declaration -"RTN","ut1",121,0) +"RTN","ut1",120,0) F I=1:1 S LINE=$T(@("+"_I_"^"_ROUNAME)) Q:LINE="" S VALUE=$$CHECKTAG(LINE) I VALUE'="" S LIST=LIST+1,LIST(LIST)=VALUE +"RTN","ut1",121,0) + Q "RTN","ut1",122,0) - Q + ; "RTN","ut1",123,0) - ; -"RTN","ut1",124,0) CHECKTAG(LINE) ; JLI 140726 check line to determine @test TAG -"RTN","ut1",125,0) +"RTN","ut1",124,0) ; LINE - input - Line of code to be checked -"RTN","ut1",126,0) +"RTN","ut1",125,0) ; returns null line if not @TEST line, otherwise TAG^NOTE -"RTN","ut1",127,0) +"RTN","ut1",126,0) N TAG,NOTE,CHAR -"RTN","ut1",128,0) +"RTN","ut1",127,0) I $E(LINE)=" " Q "" ; test entry must have a tag -"RTN","ut1",129,0) +"RTN","ut1",128,0) I $$UP(LINE)'["@TEST" Q "" ; must have @TEST declaration -"RTN","ut1",130,0) +"RTN","ut1",129,0) I $P($$UP(LINE),"@TEST")["(" Q "" ; can't have an argument -"RTN","ut1",131,0) +"RTN","ut1",130,0) S TAG=$P(LINE," "),LINE=$P(LINE," ",2,400),NOTE=$P($$UP(LINE),"@TEST"),LINE=$E(LINE,$L(NOTE)+5+1,$L(LINE)) -"RTN","ut1",132,0) +"RTN","ut1",131,0) F Q:NOTE="" S CHAR=$E(NOTE),NOTE=$E(NOTE,2,$L(NOTE)) I " ;"'[CHAR Q ; -"RTN","ut1",133,0) +"RTN","ut1",132,0) I $L(NOTE)'=0 Q "" ; @TEST must be first text on line -"RTN","ut1",134,0) +"RTN","ut1",133,0) F Q:$E(LINE)'=" " S LINE=$E(LINE,2,$L(LINE)) ; remove leading spaces from test info -"RTN","ut1",135,0) +"RTN","ut1",134,0) S TAG=TAG_U_LINE -"RTN","ut1",136,0) +"RTN","ut1",135,0) Q TAG +"RTN","ut1",136,0) + ; "RTN","ut1",137,0) - ; -"RTN","ut1",138,0) CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values -"RTN","ut1",139,0) +"RTN","ut1",138,0) ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut1",140,0) +"RTN","ut1",139,0) ; ZEXCEPT: %ut - NEWED IN EN +"RTN","ut1",140,0) + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut1",141,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",142,0) I '$D(XTSTVAL) D NVLDARG("CHKTF") Q +"RTN","ut1",142,0) + I $G(XTERMSG)="" S XTERMSG="no failure message provided" "RTN","ut1",143,0) - I $G(XTERMSG)="" S XTERMSG="no failure message provided" -"RTN","ut1",144,0) S %ut("CHK")=$G(%ut("CHK"))+1 +"RTN","ut1",144,0) + I '$D(%utGUI) D "RTN","ut1",145,0) - I '$D(%utGUI) D + . D SETIO "RTN","ut1",146,0) - . D SETIO -"RTN","ut1",147,0) . I 'XTSTVAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " D -"RTN","ut1",148,0) +"RTN","ut1",147,0) . . W XTERMSG,! S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") +"RTN","ut1",148,0) + . . I $D(%ut("BREAK")) BREAK ; Break upon failure "RTN","ut1",149,0) - . . I $D(%ut("BREAK")) BREAK ; Break upon failure + . . Q "RTN","ut1",150,0) - . . Q -"RTN","ut1",151,0) . I XTSTVAL W "." +"RTN","ut1",151,0) + . D RESETIO "RTN","ut1",152,0) - . D RESETIO + . Q "RTN","ut1",153,0) - . Q -"RTN","ut1",154,0) I $D(%utGUI),'XTSTVAL S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 +"RTN","ut1",154,0) + Q "RTN","ut1",155,0) - Q + ; "RTN","ut1",156,0) - ; -"RTN","ut1",157,0) CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut1",158,0) +"RTN","ut1",157,0) N FAILMSG +"RTN","ut1",158,0) + ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END "RTN","ut1",159,0) - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",160,0) ; ZEXCEPT: %ut -- NEWED IN EN +"RTN","ut1",160,0) + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut1",161,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",162,0) I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG("CHKEQ") Q -"RTN","ut1",163,0) +"RTN","ut1",162,0) S XTACTUAL=$G(XTACTUAL),XTEXPECT=$G(XTEXPECT) +"RTN","ut1",163,0) + I $G(XTERMSG)="" S XTERMSG="no failure message provided" "RTN","ut1",164,0) - I $G(XTERMSG)="" S XTERMSG="no failure message provided" + S %ut("CHK")=%ut("CHK")+1 "RTN","ut1",165,0) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut1",166,0) I XTEXPECT'=XTACTUAL S FAILMSG="<"_XTEXPECT_"> vs <"_XTACTUAL_"> - " +"RTN","ut1",166,0) + I '$D(%utGUI) D "RTN","ut1",167,0) - I '$D(%utGUI) D + . D SETIO "RTN","ut1",168,0) - . D SETIO -"RTN","ut1",169,0) . I XTEXPECT'=XTACTUAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W FAILMSG,XTERMSG,! D +"RTN","ut1",169,0) + . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") "RTN","ut1",170,0) - . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut1",171,0) . . I $D(%ut("BREAK")) BREAK ; Break upon failure +"RTN","ut1",171,0) + . . Q "RTN","ut1",172,0) - . . Q -"RTN","ut1",173,0) . E W "." +"RTN","ut1",173,0) + . D RESETIO "RTN","ut1",174,0) - . D RESETIO + . Q "RTN","ut1",175,0) - . Q -"RTN","ut1",176,0) I $D(%utGUI),XTEXPECT'=XTACTUAL S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_FAILMSG_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 +"RTN","ut1",176,0) + Q "RTN","ut1",177,0) - Q + ; "RTN","ut1",178,0) - ; -"RTN","ut1",179,0) FAIL(XTERMSG) ; Entry point for generating a failure message +"RTN","ut1",179,0) + ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END "RTN","ut1",180,0) - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut1",181,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut1",182,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",183,0) I $G(XTERMSG)="" S XTERMSG="no failure message provided" -"RTN","ut1",184,0) +"RTN","ut1",183,0) S %ut("CHK")=%ut("CHK")+1 +"RTN","ut1",184,0) + I '$D(%utGUI) D "RTN","ut1",185,0) - I '$D(%utGUI) D + . D SETIO "RTN","ut1",186,0) - . D SETIO + . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D "RTN","ut1",187,0) - . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D + . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") "RTN","ut1",188,0) - . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut1",189,0) . . I $D(%ut("BREAK")) BREAK ; Break upon failure +"RTN","ut1",189,0) + . . Q "RTN","ut1",190,0) - . . Q + . D RESETIO "RTN","ut1",191,0) - . D RESETIO + . Q "RTN","ut1",192,0) - . Q + I $D(%utGUI) S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 "RTN","ut1",193,0) - I $D(%utGUI) S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 + Q "RTN","ut1",194,0) - Q + ; "RTN","ut1",195,0) - ; -"RTN","ut1",196,0) NVLDARG(API) ; generate message for invalid arguments to test -"RTN","ut1",197,0) +"RTN","ut1",196,0) N XTERMSG +"RTN","ut1",197,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut1",198,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",199,0) ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",200,0) +"RTN","ut1",199,0) ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",201,0) +"RTN","ut1",200,0) S XTERMSG="NO VALUES INPUT TO "_API_"^%ut - no evaluation possible" -"RTN","ut1",202,0) +"RTN","ut1",201,0) I '$D(%utGUI) D -"RTN","ut1",203,0) +"RTN","ut1",202,0) . D SETIO -"RTN","ut1",204,0) +"RTN","ut1",203,0) . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D -"RTN","ut1",205,0) +"RTN","ut1",204,0) . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") +"RTN","ut1",205,0) + . . Q "RTN","ut1",206,0) - . . Q -"RTN","ut1",207,0) . D RESETIO +"RTN","ut1",207,0) + . Q "RTN","ut1",208,0) - . Q -"RTN","ut1",209,0) I $D(%utGUI) S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 +"RTN","ut1",209,0) + Q "RTN","ut1",210,0) - Q + ; "RTN","ut1",211,0) - ; -"RTN","ut1",212,0) SETIO ; Set M-Unit Device to write the results to... +"RTN","ut1",212,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut1",213,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",214,0) I $IO'=%ut("IO") S (IO(0),%ut("DEV","OLD"))=$IO USE %ut("IO") SET IO=$IO +"RTN","ut1",214,0) + QUIT "RTN","ut1",215,0) - QUIT + ; "RTN","ut1",216,0) - ; -"RTN","ut1",217,0) RESETIO ; Reset $IO back to the original device if we changed it. -"RTN","ut1",218,0) +"RTN","ut1",217,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",219,0) +"RTN","ut1",218,0) I $D(%ut("DEV","OLD")) S IO(0)=%ut("IO") U %ut("DEV","OLD") S IO=$IO K %ut("DEV","OLD") +"RTN","ut1",219,0) + QUIT "RTN","ut1",220,0) - QUIT + ; "RTN","ut1",221,0) - ; -"RTN","ut1",222,0) ; VEN/SMH 17DEC2013 - Remove dependence on VISTA - Uppercase here instead of XLFSTR. -"RTN","ut1",223,0) +"RTN","ut1",222,0) UP(X) ; -"RTN","ut1",224,0) +"RTN","ut1",223,0) Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") +"RTN","ut1",224,0) + ; "RTN","ut1",225,0) - ; -"RTN","ut1",226,0) COV(NMSP,COVCODE,VERBOSITY) ; VEN/SMH - PUBLIC ENTRY POINT; Coverage calculations -"RTN","ut1",227,0) +"RTN","ut1",226,0) ; NMSP: Namespace of the routines to analyze. End with * to include all routines. -"RTN","ut1",228,0) +"RTN","ut1",227,0) ; Not using * will only include the routine with NMSP name. -"RTN","ut1",229,0) +"RTN","ut1",228,0) ; e.g. PSOM* will include all routines starting with PSOM -"RTN","ut1",230,0) +"RTN","ut1",229,0) ; PSOM will only include PSOM. -"RTN","ut1",231,0) +"RTN","ut1",230,0) ; COVCODE: Mumps code to run over which coverage will be calculated. Typically Unit Tests. -"RTN","ut1",232,0) +"RTN","ut1",231,0) ; VERBOSITY (optional): Scalar from -1 to 3. -"RTN","ut1",233,0) +"RTN","ut1",232,0) ; - -1 = Global output in ^TMP("%utCOVREPORT",$J) -"RTN","ut1",234,0) +"RTN","ut1",233,0) ; - 0 = Print only total coverage -"RTN","ut1",235,0) +"RTN","ut1",234,0) ; - 1 = Break down by routine -"RTN","ut1",236,0) +"RTN","ut1",235,0) ; - 2 = Break down by routine and tag -"RTN","ut1",237,0) +"RTN","ut1",236,0) ; - 3 = Break down by routine and tag, and print lines that didn't execute for each tag. +"RTN","ut1",237,0) + ; "RTN","ut1",238,0) - ; -"RTN","ut1",239,0) ; ZEXCEPT: %utcovxx - SET and KILLED in this code at top level -"RTN","ut1",240,0) +"RTN","ut1",239,0) Q:'(+$SY=47) ; GT.M only! +"RTN","ut1",240,0) + ; "RTN","ut1",241,0) - ; -"RTN","ut1",242,0) ; ZEXCEPT: CTRAP - not really a variable -"RTN","ut1",243,0) +"RTN","ut1",242,0) S VERBOSITY=+$G(VERBOSITY) ; Get 0 if not passed. -"RTN","ut1",244,0) +"RTN","ut1",243,0) N %ZR ; GT.M specific -"RTN","ut1",245,0) +"RTN","ut1",244,0) D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R(RTN)). +"RTN","ut1",245,0) + ; "RTN","ut1",246,0) - ; -"RTN","ut1",247,0) N RN S RN="" -"RTN","ut1",248,0) +"RTN","ut1",247,0) W !,"Loading routines to test coverage...",! -"RTN","ut1",249,0) +"RTN","ut1",248,0) F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D -"RTN","ut1",250,0) +"RTN","ut1",249,0) . N L2 S L2=$T(+2^@RN) -"RTN","ut1",251,0) +"RTN","ut1",250,0) . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out -"RTN","ut1",252,0) +"RTN","ut1",251,0) . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine +"RTN","ut1",252,0) + ; "RTN","ut1",253,0) - ; -"RTN","ut1",254,0) N RTNS M RTNS=%ZR -"RTN","ut1",255,0) +"RTN","ut1",254,0) K %ZR +"RTN","ut1",255,0) + ; "RTN","ut1",256,0) - ; -"RTN","ut1",257,0) N GL -"RTN","ut1",258,0) +"RTN","ut1",257,0) S GL=$NA(^TMP("%utCOVCOHORT",$J)) -"RTN","ut1",259,0) +"RTN","ut1",258,0) I '$D(^TMP("%utcovrunning",$J)) K @GL -"RTN","ut1",260,0) +"RTN","ut1",259,0) D RTNANAL(.RTNS,GL) +"RTN","ut1",260,0) + I '$D(^TMP("%utcovrunning",$J)) D "RTN","ut1",261,0) - I '$D(^TMP("%utcovrunning",$J)) D -"RTN","ut1",262,0) . K ^TMP("%utCOVCOHORTSAV",$J) -"RTN","ut1",263,0) +"RTN","ut1",262,0) . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) -"RTN","ut1",264,0) +"RTN","ut1",263,0) . K ^TMP("%utCOVRESULT",$J) -"RTN","ut1",265,0) +"RTN","ut1",264,0) . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 -"RTN","ut1",266,0) +"RTN","ut1",265,0) . VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M START PROFILING +"RTN","ut1",266,0) + . Q "RTN","ut1",267,0) - . Q -"RTN","ut1",268,0) DO ; Run the code, but keep our variables to ourselves. -"RTN","ut1",269,0) +"RTN","ut1",268,0) . NEW $ETRAP,$ESTACK -"RTN","ut1",270,0) +"RTN","ut1",269,0) . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" -"RTN","ut1",271,0) +"RTN","ut1",270,0) . USE $PRINCIPAL:(CTRAP=$C(3)) -"RTN","ut1",272,0) +"RTN","ut1",271,0) . NEW (DUZ,IO,COVCODE,U,DILOCKTM,DISYS,DT,DTIME,IOBS,IOF,IOM,ION,IOS,IOSL,IOST,IOT,IOXY) -"RTN","ut1",273,0) +"RTN","ut1",272,0) . XECUTE COVCODE +"RTN","ut1",273,0) + . Q "RTN","ut1",274,0) - . Q -"RTN","ut1",275,0) ; GT.M STOP PROFILING if this is the original level that started it -"RTN","ut1",276,0) +"RTN","ut1",275,0) I $D(^TMP("%utcovrunning",$J)),$D(%utcovxx) VIEW "TRACE":0:$NA(^TMP("%utCOVRESULT",$J)) K %utcovxx,^TMP("%utcovrunning",$J) +"RTN","ut1",276,0) + ; "RTN","ut1",277,0) - ; -"RTN","ut1",278,0) I '$D(^TMP("%utcovrunning",$J)) D -"RTN","ut1",279,0) +"RTN","ut1",278,0) . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J))) ; Venn diagram matching between globals -"RTN","ut1",280,0) +"RTN","ut1",279,0) . ; Report -"RTN","ut1",281,0) +"RTN","ut1",280,0) . I VERBOSITY=-1 D -"RTN","ut1",282,0) +"RTN","ut1",281,0) . . K ^TMP("%utCOVREPORT",$J) -"RTN","ut1",283,0) +"RTN","ut1",282,0) . . D COVRPTGL($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),$NA(^TMP("%utCOVREPORT",$J))) +"RTN","ut1",283,0) + . . Q "RTN","ut1",284,0) - . . Q -"RTN","ut1",285,0) . E D COVRPT($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),VERBOSITY) +"RTN","ut1",285,0) + . Q "RTN","ut1",286,0) - . Q + QUIT "RTN","ut1",287,0) - QUIT + ; "RTN","ut1",288,0) - ; -"RTN","ut1",289,0) RTNANAL(RTNS,GL) ; [Private] - Routine Analysis -"RTN","ut1",290,0) +"RTN","ut1",289,0) ; Create a global similar to the trace global produced by GT.M in GL -"RTN","ut1",291,0) +"RTN","ut1",290,0) ; Only non-comment lines are stored. -"RTN","ut1",292,0) +"RTN","ut1",291,0) ; A tag is always stored. Tag,0 is stored only if there is code on the tag line (format list or actual code). -"RTN","ut1",293,0) +"RTN","ut1",292,0) ; tags by themselves don't count toward the total. +"RTN","ut1",293,0) + ; "RTN","ut1",294,0) - ; + N RTN S RTN="" "RTN","ut1",295,0) - N RTN S RTN="" -"RTN","ut1",296,0) F S RTN=$O(RTNS(RTN)) Q:RTN="" D ; for each routine -"RTN","ut1",297,0) +"RTN","ut1",296,0) . N TAG -"RTN","ut1",298,0) +"RTN","ut1",297,0) . S TAG=RTN ; start the tags at the first -"RTN","ut1",299,0) +"RTN","ut1",298,0) . N I,LN F I=2:1 S LN=$T(@TAG+I^@RTN) Q:LN="" D ; for each line, starting with the 3rd line (2 off the first tag) -"RTN","ut1",300,0) +"RTN","ut1",299,0) . . I $E(LN)?1A D QUIT ; formal line -"RTN","ut1",301,0) +"RTN","ut1",300,0) . . . N T ; Terminator -"RTN","ut1",302,0) +"RTN","ut1",301,0) . . . N J F J=1:1:$L(LN) S T=$E(LN,J) Q:T'?1AN ; Loop to... -"RTN","ut1",303,0) +"RTN","ut1",302,0) . . . S TAG=$E(LN,1,J-1) ; Get tag -"RTN","ut1",304,0) +"RTN","ut1",303,0) . . . S @GL@(RTN,TAG)=TAG ; store line -"RTN","ut1",305,0) +"RTN","ut1",304,0) . . . ;I T="(" S @GL@(RTN,TAG,0)=LN ; formal list -"RTN","ut1",306,0) +"RTN","ut1",305,0) . . . I T="(" D ; formal list -"RTN","ut1",307,0) +"RTN","ut1",306,0) . . . . N PCNT,STR,CHR S PCNT=0,STR=$E(LN,J+1,$L(LN)) -"RTN","ut1",308,0) +"RTN","ut1",307,0) . . . . F S CHR=$E(STR),STR=$E(STR,2,$L(STR)) Q:(PCNT=0)&(CHR=")") D -"RTN","ut1",309,0) +"RTN","ut1",308,0) . . . . . I CHR="(" S PCNT=PCNT+1 -"RTN","ut1",310,0) +"RTN","ut1",309,0) . . . . . I CHR=")" S PCNT=PCNT-1 -"RTN","ut1",311,0) +"RTN","ut1",310,0) . . . . . Q -"RTN","ut1",312,0) +"RTN","ut1",311,0) . . . . S STR=$TR(STR,$C(9,32)) -"RTN","ut1",313,0) +"RTN","ut1",312,0) . . . . I $E(STR)=";" QUIT -"RTN","ut1",314,0) +"RTN","ut1",313,0) . . . . S @GL@(RTN,TAG,0)=LN -"RTN","ut1",315,0) +"RTN","ut1",314,0) . . . . Q -"RTN","ut1",316,0) +"RTN","ut1",315,0) . . . E D ; No formal list -"RTN","ut1",317,0) +"RTN","ut1",316,0) . . . . N LNTR S LNTR=$P(LN,TAG,2,999),LNTR=$TR(LNTR,$C(9,32)) ; Get rest of line, Remove spaces and tabs -"RTN","ut1",318,0) +"RTN","ut1",317,0) . . . . I $E(LNTR)=";" QUIT ; Comment -"RTN","ut1",319,0) +"RTN","ut1",318,0) . . . . S @GL@(RTN,TAG,0)=LN ; Otherwise, store for testing -"RTN","ut1",320,0) +"RTN","ut1",319,0) . . . S I=0 ; Start offsets from zero (first one at the for will be 1) -"RTN","ut1",321,0) +"RTN","ut1",320,0) . . I $C(32,9)[$E(LN) D QUIT ; Regular line -"RTN","ut1",322,0) +"RTN","ut1",321,0) . . . N LNTR S LNTR=$TR(LN,$C(32,9,46)) ; Remove all spaces and tabs - JLI 150202 remove periods as well -"RTN","ut1",323,0) +"RTN","ut1",322,0) . . . I $E(LNTR)=";" QUIT ; Comment line -- don't want. -"RTN","ut1",324,0) +"RTN","ut1",323,0) . . . S @GL@(RTN,TAG,I)=LN ; Record line +"RTN","ut1",324,0) + QUIT "RTN","ut1",325,0) - QUIT + ; "RTN","ut1",326,0) - ; -"RTN","ut1",327,0) ACTLINES(GL) ; [Private] $$ ; Count active lines +"RTN","ut1",327,0) + ; "RTN","ut1",328,0) - ; -"RTN","ut1",329,0) N CNT S CNT=0 -"RTN","ut1",330,0) +"RTN","ut1",329,0) N REF S REF=GL -"RTN","ut1",331,0) +"RTN","ut1",330,0) N GLQL S GLQL=$QL(GL) -"RTN","ut1",332,0) +"RTN","ut1",331,0) F S REF=$Q(@REF) Q:REF="" Q:(GL'=$NA(@REF,GLQL)) D -"RTN","ut1",333,0) +"RTN","ut1",332,0) . N REFQL S REFQL=$QL(REF) -"RTN","ut1",334,0) +"RTN","ut1",333,0) . N LASTSUB S LASTSUB=$QS(REF,REFQL) -"RTN","ut1",335,0) +"RTN","ut1",334,0) . I LASTSUB?1.N S CNT=CNT+1 -"RTN","ut1",336,0) +"RTN","ut1",335,0) QUIT CNT +"RTN","ut1",336,0) + ; "RTN","ut1",337,0) - ; -"RTN","ut1",338,0) COVCOV(C,R) ; [Private] - Analyze coverage Cohort vs Result +"RTN","ut1",338,0) + N RTN S RTN="" "RTN","ut1",339,0) - N RTN S RTN="" -"RTN","ut1",340,0) F S RTN=$O(@C@(RTN)) Q:RTN="" D ; For each routine in cohort set -"RTN","ut1",341,0) +"RTN","ut1",340,0) . I '$D(@R@(RTN)) QUIT ; Not present in result set +"RTN","ut1",341,0) + . N TAG S TAG="" "RTN","ut1",342,0) - . N TAG S TAG="" -"RTN","ut1",343,0) . F S TAG=$O(@R@(RTN,TAG)) Q:TAG="" D ; For each tag in the routine in the result set +"RTN","ut1",343,0) + . . N LN S LN="" "RTN","ut1",344,0) - . . N LN S LN="" -"RTN","ut1",345,0) . . F S LN=$O(@R@(RTN,TAG,LN)) Q:LN="" D ; for each line in the tag in the routine in the result set -"RTN","ut1",346,0) +"RTN","ut1",345,0) . . . I $D(@C@(RTN,TAG,LN)) K ^(LN) ; if present in cohort, kill off +"RTN","ut1",346,0) + QUIT "RTN","ut1",347,0) - QUIT + ; "RTN","ut1",348,0) - ; -"RTN","ut1",349,0) COVRPT(C,S,R,V) ; [Private] - Coverage Report +"RTN","ut1",349,0) + ; C = COHORT - Global name "RTN","ut1",350,0) - ; C = COHORT - Global name + ; S = SURVIVORS - Global name "RTN","ut1",351,0) - ; S = SURVIVORS - Global name + ; R = RESULT - Global name "RTN","ut1",352,0) - ; R = RESULT - Global name -"RTN","ut1",353,0) ; V = Verbosity - Scalar from -1 to 3 -"RTN","ut1",354,0) +"RTN","ut1",353,0) ; JLI 150702 - modified to be able to do unit tests on setting up the text via COVRPTLS -"RTN","ut1",355,0) +"RTN","ut1",354,0) N X,I -"RTN","ut1",356,0) +"RTN","ut1",355,0) S X=$NA(^TMP("%ut1-covrpt",$J)) K @X -"RTN","ut1",357,0) +"RTN","ut1",356,0) D COVRPTLS(C,S,R,V,X) -"RTN","ut1",358,0) +"RTN","ut1",357,0) I '$$ISUTEST^%ut() F I=1:1 W:$D(@X@(I)) !,@X@(I) I '$D(@X@(I)) K @X Q -"RTN","ut1",359,0) +"RTN","ut1",358,0) Q +"RTN","ut1",359,0) + ; "RTN","ut1",360,0) - ; -"RTN","ut1",361,0) COVRPTLS(C,S,R,V,X) ; +"RTN","ut1",361,0) + ; "RTN","ut1",362,0) - ; -"RTN","ut1",363,0) N LINNUM S LINNUM=0 -"RTN","ut1",364,0) +"RTN","ut1",363,0) N ORIGLINES S ORIGLINES=$$ACTLINES(C) -"RTN","ut1",365,0) +"RTN","ut1",364,0) N LEFTLINES S LEFTLINES=$$ACTLINES(S) +"RTN","ut1",365,0) + ;W !! "RTN","ut1",366,0) - ;W !! + S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" "RTN","ut1",367,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",368,0) ;W "ORIG: "_ORIGLINES,! -"RTN","ut1",369,0) +"RTN","ut1",368,0) S LINNUM=LINNUM+1,@X@(LINNUM)="ORIG: "_ORIGLINES -"RTN","ut1",370,0) +"RTN","ut1",369,0) ;W "LEFT: "_LEFTLINES,! -"RTN","ut1",371,0) +"RTN","ut1",370,0) S LINNUM=LINNUM+1,@X@(LINNUM)="LEFT: "_LEFTLINES -"RTN","ut1",372,0) +"RTN","ut1",371,0) ;W "COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00),! -"RTN","ut1",373,0) +"RTN","ut1",372,0) S LINNUM=LINNUM+1,@X@(LINNUM)="COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00) -"RTN","ut1",374,0) +"RTN","ut1",373,0) ;W !! -"RTN","ut1",375,0) +"RTN","ut1",374,0) S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",376,0) +"RTN","ut1",375,0) ;W "BY ROUTINE:",! -"RTN","ut1",377,0) +"RTN","ut1",376,0) S LINNUM=LINNUM+1,@X@(LINNUM)="BY ROUTINE:" -"RTN","ut1",378,0) +"RTN","ut1",377,0) I V=0 QUIT ; No verbosity. Don't print routine detail -"RTN","ut1",379,0) +"RTN","ut1",378,0) N RTN S RTN="" +"RTN","ut1",379,0) + F S RTN=$O(@C@(RTN)) Q:RTN="" D "RTN","ut1",380,0) - F S RTN=$O(@C@(RTN)) Q:RTN="" D + . N O S O=$$ACTLINES($NA(@C@(RTN))) "RTN","ut1",381,0) - . N O S O=$$ACTLINES($NA(@C@(RTN))) + . N L S L=$$ACTLINES($NA(@S@(RTN))) "RTN","ut1",382,0) - . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",383,0) . ;W ?3,RTN,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",384,0) +"RTN","ut1",383,0) . N XX S XX=" "_RTN_" ",XX=$E(XX,1,20) -"RTN","ut1",385,0) +"RTN","ut1",384,0) . S LINNUM=LINNUM+1,@X@(LINNUM)=XX+$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",386,0) +"RTN","ut1",385,0) . I V=1 QUIT ; Just print the routine coverage for V=1 -"RTN","ut1",387,0) +"RTN","ut1",386,0) . N TAG S TAG="" +"RTN","ut1",387,0) + . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D "RTN","ut1",388,0) - . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D + . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) "RTN","ut1",389,0) - . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) + . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) "RTN","ut1",390,0) - . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",391,0) . . ;W ?5,TAG,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",392,0) +"RTN","ut1",391,0) . . S XX=" "_TAG_" ",XX=$E(XX,1,20) -"RTN","ut1",393,0) +"RTN","ut1",392,0) . . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",394,0) +"RTN","ut1",393,0) . . I V=2 QUIT ; Just print routine/tags coverage for V=2; V=3 print uncovered lines -"RTN","ut1",395,0) +"RTN","ut1",394,0) . . N LN S LN="" -"RTN","ut1",396,0) +"RTN","ut1",395,0) . . ;F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" W TAG_"+"_LN_": "_^(LN),! -"RTN","ut1",397,0) +"RTN","ut1",396,0) . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S LINNUM=LINNUM+1,@X@(LINNUM)=TAG_"+"_LN_": "_^(LN) -"RTN","ut1",398,0) +"RTN","ut1",397,0) . . Q -"RTN","ut1",399,0) +"RTN","ut1",398,0) . Q +"RTN","ut1",399,0) + QUIT "RTN","ut1",400,0) - QUIT + ; "RTN","ut1",401,0) - ; -"RTN","ut1",402,0) COVRPTGL(C,S,R,OUT) ; [Private] - Coverage Global for silent invokers -"RTN","ut1",403,0) +"RTN","ut1",402,0) ; C = COHORT - Global name -"RTN","ut1",404,0) +"RTN","ut1",403,0) ; S = SURVIVORS - Global name -"RTN","ut1",405,0) +"RTN","ut1",404,0) ; R = RESULT - Global name -"RTN","ut1",406,0) +"RTN","ut1",405,0) ; OUT = OUTPUT - Global name -"RTN","ut1",407,0) +"RTN","ut1",406,0) ; -"RTN","ut1",408,0) +"RTN","ut1",407,0) N O S O=$$ACTLINES(C) -"RTN","ut1",409,0) +"RTN","ut1",408,0) N L S L=$$ACTLINES(S) -"RTN","ut1",410,0) +"RTN","ut1",409,0) S @OUT=(O-L)_"/"_O -"RTN","ut1",411,0) +"RTN","ut1",410,0) N RTN,TAG,LN S (RTN,TAG,LN)="" -"RTN","ut1",412,0) +"RTN","ut1",411,0) F S RTN=$O(@C@(RTN)) Q:RTN="" D -"RTN","ut1",413,0) +"RTN","ut1",412,0) . N O S O=$$ACTLINES($NA(@C@(RTN))) -"RTN","ut1",414,0) +"RTN","ut1",413,0) . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",415,0) +"RTN","ut1",414,0) . S @OUT@(RTN)=(O-L)_"/"_O -"RTN","ut1",416,0) +"RTN","ut1",415,0) . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D -"RTN","ut1",417,0) +"RTN","ut1",416,0) . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) -"RTN","ut1",418,0) +"RTN","ut1",417,0) . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",419,0) +"RTN","ut1",418,0) . . S @OUT@(RTN,TAG)=(O-L)_"/"_O -"RTN","ut1",420,0) +"RTN","ut1",419,0) . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S @OUT@(RTN,TAG,LN)=@S@(RTN,TAG,LN) -"RTN","ut1",421,0) +"RTN","ut1",420,0) QUIT -"RTN","ut1",422,0) +"RTN","ut1",421,0) ; "RTN","utcover") -0^10^B33175345 +0^10^B32934852 "RTN","utcover",1,0) -%utcover ;JLI - generic coverage and unit test runner ;08/10/15 14:32 +%utcover ;JLI - generic coverage and unit test runner ;09/14/15 09:37 "RTN","utcover",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 11 "RTN","utcover",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utcover",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utcover",5,0) ; Original routine authored by Joel L. Ivey +"RTN","utcover",5,0) + ; "RTN","utcover",6,0) - ; -"RTN","utcover",7,0) D EN^%ut("%uttcovr") ; unit tests +"RTN","utcover",7,0) + Q "RTN","utcover",8,0) - Q + ; "RTN","utcover",9,0) - ; -"RTN","utcover",10,0) MULTAPIS(TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS -"RTN","utcover",11,0) +"RTN","utcover",10,0) ; can be run from %ut using D MULTAPIS^%ut(.TESTROUS) -"RTN","utcover",12,0) +"RTN","utcover",11,0) ; input TESTROUS - passed by reference - array of routine names to run tests for -"RTN","utcover",13,0) +"RTN","utcover",12,0) ; specify those to be called directly by including ^ as part of -"RTN","utcover",14,0) +"RTN","utcover",13,0) ; TAG^ROUTINE or ^ROUTINE. -"RTN","utcover",15,0) +"RTN","utcover",14,0) ; ROUTINE names without a ^ will be called as EN^%ut("ROUTINE") -"RTN","utcover",16,0) +"RTN","utcover",15,0) ; Sometimes to get complete coverage, different entry points may -"RTN","utcover",17,0) +"RTN","utcover",16,0) ; need to be called (e.g., at top and for VERBOSE), these should each -"RTN","utcover",18,0) +"RTN","utcover",17,0) ; be included. -"RTN","utcover",19,0) +"RTN","utcover",18,0) ; If the subscript is a number, it will take the list of comma separated -"RTN","utcover",20,0) +"RTN","utcover",19,0) ; values as the routines. If the the subscript is not a number, it will -"RTN","utcover",21,0) +"RTN","utcover",20,0) ; take it as a routine to be added to the list, then if the value of the -"RTN","utcover",22,0) +"RTN","utcover",21,0) ; contains a comma separated list of routines, they will be added as well. -"RTN","utcover",23,0) +"RTN","utcover",22,0) ; Thus a value of -"RTN","utcover",24,0) +"RTN","utcover",23,0) ; TESTROUS(1)="A^ROU1,^ROU1,^ROU2,ROU3" -"RTN","utcover",25,0) +"RTN","utcover",24,0) ; or a value of -"RTN","utcover",26,0) +"RTN","utcover",25,0) ; TESTROUS("A^ROU1")="^ROU1,^ROU2,ROU3" -"RTN","utcover",27,0) +"RTN","utcover",26,0) ; will both result in tests for -"RTN","utcover",28,0) +"RTN","utcover",27,0) ; D A^ROU1,^ROU1,^ROU2,EN^%ut("ROU3") +"RTN","utcover",28,0) + K ^TMP("%utcover",$J,"TESTROUS") "RTN","utcover",29,0) - K ^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",30,0) M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS -"RTN","utcover",31,0) +"RTN","utcover",30,0) D COVENTRY +"RTN","utcover",31,0) + K ^TMP("%utcover",$J,"TESTROUS") "RTN","utcover",32,0) - K ^TMP("%utcover",$J,"TESTROUS") + Q "RTN","utcover",33,0) - Q + ; "RTN","utcover",34,0) - ; -"RTN","utcover",35,0) COVENTRY ; setup of COVERAGE NEWs most variables, so TESTROUS passed by global +"RTN","utcover",35,0) + ; "RTN","utcover",36,0) - ; -"RTN","utcover",37,0) N I,ROU,VAL,VALS,UTDATA,TESTS,TESTROUS -"RTN","utcover",38,0) +"RTN","utcover",37,0) M TESTROUS=^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",39,0) +"RTN","utcover",38,0) S ROU="" F S ROU=$O(TESTROUS(ROU)) Q:ROU="" D -"RTN","utcover",40,0) +"RTN","utcover",39,0) . I ROU'=+ROU S TESTS(ROU)="" -"RTN","utcover",41,0) +"RTN","utcover",40,0) . F I=1:1 S VAL=$P(TESTROUS(ROU),",",I) Q:VAL="" S TESTS(VAL)="" +"RTN","utcover",41,0) + . Q "RTN","utcover",42,0) - . Q -"RTN","utcover",43,0) S ROU="" F S ROU=$O(TESTS(ROU)) Q:ROU="" D -"RTN","utcover",44,0) +"RTN","utcover",43,0) . W !!,"------------------- RUNNING ",ROU," -------------------" -"RTN","utcover",45,0) +"RTN","utcover",44,0) . I ROU[U D @ROU -"RTN","utcover",46,0) +"RTN","utcover",45,0) . I ROU'[U D @("EN^%ut("""_ROU_""")") -"RTN","utcover",47,0) +"RTN","utcover",46,0) . D GETUTVAL^%ut(.UTDATA) +"RTN","utcover",47,0) + . Q "RTN","utcover",48,0) - . Q -"RTN","utcover",49,0) I $D(UTDATA) D LSTUTVAL^%ut(.UTDATA) +"RTN","utcover",49,0) + Q "RTN","utcover",50,0) - Q + ; "RTN","utcover",51,0) - ; -"RTN","utcover",52,0) COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ; run coverage analysis for multiple routines and entry points -"RTN","utcover",53,0) +"RTN","utcover",52,0) ; can be run from %ut using D COVERAGE^%ut(ROUNMSP,.TESTROUS,.XCLDROUS,RESLTLVL) -"RTN","utcover",54,0) +"RTN","utcover",53,0) ; input ROUNMSP - Namespace for routine(s) to be analyzed -"RTN","utcover",55,0) +"RTN","utcover",54,0) ; ROUNAME will result in only the routine ROUNAME being analyzed -"RTN","utcover",56,0) +"RTN","utcover",55,0) ; ROUN* will result in all routines beginning with ROUN being analyzed -"RTN","utcover",57,0) +"RTN","utcover",56,0) ; input TESTROUS - passed by reference - see TESTROUS description for JUSTTEST -"RTN","utcover",58,0) +"RTN","utcover",57,0) ; input XCLDROUS - passed by reference - routines passed in a manner similar to TESTROUS, -"RTN","utcover",59,0) +"RTN","utcover",58,0) ; but only the routine names, whether as arguments or a comma separated -"RTN","utcover",60,0) +"RTN","utcover",59,0) ; list of routines, will be excluded from the analysis of coverage. These -"RTN","utcover",61,0) +"RTN","utcover",60,0) ; would normally be names of routines which are only for unit tests, or -"RTN","utcover",62,0) +"RTN","utcover",61,0) ; others which should not be included in the analysis for some reason. -"RTN","utcover",63,0) +"RTN","utcover",62,0) ; input RESLTLVL - This value determines the amount of information to be generated for the -"RTN","utcover",64,0) +"RTN","utcover",63,0) ; analysis. A missing or null value will be considered to be level 1 -"RTN","utcover",65,0) +"RTN","utcover",64,0) ; 1 - Listing of analysis only for routine overall -"RTN","utcover",66,0) +"RTN","utcover",65,0) ; 2 - Listing of analysis for routine overall and for each TAG -"RTN","utcover",67,0) +"RTN","utcover",66,0) ; 3 - Full analysis for each tag, and lists out those lines which were -"RTN","utcover",68,0) +"RTN","utcover",67,0) ; not executed during the analysis +"RTN","utcover",68,0) + ; "RTN","utcover",69,0) - ; -"RTN","utcover",70,0) N I,ROU,TYPE,VAL,XCLUDE -"RTN","utcover",71,0) +"RTN","utcover",70,0) S RESLTLVL=$G(RESLTLVL,1) -"RTN","utcover",72,0) +"RTN","utcover",71,0) I (RESLTLVL<1) S RESLTLVL=1 -"RTN","utcover",73,0) +"RTN","utcover",72,0) I (RESLTLVL>3) S RESLTLVL=3 -"RTN","utcover",74,0) +"RTN","utcover",73,0) M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS ; -"RTN","utcover",75,0) +"RTN","utcover",74,0) D COV^%ut1(ROUNMSP,"D COVENTRY^%utcover",-1) -"RTN","utcover",76,0) +"RTN","utcover",75,0) K ^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",77,0) +"RTN","utcover",76,0) S ROU="" F S ROU=$O(XCLDROUS(ROU)) Q:ROU="" D -"RTN","utcover",78,0) +"RTN","utcover",77,0) . I ROU'=+ROU S XCLUDE(ROU)="" -"RTN","utcover",79,0) +"RTN","utcover",78,0) . F I=1:1 S VAL=$P(XCLDROUS(ROU),",",I) Q:VAL="" S XCLUDE(VAL)="" +"RTN","utcover",79,0) + . Q "RTN","utcover",80,0) - . Q -"RTN","utcover",81,0) N TEXTGLOB S TEXTGLOB=$NA(^TMP("%utcover-text",$J)) K @TEXTGLOB -"RTN","utcover",82,0) +"RTN","utcover",81,0) D LIST(.XCLUDE,RESLTLVL,TEXTGLOB) -"RTN","utcover",83,0) +"RTN","utcover",82,0) F I=1:1 Q:'$D(@TEXTGLOB@(I)) W !,@TEXTGLOB@(I) -"RTN","utcover",84,0) +"RTN","utcover",83,0) K @TEXTGLOB +"RTN","utcover",84,0) + Q "RTN","utcover",85,0) - Q + ; "RTN","utcover",86,0) - ; -"RTN","utcover",87,0) LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; -"RTN","utcover",88,0) +"RTN","utcover",87,0) ; ZEXCEPT: TYPE1 - NEWed and set below for recursion -"RTN","utcover",89,0) +"RTN","utcover",88,0) ; input - ROULIST - a comma separated list of routine names that will -"RTN","utcover",90,0) +"RTN","utcover",89,0) ; be used to identify desired routines. Any name -"RTN","utcover",91,0) +"RTN","utcover",90,0) ; that begins with one of the specified values will -"RTN","utcover",92,0) +"RTN","utcover",91,0) ; be included -"RTN","utcover",93,0) +"RTN","utcover",92,0) ; input - TYPE - value indicating amount of detail desired -"RTN","utcover",94,0) +"RTN","utcover",93,0) ; 3=full with listing of untouched lines -"RTN","utcover",95,0) +"RTN","utcover",94,0) ; 2=moderated with listing by tags -"RTN","utcover",96,0) +"RTN","utcover",95,0) ; 1=summary with listing by routine -"RTN","utcover",97,0) +"RTN","utcover",96,0) ; input - TEXTGLOB - closed global location in which text is returned -"RTN","utcover",98,0) +"RTN","utcover",97,0) ; input - GLOB - used for unit tests - specifies global to work with -"RTN","utcover",99,0) +"RTN","utcover",98,0) ; so that coverage data is not impacted +"RTN","utcover",99,0) + ; "RTN","utcover",100,0) - ; -"RTN","utcover",101,0) N CURRCOV,CURRLIN,LINCOV,LINE,LINTOT,ROULIST,ROUNAME,TAG,TOTCOV,TOTLIN,XVAL +"RTN","utcover",101,0) + ; "RTN","utcover",102,0) - ; -"RTN","utcover",103,0) I '$D(LINNUM) S LINNUM=0 ; initialize on first entry -"RTN","utcover",104,0) +"RTN","utcover",103,0) I '$D(GLOB) N GLOB S GLOB=$NA(^TMP("%utCOVREPORT",$J)) -"RTN","utcover",105,0) +"RTN","utcover",104,0) D TRIMDATA(.XCLDROUS,GLOB) ; remove undesired routines from data +"RTN","utcover",105,0) + ; "RTN","utcover",106,0) - ; -"RTN","utcover",107,0) N JOB,NAME,BASE -"RTN","utcover",108,0) +"RTN","utcover",107,0) S TOTCOV=0,TOTLIN=0 -"RTN","utcover",109,0) +"RTN","utcover",108,0) ; F NAME="%utCOVREPORT","%utCOVRESULT","%utCOVCOHORT","%utCOVCOHORTSAV" D -"RTN","utcover",110,0) +"RTN","utcover",109,0) I TYPE>1 S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D +"RTN","utcover",110,0) + . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) "RTN","utcover",111,0) - . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) -"RTN","utcover",112,0) . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" +"RTN","utcover",112,0) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") "RTN","utcover",113,0) - . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") -"RTN","utcover",114,0) . I TYPE>1 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" - "_$S(TYPE=2:"Summary",1:"Detailed Breakdown") -"RTN","utcover",115,0) +"RTN","utcover",114,0) . S TAG="" F S TAG=$O(@GLOB@(ROUNAME,TAG)) Q:TAG="" S XVAL=^(TAG) D -"RTN","utcover",116,0) +"RTN","utcover",115,0) . . S LINCOV=$P(XVAL,"/"),LINTOT=$P(XVAL,"/",2) -"RTN","utcover",117,0) +"RTN","utcover",116,0) . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" Tag "_TAG_"^"_ROUNAME_" "_LINCOV_" out of "_LINTOT_" lines covered" -"RTN","utcover",118,0) +"RTN","utcover",117,0) . . I TYPE=2 Q -"RTN","utcover",119,0) +"RTN","utcover",118,0) . . I LINCOV=LINTOT Q -"RTN","utcover",120,0) +"RTN","utcover",119,0) . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" the following is a list of the lines **NOT** covered" -"RTN","utcover",121,0) +"RTN","utcover",120,0) . . S LINE="" F S LINE=$O(@GLOB@(ROUNAME,TAG,LINE)) Q:LINE="" D -"RTN","utcover",122,0) +"RTN","utcover",121,0) . . . I LINE=0 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_" "_@GLOB@(ROUNAME,TAG,LINE) Q -"RTN","utcover",123,0) +"RTN","utcover",122,0) . . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_"+"_LINE_" "_@GLOB@(ROUNAME,TAG,LINE) -"RTN","utcover",124,0) +"RTN","utcover",123,0) . . . Q -"RTN","utcover",125,0) +"RTN","utcover",124,0) . . Q +"RTN","utcover",125,0) + . Q "RTN","utcover",126,0) - . Q -"RTN","utcover",127,0) ; for type=3 generate a summary at bottom after detail -"RTN","utcover",128,0) +"RTN","utcover",127,0) I TYPE=3 N TYPE1 S TYPE1=2 D LIST(.XCLDROUS,2,TEXTGLOB,GLOB,.LINNUM) K TYPE1 -"RTN","utcover",129,0) +"RTN","utcover",128,0) I TYPE=2,$G(TYPE1) Q ; CAME IN FROM ABOVE LINE -"RTN","utcover",130,0) +"RTN","utcover",129,0) ; summarize by just routine name +"RTN","utcover",130,0) + S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" "RTN","utcover",131,0) - S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" -"RTN","utcover",132,0) S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D -"RTN","utcover",133,0) +"RTN","utcover",132,0) . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) -"RTN","utcover",134,0) +"RTN","utcover",133,0) . S TOTCOV=TOTCOV+CURRCOV,TOTLIN=TOTLIN+CURRLIN -"RTN","utcover",135,0) +"RTN","utcover",134,0) . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") -"RTN","utcover",136,0) +"RTN","utcover",135,0) . Q -"RTN","utcover",137,0) +"RTN","utcover",136,0) S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" -"RTN","utcover",138,0) +"RTN","utcover",137,0) S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Overall Analysis "_TOTCOV_" out of "_TOTLIN_" lines covered"_$S(TOTLIN>0:" ("_$P((100*TOTCOV)/TOTLIN,".")_"% coverage)",1:"") +"RTN","utcover",138,0) + Q "RTN","utcover",139,0) - Q -"RTN","utcover",140,0) ; -"RTN","utcover",141,0) +"RTN","utcover",140,0) TRIMDATA(ROULIST,GLOB) ; -"RTN","utcover",142,0) +"RTN","utcover",141,0) N ROUNAME -"RTN","utcover",143,0) +"RTN","utcover",142,0) S ROUNAME="" F S ROUNAME=$O(ROULIST(ROUNAME)) Q:ROUNAME="" K @GLOB@(ROUNAME) -"RTN","utcover",144,0) +"RTN","utcover",143,0) Q -"RTN","utcover",145,0) +"RTN","utcover",144,0) ; "RTN","utt1") -0^3^B29220013 +0^3^B28788704 "RTN","utt1",1,0) -%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;08/10/15 14:32 +%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;09/14/15 09:38 "RTN","utt1",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 11 "RTN","utt1",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt1",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt1",5,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 -"RTN","utt1",6,0) +"RTN","utt1",5,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","utt1",6,0) + ; "RTN","utt1",7,0) - ; -"RTN","utt1",8,0) ; THIS ROUTINE IS THE UNIFIED UNIT TESTER FOR ALL OF M-UNIT. +"RTN","utt1",8,0) + ; "RTN","utt1",9,0) - ; -"RTN","utt1",10,0) ; Dear Users, +"RTN","utt1",10,0) + ; "RTN","utt1",11,0) - ; -"RTN","utt1",12,0) ; I know about about the irony of a test suite for the testing suite, -"RTN","utt1",13,0) +"RTN","utt1",12,0) ; so stop snikering. Aside from that, it's actually going to be hard. +"RTN","utt1",13,0) + ; "RTN","utt1",14,0) - ; -"RTN","utt1",15,0) ; Truly yours, +"RTN","utt1",15,0) + ; "RTN","utt1",16,0) - ; -"RTN","utt1",17,0) ; Sam H +"RTN","utt1",17,0) + ; "RTN","utt1",18,0) - ; -"RTN","utt1",19,0) D EN^%ut($T(+0),1) ; Run tests here, be verbose. +"RTN","utt1",19,0) + QUIT "RTN","utt1",20,0) - QUIT + ; "RTN","utt1",21,0) - ; -"RTN","utt1",22,0) STARTUP ; M-Unit Start-Up - This runs before anything else. -"RTN","utt1",23,0) +"RTN","utt1",22,0) ; ZEXCEPT: KBANCOUNT - created here, removed in SHUTDOWN -"RTN","utt1",24,0) +"RTN","utt1",23,0) S ^TMP($J,"%ut","STARTUP")="" -"RTN","utt1",25,0) +"RTN","utt1",24,0) S KBANCOUNT=1 +"RTN","utt1",25,0) + QUIT "RTN","utt1",26,0) - QUIT -"RTN","utt1",27,0) ; -"RTN","utt1",28,0) +"RTN","utt1",27,0) SHUTDOWN ; M-Unit Shutdown - This runs after everything else is done. -"RTN","utt1",29,0) +"RTN","utt1",28,0) ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed here -"RTN","utt1",30,0) +"RTN","utt1",29,0) K ^TMP($J,"%ut","STARTUP") -"RTN","utt1",31,0) +"RTN","utt1",30,0) K KBANCOUNT -"RTN","utt1",32,0) +"RTN","utt1",31,0) QUIT +"RTN","utt1",32,0) + ; "RTN","utt1",33,0) ; "RTN","utt1",34,0) ; "RTN","utt1",35,0) - ; -"RTN","utt1",36,0) SETUP ; This runs before every test. +"RTN","utt1",36,0) + ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN "RTN","utt1",37,0) - ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",38,0) S KBANCOUNT=KBANCOUNT+1 +"RTN","utt1",38,0) + QUIT "RTN","utt1",39,0) - QUIT -"RTN","utt1",40,0) ; -"RTN","utt1",41,0) +"RTN","utt1",40,0) TEARDOWN ; This runs after every test -"RTN","utt1",42,0) +"RTN","utt1",41,0) ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",43,0) +"RTN","utt1",42,0) S KBANCOUNT=KBANCOUNT-1 -"RTN","utt1",44,0) +"RTN","utt1",43,0) QUIT +"RTN","utt1",44,0) + ; "RTN","utt1",45,0) ; "RTN","utt1",46,0) ; "RTN","utt1",47,0) - ; -"RTN","utt1",48,0) T1 ; @TEST - Make sure Start-up Ran -"RTN","utt1",49,0) +"RTN","utt1",48,0) D CHKTF($D(^TMP($J,"%ut","STARTUP")),"Start-up node on ^TMP must exist") +"RTN","utt1",49,0) + QUIT "RTN","utt1",50,0) - QUIT + ; "RTN","utt1",51,0) - ; -"RTN","utt1",52,0) T2 ; @TEST - Make sure Set-up runs +"RTN","utt1",52,0) + ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN "RTN","utt1",53,0) - ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",54,0) D CHKEQ(KBANCOUNT,2,"KBANCount not incremented properly at SETUP") +"RTN","utt1",54,0) + QUIT "RTN","utt1",55,0) - QUIT + ; "RTN","utt1",56,0) - ; -"RTN","utt1",57,0) T3 ; @TEST - Make sure Teardown runs -"RTN","utt1",58,0) +"RTN","utt1",57,0) ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",59,0) +"RTN","utt1",58,0) D CHKEQ(KBANCOUNT,2,"KBANCount not decremented properly at TEARDOWN") +"RTN","utt1",59,0) + QUIT "RTN","utt1",60,0) - QUIT + ; "RTN","utt1",61,0) - ; -"RTN","utt1",62,0) T4 ; Specified in XTMTAG -"RTN","utt1",63,0) +"RTN","utt1",62,0) ; 140731 JLI - note that this will fail when run from the GUI runner, since it calls each tag separately -"RTN","utt1",64,0) +"RTN","utt1",63,0) ; ZEXCEPT: %utETRY - newed and created in EN1^%ut -"RTN","utt1",65,0) +"RTN","utt1",64,0) ; ZEXCEPT: %utGUI -- CONDITIONALLY DEFINED BY GUINEXT^%ut -"RTN","utt1",66,0) +"RTN","utt1",65,0) I $G(%utGUI) D CHKEQ(%utETRY,"T4","T4 should be the value for %utETRY in the GUI Runner") -"RTN","utt1",67,0) +"RTN","utt1",66,0) I '$G(%utGUI) D CHKEQ(%utETRY(4),"T4","T4 should be the collected as the fourth entry in %utETRY") +"RTN","utt1",67,0) + QUIT "RTN","utt1",68,0) - QUIT + ; "RTN","utt1",69,0) - ; -"RTN","utt1",70,0) T5 ; ditto +"RTN","utt1",70,0) + ; ZEXCEPT: %ut - NEWed and created in EN1^%ut "RTN","utt1",71,0) - ; ZEXCEPT: %ut - NEWed and created in EN1^%ut -"RTN","utt1",72,0) D CHKTF(0,"This is an intentional failure.") -"RTN","utt1",73,0) +"RTN","utt1",72,0) D CHKEQ(%ut("FAIL"),1,"By this point, we should have failed one test") -"RTN","utt1",74,0) +"RTN","utt1",73,0) D FAIL^%ut("Intentionally throwing a failure") -"RTN","utt1",75,0) +"RTN","utt1",74,0) D CHKEQ(%ut("FAIL"),2,"By this point, we should have failed two tests") -"RTN","utt1",76,0) +"RTN","utt1",75,0) ; S %ut("FAIL")=0 ; Okay... Boy's and Girls... as the developer I can do that. -"RTN","utt1",77,0) +"RTN","utt1",76,0) QUIT -"RTN","utt1",78,0) +"RTN","utt1",77,0) ; -"RTN","utt1",79,0) +"RTN","utt1",78,0) T6 ; ditto -"RTN","utt1",80,0) +"RTN","utt1",79,0) ; ZEXCEPT: %ut - NEWed and created in EN1^%ut -"RTN","utt1",81,0) +"RTN","utt1",80,0) N TESTCOUNT S TESTCOUNT=%ut("CHK") +"RTN","utt1",81,0) + D SUCCEED^%ut "RTN","utt1",82,0) D SUCCEED^%ut "RTN","utt1",83,0) - D SUCCEED^%ut -"RTN","utt1",84,0) D CHKEQ(%ut("CHK"),TESTCOUNT+2,"Succeed should increment the number of tests") -"RTN","utt1",85,0) +"RTN","utt1",84,0) QUIT -"RTN","utt1",86,0) +"RTN","utt1",85,0) ; -"RTN","utt1",87,0) +"RTN","utt1",86,0) T7 ; Make sure we write to principal even though we are on another device -"RTN","utt1",88,0) +"RTN","utt1",87,0) ; This is a rather difficult test to carry out for GT.M and Cache... -"RTN","utt1",89,0) +"RTN","utt1",88,0) ; ZEXCEPT: GetEnviron,Util,delete,newversion,readonly - not really variables -"RTN","utt1",90,0) +"RTN","utt1",89,0) N D -"RTN","utt1",91,0) +"RTN","utt1",90,0) I +$SY=47 S D="/tmp/test.txt" ; All GT.M ; VMS not supported. -"RTN","utt1",92,0) +"RTN","utt1",91,0) I +$SY=0 D ; All Cache -"RTN","utt1",93,0) +"RTN","utt1",92,0) . I $ZVERSION(1)=2 S D=$SYSTEM.Util.GetEnviron("temp")_"\test.txt" I 1 ; Windows -"RTN","utt1",94,0) +"RTN","utt1",93,0) . E S D="/tmp/test.txt" ; not windows; VMS not supported. -"RTN","utt1",95,0) +"RTN","utt1",94,0) I +$SY=0 O D:"NWS" ; Cache new file -"RTN","utt1",96,0) +"RTN","utt1",95,0) I +$SY=47 O D:(newversion) ; GT.M new file -"RTN","utt1",97,0) +"RTN","utt1",96,0) U D +"RTN","utt1",97,0) + WRITE "HELLO",! "RTN","utt1",98,0) WRITE "HELLO",! "RTN","utt1",99,0) - WRITE "HELLO",! + C D "RTN","utt1",100,0) - C D + ; "RTN","utt1",101,0) - ; -"RTN","utt1",102,0) ; Now open back the file, and read the hello, but open in read only so -"RTN","utt1",103,0) +"RTN","utt1",102,0) ; M-Unit will error out if it will write something out there. +"RTN","utt1",103,0) + ; "RTN","utt1",104,0) - ; -"RTN","utt1",105,0) - ; Per VISTA conventions, current IO device should be IO, old is IO(0). -"RTN","utt1",106,0) - ; -"RTN","utt1",107,0) I +$SY=0 O D:"R" -"RTN","utt1",108,0) +"RTN","utt1",105,0) I +$SY=47 O D:(readonly) -"RTN","utt1",109,0) +"RTN","utt1",106,0) U D -"RTN","utt1",110,0) +"RTN","utt1",107,0) N X READ X:1 -"RTN","utt1",111,0) +"RTN","utt1",108,0) D CHKTF(X="HELLO") ; This should write to the screen the dot not to the file. -"RTN","utt1",112,0) +"RTN","utt1",109,0) D CHKTF(($$LO($IO)=$$LO(D)),"IO device didn't get reset back") ; $$LO is b/c of a bug in Cache/Windows. $IO is not the same cas D. -"RTN","utt1",113,0) +"RTN","utt1",110,0) I +$SY=0 C D:"D" -"RTN","utt1",114,0) +"RTN","utt1",111,0) I +$SY=47 C D:(delete) -"RTN","utt1",115,0) +"RTN","utt1",112,0) U $P -"RTN","utt1",116,0) +"RTN","utt1",113,0) S IO=$IO -"RTN","utt1",117,0) +"RTN","utt1",114,0) QUIT -"RTN","utt1",118,0) +"RTN","utt1",115,0) ; -"RTN","utt1",119,0) +"RTN","utt1",116,0) ; At the moment T8^%utt1 throws a fail, with no message -"RTN","utt1",120,0) +"RTN","utt1",117,0) ; in the GUI runner. For some reason, both X and Y -"RTN","utt1",121,0) +"RTN","utt1",118,0) ; variables are returned as null strings, while in the -"RTN","utt1",122,0) +"RTN","utt1",119,0) ; command line runner, Y has a value containing the -"RTN","utt1",123,0) +"RTN","utt1",120,0) ; word being sought -"RTN","utt1",124,0) +"RTN","utt1",121,0) ; -"RTN","utt1",125,0) +"RTN","utt1",122,0) T8 ; If IO starts with another device, write to that device as if it's the pricipal device -"RTN","utt1",126,0) +"RTN","utt1",123,0) ; ZEXCEPT: GetEnviron,Util,delete,newversion,readonly - not really variables -"RTN","utt1",127,0) +"RTN","utt1",124,0) N D -"RTN","utt1",128,0) +"RTN","utt1",125,0) I +$SY=47 S D="/tmp/test.txt" ; All GT.M ; VMS not supported. -"RTN","utt1",129,0) +"RTN","utt1",126,0) I +$SY=0 D ; All Cache -"RTN","utt1",130,0) +"RTN","utt1",127,0) . I $ZVERSION(1)=2 S D=$SYSTEM.Util.GetEnviron("temp")_"\test.txt" I 1 ; Windows -"RTN","utt1",131,0) +"RTN","utt1",128,0) . E S D="/tmp/test.txt" ; not windows; VMS not supported. -"RTN","utt1",132,0) +"RTN","utt1",129,0) I +$SY=0 O D:"NWS" ; Cache new file -"RTN","utt1",133,0) +"RTN","utt1",130,0) I +$SY=47 O D:(newversion) ; GT.M new file -"RTN","utt1",134,0) +"RTN","utt1",131,0) S IO=D -"RTN","utt1",135,0) +"RTN","utt1",132,0) U D -"RTN","utt1",136,0) +"RTN","utt1",133,0) D ^%utt4 ; Run some Unit Tests -"RTN","utt1",137,0) +"RTN","utt1",134,0) C D -"RTN","utt1",138,0) +"RTN","utt1",135,0) I +$SY=0 O D:"R" ; Cache read only -"RTN","utt1",139,0) +"RTN","utt1",136,0) I +$SY=47 O D:(readonly) ; GT.M read only -"RTN","utt1",140,0) +"RTN","utt1",137,0) U D -"RTN","utt1",141,0) +"RTN","utt1",138,0) N X,Y,Z R X:1,Y:1,Z:1 -"RTN","utt1",142,0) +"RTN","utt1",139,0) I +$SY=0 C D:"D" -"RTN","utt1",143,0) +"RTN","utt1",140,0) I +$SY=47 C D:(delete) -"RTN","utt1",144,0) +"RTN","utt1",141,0) ;D CHKTF(Y["MAIN") ; JLI 140829 commented out, gui doesn't run verbose -"RTN","utt1",145,0) +"RTN","utt1",142,0) D CHKTF((Y["MAIN")!(Z["Ran 1 Routine"),"Write to system during test didn't work") -"RTN","utt1",146,0) +"RTN","utt1",143,0) S IO=$P -"RTN","utt1",147,0) +"RTN","utt1",144,0) QUIT -"RTN","utt1",148,0) +"RTN","utt1",145,0) ; -"RTN","utt1",149,0) +"RTN","utt1",146,0) LO(X) Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") -"RTN","utt1",150,0) +"RTN","utt1",147,0) ; Shortcut methods for M-Unit -"RTN","utt1",151,0) +"RTN","utt1",148,0) CHKTF(X,Y) ; -"RTN","utt1",152,0) +"RTN","utt1",149,0) D CHKTF^%ut(X,$G(Y)) -"RTN","utt1",153,0) +"RTN","utt1",150,0) QUIT -"RTN","utt1",154,0) +"RTN","utt1",151,0) ; -"RTN","utt1",155,0) +"RTN","utt1",152,0) CHKEQ(A,B,M) ; -"RTN","utt1",156,0) +"RTN","utt1",153,0) D CHKEQ^%ut(A,B,$G(M)) -"RTN","utt1",157,0) +"RTN","utt1",154,0) QUIT -"RTN","utt1",158,0) +"RTN","utt1",155,0) ; -"RTN","utt1",159,0) +"RTN","utt1",156,0) XTENT ; Entry points -"RTN","utt1",160,0) +"RTN","utt1",157,0) ;;T4;Entry point using XTMENT -"RTN","utt1",161,0) +"RTN","utt1",158,0) ;;T5;Error count check -"RTN","utt1",162,0) +"RTN","utt1",159,0) ;;T6;Succeed Entry Point -"RTN","utt1",163,0) +"RTN","utt1",160,0) ;;T7;Make sure we write to principal even though we are on another device -"RTN","utt1",164,0) +"RTN","utt1",161,0) ;;T8;If IO starts with another device, write to that device as if it's the pricipal device -"RTN","utt1",165,0) +"RTN","utt1",162,0) ; -"RTN","utt1",166,0) +"RTN","utt1",163,0) XTROU ; Routines containing additional tests -"RTN","utt1",167,0) +"RTN","utt1",164,0) ;;%utt2; old %utNITU -"RTN","utt1",168,0) +"RTN","utt1",165,0) ;;%utt4; old %utNITW -"RTN","utt1",169,0) +"RTN","utt1",166,0) ;;%utt5; -"RTN","utt1",170,0) +"RTN","utt1",167,0) ;;%utt6; -"RTN","utt1",171,0) +"RTN","utt1",168,0) ;;%uttcovr;coverage related tests "RTN","utt2") -0^4^B512658 +0^4^B501728 "RTN","utt2",1,0) -%utt2 ; VEN/SMH - Bad Ass Continuation of Unit Tests;08/10/15 14:29 +%utt2 ; VEN/SMH - Bad Ass Continuation of Unit Tests;09/14/15 09:38 "RTN","utt2",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 11 "RTN","utt2",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt2",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt2",5,0) ; Original routine authored by Sam H. Habiel -"RTN","utt2",6,0) +"RTN","utt2",5,0) ; Modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","utt2",6,0) + ; "RTN","utt2",7,0) ; "RTN","utt2",8,0) - ; -"RTN","utt2",9,0) T11 ; @TEST An @TEST Entry point in Another Routine invoked through XTROU offsets +"RTN","utt2",9,0) + D CHKTF^%ut(1) "RTN","utt2",10,0) - D CHKTF^%ut(1) + QUIT "RTN","utt2",11,0) - QUIT -"RTN","utt2",12,0) T12 ; -"RTN","utt2",13,0) +"RTN","utt2",12,0) D CHKTF^%ut(1) -"RTN","utt2",14,0) +"RTN","utt2",13,0) QUIT -"RTN","utt2",15,0) +"RTN","utt2",14,0) XTENT ; -"RTN","utt2",16,0) +"RTN","utt2",15,0) ;;T12;An XTENT offset entry point in Another Routine invoked through XTROU offsets "RTN","utt3") -0^5^B1662421 +0^5^B1628564 "RTN","utt3",1,0) -%utt3 ; VEN/SMH-JLI - Unit Tests Coverage Tests;08/10/15 14:29 +%utt3 ; VEN/SMH-JLI - Unit Tests Coverage Tests;09/14/15 09:38 "RTN","utt3",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 11 "RTN","utt3",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt3",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt3",5,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 -"RTN","utt3",6,0) +"RTN","utt3",5,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","utt3",6,0) + ; "RTN","utt3",7,0) - ; -"RTN","utt3",8,0) XTMUNITV ; VEN/SMH - Unit Tests Coverage Tests;2014-04-16 7:14 PM +"RTN","utt3",8,0) + ; "RTN","utt3",9,0) - ; -"RTN","utt3",10,0) ; *** BE VERY CAREFUL IN MODIFIYING THIS ROUTINE *** -"RTN","utt3",11,0) +"RTN","utt3",10,0) ; *** THE UNIT TEST COUNTS ACTIVE AND INACTIVE LINES OF CODE *** -"RTN","utt3",12,0) +"RTN","utt3",11,0) ; *** IF YOU MODIFY THIS, MODIFY XTMUNITW AS WELL *** +"RTN","utt3",12,0) + ; "RTN","utt3",13,0) - ; -"RTN","utt3",14,0) ; Coverage tester in %utt4 -"RTN","utt3",15,0) +"RTN","utt3",14,0) ; 20 Lines of code -"RTN","utt3",16,0) +"RTN","utt3",15,0) ; 5 do not run as they are dead code -"RTN","utt3",17,0) +"RTN","utt3",16,0) ; Expected Coverage: 15/20 = 75% +"RTN","utt3",17,0) + ; "RTN","utt3",18,0) - ; -"RTN","utt3",19,0) STARTUP ; Doesn't count -"RTN","utt3",20,0) +"RTN","utt3",19,0) N X ; Counts -"RTN","utt3",21,0) +"RTN","utt3",20,0) S X=1 ; Counts -"RTN","utt3",22,0) +"RTN","utt3",21,0) QUIT ; Counts +"RTN","utt3",22,0) + ; "RTN","utt3",23,0) - ; -"RTN","utt3",24,0) SHUTDOWN K X,Y QUIT ; Counts; ZEXCEPT: X,Y +"RTN","utt3",24,0) + ; "RTN","utt3",25,0) - ; -"RTN","utt3",26,0) SETUP S Y=$G(Y)+1 QUIT ; Counts +"RTN","utt3",26,0) + ; "RTN","utt3",27,0) - ; -"RTN","utt3",28,0) TEARDOWN ; Doesn't count -"RTN","utt3",29,0) +"RTN","utt3",28,0) S Y=Y-1 ; Counts -"RTN","utt3",30,0) +"RTN","utt3",29,0) QUIT ; Counts +"RTN","utt3",30,0) + ; "RTN","utt3",31,0) - ; -"RTN","utt3",32,0) T1 ; @TEST Test 1 -"RTN","utt3",33,0) +"RTN","utt3",32,0) D CHKTF^%ut($D(Y)) ; Counts +"RTN","utt3",33,0) + QUIT ; Counts "RTN","utt3",34,0) - QUIT ; Counts + ; "RTN","utt3",35,0) - ; -"RTN","utt3",36,0) T2 ; @TEST Test 2 -"RTN","utt3",37,0) +"RTN","utt3",36,0) D INTERNAL(1) ; Counts -"RTN","utt3",38,0) +"RTN","utt3",37,0) D CHKTF^%ut(1) ; Counts -"RTN","utt3",39,0) +"RTN","utt3",38,0) QUIT ; Counts -"RTN","utt3",40,0) +"RTN","utt3",39,0) S X=1 ; Dead code -"RTN","utt3",41,0) +"RTN","utt3",40,0) QUIT ; Dead code -"RTN","utt3",42,0) +"RTN","utt3",41,0) ; -"RTN","utt3",43,0) +"RTN","utt3",42,0) INTERNAL(A) ; Counts -"RTN","utt3",44,0) +"RTN","utt3",43,0) S A=A+1 ; Counts -"RTN","utt3",45,0) +"RTN","utt3",44,0) QUIT ; Counts -"RTN","utt3",46,0) +"RTN","utt3",45,0) S A=2 ; Dead code -"RTN","utt3",47,0) +"RTN","utt3",46,0) S Y=2 ; Dead code -"RTN","utt3",48,0) +"RTN","utt3",47,0) QUIT ; Dead code "RTN","utt4") -0^6^B1555396 +0^6^B1522726 "RTN","utt4",1,0) -%utt4 ; VEN/SMH/JLI - Coverage Test Runner;08/10/15 14:30 +%utt4 ; VEN/SMH/JLI - Coverage Test Runner;09/14/15 09:38 "RTN","utt4",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 11 "RTN","utt4",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt4",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt4",5,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 -"RTN","utt4",6,0) +"RTN","utt4",5,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","utt4",6,0) + ; "RTN","utt4",7,0) - ; -"RTN","utt4",8,0) XTMUNITW ; VEN/SMH - Coverage Test Runner;2014-04-17 3:30 PM -"RTN","utt4",9,0) +"RTN","utt4",8,0) ;;7.3;KERNEL TOOLKIT;; +"RTN","utt4",9,0) + ; "RTN","utt4",10,0) - ; -"RTN","utt4",11,0) ; This tests code in XTMUNITV for coverage -"RTN","utt4",12,0) +"RTN","utt4",11,0) D EN^%ut($T(+0),1) QUIT -"RTN","utt4",13,0) +"RTN","utt4",12,0) ; -"RTN","utt4",14,0) +"RTN","utt4",13,0) MAIN ; @TEST - Test coverage calculations -"RTN","utt4",15,0) +"RTN","utt4",14,0) Q:$D(^TMP("%uttcovr",$J)) ; already running coverage analysis from %uttcovr -"RTN","utt4",16,0) +"RTN","utt4",15,0) Q:'(+$SY=47) ; GT.M ONLY -"RTN","utt4",17,0) +"RTN","utt4",16,0) D COV^%ut1("%utt3","D EN^%ut(""%utt3"",1)",-1) ; Only produce output global. -"RTN","utt4",18,0) +"RTN","utt4",17,0) D CHKEQ^%ut("14/19",^TMP("%utCOVREPORT",$J)) -"RTN","utt4",19,0) +"RTN","utt4",18,0) D CHKEQ^%ut("2/5",^TMP("%utCOVREPORT",$J,"%utt3","INTERNAL")) -"RTN","utt4",20,0) +"RTN","utt4",19,0) D CHKTF^%ut($D(^TMP("%utCOVREPORT",$J,"%utt3","T2",4))) -"RTN","utt4",21,0) +"RTN","utt4",20,0) D CHKEQ^%ut("1/1",^TMP("%utCOVREPORT",$J,"%utt3","SETUP")) -"RTN","utt4",22,0) +"RTN","utt4",21,0) QUIT "RTN","utt5") -0^7^B23265101 +0^7^B23054235 "RTN","utt5",1,0) -%utt5 ;JLI - test for aspects of MUnit functionality ;08/10/15 14:30 +%utt5 ;JLI - test for aspects of MUnit functionality ;09/14/15 09:38 "RTN","utt5",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 11 "RTN","utt5",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt5",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt5",5,0) ; Original routine authored by Joel L. Ivey +"RTN","utt5",5,0) + ; "RTN","utt5",6,0) - ; + Q "RTN","utt5",7,0) - Q + ; "RTN","utt5",8,0) - ; -"RTN","utt5",9,0) OLDSTYLE ; +"RTN","utt5",9,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",10,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",11,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",12,0) I $D(%utt6var) S %ut("ENT")="OLDSTYLE",%utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"OLDSTYLE")="" -"RTN","utt5",13,0) +"RTN","utt5",12,0) D CHKEQ^%ut(5,5,"SET EQUAL ON PURPOSE - OLDSTYLE DONE") -"RTN","utt5",14,0) +"RTN","utt5",13,0) D CHKTF^%ut(4=4,"MY EQUAL VALUE") +"RTN","utt5",14,0) + Q "RTN","utt5",15,0) - Q + ; "RTN","utt5",16,0) - ; -"RTN","utt5",17,0) OLDSTYL1 ; +"RTN","utt5",17,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",18,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",19,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",20,0) I $D(%utt6var) S %ut("ENT")="OLDSTYL1",%utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"OLDSTYL1")="" -"RTN","utt5",21,0) +"RTN","utt5",20,0) D CHKEQ^%ut(4,4,"SET EQUAL ON PURPOSE - OLDSTYL1 DONE") +"RTN","utt5",21,0) + Q "RTN","utt5",22,0) - Q + ; "RTN","utt5",23,0) - ; -"RTN","utt5",24,0) NEWSTYLE ; @TEST identify new style test indicator functionality +"RTN","utt5",24,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",25,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",26,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",27,0) I $D(%utt6var) S %ut("ENT")="NEWSTYLE" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"NEWSTYLE")="" -"RTN","utt5",28,0) +"RTN","utt5",27,0) D CHKEQ^%ut(4,4,"SET EQUAL ON PURPOSE - NEWSTYLE DONE") +"RTN","utt5",28,0) + Q "RTN","utt5",29,0) - Q + ; "RTN","utt5",30,0) - ; -"RTN","utt5",31,0) BADCHKEQ ; +"RTN","utt5",31,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",32,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",33,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",34,0) I $D(%utt6var) S %ut("ENT")="BADCHKEQ" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADCHKEQ")="" -"RTN","utt5",35,0) +"RTN","utt5",34,0) D CHKEQ^%ut(4,3,"SET UNEQUAL ON PURPOSE - SHOULD FAIL") +"RTN","utt5",35,0) + Q "RTN","utt5",36,0) - Q + ; "RTN","utt5",37,0) - ; -"RTN","utt5",38,0) BADCHKTF ; +"RTN","utt5",38,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",39,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",40,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",41,0) I $D(%utt6var) S %ut("ENT")="BADCHKTF" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADCHKTF")="" -"RTN","utt5",42,0) +"RTN","utt5",41,0) D CHKTF^%ut(0,"SET FALSE (0) ON PURPOSE - SHOULD FAIL") +"RTN","utt5",42,0) + Q "RTN","utt5",43,0) - Q + ; "RTN","utt5",44,0) - ; -"RTN","utt5",45,0) BADERROR ; +"RTN","utt5",45,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",46,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",47,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 + N X "RTN","utt5",48,0) - N X -"RTN","utt5",49,0) I $D(%utt6var) S %ut("ENT")="BADERROR" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADERROR")="" -"RTN","utt5",50,0) +"RTN","utt5",49,0) ; following syntax error is on purpose to throw an error -"RTN","utt5",51,0) +"RTN","utt5",50,0) S X= ; syntax error on purpose +"RTN","utt5",51,0) + Q "RTN","utt5",52,0) - Q + ; "RTN","utt5",53,0) - ; -"RTN","utt5",54,0) CALLFAIL ; +"RTN","utt5",54,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",55,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",56,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",57,0) N X -"RTN","utt5",58,0) +"RTN","utt5",57,0) I $D(%utt6var) S %ut("ENT")="CALLFAIL" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"CALLFAIL")="" -"RTN","utt5",59,0) +"RTN","utt5",58,0) D FAIL^%ut("Called FAIL to test it") +"RTN","utt5",59,0) + Q "RTN","utt5",60,0) - Q + ; "RTN","utt5",61,0) - ; -"RTN","utt5",62,0) LEAKSOK ; +"RTN","utt5",62,0) + N CODE,LOCATN,MYVALS,X "RTN","utt5",63,0) - N CODE,LOCATN,MYVALS,X -"RTN","utt5",64,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSOK TEST",MYVALS("X")="" -"RTN","utt5",65,0) +"RTN","utt5",64,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find no leaks +"RTN","utt5",65,0) + Q "RTN","utt5",66,0) - Q + ; "RTN","utt5",67,0) - ; -"RTN","utt5",68,0) LEAKSBAD ; -"RTN","utt5",69,0) +"RTN","utt5",68,0) N CODE,LOCATN,MYVALS,X -"RTN","utt5",70,0) +"RTN","utt5",69,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSBAD TEST - X NOT SPECIFIED" -"RTN","utt5",71,0) +"RTN","utt5",70,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find X since it isn't indicated +"RTN","utt5",71,0) + Q "RTN","utt5",72,0) - Q + ; "RTN","utt5",73,0) - ; -"RTN","utt5",74,0) NVLDARG1 ; -"RTN","utt5",75,0) +"RTN","utt5",74,0) D CHKEQ^%ut(1) +"RTN","utt5",75,0) + Q "RTN","utt5",76,0) - Q + ; "RTN","utt5",77,0) - ; -"RTN","utt5",78,0) ISUTEST ; -"RTN","utt5",79,0) +"RTN","utt5",78,0) D CHKTF^%ut($$ISUTEST^%ut,"ISUTEST returned FALSE!") +"RTN","utt5",79,0) + Q "RTN","utt5",80,0) - Q + ; "RTN","utt5",81,0) - ; -"RTN","utt5",82,0) BADFORM1(X) ; @TEST should not be selected - arguments +"RTN","utt5",82,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",83,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",84,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",85,0) I $D(%utt6var) S %ut("ENT")="NEWSTYLE" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADFORM1")="" -"RTN","utt5",86,0) +"RTN","utt5",85,0) D CHKEQ^%ut(4,3,"SHOULD NOT BE SELECTED - ARGUMENTS - BADFORM1") +"RTN","utt5",86,0) + Q "RTN","utt5",87,0) - Q + ; "RTN","utt5",88,0) - ; -"RTN","utt5",89,0) BADFORM2 ; ABC @TEST should not be selected - @TEST NOT FIRST -"RTN","utt5",90,0) +"RTN","utt5",89,0) ; ZEXCEPT: %ut - Newed in EN^%zu +"RTN","utt5",90,0) + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",91,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",92,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADFORM2")="" -"RTN","utt5",93,0) +"RTN","utt5",92,0) D CHKEQ^%ut(4,3,"SHOULD NOT BE SELECTED - @TEST NOT FIRST - BADFORM2") +"RTN","utt5",93,0) + Q "RTN","utt5",94,0) - Q + ; "RTN","utt5",95,0) - ; -"RTN","utt5",96,0) STARTUP ; +"RTN","utt5",96,0) + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",97,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",98,0) ; ZEXCEPT: KBANCOUNT created here, killed in SHUTDOWN -"RTN","utt5",99,0) +"RTN","utt5",98,0) I $D(%utt6var),$D(^TMP("%utt5",$J)) K ^TMP("%utt5",$J) -"RTN","utt5",100,0) +"RTN","utt5",99,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"STARTUP")="" -"RTN","utt5",101,0) +"RTN","utt5",100,0) ; following brought from %utt1, since only one STARTUP can RUN in a set +"RTN","utt5",101,0) + I '$D(%utt6var) D "RTN","utt5",102,0) - I '$D(%utt6var) D -"RTN","utt5",103,0) . S ^TMP($J,"%ut","STARTUP")="" -"RTN","utt5",104,0) +"RTN","utt5",103,0) . S KBANCOUNT=1 +"RTN","utt5",104,0) + . Q "RTN","utt5",105,0) - . Q + Q "RTN","utt5",106,0) - Q + ; "RTN","utt5",107,0) - ; -"RTN","utt5",108,0) SHUTDOWN ; +"RTN","utt5",108,0) + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",109,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",110,0) ; ZEXCEPT: KBANCOUNT created in STARTUP, killed here -"RTN","utt5",111,0) +"RTN","utt5",110,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"SHUTDOWN")="" -"RTN","utt5",112,0) +"RTN","utt5",111,0) ; following brought from %utt1, since only one SHUTDOWN can RUN in a set -"RTN","utt5",113,0) +"RTN","utt5",112,0) I '$D(%utt6var) D -"RTN","utt5",114,0) +"RTN","utt5",113,0) . K ^TMP($J,"%ut","STARTUP") -"RTN","utt5",115,0) +"RTN","utt5",114,0) . K KBANCOUNT -"RTN","utt5",116,0) +"RTN","utt5",115,0) . Q +"RTN","utt5",116,0) + Q "RTN","utt5",117,0) - Q + ; "RTN","utt5",118,0) - ; -"RTN","utt5",119,0) SETUP ; +"RTN","utt5",119,0) + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",120,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",121,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"SETUP")="" +"RTN","utt5",121,0) + Q "RTN","utt5",122,0) - Q + ; "RTN","utt5",123,0) - ; -"RTN","utt5",124,0) TEARDOWN ; -"RTN","utt5",125,0) +"RTN","utt5",124,0) ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",126,0) +"RTN","utt5",125,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"TEARDOWN")="" -"RTN","utt5",127,0) +"RTN","utt5",126,0) Q -"RTN","utt5",128,0) +"RTN","utt5",127,0) ; -"RTN","utt5",129,0) +"RTN","utt5",128,0) XTENT ; -"RTN","utt5",130,0) +"RTN","utt5",129,0) ;;OLDSTYLE; identify old style test indicator functionality -"RTN","utt5",131,0) +"RTN","utt5",130,0) ;;OLDSTYL1; identify old style test indicator 2 -"RTN","utt5",132,0) +"RTN","utt5",131,0) ;;BADCHKEQ; CHKEQ should fail on unequal value -"RTN","utt5",133,0) +"RTN","utt5",132,0) ;;BADCHKTF; CHKTF should fail on false value -"RTN","utt5",134,0) +"RTN","utt5",133,0) ;;BADERROR; throws an error on purpose -"RTN","utt5",135,0) +"RTN","utt5",134,0) ;;CALLFAIL; called FAIL to test it -"RTN","utt5",136,0) +"RTN","utt5",135,0) ;;LEAKSOK;check leaks should be ok -"RTN","utt5",137,0) +"RTN","utt5",136,0) ;;LEAKSBAD;check leaks with leak -"RTN","utt5",138,0) +"RTN","utt5",137,0) ;;NVLDARG1;check invalid arg in CHKEQ -"RTN","utt5",139,0) +"RTN","utt5",138,0) ;;ISUTEST;check ISUTEST inside unit test "RTN","utt6") -0^8^B31141903 +0^8^B30891565 "RTN","utt6",1,0) -%utt6 ;JLI - Unit tests for MUnit functionality ;08/10/15 14:30 +%utt6 ;JLI - Unit tests for MUnit functionality ;09/14/15 09:38 "RTN","utt6",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 11 "RTN","utt6",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt6",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt6",5,0) ; Original routine authored by Joel L. Ivey 05/2014-08/2015 +"RTN","utt6",5,0) + ; "RTN","utt6",6,0) ; "RTN","utt6",7,0) - ; -"RTN","utt6",8,0) ; This routine uses ZZUTJLI2 as a test routine, it does not include the routine as an extension, -"RTN","utt6",9,0) +"RTN","utt6",8,0) ; since it uses it for tests. +"RTN","utt6",9,0) + ; "RTN","utt6",10,0) - ; -"RTN","utt6",11,0) ; ZZUTJLI2 currently contains 3 tests (2 old style, 1 new style), it also specifies STARTUP and -"RTN","utt6",12,0) +"RTN","utt6",11,0) ; SHUTDOWN (should be 1 each) and SETUP and TEARDOWN (should be 3 each, 1 for each test) enteries, each of these -"RTN","utt6",13,0) +"RTN","utt6",12,0) ; creates an entry under the ^TMP("ZZUTJLI2" global node, indicating function then continues the process. -"RTN","utt6",14,0) +"RTN","utt6",13,0) ; Should be 2+3n entries (1+1 for STARTUP and SHUTDOWN, then 3 for each of the tests (SETUP, test, -"RTN","utt6",15,0) +"RTN","utt6",14,0) ; and TEARDOWN). +"RTN","utt6",15,0) + ; "RTN","utt6",16,0) - ; -"RTN","utt6",17,0) ; This first section is more of a functional test, since it checks the full unit test processing from both -"RTN","utt6",18,0) +"RTN","utt6",17,0) ; a command line and a GUI call approach. Data for analysis is saved under ^TMP("ZZUTJLI2_C", for command -"RTN","utt6",19,0) +"RTN","utt6",18,0) ; line and ^TMP("ZZUTJLI2_G", for gui processing. +"RTN","utt6",19,0) + ; "RTN","utt6",20,0) - ; -"RTN","utt6",21,0) ; The counts for the command line processing are based on the number of unit test tags -"RTN","utt6",22,0) +"RTN","utt6",21,0) ; determined for the GUI processing as well. The numbers are 2 (startup and shutdown) -"RTN","utt6",23,0) +"RTN","utt6",22,0) ; + 3 x the number of tests present. +"RTN","utt6",23,0) + ; "RTN","utt6",24,0) - ; -"RTN","utt6",25,0) ; run unit tests by command line -"RTN","utt6",26,0) +"RTN","utt6",25,0) N VERBOSE -"RTN","utt6",27,0) +"RTN","utt6",26,0) S VERBOSE=0 -"RTN","utt6",28,0) +"RTN","utt6",27,0) VERBOSE ; -"RTN","utt6",29,0) +"RTN","utt6",28,0) I '$D(VERBOSE) N VERBOSE S VERBOSE=1 -"RTN","utt6",30,0) +"RTN","utt6",29,0) N ZZUTCNT,JLICNT,JLIEXPCT,JLII,JLIX,ZZUTRSLT,%utt5,%utt6,%utt6var -"RTN","utt6",31,0) +"RTN","utt6",30,0) W !!,"RUNNING COMMAND LINE TESTS VIA DOSET^%ut",! -"RTN","utt6",32,0) +"RTN","utt6",31,0) D DOSET^%ut(1,VERBOSE) ; run `1 in M-UNIT TEST GROUP file +"RTN","utt6",32,0) + ; "RTN","utt6",33,0) - ; -"RTN","utt6",34,0) W !!!,"Running command line tests by RUNSET^%ut",! -"RTN","utt6",35,0) +"RTN","utt6",34,0) D RUNSET^%ut("TESTS FOR UNIT TEST ROUTINES") +"RTN","utt6",35,0) + ; "RTN","utt6",36,0) - ; -"RTN","utt6",37,0) ; Call GUISET to obtain list of tags via entry in M-UNIT TEST GROUP file -"RTN","utt6",38,0) +"RTN","utt6",37,0) ; silent to the user -"RTN","utt6",39,0) +"RTN","utt6",38,0) D GUISET^%ut(.%utt6,1) -"RTN","utt6",40,0) +"RTN","utt6",39,0) K ^TMP("%utt6_GUISET",$J) M ^TMP("%utt6_GUISET",$J)=@%utt6 +"RTN","utt6",40,0) + ; "RTN","utt6",41,0) - ; -"RTN","utt6",42,0) W !!!,"RUNNING COMMAND LINE UNIT TESTS FOR %utt5",! -"RTN","utt6",43,0) +"RTN","utt6",42,0) N ZZUTCNT,JLICNT,JLIEXPCT,JLII,JLIX,ZZUTRSLT +"RTN","utt6",43,0) + S ZZUTCNT=0 "RTN","utt6",44,0) - S ZZUTCNT=0 -"RTN","utt6",45,0) K ^TMP("%utt5",$J) ; kill any contents of data storage -"RTN","utt6",46,0) +"RTN","utt6",45,0) D EN^%ut("%utt5",VERBOSE) ; should do STARTUP(1x), then SETUP, test, TEARDOWN (each together 3x) and SHUTDOWN (1x) -"RTN","utt6",47,0) +"RTN","utt6",46,0) K ^TMP("%utt5_C",$J) M ^TMP("%utt5_C",$J)=^TMP("%utt5",$J) +"RTN","utt6",47,0) + ; "RTN","utt6",48,0) - ; -"RTN","utt6",49,0) ; now run unit tests by GUI - first determines unit test tags -"RTN","utt6",50,0) +"RTN","utt6",49,0) W !!!,"RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent",! -"RTN","utt6",51,0) +"RTN","utt6",50,0) S ZZUTCNT=0 -"RTN","utt6",52,0) +"RTN","utt6",51,0) K ^TMP("%utt5",$J),^TMP("%utt6",$J) -"RTN","utt6",53,0) +"RTN","utt6",52,0) D GUILOAD^%ut(.%utt6,"%utt5") -"RTN","utt6",54,0) +"RTN","utt6",53,0) M ^TMP("%utt6",$J)=@%utt6 -"RTN","utt6",55,0) +"RTN","utt6",54,0) S %utt6=$NA(^TMP("%utt6",$J)) -"RTN","utt6",56,0) +"RTN","utt6",55,0) ; then run each tag separately -"RTN","utt6",57,0) +"RTN","utt6",56,0) ; JLICNT is count of unit test tags, which can be determined for GUI call for each unit test tag -"RTN","utt6",58,0) +"RTN","utt6",57,0) S JLICNT=0 F JLII=1:1 S JLIX=$G(@%utt6@(JLII)) Q:JLIX="" I $P(JLIX,U,2)'="" S JLICNT=JLICNT+1 D GUINEXT^%ut(.ZZUTRSLT,$P(JLIX,U,2)_U_$P(JLIX,U)) -"RTN","utt6",59,0) +"RTN","utt6",58,0) ; and close it with a null routine name -"RTN","utt6",60,0) +"RTN","utt6",59,0) D GUINEXT^%ut(.ZZUTRSLT,"") -"RTN","utt6",61,0) +"RTN","utt6",60,0) K ^TMP("%utt5_G",$J) M ^TMP("%utt5_G",$J)=^TMP("%utt5",$J) -"RTN","utt6",62,0) +"RTN","utt6",61,0) S JLIEXPCT=2+(3*JLICNT) ; number of lines that should be in the global nodes for command line and GUI +"RTN","utt6",62,0) + ; "RTN","utt6",63,0) - ; -"RTN","utt6",64,0) W !!,"NOW RUNNING UNIT TESTS FOR %uttcovr",!! -"RTN","utt6",65,0) +"RTN","utt6",64,0) D EN^%ut("%uttcovr",VERBOSE) -"RTN","utt6",66,0) +"RTN","utt6",65,0) ; -"RTN","utt6",67,0) +"RTN","utt6",66,0) ; now run the unit tests in this routine -"RTN","utt6",68,0) +"RTN","utt6",67,0) W !!,"NOW RUNNING UNIT TESTS FOR %utt6",!! -"RTN","utt6",69,0) +"RTN","utt6",68,0) D EN^%ut("%utt6",VERBOSE) -"RTN","utt6",70,0) +"RTN","utt6",69,0) K ^TMP("%utt5",$J),^TMP("%utt5_C",$J),^TMP("%utt5_G",$J),^TMP("%utt6",$J),^TMP("%utt6_GUISET",$J) -"RTN","utt6",71,0) +"RTN","utt6",70,0) ; clean up after GUI calls as well -"RTN","utt6",72,0) +"RTN","utt6",71,0) K ^TMP("GUI-MUNIT",$J),^TMP("GUINEXT",$J),^TMP("MUNIT-%utRSLT",$J) -"RTN","utt6",73,0) +"RTN","utt6",72,0) Q +"RTN","utt6",73,0) + ; "RTN","utt6",74,0) ; "RTN","utt6",75,0) - ; -"RTN","utt6",76,0) ; WARNING -- WARNING -- WARNING -"RTN","utt6",77,0) +"RTN","utt6",76,0) ; If the number of NEW STYLE tests in %utt5 is increased (it is currently 1), then the following -"RTN","utt6",78,0) +"RTN","utt6",77,0) ; test will need to be updated to reflect the change(s) -"RTN","utt6",79,0) +"RTN","utt6",78,0) ; END OF WARNING -- END OF WARNING -- END OF WARNING +"RTN","utt6",79,0) + ; "RTN","utt6",80,0) - ; -"RTN","utt6",81,0) NEWSTYLE ; tests return of valid new style or @TEST indicators -"RTN","utt6",82,0) +"RTN","utt6",81,0) N LIST -"RTN","utt6",83,0) +"RTN","utt6",82,0) D NEWSTYLE^%ut1(.LIST,"%utt5") -"RTN","utt6",84,0) +"RTN","utt6",83,0) D CHKEQ^%ut(LIST,1,"Returned an incorrect number ("_LIST_") of New Style indicators - should be one") -"RTN","utt6",85,0) +"RTN","utt6",84,0) I LIST>0 D CHKEQ^%ut(LIST(1),"NEWSTYLE^identify new style test indicator functionality","Returned incorrect TAG^reason "_LIST(1)) -"RTN","utt6",86,0) +"RTN","utt6",85,0) I LIST>0 D CHKEQ^%ut($G(LIST(2)),"","Returned a value for LIST(2) - should not have any value (i.e., null)") +"RTN","utt6",86,0) + Q "RTN","utt6",87,0) - Q + ; "RTN","utt6",88,0) - ; -"RTN","utt6",89,0) CKGUISET ; -"RTN","utt6",90,0) +"RTN","utt6",89,0) ; ZEXCEPT: %utt6var - if present, is NEWed and created in code following VERBOSE +"RTN","utt6",90,0) + I '$D(%utt6var) Q "RTN","utt6",91,0) - I '$D(%utt6var) Q -"RTN","utt6",92,0) N MAX -"RTN","utt6",93,0) +"RTN","utt6",92,0) S MAX=$O(^TMP("%utt6_GUISET",$J,""),-1) -"RTN","utt6",94,0) +"RTN","utt6",93,0) D CHKTF^%ut(^TMP("%utt6_GUISET",$J,MAX)["%utt6^NEWSTYLE","GUISET returned incorrect list") +"RTN","utt6",94,0) + Q "RTN","utt6",95,0) - Q + ; "RTN","utt6",96,0) - ; -"RTN","utt6",97,0) CHKCMDLN ; check command line processing of %utt5 +"RTN","utt6",97,0) + ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag "RTN","utt6",98,0) - ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag + I '$D(%utt6var) Q "RTN","utt6",99,0) - I '$D(%utt6var) Q -"RTN","utt6",100,0) D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",101,0) +"RTN","utt6",100,0) D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",102,0) +"RTN","utt6",101,0) D CHKTF^%ut($O(^TMP("%utt5_C",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5_C",$J,1,""))_"' should be 'STARTUP'") -"RTN","utt6",103,0) +"RTN","utt6",102,0) D CHKTF^%ut($O(^TMP("%utt5_C",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_C",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") +"RTN","utt6",103,0) + Q "RTN","utt6",104,0) - Q + ; "RTN","utt6",105,0) - ; -"RTN","utt6",106,0) CHKGUI ; check GUI processing of %utt5 -"RTN","utt6",107,0) +"RTN","utt6",106,0) ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag -"RTN","utt6",108,0) +"RTN","utt6",107,0) I '$D(%utt6var) Q -"RTN","utt6",109,0) +"RTN","utt6",108,0) D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",110,0) +"RTN","utt6",109,0) D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",111,0) +"RTN","utt6",110,0) D CHKTF^%ut($O(^TMP("%utt5_G",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5Z_G",1,""))_"' should be 'STARTUP'") -"RTN","utt6",112,0) +"RTN","utt6",111,0) D CHKTF^%ut($O(^TMP("%utt5_G",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_G",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") -"RTN","utt6",113,0) +"RTN","utt6",112,0) Q -"RTN","utt6",114,0) +"RTN","utt6",113,0) ; -"RTN","utt6",115,0) +"RTN","utt6",114,0) XTENT ; -"RTN","utt6",116,0) +"RTN","utt6",115,0) ;;CHKCMDLN;check command line processing of %utt5 -"RTN","utt6",117,0) +"RTN","utt6",116,0) ;;CHKGUI;check GUI processing of %utt5 -"RTN","utt6",118,0) +"RTN","utt6",117,0) ;;CKGUISET;check list of tests returned by GUISET -"RTN","utt6",119,0) +"RTN","utt6",118,0) ;;NEWSTYLE;test return of valid new style or @TEST indicators "RTN","uttcovr") -0^9^B147322146 +0^9^B146530441 "RTN","uttcovr",1,0) -%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;08/10/15 14:31 +%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;09/14/15 09:35 "RTN","uttcovr",2,0) - ;;0.2;MASH UTILITIES;;;Build 9 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 11 "RTN","uttcovr",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","uttcovr",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","uttcovr",5,0) ; Original routine authored by Joel L. Ivey +"RTN","uttcovr",5,0) + ; "RTN","uttcovr",6,0) ; "RTN","uttcovr",7,0) - ; -"RTN","uttcovr",8,0) ; ZEXCEPT: DTIME - if present the value is Kernel timeout for reads -"RTN","uttcovr",9,0) +"RTN","uttcovr",8,0) N RUNCODE,XCLUDE +"RTN","uttcovr",9,0) + ; "RTN","uttcovr",10,0) - ; -"RTN","uttcovr",11,0) ; Have it run the following entry points or, if no ^, call EN^%ut with routine name -"RTN","uttcovr",12,0) +"RTN","uttcovr",11,0) S RUNCODE(1)="^%utt1,%utt1,^%utt6,VERBOSE^%utt6,%uttcovr,^%ut,^%ut1,^%utcover" -"RTN","uttcovr",13,0) +"RTN","uttcovr",12,0) S RUNCODE("ENTRY^%uttcovr")="" -"RTN","uttcovr",14,0) +"RTN","uttcovr",13,0) I '(+$SY=47) D Q ; GT.M only! -"RTN","uttcovr",15,0) +"RTN","uttcovr",14,0) . W !,"This coverage analysis is currently only available in GT.M" -"RTN","uttcovr",16,0) +"RTN","uttcovr",15,0) . N VAL R !,"Do you want to run the same tests using MULTAPIS Y/N ? ",VAL:$G(DTIME,300) Q:'$T -"RTN","uttcovr",17,0) +"RTN","uttcovr",16,0) . I "Yy"[$E(VAL) D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",18,0) +"RTN","uttcovr",17,0) . Q -"RTN","uttcovr",19,0) +"RTN","uttcovr",18,0) ; Have the analysis EXCLUDE the following routines from coverage - unit test routines -"RTN","uttcovr",20,0) +"RTN","uttcovr",19,0) S XCLUDE(1)="%utt1,%utt2,%utt3,%utt4,%utt5,%utt6,%uttcovr" -"RTN","uttcovr",21,0) +"RTN","uttcovr",20,0) S XCLUDE(2)="%utf2hex" ; a GT.M system file, although it wasn't showing up anyway -"RTN","uttcovr",22,0) +"RTN","uttcovr",21,0) M ^TMP("%uttcovr",$J,"XCLUDE")=XCLUDE +"RTN","uttcovr",22,0) + D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) "RTN","uttcovr",23,0) - D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) + Q "RTN","uttcovr",24,0) - Q + ; "RTN","uttcovr",25,0) - ; -"RTN","uttcovr",26,0) ENTRY ; +"RTN","uttcovr",26,0) + K ^TMP("ENTRY^%uttcovr",$J,"VALS") "RTN","uttcovr",27,0) - K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",28,0) M ^TMP("ENTRY^%uttcovr",$J,"VALS")=^TMP("%ut",$J,"UTVALS") +"RTN","uttcovr",28,0) + K ^TMP("%ut",$J,"UTVALS") "RTN","uttcovr",29,0) - K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",30,0) ; these tests run outside of unit tests to handle CHKLEAKS calls not in unit tests -"RTN","uttcovr",31,0) +"RTN","uttcovr",30,0) ; they need data set, so they are called in here -"RTN","uttcovr",32,0) +"RTN","uttcovr",31,0) ; LEAKSOK ; -"RTN","uttcovr",33,0) +"RTN","uttcovr",32,0) N CODE,LOCATN,MYVALS,X,I -"RTN","uttcovr",34,0) +"RTN","uttcovr",33,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSOK TEST",MYVALS("X")="" -"RTN","uttcovr",35,0) +"RTN","uttcovr",34,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find no leaks -"RTN","uttcovr",36,0) +"RTN","uttcovr",35,0) ; LEAKSBAD ; -"RTN","uttcovr",37,0) +"RTN","uttcovr",36,0) N CODE,LOCATN,MYVALS,X -"RTN","uttcovr",38,0) +"RTN","uttcovr",37,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSBAD TEST - X NOT SPECIFIED" -"RTN","uttcovr",39,0) +"RTN","uttcovr",38,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find X since it isn't indicated -"RTN","uttcovr",40,0) +"RTN","uttcovr",39,0) ; try to run coverage -"RTN","uttcovr",41,0) +"RTN","uttcovr",40,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at 3",!!! -"RTN","uttcovr",42,0) +"RTN","uttcovr",41,0) D COV^%ut("%ut1","D EN^%ut(""%utt5"")",3) -"RTN","uttcovr",43,0) +"RTN","uttcovr",42,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at -1",!!! -"RTN","uttcovr",44,0) +"RTN","uttcovr",43,0) D COV^%ut("%ut1","D EN^%ut(""%utt5"")",-1) -"RTN","uttcovr",45,0) +"RTN","uttcovr",44,0) N RUNCODE S RUNCODE(1)="^%utt4,^%ut" -"RTN","uttcovr",46,0) +"RTN","uttcovr",45,0) N XCLUDE M XCLUDE=^TMP("%uttcovr",$J,"XCLUDE") -"RTN","uttcovr",47,0) +"RTN","uttcovr",46,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO MULTAPIS for %utt4 and %ut",!!! -"RTN","uttcovr",48,0) +"RTN","uttcovr",47,0) D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",49,0) +"RTN","uttcovr",48,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COVERAGE for %utt4 and %ut at 3",!!! -"RTN","uttcovr",50,0) +"RTN","uttcovr",49,0) D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) -"RTN","uttcovr",51,0) +"RTN","uttcovr",50,0) N GLT S GLT=$NA(^TMP("%uttcovr-text",$J)) K @GLT -"RTN","uttcovr",52,0) +"RTN","uttcovr",51,0) W !,"xxxxxxxxxxxxxxxxxxxx LISTING DATA VIA LIST",!!! -"RTN","uttcovr",53,0) +"RTN","uttcovr",52,0) D LIST^%utcover(.XCLUDE,3,GLT) ; get coverage for listing and trimdata in %utcover -"RTN","uttcovr",54,0) +"RTN","uttcovr",53,0) F I=1:1 Q:'$D(@GLT@(I)) W !,@GLT@(I) +"RTN","uttcovr",54,0) + K @GLT "RTN","uttcovr",55,0) - K @GLT -"RTN","uttcovr",56,0) ; restore unit test totals from before entry -"RTN","uttcovr",57,0) +"RTN","uttcovr",56,0) K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",58,0) +"RTN","uttcovr",57,0) M ^TMP("%ut",$J,"UTVALS")=^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",59,0) +"RTN","uttcovr",58,0) K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",60,0) +"RTN","uttcovr",59,0) W !,"xxxxxxxxxxxxxxxxxxxx Finished in ENTRY^%uttcovr",!!! +"RTN","uttcovr",60,0) + Q "RTN","uttcovr",61,0) - Q + ; "RTN","uttcovr",62,0) - ; -"RTN","uttcovr",63,0) RTNANAL ; @TEST - routine analysis -"RTN","uttcovr",64,0) +"RTN","uttcovr",63,0) N ROUS,GLB -"RTN","uttcovr",65,0) +"RTN","uttcovr",64,0) S ROUS("%utt4")="" -"RTN","uttcovr",66,0) +"RTN","uttcovr",65,0) S GLB=$NA(^TMP("%uttcovr-rtnanal",$J)) K @GLB -"RTN","uttcovr",67,0) +"RTN","uttcovr",66,0) D RTNANAL^%ut1(.ROUS,GLB) -"RTN","uttcovr",68,0) +"RTN","uttcovr",67,0) D CHKTF^%ut($D(@GLB@("%utt4","MAIN"))>1,"Not enough 'MAIN' nodes found") -"RTN","uttcovr",69,0) +"RTN","uttcovr",68,0) D CHKTF^%ut($G(@GLB@("%utt4","MAIN",2))["+$SY=47","Check for GT.M not found in expected line") -"RTN","uttcovr",70,0) +"RTN","uttcovr",69,0) D CHKTF^%ut($G(@GLB@("%utt4","MAIN",8))=" QUIT","Final QUIT not on expected line") -"RTN","uttcovr",71,0) +"RTN","uttcovr",70,0) K @GLB +"RTN","uttcovr",71,0) + Q "RTN","uttcovr",72,0) - Q + ; "RTN","uttcovr",73,0) - ; -"RTN","uttcovr",74,0) COVCOV ; @TEST - check COVCOV - remove seen lines -"RTN","uttcovr",75,0) +"RTN","uttcovr",74,0) N C,R -"RTN","uttcovr",76,0) +"RTN","uttcovr",75,0) S C=$NA(^TMP("%uttcovr_C",$J)) -"RTN","uttcovr",77,0) +"RTN","uttcovr",76,0) S R=$NA(^TMP("%uttcovr_R",$J)) -"RTN","uttcovr",78,0) +"RTN","uttcovr",77,0) S @C@("ROU1")="" -"RTN","uttcovr",79,0) +"RTN","uttcovr",78,0) S @C@("ROU2")="",@R@("ROU2")="" -"RTN","uttcovr",80,0) +"RTN","uttcovr",79,0) S @C@("ROU2","TAG1")="",@R@("ROU2","TAG1")="" -"RTN","uttcovr",81,0) +"RTN","uttcovr",80,0) S @C@("ROU2","TAG1",1)="AAA" -"RTN","uttcovr",82,0) +"RTN","uttcovr",81,0) S @C@("ROU2","TAG1",2)="AAA",@R@("ROU2","TAG1",2)="AAA" -"RTN","uttcovr",83,0) +"RTN","uttcovr",82,0) S @C@("ROU2","TAG1",3)="ABB",@R@("ROU2","TAG1",3)="ABB" -"RTN","uttcovr",84,0) +"RTN","uttcovr",83,0) S @C@("ROU2","TAG2",6)="ACC" -"RTN","uttcovr",85,0) +"RTN","uttcovr",84,0) S @C@("ROU2","TAG2",7)="ADD",@R@("ROU2","TAG2",7)="ADD" -"RTN","uttcovr",86,0) +"RTN","uttcovr",85,0) S @C@("ROU3","TAG1",2)="BAA",@R@("ROU3","TAG1",2)="BAA" -"RTN","uttcovr",87,0) +"RTN","uttcovr",86,0) S @C@("ROU3","TAG1",3)="CAA" -"RTN","uttcovr",88,0) +"RTN","uttcovr",87,0) S @C@("ROU3","TAG1",4)="DAA" -"RTN","uttcovr",89,0) +"RTN","uttcovr",88,0) S @C@("ROU3","TAG1",5)="EAA",@R@("ROU3","TAG1",5)="EAA" -"RTN","uttcovr",90,0) +"RTN","uttcovr",89,0) S @C@("ROU3","TAG1",6)="FAA",@R@("ROU3","TAG1",6)="FAA" -"RTN","uttcovr",91,0) +"RTN","uttcovr",90,0) D COVCOV^%ut1(C,R) -"RTN","uttcovr",92,0) +"RTN","uttcovr",91,0) D CHKTF^%ut($D(@C@("ROU2","TAG1",1)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",93,0) +"RTN","uttcovr",92,0) D CHKTF^%ut('$D(@C@("ROU2","TAG1",2)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",94,0) +"RTN","uttcovr",93,0) D CHKTF^%ut($D(@C@("ROU2","TAG2",6)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",95,0) +"RTN","uttcovr",94,0) D CHKTF^%ut('$D(@C@("ROU2","TAG2",7)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",96,0) +"RTN","uttcovr",95,0) D CHKTF^%ut($D(@C@("ROU3","TAG1",4)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",97,0) +"RTN","uttcovr",96,0) D CHKTF^%ut('$D(@C@("ROU3","TAG1",5)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",98,0) +"RTN","uttcovr",97,0) K @C,@R +"RTN","uttcovr",98,0) + Q "RTN","uttcovr",99,0) - Q + ; "RTN","uttcovr",100,0) - ; -"RTN","uttcovr",101,0) COVRPTGL ; @TEST - coverage report returning global -"RTN","uttcovr",102,0) +"RTN","uttcovr",101,0) N GL1,GL2,GL3,GL4 +"RTN","uttcovr",102,0) + S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 "RTN","uttcovr",103,0) - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 + S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 "RTN","uttcovr",104,0) - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 + S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 "RTN","uttcovr",105,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 + S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 "RTN","uttcovr",106,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 + D SETGLOBS(GL1,GL2) "RTN","uttcovr",107,0) - D SETGLOBS(GL1,GL2) -"RTN","uttcovr",108,0) D COVRPTGL^%ut1(GL1,GL2,GL3,GL4) -"RTN","uttcovr",109,0) +"RTN","uttcovr",108,0) D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES")),"0/9","Wrong number of lines covered f>>or ACTLINES") -"RTN","uttcovr",110,0) +"RTN","uttcovr",109,0) D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES",9))," QUIT CNT","Wrong result for last l>>ine not covered for ACTLINES") -"RTN","uttcovr",111,0) +"RTN","uttcovr",110,0) D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST")),"8/10","Wrong number of lines covered >>for CHEKTEST") -"RTN","uttcovr",112,0) +"RTN","uttcovr",111,0) D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST",39))," . Q","Wrong result for last line >>not covered for CHEKTEST") +"RTN","uttcovr",112,0) + K @GL1,@GL2,@GL3,@GL4 "RTN","uttcovr",113,0) - K @GL1,@GL2,@GL3,@GL4 + Q "RTN","uttcovr",114,0) - Q + ; "RTN","uttcovr",115,0) - ; -"RTN","uttcovr",116,0) COVRPT ; @TEST -"RTN","uttcovr",117,0) +"RTN","uttcovr",116,0) N GL1,GL2,GL3,GL4,VRBOSITY,GL5 +"RTN","uttcovr",117,0) + S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 "RTN","uttcovr",118,0) - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 + S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 "RTN","uttcovr",119,0) - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 + S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 "RTN","uttcovr",120,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 + S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 "RTN","uttcovr",121,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",122,0) S GL5=$NA(^TMP("%ut1-covrpt",$J)) K @GL5 +"RTN","uttcovr",122,0) + D SETGLOBS(GL1,GL2) "RTN","uttcovr",123,0) - D SETGLOBS(GL1,GL2) + S VRBOSITY=1 "RTN","uttcovr",124,0) - S VRBOSITY=1 + D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) "RTN","uttcovr",125,0) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",126,0) D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL5@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",127,0) +"RTN","uttcovr",126,0) D CHKEQ^%ut("42.11",$G(@GL5@(9)),"Verbosity 1 - not expected value for line 9") -"RTN","uttcovr",128,0) +"RTN","uttcovr",127,0) D CHKTF^%ut('$D(@GL5@(10)),"Verbosity 1 - unexpected data in 10th line") +"RTN","uttcovr",128,0) + ; "RTN","uttcovr",129,0) - ; + S VRBOSITY=2 "RTN","uttcovr",130,0) - S VRBOSITY=2 + D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) "RTN","uttcovr",131,0) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",132,0) D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",133,0) +"RTN","uttcovr",132,0) D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(11)),"Verbosity 2 - not expected value for 11th line") -"RTN","uttcovr",134,0) +"RTN","uttcovr",133,0) D CHKTF^%ut('$D(@GL5@(12)),"Verbosity 2 - unexpected data for 12th line") +"RTN","uttcovr",134,0) + ; "RTN","uttcovr",135,0) - ; + S VRBOSITY=3 "RTN","uttcovr",136,0) - S VRBOSITY=3 -"RTN","uttcovr",137,0) D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",138,0) +"RTN","uttcovr",137,0) D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",139,0) +"RTN","uttcovr",138,0) D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL5@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",140,0) +"RTN","uttcovr",139,0) D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",141,0) +"RTN","uttcovr",140,0) D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL5@(22)),"Verbosity 3 - unexpected value for line 22") -"RTN","uttcovr",142,0) +"RTN","uttcovr",141,0) D CHKTF^%ut('$D(@GL5@(23)),"Verbosity 3 - unexpected line 23") +"RTN","uttcovr",142,0) + ; "RTN","uttcovr",143,0) - ; -"RTN","uttcovr",144,0) K @GL1,@GL2,@GL3,@GL4,@GL5 +"RTN","uttcovr",144,0) + Q "RTN","uttcovr",145,0) - Q + ; "RTN","uttcovr",146,0) - ; -"RTN","uttcovr",147,0) COVRPTLS ; @TEST - coverage report returning text in global -"RTN","uttcovr",148,0) +"RTN","uttcovr",147,0) N GL1,GL2,GL3,GL4,VRBOSITY -"RTN","uttcovr",149,0) +"RTN","uttcovr",148,0) S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 -"RTN","uttcovr",150,0) +"RTN","uttcovr",149,0) S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",151,0) +"RTN","uttcovr",150,0) S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",152,0) +"RTN","uttcovr",151,0) S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",153,0) +"RTN","uttcovr",152,0) D SETGLOBS(GL1,GL2) -"RTN","uttcovr",154,0) +"RTN","uttcovr",153,0) S VRBOSITY=1 +"RTN","uttcovr",154,0) + D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) "RTN","uttcovr",155,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",156,0) D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL4@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",157,0) +"RTN","uttcovr",156,0) D CHKEQ^%ut("42.11",$G(@GL4@(9)),"Verbosity 1 - not expected value for line 9") -"RTN","uttcovr",158,0) +"RTN","uttcovr",157,0) D CHKTF^%ut('$D(@GL4@(10)),"Verbosity 1 - unexpected data in 10th line") +"RTN","uttcovr",158,0) + K @GL4 "RTN","uttcovr",159,0) - K @GL4 + ; "RTN","uttcovr",160,0) - ; -"RTN","uttcovr",161,0) S VRBOSITY=2 +"RTN","uttcovr",161,0) + D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) "RTN","uttcovr",162,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",163,0) D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",164,0) +"RTN","uttcovr",163,0) D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(11)),"Verbosity 2 - not expected value for 11th line") -"RTN","uttcovr",165,0) +"RTN","uttcovr",164,0) D CHKTF^%ut('$D(@GL4@(12)),"Verbosity 2 - unexpected data for 12th line") -"RTN","uttcovr",166,0) +"RTN","uttcovr",165,0) K @GL4 +"RTN","uttcovr",166,0) + ; "RTN","uttcovr",167,0) - ; -"RTN","uttcovr",168,0) S VRBOSITY=3 -"RTN","uttcovr",169,0) +"RTN","uttcovr",168,0) D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",170,0) +"RTN","uttcovr",169,0) D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",171,0) +"RTN","uttcovr",170,0) D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL4@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",172,0) +"RTN","uttcovr",171,0) D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",173,0) +"RTN","uttcovr",172,0) D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL4@(22)),"Verbosity 3 - unexpected value for line 22") -"RTN","uttcovr",174,0) +"RTN","uttcovr",173,0) D CHKTF^%ut('$D(@GL4@(23)),"Verbosity 3 - unexpected line 23") +"RTN","uttcovr",174,0) + ; "RTN","uttcovr",175,0) - ; -"RTN","uttcovr",176,0) K @GL1,@GL2,@GL3,@GL4 +"RTN","uttcovr",176,0) + Q "RTN","uttcovr",177,0) - Q + ; "RTN","uttcovr",178,0) - ; -"RTN","uttcovr",179,0) TRIMDATA ; @TEST - TRIMDATA in %utcover -"RTN","uttcovr",180,0) +"RTN","uttcovr",179,0) N GL1,XCLUD -"RTN","uttcovr",181,0) +"RTN","uttcovr",180,0) S GL1=$NA(^TMP("%uttcovr-trimdata",$J)) K @GL1 -"RTN","uttcovr",182,0) +"RTN","uttcovr",181,0) S @GL1@("GOOD",1)="1" -"RTN","uttcovr",183,0) +"RTN","uttcovr",182,0) S @GL1@("BAD",1)="1" -"RTN","uttcovr",184,0) +"RTN","uttcovr",183,0) S XCLUD("BAD")="" -"RTN","uttcovr",185,0) +"RTN","uttcovr",184,0) D TRIMDATA^%utcover(.XCLUD,GL1) -"RTN","uttcovr",186,0) +"RTN","uttcovr",185,0) D CHKTF^%ut($D(@GL1@("GOOD")),"GOOD ENTRY WAS REMOVED") -"RTN","uttcovr",187,0) +"RTN","uttcovr",186,0) D CHKTF^%ut('$D(@GL1@("BAD")),"ENTRY WAS NOT TRIMMED") -"RTN","uttcovr",188,0) +"RTN","uttcovr",187,0) K @GL1,XCLUD +"RTN","uttcovr",188,0) + Q "RTN","uttcovr",189,0) - Q + ; "RTN","uttcovr",190,0) - ; -"RTN","uttcovr",191,0) LIST ; @TEST - LIST in %utcover -"RTN","uttcovr",192,0) +"RTN","uttcovr",191,0) N GL1,GLT S GL1=$NA(^TMP("%uttcovr-list",$J)),GLT=$NA(^TMP("%uttcovr-text",$J)) -"RTN","uttcovr",193,0) +"RTN","uttcovr",192,0) S @GL1@("%ut1")="89/160" -"RTN","uttcovr",194,0) +"RTN","uttcovr",193,0) S @GL1@("%ut1","%ut1")="2/2" -"RTN","uttcovr",195,0) +"RTN","uttcovr",194,0) S @GL1@("%ut1","ACTLINES")="0/8" +"RTN","uttcovr",195,0) + S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" "RTN","uttcovr",196,0) - S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" + S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" "RTN","uttcovr",197,0) - S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" + S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" "RTN","uttcovr",198,0) - S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" + S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" "RTN","uttcovr",199,0) - S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" + S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" "RTN","uttcovr",200,0) - S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" + S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" "RTN","uttcovr",201,0) - S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" + S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" "RTN","uttcovr",202,0) - S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" + S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" "RTN","uttcovr",203,0) - S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",204,0) S @GL1@("%ut1","CHECKTAG")="11/11" -"RTN","uttcovr",205,0) +"RTN","uttcovr",204,0) S @GL1@("%ut1","CHEKTEST")="10/10" -"RTN","uttcovr",206,0) +"RTN","uttcovr",205,0) N XCLUD S XCLUD("%utt1")="" -"RTN","uttcovr",207,0) +"RTN","uttcovr",206,0) D LIST^%utcover(.XCLUD,1,GLT,GL1) -"RTN","uttcovr",208,0) +"RTN","uttcovr",207,0) D CHKEQ^%ut("Routine %ut1 89 out of 160 lines covered (55%)",$G(@GLT@(3)),"Verbosity 1 - Unexpected text for line 3") -"RTN","uttcovr",209,0) +"RTN","uttcovr",208,0) D CHKEQ^%ut("Overall Analysis 89 out of 160 lines covered (55% coverage)",$G(@GLT@(6)),"Verbosity 1 - unexpected text for line 6") -"RTN","uttcovr",210,0) +"RTN","uttcovr",209,0) D CHKTF^%ut('$D(@GLT@(7)),"Verbosity 1 - Unexpected line 7 present") +"RTN","uttcovr",210,0) + K @GLT "RTN","uttcovr",211,0) - K @GLT + ; "RTN","uttcovr",212,0) - ; -"RTN","uttcovr",213,0) D LIST^%utcover(.XCLUD,2,GLT,GL1) -"RTN","uttcovr",214,0) +"RTN","uttcovr",213,0) D CHKEQ^%ut(" - Summary",$G(@GLT@(4)),"Verbosity 2 - unexpected text at line 4") -"RTN","uttcovr",215,0) +"RTN","uttcovr",214,0) D CHKEQ^%ut(" Tag ACTLINES^%ut1 0 out of 8 lines covered",$G(@GLT@(6)),"Verbosity 2 - unexpected text at line 6") -"RTN","uttcovr",216,0) +"RTN","uttcovr",215,0) D CHKEQ^%ut(" Tag CHEKTEST^%ut1 10 out of 10 lines covered",$G(@GLT@(8)),"Verbosity 2 - unexpected text at line 8") -"RTN","uttcovr",217,0) +"RTN","uttcovr",216,0) D CHKTF^%ut($D(@GLT@(14)),"Verbosity 2 - expected line at line 14") -"RTN","uttcovr",218,0) +"RTN","uttcovr",217,0) D CHKTF^%ut('$D(@GLT@(15)),"Verbosity 2 - unexpected line at line 15") -"RTN","uttcovr",219,0) +"RTN","uttcovr",218,0) K @GLT +"RTN","uttcovr",219,0) + ; "RTN","uttcovr",220,0) - ; -"RTN","uttcovr",221,0) D LIST^%utcover(.XCLUD,3,GLT,GL1) -"RTN","uttcovr",222,0) +"RTN","uttcovr",221,0) D CHKEQ^%ut(" Tag %ut1^%ut1 2 out of 2 lines covered",$G(@GLT@(5)),"Verbosity 3 - Incorrect text at line 5") -"RTN","uttcovr",223,0) +"RTN","uttcovr",222,0) D CHKEQ^%ut(" ACTLINES+9 QUIT CNT",$G(@GLT@(15)),"Verbosity 3 - incorrect line 15") -"RTN","uttcovr",224,0) +"RTN","uttcovr",223,0) D CHKTF^%ut($D(@GLT@(31)),"Verbosity 3 - expected data in line 31") -"RTN","uttcovr",225,0) +"RTN","uttcovr",224,0) D CHKTF^%ut('$D(@GLT@(32)),"Verbosity 3 - did not expect a line 32") +"RTN","uttcovr",225,0) + ; "RTN","uttcovr",226,0) - ; -"RTN","uttcovr",227,0) K @GL1,@GLT +"RTN","uttcovr",227,0) + Q "RTN","uttcovr",228,0) - Q -"RTN","uttcovr",229,0) ; -"RTN","uttcovr",230,0) +"RTN","uttcovr",229,0) SETGLOBS(GL1,GL2) ; -"RTN","uttcovr",231,0) +"RTN","uttcovr",230,0) S @GL1@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",232,0) +"RTN","uttcovr",231,0) S @GL1@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",233,0) +"RTN","uttcovr",232,0) S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",234,0) +"RTN","uttcovr",233,0) S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",235,0) +"RTN","uttcovr",234,0) S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",236,0) +"RTN","uttcovr",235,0) S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",237,0) +"RTN","uttcovr",236,0) S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",238,0) +"RTN","uttcovr",237,0) S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",239,0) +"RTN","uttcovr",238,0) S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",240,0) +"RTN","uttcovr",239,0) S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",241,0) +"RTN","uttcovr",240,0) S @GL1@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",242,0) +"RTN","uttcovr",241,0) S @GL1@("%ut1","CHEKTEST",0)="CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list." -"RTN","uttcovr",243,0) +"RTN","uttcovr",242,0) S @GL1@("%ut1","CHEKTEST",13)=" N I,LIST" -"RTN","uttcovr",244,0) +"RTN","uttcovr",243,0) S @GL1@("%ut1","CHEKTEST",14)=" S I=$L($T(@(U_%utROU))) I I<0 Q ""-1^Invalid Routine Name""" -"RTN","uttcovr",245,0) +"RTN","uttcovr",244,0) S @GL1@("%ut1","CHEKTEST",31)=" D NEWSTYLE(.LIST,%utROU)" -"RTN","uttcovr",246,0) +"RTN","uttcovr",245,0) S @GL1@("%ut1","CHEKTEST",32)=" F I=1:1:LIST S %ut(""ENTN"")=%ut(""ENTN"")+1,%utUETRY(%ut(""ENTN""))=$P(LIST(I),U),%utUETRY(%ut(""ENTN""),""NAME"")=$P(LIST(I),U,2,99)" -"RTN","uttcovr",247,0) +"RTN","uttcovr",246,0) S @GL1@("%ut1","CHEKTEST",37)=" N %utUI F %utUI=1:1 S %ut(""ELIN"")=$T(@(""XTENT+""_%utUI_""^""_%utROU)) Q:$P(%ut(""ELIN""),"";"",3)="""" D" -"RTN","uttcovr",248,0) +"RTN","uttcovr",247,0) S @GL1@("%ut1","CHEKTEST",38)=" . S %ut(""ENTN"")=%ut(""ENTN"")+1,%utUETRY(%ut(""ENTN""))=$P(%ut(""ELIN""),"";"",3),%utUETRY(%ut(""ENTN""),""NAME"")=$P(%ut(""ELIN""),"";"",4)" -"RTN","uttcovr",249,0) +"RTN","uttcovr",248,0) S @GL1@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",250,0) +"RTN","uttcovr",249,0) S @GL1@("%ut1","CHEKTEST",41)=" QUIT" -"RTN","uttcovr",251,0) +"RTN","uttcovr",250,0) S @GL1@("%ut1","CHEKTEST",9)=" S %ut(""ENTN"")=0 ; Number of test, sub to %utUETRY." -"RTN","uttcovr",252,0) +"RTN","uttcovr",251,0) S @GL2@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",253,0) +"RTN","uttcovr",252,0) S @GL2@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",254,0) +"RTN","uttcovr",253,0) S @GL2@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",255,0) +"RTN","uttcovr",254,0) S @GL2@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",256,0) +"RTN","uttcovr",255,0) S @GL2@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",257,0) +"RTN","uttcovr",256,0) S @GL2@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",258,0) +"RTN","uttcovr",257,0) S @GL2@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",259,0) +"RTN","uttcovr",258,0) S @GL2@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",260,0) +"RTN","uttcovr",259,0) S @GL2@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",261,0) +"RTN","uttcovr",260,0) S @GL2@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",262,0) +"RTN","uttcovr",261,0) S @GL2@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",263,0) +"RTN","uttcovr",262,0) S @GL2@("%ut1","CHEKTEST",38)=" . S %ut(""ENTN"")=%ut(""ENTN"")+1,%utUETRY(%ut(""ENTN""))=$P(%ut(""ELIN""),"";"",3),%utUETRY(%ut(""ENTN""),""NAME"")=$P(%ut(""ELIN""),"";"",4)" -"RTN","uttcovr",264,0) +"RTN","uttcovr",263,0) S @GL2@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",265,0) +"RTN","uttcovr",264,0) Q -"RTN","uttcovr",266,0) +"RTN","uttcovr",265,0) ; "SEC","^DIC",17.9001,17.9001,0,"AUDIT") @ diff --git a/Packman Message MASH_0.2_0_M_Unit_Test.txt b/Packman Message MASH_0.2_0_M_Unit_Test.txt index 330e3c5..49235d5 100644 --- a/Packman Message MASH_0.2_0_M_Unit_Test.txt +++ b/Packman Message MASH_0.2_0_M_Unit_Test.txt @@ -1,4 +1,4 @@ -$TXT Created by IVEY,JOEL L at JIVEY3.JIVEYSOFT.COM (KIDS) on Monday, 08/10/15 at 14:42 +$TXT Created by IVEY,JOEL L at JIVEY3.JIVEYSOFT.COM (KIDS) on Monday, 09/14/15 at 12:43 Updated M-Unit Functionality @@ -7,9 +7,9 @@ $KID MASH*0.2*0 **INSTALL NAME** MASH*0.2*0 "BLD",9544,0) -MASH*0.2*0^MASH UTILITIES^0^3150810^n +MASH*0.2*0^MASH UTILITIES^0^3150914^n "BLD",9544,1,0) -^^37^37^3150807^^^^ +^^40^40^3150914^^^^ "BLD",9544,1,1,0) Changes to functionality include: "BLD",9544,1,2,0) @@ -84,6 +84,12 @@ by GETUTVAL^%ut with a heading of SUMMARY. A potential problem with setting up the %ut namespace in the local "BLD",9544,1,37,0) instance was addressed by Sam Habiel in the preinstall routine ZZUTPRE. +"BLD",9544,1,38,0) + +"BLD",9544,1,39,0) +Added information on the license to the information on the submission +"BLD",9544,1,40,0) +to OSEHRA. "BLD",9544,4,0) ^9.64PA^17.9001^1 "BLD",9544,4,17.9001,0) @@ -93,7 +99,7 @@ y^y^f^^n^^y^o^n "BLD",9544,4,"B",17.9001,17.9001) "BLD",9544,6.3) -10 +12 "BLD",9544,"ABPKG") n "BLD",9544,"INI") @@ -127,25 +133,25 @@ ZZUTPOST "BLD",9544,"KRN",9.8,"NM",0) ^9.68A^10^10 "BLD",9544,"KRN",9.8,"NM",1,0) -ut^^0^B196411208 +ut^^0^B196383387 "BLD",9544,"KRN",9.8,"NM",2,0) -ut1^^0^B205876634 +ut1^^0^B205168514 "BLD",9544,"KRN",9.8,"NM",3,0) -utt1^^0^B29220013 +utt1^^0^B28788704 "BLD",9544,"KRN",9.8,"NM",4,0) -utt2^^0^B512658 +utt2^^0^B501728 "BLD",9544,"KRN",9.8,"NM",5,0) -utt3^^0^B1662421 +utt3^^0^B1628564 "BLD",9544,"KRN",9.8,"NM",6,0) -utt4^^0^B1555396 +utt4^^0^B1522726 "BLD",9544,"KRN",9.8,"NM",7,0) -utt5^^0^B23265101 +utt5^^0^B23054235 "BLD",9544,"KRN",9.8,"NM",8,0) -utt6^^0^B31141903 +utt6^^0^B30891565 "BLD",9544,"KRN",9.8,"NM",9,0) -uttcovr^^0^B147322146 +uttcovr^^0^B146530441 "BLD",9544,"KRN",9.8,"NM",10,0) -utcover^^0^B33175345 +utcover^^0^B32934852 "BLD",9544,"KRN",9.8,"NM","B","ut",1) "BLD",9544,"KRN",9.8,"NM","B","ut1",2) @@ -391,9 +397,9 @@ MASH UTILITIES^%u^Utilities associated with the M Advanced Shell "PKG",222,22,1,0) 0.2 "PKG",222,22,1,"PAH",1,0) -0^3150810^17 +0^3150914^17 "PKG",222,22,1,"PAH",1,1,0) -^^37^37^3150810 +^^40^40^3150914 "PKG",222,22,1,"PAH",1,1,1,0) Changes to functionality include: "PKG",222,22,1,"PAH",1,1,2,0) @@ -468,6 +474,12 @@ by GETUTVAL^%ut with a heading of SUMMARY. A potential problem with setting up the %ut namespace in the local "PKG",222,22,1,"PAH",1,1,37,0) instance was addressed by Sam Habiel in the preinstall routine ZZUTPRE. +"PKG",222,22,1,"PAH",1,1,38,0) + +"PKG",222,22,1,"PAH",1,1,39,0) +Added information on the license to the information on the submission +"PKG",222,22,1,"PAH",1,1,40,0) +to OSEHRA. "QUES","XPF1",0) Y "QUES","XPF1","??") @@ -541,3956 +553,3930 @@ D XPZ2^XPDIQ "RTN") 12 "RTN","ZZUTPOST") -0^^B31989504 +0^^B31712373 "RTN","ZZUTPOST",1,0) -%utPOST ;VEN-SMH/JLI - post install for M-Unit Test software ;08/10/15 14:34 +%utPOST ;VEN-SMH/JLI - post install for M-Unit Test software ;09/14/15 12:39 "RTN","ZZUTPOST",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;;Build 12 "RTN","ZZUTPOST",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ZZUTPOST",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey + ; Original routine authored by Sam H. Habiel 07/2013-04/2014 "RTN","ZZUTPOST",5,0) - ; Original routine authored by Sam H. Habiel 07/2013?04/2014 -"RTN","ZZUTPOST",6,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","ZZUTPOST",6,0) + ; "RTN","ZZUTPOST",7,0) - ; -"RTN","ZZUTPOST",8,0) N X,I -"RTN","ZZUTPOST",9,0) +"RTN","ZZUTPOST",8,0) I +$SY=47 D R X:$G(DTIME,300) D MES^XPDUTL(" ") +"RTN","ZZUTPOST",9,0) + . S X(1)=" " "RTN","ZZUTPOST",10,0) - . S X(1)=" " -"RTN","ZZUTPOST",11,0) . S X(2)="In the next section, as it tries to copy the ut* routines" -"RTN","ZZUTPOST",12,0) +"RTN","ZZUTPOST",11,0) . S X(3)="to %ut* routines watch for text that indicates the following:" -"RTN","ZZUTPOST",13,0) +"RTN","ZZUTPOST",12,0) . S X(4)=" " -"RTN","ZZUTPOST",14,0) +"RTN","ZZUTPOST",13,0) . S X(5)="cp: cannot create regular file `/_ut.m': Permission denied" -"RTN","ZZUTPOST",15,0) +"RTN","ZZUTPOST",14,0) . S X(6)=" " -"RTN","ZZUTPOST",16,0) +"RTN","ZZUTPOST",15,0) . S X(7)="If this is seen, respond Yes at the prompt after the attempt:" -"RTN","ZZUTPOST",17,0) +"RTN","ZZUTPOST",16,0) . S X(8)=" Press ENTER to continue: " -"RTN","ZZUTPOST",18,0) +"RTN","ZZUTPOST",17,0) . F I=1:1:18 D MES^XPDUTL(" ") ; create a blank screen for text +"RTN","ZZUTPOST",18,0) + . D MES^XPDUTL(.X) "RTN","ZZUTPOST",19,0) - . D MES^XPDUTL(.X) + . Q "RTN","ZZUTPOST",20,0) - . Q -"RTN","ZZUTPOST",21,0) D RENAME -"RTN","ZZUTPOST",22,0) +"RTN","ZZUTPOST",21,0) I +$SY=47 D R X:$G(DTIME,300) I "Yy"[$E($G(X)) D GTMPROB -"RTN","ZZUTPOST",23,0) +"RTN","ZZUTPOST",22,0) . K X -"RTN","ZZUTPOST",24,0) +"RTN","ZZUTPOST",23,0) . S X(1)=" " -"RTN","ZZUTPOST",25,0) +"RTN","ZZUTPOST",24,0) . S X(2)=" Your entry on the next line may not echo" -"RTN","ZZUTPOST",26,0) +"RTN","ZZUTPOST",25,0) . S X(3)="If error text was seen enter Y (and RETURN): NO// " -"RTN","ZZUTPOST",27,0) +"RTN","ZZUTPOST",26,0) . D MES^XPDUTL(.X) -"RTN","ZZUTPOST",28,0) +"RTN","ZZUTPOST",27,0) . Q -"RTN","ZZUTPOST",29,0) +"RTN","ZZUTPOST",28,0) Q +"RTN","ZZUTPOST",29,0) + ; "RTN","ZZUTPOST",30,0) - ; -"RTN","ZZUTPOST",31,0) RENAME ; -"RTN","ZZUTPOST",32,0) +"RTN","ZZUTPOST",31,0) N %S,%D ; Source, destination -"RTN","ZZUTPOST",33,0) +"RTN","ZZUTPOST",32,0) S U="^" -"RTN","ZZUTPOST",34,0) +"RTN","ZZUTPOST",33,0) S %S="ut^ut1^utcover^utt1^utt2^utt3^utt4^utt5^utt6^uttcovr" -"RTN","ZZUTPOST",35,0) +"RTN","ZZUTPOST",34,0) S %D="%ut^%ut1^%utcover^%utt1^%utt2^%utt3^%utt4^%utt5^%utt6^%uttcovr" +"RTN","ZZUTPOST",35,0) + ; "RTN","ZZUTPOST",36,0) - ; -"RTN","ZZUTPOST",37,0) MOVE ; rename % routines -"RTN","ZZUTPOST",38,0) +"RTN","ZZUTPOST",37,0) N %,X,Y,M -"RTN","ZZUTPOST",39,0) +"RTN","ZZUTPOST",38,0) F %=1:1:$L(%D,"^") D D MES(M) I +$SY=47 D MES(" ") -"RTN","ZZUTPOST",40,0) +"RTN","ZZUTPOST",39,0) . S M="",X=$P(%S,U,%) ; from -"RTN","ZZUTPOST",41,0) +"RTN","ZZUTPOST",40,0) . S Y=$P(%D,U,%) ; to -"RTN","ZZUTPOST",42,0) +"RTN","ZZUTPOST",41,0) . Q:X="" -"RTN","ZZUTPOST",43,0) +"RTN","ZZUTPOST",42,0) . S M="Routine: "_$J(X,8) -"RTN","ZZUTPOST",44,0) +"RTN","ZZUTPOST",43,0) . Q:Y="" I $T(^@X)="" S M=M_" Missing" Q -"RTN","ZZUTPOST",45,0) +"RTN","ZZUTPOST",44,0) . S M=M_" Loaded, " -"RTN","ZZUTPOST",46,0) +"RTN","ZZUTPOST",45,0) . D COPY(X,Y) -"RTN","ZZUTPOST",47,0) +"RTN","ZZUTPOST",46,0) . S M=M_"Saved as "_$J(Y,8) +"RTN","ZZUTPOST",47,0) + ; "RTN","ZZUTPOST",48,0) - ; -"RTN","ZZUTPOST",49,0) QUIT ; END +"RTN","ZZUTPOST",49,0) + ; "RTN","ZZUTPOST",50,0) - ; -"RTN","ZZUTPOST",51,0) COPY(FROM,TO) ; -"RTN","ZZUTPOST",52,0) +"RTN","ZZUTPOST",51,0) N XVAL -"RTN","ZZUTPOST",53,0) +"RTN","ZZUTPOST",52,0) I +$SYSTEM=0 S XVAL="ZL @FROM ZS @TO" X XVAL QUIT -"RTN","ZZUTPOST",54,0) +"RTN","ZZUTPOST",53,0) I +$SYSTEM=47 DO QUIT -"RTN","ZZUTPOST",55,0) +"RTN","ZZUTPOST",54,0) . S FROM=$$PATH(FROM) -"RTN","ZZUTPOST",56,0) +"RTN","ZZUTPOST",55,0) . S TO=$$PATH(TO,"WRITE") -"RTN","ZZUTPOST",57,0) +"RTN","ZZUTPOST",56,0) . N CMD S CMD="cp "_FROM_" "_TO -"RTN","ZZUTPOST",58,0) +"RTN","ZZUTPOST",57,0) . O "cp":(shell="/bin/sh":command=CMD:WRITEONLY)::"PIPE" -"RTN","ZZUTPOST",59,0) +"RTN","ZZUTPOST",58,0) . U "cp" C "cp" -"RTN","ZZUTPOST",60,0) +"RTN","ZZUTPOST",59,0) QUIT +"RTN","ZZUTPOST",60,0) + ; "RTN","ZZUTPOST",61,0) - ; -"RTN","ZZUTPOST",62,0) PATH(ROUTINE,MODE) ; for GT.M return source file with path for a routine -"RTN","ZZUTPOST",63,0) +"RTN","ZZUTPOST",62,0) ;input: ROUTINE=Name of routine -"RTN","ZZUTPOST",64,0) +"RTN","ZZUTPOST",63,0) ; MODE="READ" or "WRITE" defaults to READ -"RTN","ZZUTPOST",65,0) +"RTN","ZZUTPOST",64,0) ;output: Full filename +"RTN","ZZUTPOST",65,0) + ; "RTN","ZZUTPOST",66,0) - ; -"RTN","ZZUTPOST",67,0) S MODE=$G(MODE,"READ") ;set MODE to default value -"RTN","ZZUTPOST",68,0) +"RTN","ZZUTPOST",67,0) N FILE S FILE=$TR(ROUTINE,"%","_")_".m" ;convert rtn name to filename -"RTN","ZZUTPOST",69,0) +"RTN","ZZUTPOST",68,0) N ZRO S ZRO=$ZRO +"RTN","ZZUTPOST",69,0) + ; "RTN","ZZUTPOST",70,0) - ; -"RTN","ZZUTPOST",71,0) ; Get source routine -"RTN","ZZUTPOST",72,0) +"RTN","ZZUTPOST",71,0) N %ZR -"RTN","ZZUTPOST",73,0) +"RTN","ZZUTPOST",72,0) I MODE="READ" D SILENT^%RSEL(ROUTINE,"SRC") Q %ZR(ROUTINE)_FILE +"RTN","ZZUTPOST",73,0) + ; "RTN","ZZUTPOST",74,0) - ; -"RTN","ZZUTPOST",75,0) ; We are writing. Parse directories and get 1st routine directory -"RTN","ZZUTPOST",76,0) +"RTN","ZZUTPOST",75,0) N DIRS -"RTN","ZZUTPOST",77,0) +"RTN","ZZUTPOST",76,0) D PARSEZRO(.DIRS,ZRO) -"RTN","ZZUTPOST",78,0) +"RTN","ZZUTPOST",77,0) N PATH S PATH=$$ZRO1ST(.DIRS) -"RTN","ZZUTPOST",79,0) +"RTN","ZZUTPOST",78,0) ; -"RTN","ZZUTPOST",80,0) +"RTN","ZZUTPOST",79,0) QUIT PATH_FILE ;end of PATH return directory and filename +"RTN","ZZUTPOST",80,0) + ; "RTN","ZZUTPOST",81,0) ; "RTN","ZZUTPOST",82,0) - ; -"RTN","ZZUTPOST",83,0) PARSEZRO(DIRS,ZRO) ; Parse $zroutines properly into an array -"RTN","ZZUTPOST",84,0) +"RTN","ZZUTPOST",83,0) N PIECE -"RTN","ZZUTPOST",85,0) +"RTN","ZZUTPOST",84,0) N I -"RTN","ZZUTPOST",86,0) +"RTN","ZZUTPOST",85,0) F I=1:1:$L(ZRO," ") S PIECE(I)=$P(ZRO," ",I) -"RTN","ZZUTPOST",87,0) +"RTN","ZZUTPOST",86,0) N CNT S CNT=1 -"RTN","ZZUTPOST",88,0) +"RTN","ZZUTPOST",87,0) F I=0:0 S I=$O(PIECE(I)) Q:'I D -"RTN","ZZUTPOST",89,0) +"RTN","ZZUTPOST",88,0) . S DIRS(CNT)=$G(DIRS(CNT))_PIECE(I) -"RTN","ZZUTPOST",90,0) +"RTN","ZZUTPOST",89,0) . I DIRS(CNT)["("&(DIRS(CNT)[")") S CNT=CNT+1 QUIT -"RTN","ZZUTPOST",91,0) +"RTN","ZZUTPOST",90,0) . I DIRS(CNT)'["("&(DIRS(CNT)'[")") S CNT=CNT+1 QUIT -"RTN","ZZUTPOST",92,0) +"RTN","ZZUTPOST",91,0) . S DIRS(CNT)=DIRS(CNT)_" " ; prep for next piece +"RTN","ZZUTPOST",92,0) + QUIT "RTN","ZZUTPOST",93,0) - QUIT + ; "RTN","ZZUTPOST",94,0) - ; -"RTN","ZZUTPOST",95,0) ZRO1ST(DIRS) ; $$ Get first routine directory -"RTN","ZZUTPOST",96,0) +"RTN","ZZUTPOST",95,0) N OUT ; $$ return -"RTN","ZZUTPOST",97,0) +"RTN","ZZUTPOST",96,0) N %1 S %1=DIRS(1) ; 1st directory -"RTN","ZZUTPOST",98,0) +"RTN","ZZUTPOST",97,0) ; Parse with (...) -"RTN","ZZUTPOST",99,0) +"RTN","ZZUTPOST",98,0) I %1["(" DO -"RTN","ZZUTPOST",100,0) +"RTN","ZZUTPOST",99,0) . S OUT=$P(%1,"(",2) -"RTN","ZZUTPOST",101,0) +"RTN","ZZUTPOST",100,0) . I OUT[" " S OUT=$P(OUT," ") -"RTN","ZZUTPOST",102,0) +"RTN","ZZUTPOST",101,0) . E S OUT=$P(OUT,")") -"RTN","ZZUTPOST",103,0) +"RTN","ZZUTPOST",102,0) ; no parens -"RTN","ZZUTPOST",104,0) +"RTN","ZZUTPOST",103,0) E S OUT=%1 +"RTN","ZZUTPOST",104,0) + ; "RTN","ZZUTPOST",105,0) - ; -"RTN","ZZUTPOST",106,0) ; Add trailing slash -"RTN","ZZUTPOST",107,0) +"RTN","ZZUTPOST",106,0) I $E(OUT,$L(OUT))'="/" S OUT=OUT_"/" -"RTN","ZZUTPOST",108,0) +"RTN","ZZUTPOST",107,0) QUIT OUT +"RTN","ZZUTPOST",108,0) + ; "RTN","ZZUTPOST",109,0) - ; -"RTN","ZZUTPOST",110,0) MES(T,B) ;Write message. -"RTN","ZZUTPOST",111,0) +"RTN","ZZUTPOST",110,0) S B=$G(B) -"RTN","ZZUTPOST",112,0) +"RTN","ZZUTPOST",111,0) I $L($T(BMES^XPDUTL)) D BMES^XPDUTL(T):B,MES^XPDUTL(T):'B Q -"RTN","ZZUTPOST",113,0) +"RTN","ZZUTPOST",112,0) W:B ! W !,T -"RTN","ZZUTPOST",114,0) +"RTN","ZZUTPOST",113,0) Q +"RTN","ZZUTPOST",114,0) + ; "RTN","ZZUTPOST",115,0) - ; -"RTN","ZZUTPOST",116,0) TEST ; @TEST - TESTING TESTING +"RTN","ZZUTPOST",116,0) + ; "RTN","ZZUTPOST",117,0) - ; -"RTN","ZZUTPOST",118,0) N ZR S ZR="o(p r) /var/abc(/var/abc/r/) /abc/def $gtm_dist/libgtmutl.so vista.so" +"RTN","ZZUTPOST",118,0) + N DIRS D PARSEZRO(.DIRS,ZR) "RTN","ZZUTPOST",119,0) - N DIRS D PARSEZRO(.DIRS,ZR) + N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) "RTN","ZZUTPOST",120,0) - N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) -"RTN","ZZUTPOST",121,0) I FIRSTDIR'="p" S $EC=",U1," +"RTN","ZZUTPOST",121,0) + ; "RTN","ZZUTPOST",122,0) - ; -"RTN","ZZUTPOST",123,0) N ZR S ZR="/var/abc(/var/abc/r/) o(p r) /abc/def $gtm_dist/libgtmutl.so vista.so" +"RTN","ZZUTPOST",123,0) + N DIRS D PARSEZRO(.DIRS,ZR) "RTN","ZZUTPOST",124,0) - N DIRS D PARSEZRO(.DIRS,ZR) + N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) "RTN","ZZUTPOST",125,0) - N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) -"RTN","ZZUTPOST",126,0) I FIRSTDIR'="/var/abc/r/" S $EC=",U1," +"RTN","ZZUTPOST",126,0) + ; "RTN","ZZUTPOST",127,0) - ; -"RTN","ZZUTPOST",128,0) N ZR S ZR="/abc/def /var/abc(/var/abc/r/) o(p r) $gtm_dist/libgtmutl.so vista.so" -"RTN","ZZUTPOST",129,0) +"RTN","ZZUTPOST",128,0) N DIRS D PARSEZRO(.DIRS,ZR) -"RTN","ZZUTPOST",130,0) +"RTN","ZZUTPOST",129,0) N FIRSTDIR S FIRSTDIR=$$ZRO1ST(.DIRS) -"RTN","ZZUTPOST",131,0) +"RTN","ZZUTPOST",130,0) I FIRSTDIR'="/abc/def" S $EC=",U1," +"RTN","ZZUTPOST",131,0) + ; "RTN","ZZUTPOST",132,0) - ; -"RTN","ZZUTPOST",133,0) WRITE "All tests have run successfully!",! -"RTN","ZZUTPOST",134,0) +"RTN","ZZUTPOST",133,0) QUIT -"RTN","ZZUTPOST",135,0) +"RTN","ZZUTPOST",134,0) ; -"RTN","ZZUTPOST",136,0) +"RTN","ZZUTPOST",135,0) GTMPROB ; come here in case of error trying to run unit tests - checks whether renaming worked -"RTN","ZZUTPOST",137,0) +"RTN","ZZUTPOST",136,0) N X -"RTN","ZZUTPOST",138,0) +"RTN","ZZUTPOST",137,0) S X(1)=" " -"RTN","ZZUTPOST",139,0) +"RTN","ZZUTPOST",138,0) S X(2)="*** An error occurred during renaming of routines to %ut*." -"RTN","ZZUTPOST",140,0) +"RTN","ZZUTPOST",139,0) S X(3)="*** The renaming has been seen to fail on one type of Linux system." -"RTN","ZZUTPOST",141,0) +"RTN","ZZUTPOST",140,0) S X(4)="*** In this case, at the Linux command line copy each ut*.m routine" -"RTN","ZZUTPOST",142,0) +"RTN","ZZUTPOST",141,0) S X(5)="*** (ut.m, ut1.m, utt1.m, utt2.m, utt3.m, utt4.m, utt5.m, utt6.m, and " -"RTN","ZZUTPOST",143,0) +"RTN","ZZUTPOST",142,0) S X(6)="*** uttcovr.m) to _ut*.m (e.g., 'cp ut.m _ut.m', 'cp ut1.m _ut1.m'," -"RTN","ZZUTPOST",144,0) +"RTN","ZZUTPOST",143,0) S X(7)="*** 'cp utt1.m _utt1.m', etc., to 'cp uttcovr.m _uttcovr.m'). Then in GT.M" -"RTN","ZZUTPOST",145,0) +"RTN","ZZUTPOST",144,0) S X(8)="*** use the command 'ZLINK %ut', then 'ZLINK %ut1', etc., these may" -"RTN","ZZUTPOST",146,0) +"RTN","ZZUTPOST",145,0) S X(9)="*** indicate an undefined local variable error, but continue doing it." -"RTN","ZZUTPOST",147,0) +"RTN","ZZUTPOST",146,0) S X(10)="*** When complete, use the M command 'DO ^%utt1' to run the unit tests on" -"RTN","ZZUTPOST",148,0) +"RTN","ZZUTPOST",147,0) S X(11)="*** the %ut and %ut1 routines to confirm they are working" -"RTN","ZZUTPOST",149,0) +"RTN","ZZUTPOST",148,0) S X(12)=" " -"RTN","ZZUTPOST",150,0) +"RTN","ZZUTPOST",149,0) S X(13)=" Press Enter to continue: " -"RTN","ZZUTPOST",151,0) +"RTN","ZZUTPOST",150,0) D MES^XPDUTL(.X) -"RTN","ZZUTPOST",152,0) +"RTN","ZZUTPOST",151,0) R X:$G(DTIME,300) -"RTN","ZZUTPOST",153,0) +"RTN","ZZUTPOST",152,0) Q "RTN","ZZUTPRE") -0^^B6774005 +0^^B6681444 "RTN","ZZUTPRE",1,0) -%utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;08/10/15 14:35 +%utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;09/14/15 12:39 "RTN","ZZUTPRE",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;;Build 12 "RTN","ZZUTPRE",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ZZUTPRE",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","ZZUTPRE",5,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 +"RTN","ZZUTPRE",5,0) + ; "RTN","ZZUTPRE",6,0) ; "RTN","ZZUTPRE",7,0) - ; -"RTN","ZZUTPRE",8,0) ; The following is used to create, if it does not exist, the MASH UTILITIES -"RTN","ZZUTPRE",9,0) +"RTN","ZZUTPRE",8,0) ; package, and to assign the %u namespace to this package. This special -"RTN","ZZUTPRE",10,0) +"RTN","ZZUTPRE",9,0) ; processing is necessary, since the input transform currently will not accept a -"RTN","ZZUTPRE",11,0) +"RTN","ZZUTPRE",10,0) ; % or lower case character in the namespace. -"RTN","ZZUTPRE",12,0) +"RTN","ZZUTPRE",11,0) I '$D(^DIC(9.4,"B","MASH UTILITIES")) N DIC,X S DIC="^DIC(9.4,",DIC(0)="",X="MASH UTILITIES",DIC("DR")="1////%u;2///Utilities associated with the M Advanced Shell" D FILE^DICN -"RTN","ZZUTPRE",13,0) +"RTN","ZZUTPRE",12,0) ; and if necessary, as in CACHE, map %ut routine and namespace in the current account. -"RTN","ZZUTPRE",14,0) +"RTN","ZZUTPRE",13,0) I +$SY=0 D CACHEMAP ; This routine is CACHE specific -"RTN","ZZUTPRE",15,0) +"RTN","ZZUTPRE",14,0) Q -"RTN","ZZUTPRE",16,0) +"RTN","ZZUTPRE",15,0) ; The following code was provided by Sam Habiel to map % -"RTN","ZZUTPRE",17,0) +"RTN","ZZUTPRE",16,0) CACHEMAP ; Map %ut* Globals and Routines away from %SYS in Cache -"RTN","ZZUTPRE",18,0) +"RTN","ZZUTPRE",17,0) ; Get current namespace -"RTN","ZZUTPRE",19,0) +"RTN","ZZUTPRE",18,0) N NMSP -"RTN","ZZUTPRE",20,0) +"RTN","ZZUTPRE",19,0) I $P($P($ZV,") ",2),"(")<2012 S NMSP=$ZU(5) -"RTN","ZZUTPRE",21,0) +"RTN","ZZUTPRE",20,0) I $P($P($ZV,") ",2),"(")>2011 S NMSP=$NAMESPACE +"RTN","ZZUTPRE",21,0) + ; "RTN","ZZUTPRE",22,0) - ; -"RTN","ZZUTPRE",23,0) N $ET S $ET="ZN NMSP D ^%ZTER S $EC=""""" +"RTN","ZZUTPRE",23,0) + ; "RTN","ZZUTPRE",24,0) - ; -"RTN","ZZUTPRE",25,0) ZN "%SYS" ; Go to SYS +"RTN","ZZUTPRE",25,0) + ; "RTN","ZZUTPRE",26,0) - ; -"RTN","ZZUTPRE",27,0) ; Props -"RTN","ZZUTPRE",28,0) +"RTN","ZZUTPRE",27,0) N % S %=##Class(Config.Namespaces).Get(NMSP,.PROP) ; Get all namespace properties +"RTN","ZZUTPRE",28,0) + I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT "RTN","ZZUTPRE",29,0) - I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT + ; "RTN","ZZUTPRE",30,0) - ; -"RTN","ZZUTPRE",31,0) N DBG S DBG=PROP("Globals") ; get the database globals location -"RTN","ZZUTPRE",32,0) +"RTN","ZZUTPRE",31,0) N DBR S DBR=PROP("Routines") ; get the database routines location +"RTN","ZZUTPRE",32,0) + ; "RTN","ZZUTPRE",33,0) - ; -"RTN","ZZUTPRE",34,0) ; Map %ut globals away from %SYS -"RTN","ZZUTPRE",35,0) +"RTN","ZZUTPRE",34,0) N % S %=##class(Config.Configuration).GetGlobalMapping(NMSP,"%ut*","",DBG,DBG) -"RTN","ZZUTPRE",36,0) +"RTN","ZZUTPRE",35,0) I '% S %=##class(Config.Configuration).AddGlobalMapping(NMSP,"%ut*","",DBG,DBG) +"RTN","ZZUTPRE",36,0) + I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT "RTN","ZZUTPRE",37,0) - I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT -"RTN","ZZUTPRE",38,0) ; -"RTN","ZZUTPRE",39,0) +"RTN","ZZUTPRE",38,0) ; Map %ut routines away from %SYS -"RTN","ZZUTPRE",40,0) +"RTN","ZZUTPRE",39,0) N PROPRTN S PROPRTN("Database")=DBR -"RTN","ZZUTPRE",41,0) +"RTN","ZZUTPRE",40,0) N % S %=##Class(Config.MapRoutines).Get(NMSP,"%ut*",.PROPRTN) -"RTN","ZZUTPRE",42,0) +"RTN","ZZUTPRE",41,0) N PROPRTN S PROPRTN("Database")=DBR ; Cache seems to like deleting this -"RTN","ZZUTPRE",43,0) +"RTN","ZZUTPRE",42,0) I '% S %=##Class(Config.MapRoutines).Create(NMSP,"%ut*",.PROPRTN) -"RTN","ZZUTPRE",44,0) +"RTN","ZZUTPRE",43,0) I '% W !,"Error="_$SYSTEM.Status.GetErrorText(%) S $EC=",U-CONFIG-FAIL," QUIT -"RTN","ZZUTPRE",45,0) +"RTN","ZZUTPRE",44,0) ZN NMSP ; Go back -"RTN","ZZUTPRE",46,0) +"RTN","ZZUTPRE",45,0) QUIT "RTN","ut") -0^1^B196411208 +0^1^B196383387 "RTN","ut",1,0) -%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;08/10/15 14:31 +%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;09/14/15 09:38 "RTN","ut",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;;Build 12 "RTN","ut",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ut",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","ut",5,0) ; Original routine authored by Joel L. Ivey as XTMUNIT while working for U.S. Department of Veterans Affairs 2003-2012 -"RTN","ut",6,0) +"RTN","ut",5,0) ; Includes addition of %utVERB and %utBREAK arguments and code related to them as well as other substantial additions authored by Sam Habiel 07/2013?04/2014 +"RTN","ut",6,0) + ; "RTN","ut",7,0) - ; -"RTN","ut",8,0) ; This routine and its companion, %ut1, provide the basic functionality for -"RTN","ut",9,0) +"RTN","ut",8,0) ; running unit tests on parts of M programs either at the command line level -"RTN","ut",10,0) +"RTN","ut",9,0) ; or via the M-Unit GUI application for windows operating systems. +"RTN","ut",10,0) + ; "RTN","ut",11,0) - ; -"RTN","ut",12,0) ; Original by Dr. Joel Ivey -"RTN","ut",13,0) +"RTN","ut",12,0) ; Contributions by Dr. Sam Habiel -"RTN","ut",14,0) +"RTN","ut",13,0) ; comments moved to %ut1 due to space requirements +"RTN","ut",14,0) + ; "RTN","ut",15,0) - ; -"RTN","ut",16,0) D ^%utt6 ; runs unit tests on all of it +"RTN","ut",16,0) + Q "RTN","ut",17,0) - Q + ; "RTN","ut",18,0) - ; -"RTN","ut",19,0) EN(%utRNAM,%utVERB,%utBREAK) ; .SR Entry point with primary test routine name, optional 1 for verbose output -"RTN","ut",20,0) +"RTN","ut",19,0) N %utLIST,%utROU,%ut -"RTN","ut",21,0) +"RTN","ut",20,0) I '+$G(%utVERB) S %utVERB=0 -"RTN","ut",22,0) +"RTN","ut",21,0) S %utLIST=1,%utROU(%utLIST)=%utRNAM +"RTN","ut",22,0) + K ^TMP("%ut",$J,"UTVALS") "RTN","ut",23,0) - K ^TMP("%ut",$J,"UTVALS") + D SETUT "RTN","ut",24,0) - D SETUT + D EN1(.%utROU,%utLIST) "RTN","ut",25,0) - D EN1(.%utROU,%utLIST) + Q "RTN","ut",26,0) - Q + ; "RTN","ut",27,0) - ; -"RTN","ut",28,0) SETUT ; -"RTN","ut",29,0) +"RTN","ut",28,0) ; VEN/SMH 26JUL2013 -"RTN","ut",30,0) +"RTN","ut",29,0) I '($D(IO)#2) S IO=$P -"RTN","ut",31,0) +"RTN","ut",30,0) S U="^" -"RTN","ut",32,0) +"RTN","ut",31,0) ; VEN/SMH 26JUL2013 END +"RTN","ut",32,0) + ; "RTN","ut",33,0) - ; + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",34,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",35,0) S %ut("IO")=IO -"RTN","ut",36,0) +"RTN","ut",35,0) S %ut=1 ; set to identify unit test being run check with $$ISUTEST^%ut() +"RTN","ut",36,0) + ; "RTN","ut",37,0) - ; -"RTN","ut",38,0) ; ZEXCEPT: %utBREAK -"RTN","ut",39,0) +"RTN","ut",38,0) I $G(%utBREAK) S %ut("BREAK")=1 +"RTN","ut",39,0) + Q "RTN","ut",40,0) - Q + ; "RTN","ut",41,0) - ; -"RTN","ut",42,0) EN1(%utROU,%utLIST) ; -"RTN","ut",43,0) +"RTN","ut",42,0) ; VEN/SMH 26JUL2013 - This block is refactored to fix problems with -"RTN","ut",44,0) +"RTN","ut",43,0) ; SETUP and TEARDOWN not happening at the right time -"RTN","ut",45,0) +"RTN","ut",44,0) N %utERRL,%utK,%utI,%utJ,%utSTRT -"RTN","ut",46,0) +"RTN","ut",45,0) ; ZEXCEPT: %utVERB -- ARGUMENT TO EN -"RTN","ut",47,0) +"RTN","ut",46,0) ; ZEXCEPT: %utGUI -- CONDITIONALLY DEFINED BY GUINEXT -"RTN","ut",48,0) +"RTN","ut",47,0) ; ZEXCEPT: %ut -- NEWED IN EN +"RTN","ut",48,0) + ; "RTN","ut",49,0) - ; -"RTN","ut",50,0) ; Structure map for %ut -"RTN","ut",51,0) +"RTN","ut",50,0) ; -- CURR = Counter for routine number. Used as sub in %utROU -"RTN","ut",52,0) +"RTN","ut",51,0) ; -- ECNT = Entry point count in loop (cf. NERT); VEN/SMH - Needed? -"RTN","ut",53,0) +"RTN","ut",52,0) ; -- FAIL = Number of failures -"RTN","ut",54,0) +"RTN","ut",53,0) ; -- CHK = Number of checks ran (TF/EQ/FAIL) -"RTN","ut",55,0) +"RTN","ut",54,0) ; -- NENT = Number of entry points ran -"RTN","ut",56,0) +"RTN","ut",55,0) ; -- ERRN = Number of errors -"RTN","ut",57,0) +"RTN","ut",56,0) S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 +"RTN","ut",57,0) + ; "RTN","ut",58,0) - ; -"RTN","ut",59,0) ; -- GET LIST OF ROUTINES -- -"RTN","ut",60,0) +"RTN","ut",59,0) ; first get any tree of routines from this one -"RTN","ut",61,0) +"RTN","ut",60,0) D GETTREE^%ut1(.%utROU,.%utLIST) +"RTN","ut",61,0) + ; "RTN","ut",62,0) - ; -"RTN","ut",63,0) ; Now process each routine that has been referenced -"RTN","ut",64,0) +"RTN","ut",63,0) N CURRROU -"RTN","ut",65,0) +"RTN","ut",64,0) S %ut("CURR")=0 -"RTN","ut",66,0) +"RTN","ut",65,0) F S %ut("CURR")=%ut("CURR")+1 Q:'$D(%utROU(%ut("CURR"))) S CURRROU=%utROU(%ut("CURR")) D I $T(@("SHUTDOWN^"_CURRROU))'="" D @("SHUTDOWN^"_CURRROU) -"RTN","ut",67,0) +"RTN","ut",66,0) . ; 141018 - add ability to run STARTUP and SHUTDOWN in each routine JLI -"RTN","ut",68,0) +"RTN","ut",67,0) . I $T(@("STARTUP^"_CURRROU))'="" D @("STARTUP^"_CURRROU) ; 141018 -"RTN","ut",69,0) +"RTN","ut",68,0) . N %utETRY ; Test list to run +"RTN","ut",69,0) + . ; "RTN","ut",70,0) - . ; -"RTN","ut",71,0) . ; Collect Test list. -"RTN","ut",72,0) +"RTN","ut",71,0) . D CHEKTEST^%ut1(%utROU(%ut("CURR")),.%ut,.%utETRY) +"RTN","ut",72,0) + . ; "RTN","ut",73,0) - . ; -"RTN","ut",74,0) . ; if a SETUP entry point exists, save it off in %ut -"RTN","ut",75,0) +"RTN","ut",74,0) . S %ut("SETUP")="" ; 141018 need to clear any previous values JLI -"RTN","ut",76,0) +"RTN","ut",75,0) . N %utSETUP S %utSETUP="SETUP^"_%utROU(%ut("CURR")) -"RTN","ut",77,0) +"RTN","ut",76,0) . S %ut("LINE")=$T(@%utSETUP) I %ut("LINE")'="" S %ut("SETUP")=%utSETUP -"RTN","ut",78,0) +"RTN","ut",77,0) . K %utSETUP ; we're done! +"RTN","ut",78,0) + . ; "RTN","ut",79,0) - . ; -"RTN","ut",80,0) . ; if a TEARDOWN entry point exists, ditto -"RTN","ut",81,0) +"RTN","ut",80,0) . S %ut("TEARDOWN")="" ; 141018 need to clear any previous values JLI -"RTN","ut",82,0) +"RTN","ut",81,0) . N %utTEARDOWN S %utTEARDOWN="TEARDOWN^"_%utROU(%ut("CURR")) -"RTN","ut",83,0) +"RTN","ut",82,0) . S %ut("LINE")=$T(@%utTEARDOWN) I %ut("LINE")'="" S %ut("TEARDOWN")=%utTEARDOWN -"RTN","ut",84,0) +"RTN","ut",83,0) . K %utTEARDOWN ; done here. +"RTN","ut",84,0) + . ; "RTN","ut",85,0) - . ; -"RTN","ut",86,0) . ; VEN/SMH 26JUL2013 - this block changed to correct running of setup and teardown -"RTN","ut",87,0) +"RTN","ut",86,0) . ; run each of the specified entry points -"RTN","ut",88,0) +"RTN","ut",87,0) . ; -"RTN","ut",89,0) +"RTN","ut",88,0) . ; == THIS FOR/DO BLOCK IS THE CENTRAL TEST RUNNER == -"RTN","ut",90,0) +"RTN","ut",89,0) . S %utI=0 -"RTN","ut",91,0) +"RTN","ut",90,0) . F S %utI=$O(%utETRY(%utI)) Q:%utI'>0 S %ut("ENUM")=%ut("ERRN")+%ut("FAIL") D -"RTN","ut",92,0) +"RTN","ut",91,0) . . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",92,0) + . . ; "RTN","ut",93,0) - . . ; -"RTN","ut",94,0) . . ; Run Set-up Code (only if present) -"RTN","ut",95,0) +"RTN","ut",94,0) . . S %ut("ENT")=$G(%ut("SETUP")) ; Current entry -"RTN","ut",96,0) +"RTN","ut",95,0) . . S %ut("NAME")="Set-up Code" +"RTN","ut",96,0) + . . D:%ut("ENT")]"" @%ut("ENT") "RTN","ut",97,0) - . . D:%ut("ENT")]"" @%ut("ENT") + . . ; "RTN","ut",98,0) - . . ; -"RTN","ut",99,0) . . ; Run actual test -"RTN","ut",100,0) +"RTN","ut",99,0) . . S %ut("ECNT")=%ut("ECNT")+1 -"RTN","ut",101,0) +"RTN","ut",100,0) . . S %ut("NAME")=%utETRY(%utI,"NAME") -"RTN","ut",102,0) +"RTN","ut",101,0) . . S %ut("ENT")=%utETRY(%utI)_"^"_%utROU(%ut("CURR")) -"RTN","ut",103,0) +"RTN","ut",102,0) . . I %utVERB,'$D(%utGUI) D VERBOSE1(.%utETRY,%utI) ; Say what we executed. -"RTN","ut",104,0) +"RTN","ut",103,0) . . D @%ut("ENT") +"RTN","ut",104,0) + . . ; "RTN","ut",105,0) - . . ; -"RTN","ut",106,0) . . ; Run Teardown Code (only if present) -"RTN","ut",107,0) +"RTN","ut",106,0) . . S %ut("ENT")=$G(%ut("TEARDOWN")) -"RTN","ut",108,0) +"RTN","ut",107,0) . . S %ut("NAME")="Teardown Code" -"RTN","ut",109,0) +"RTN","ut",108,0) . . D:%ut("ENT")]"" @%ut("ENT") -"RTN","ut",110,0) +"RTN","ut",109,0) . . ; -"RTN","ut",111,0) +"RTN","ut",110,0) . . ; ENUM = Number of errors + failures -"RTN","ut",112,0) +"RTN","ut",111,0) . . ; Only print out the success message [OK] If our error number remains -"RTN","ut",113,0) +"RTN","ut",112,0) . . ; the same as when we started the loop. -"RTN","ut",114,0) +"RTN","ut",113,0) . . I %utVERB,'$D(%utGUI) D -"RTN","ut",115,0) +"RTN","ut",114,0) . . . I %ut("ENUM")=(%ut("ERRN")+%ut("FAIL")) D VERBOSE(.%utETRY,%utI,1) I 1 -"RTN","ut",116,0) +"RTN","ut",115,0) . . . E D VERBOSE(.%utETRY,%utI,0) -"RTN","ut",117,0) +"RTN","ut",116,0) . . . Q -"RTN","ut",118,0) +"RTN","ut",117,0) . . Q -"RTN","ut",119,0) +"RTN","ut",118,0) . ; keep a %utCNT of number of entry points executed across all routines -"RTN","ut",120,0) +"RTN","ut",119,0) . S %ut("NENT")=%ut("NENT")+%ut("ENTN") +"RTN","ut",120,0) + . Q "RTN","ut",121,0) - . Q + ; "RTN","ut",122,0) - ; -"RTN","ut",123,0) ; -- SHUTDOWN -- +"RTN","ut",123,0) + D SETIO^%ut1 "RTN","ut",124,0) - D SETIO^%ut1 -"RTN","ut",125,0) W !!,"Ran ",%utLIST," Routine",$S(%utLIST>1:"s",1:""),", ",%ut("NENT")," Entry Tag",$S(%ut("NENT")>1:"s",1:"") -"RTN","ut",126,0) +"RTN","ut",125,0) W !,"Checked ",%ut("CHK")," test",$S(%ut("CHK")>1:"s",1:""),", with ",%ut("FAIL")," failure",$S(%ut("FAIL")'=1:"s",1:"")," and encountered ",%ut("ERRN")," error",$S(%ut("ERRN")'=1:"s",1:""),"." -"RTN","ut",127,0) +"RTN","ut",126,0) S ^TMP("%ut",$J,"UTVALS")=%utLIST_U_%ut("NENT")_U_%ut("CHK")_U_%ut("FAIL")_U_%ut("ERRN") ; JLI 150621 so programs running several sets of unit tests can generate totals +"RTN","ut",127,0) + D RESETIO^%ut1 "RTN","ut",128,0) - D RESETIO^%ut1 + Q "RTN","ut",129,0) - Q -"RTN","ut",130,0) ; -- end EN1 -"RTN","ut",131,0) +"RTN","ut",130,0) VERBOSE(%utETRY,%utI,SUCCESS) ; Say whether we succeeded or failed. +"RTN","ut",131,0) + ; ZEXCEPT: %ut - NEWED IN EN "RTN","ut",132,0) - ; ZEXCEPT: %ut - NEWED IN EN + D SETIO^%ut1 "RTN","ut",133,0) - D SETIO^%ut1 -"RTN","ut",134,0) N I F I=$X+3:1:73 W "-" -"RTN","ut",135,0) +"RTN","ut",134,0) W ?73 -"RTN","ut",136,0) +"RTN","ut",135,0) I $G(SUCCESS) W "[OK]" -"RTN","ut",137,0) +"RTN","ut",136,0) E W "[FAIL]" +"RTN","ut",137,0) + D RESETIO^%ut1 "RTN","ut",138,0) - D RESETIO^%ut1 + Q "RTN","ut",139,0) - Q + ; "RTN","ut",140,0) - ; -"RTN","ut",141,0) VERBOSE1(%utETRY,%utI) ; Print out the entry point info +"RTN","ut",141,0) + ; ZEXCEPT: %ut - NEWED IN EN "RTN","ut",142,0) - ; ZEXCEPT: %ut - NEWED IN EN + D SETIO^%ut1 "RTN","ut",143,0) - D SETIO^%ut1 -"RTN","ut",144,0) W !,%utETRY(%utI) I $G(%utETRY(%utI,"NAME"))'="" W " - ",%utETRY(%utI,"NAME") +"RTN","ut",144,0) + D RESETIO^%ut1 "RTN","ut",145,0) - D RESETIO^%ut1 + Q "RTN","ut",146,0) - Q + ; "RTN","ut",147,0) - ; -"RTN","ut",148,0) CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values -"RTN","ut",149,0) +"RTN","ut",148,0) I '$D(XTSTVAL) D NVLDARG^%ut1("CHKTF") Q -"RTN","ut",150,0) +"RTN","ut",149,0) D CHKTF^%ut1(XTSTVAL,$G(XTERMSG)) +"RTN","ut",150,0) + Q "RTN","ut",151,0) - Q + ; "RTN","ut",152,0) - ; -"RTN","ut",153,0) CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut",154,0) +"RTN","ut",153,0) I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG^%ut1("CHKEQ") Q -"RTN","ut",155,0) +"RTN","ut",154,0) D CHKEQ^%ut1(XTEXPECT,XTACTUAL,$G(XTERMSG)) +"RTN","ut",155,0) + Q "RTN","ut",156,0) - Q + ; "RTN","ut",157,0) - ; -"RTN","ut",158,0) FAIL(XTERMSG) ; Entry point for generating a failure message -"RTN","ut",159,0) +"RTN","ut",158,0) D FAIL^%ut1($G(XTERMSG)) +"RTN","ut",159,0) + Q "RTN","ut",160,0) - Q + ; "RTN","ut",161,0) - ; -"RTN","ut",162,0) SUCCEED ; Entry point for forcing a success (Thx David Whitten) -"RTN","ut",163,0) +"RTN","ut",162,0) ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut",164,0) +"RTN","ut",163,0) ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut",165,0) +"RTN","ut",164,0) ; Switch IO and write out the dot for activity -"RTN","ut",166,0) +"RTN","ut",165,0) I '$D(%utGUI) D -"RTN","ut",167,0) +"RTN","ut",166,0) . D SETIO^%ut1 -"RTN","ut",168,0) +"RTN","ut",167,0) . W "." -"RTN","ut",169,0) +"RTN","ut",168,0) . D RESETIO^%ut1 +"RTN","ut",169,0) + ; "RTN","ut",170,0) - ; -"RTN","ut",171,0) ; Increment test counter +"RTN","ut",171,0) + S %ut("CHK")=%ut("CHK")+1 "RTN","ut",172,0) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut",173,0) QUIT +"RTN","ut",173,0) + ; "RTN","ut",174,0) - ; -"RTN","ut",175,0) CHKLEAKS(%utCODE,%utLOC,%utINPT) ; functionality to check for variable leaks on executing a section of code -"RTN","ut",176,0) +"RTN","ut",175,0) ; %utCODE - A string that specifies the code that is to be XECUTED and checked for leaks. -"RTN","ut",177,0) +"RTN","ut",176,0) ; this should be a complete piece of code (e.g., "S X=$$NOW^XLFDT()" or "D EN^%ut(""ROUNAME"")") -"RTN","ut",178,0) +"RTN","ut",177,0) ; %utLOC - A string that is used to indicate the code tested for variable leaks -"RTN","ut",179,0) +"RTN","ut",178,0) ; %utINPT - An optional variable which may be passed by reference. This may -"RTN","ut",180,0) +"RTN","ut",179,0) ; be used to pass any variable values, etc. into the code to be -"RTN","ut",181,0) +"RTN","ut",180,0) ; XECUTED. In this case, set the subscript to the variable name and the -"RTN","ut",182,0) +"RTN","ut",181,0) ; value of the subscripted variable to the desired value of the subscript. -"RTN","ut",183,0) +"RTN","ut",182,0) ; e.g., (using NAME as my current namespace) -"RTN","ut",184,0) +"RTN","ut",183,0) ; S CODE="S %utINPT=$$ENTRY^ROUTINE(ZZVALUE1,ZZVALUE2)" -"RTN","ut",185,0) +"RTN","ut",184,0) ; S NAMELOC="ENTRY^ROUTINE leak test" (or simply "ENTRY^ROUTINE") -"RTN","ut",186,0) +"RTN","ut",185,0) ; S NAMEINPT("ZZVALUE1")=ZZVALUE1 -"RTN","ut",187,0) +"RTN","ut",186,0) ; S NAMEINPT("ZZVALUE2")=ZZVALUE2 -"RTN","ut",188,0) +"RTN","ut",187,0) ; D CHKLEAKS^%ut(CODE,NAMELOC,.NAMEINPT) +"RTN","ut",188,0) + ; "RTN","ut",189,0) - ; -"RTN","ut",190,0) ; If part of a unit test, any leaked variables in ENTRY^ROUTINE which result -"RTN","ut",191,0) +"RTN","ut",190,0) ; from running the code with the variables indicated will be shown as FAILUREs. +"RTN","ut",191,0) + ; "RTN","ut",192,0) - ; -"RTN","ut",193,0) ; If called outside of a unit test, any leaked variables will be printed to the -"RTN","ut",194,0) +"RTN","ut",193,0) ; current device. +"RTN","ut",194,0) + ; "RTN","ut",195,0) - ; -"RTN","ut",196,0) N (%utCODE,%utLOC,%utINPT,DUZ,IO,U,%utERRL,%ut,%utGUI,%utERR,%utI,%utJ,%utK,%utLIST,%utROU,%utSTRT,XTGUISEP) -"RTN","ut",197,0) +"RTN","ut",196,0) ; ZEXCEPT: %ut - part of exclusive NEW TESTS FOR EXISTENCE ONLY -"RTN","ut",198,0) +"RTN","ut",197,0) ; ZEXCEPT: %utVAR - handled by exclusive NEW +"RTN","ut",198,0) + ; "RTN","ut",199,0) - ; -"RTN","ut",200,0) ; ACTIVATE ANY VARIABLES PASSED AS SUBSCRIPTS TO %utINPT TO THEIR VALUES -"RTN","ut",201,0) +"RTN","ut",200,0) S %utVAR=" " F S %utVAR=$O(%utINPT(%utVAR)) Q:%utVAR="" S (@%utVAR)=%utINPT(%utVAR) -"RTN","ut",202,0) +"RTN","ut",201,0) X %utCODE -"RTN","ut",203,0) +"RTN","ut",202,0) N ZZUTVAR S ZZUTVAR="%" -"RTN","ut",204,0) +"RTN","ut",203,0) I $G(%ut)=1 D -"RTN","ut",205,0) +"RTN","ut",204,0) . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) -"RTN","ut",206,0) +"RTN","ut",205,0) . F S ZZUTVAR=$O(@ZZUTVAR) Q:ZZUTVAR="" I $E(ZZUTVAR,1,3)'="%ut",'$D(%utINPT(ZZUTVAR)),",DUZ,IO,U,DTIME,ZZUTVAR,DT,%ut,XTGUISEP,"'[(","_ZZUTVAR_",") D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) +"RTN","ut",206,0) + . Q "RTN","ut",207,0) - . Q -"RTN","ut",208,0) I '($G(%ut)=1) D -"RTN","ut",209,0) +"RTN","ut",208,0) . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR -"RTN","ut",210,0) +"RTN","ut",209,0) . F S ZZUTVAR=$O(@ZZUTVAR) Q:ZZUTVAR="" I $E(ZZUTVAR,1,3)'="%ut",'$D(%utINPT(ZZUTVAR)),",DUZ,IO,U,DTIME,ZZUTVAR,DT,%ut,XTGUISEP,"'[(","_ZZUTVAR_",") W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR +"RTN","ut",210,0) + . Q "RTN","ut",211,0) - . Q + Q "RTN","ut",212,0) - Q + ; "RTN","ut",213,0) - ; -"RTN","ut",214,0) ERROR ; record errors -"RTN","ut",215,0) +"RTN","ut",214,0) ; ZEXCEPT: %utERRL,%utGUI,%utERR -CREATED IN SETUP, KILLED IN END +"RTN","ut",215,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",216,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",217,0) ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut",218,0) +"RTN","ut",217,0) S %ut("CHK")=%ut("CHK")+1 -"RTN","ut",219,0) +"RTN","ut",218,0) I '$D(%utGUI) D ERROR1 -"RTN","ut",220,0) +"RTN","ut",219,0) I $D(%utGUI) D -"RTN","ut",221,0) +"RTN","ut",220,0) . S %ut("CNT")=%ut("CNT")+1 -"RTN","ut",222,0) +"RTN","ut",221,0) . S %utERR=%utERR+1 -"RTN","ut",223,0) +"RTN","ut",222,0) . S @%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"ERROR"_XTGUISEP_$S(+$SY=47:$ZS,1:$ZE) +"RTN","ut",223,0) + . Q "RTN","ut",224,0) - . Q -"RTN","ut",225,0) S @($S(+$SY=47:"$ZS",1:"$ZE")_"="_""""""),$EC="" +"RTN","ut",225,0) + Q "RTN","ut",226,0) - Q + ; "RTN","ut",227,0) - ; -"RTN","ut",228,0) ERROR1 ; -"RTN","ut",229,0) +"RTN","ut",228,0) I $G(%ut("BREAK")) BREAK ; if we are asked to break upon error, please do so! -"RTN","ut",230,0) +"RTN","ut",229,0) ; ZEXCEPT: %utERRL -CREATED IN SETUP, KILLED IN END +"RTN","ut",230,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",231,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",232,0) D SETIO^%ut1 -"RTN","ut",233,0) +"RTN","ut",232,0) W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - Error: " W $S(+$SY=47:$ZS,1:$ZE),! D -"RTN","ut",234,0) +"RTN","ut",233,0) . S %ut("ERRN")=%ut("ERRN")+1,%utERRL(%ut("ERRN"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=$S(+$SY=47:$ZS,1:$ZE),%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut",235,0) +"RTN","ut",234,0) . Q -"RTN","ut",236,0) +"RTN","ut",235,0) D RESETIO^%ut1 +"RTN","ut",236,0) + Q "RTN","ut",237,0) - Q + ; "RTN","ut",238,0) - ; -"RTN","ut",239,0) ISUTEST() ; .SUPPORTED API TO DETERMINE IF CURRENTLY IN UNIT TEST -"RTN","ut",240,0) +"RTN","ut",239,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut",241,0) +"RTN","ut",240,0) Q $G(%ut)=1 +"RTN","ut",241,0) + ; "RTN","ut",242,0) - ; -"RTN","ut",243,0) PICKSET ; .OPT Interactive selection of MUnit Test Group -"RTN","ut",244,0) +"RTN","ut",243,0) N DIC,Y,%utROU,%utLIST,DIR S DIC=17.9001,DIC(0)="AEQM" D ^DIC Q:Y'>0 W ! D GETSET(+Y,.%utROU,.%utLIST) N DIC,Y,%ut D SETUT D EN1(.%utROU,%utLIST) S DIR(0)="EA",DIR("A")="Enter RETURN to continue:" D ^DIR K DIR +"RTN","ut",244,0) + Q "RTN","ut",245,0) - Q + ; "RTN","ut",246,0) - ; -"RTN","ut",247,0) RUNSET(SETNAME,VERBOSE) ; .SR Run with Specified Selection of MUnit Test Group -"RTN","ut",248,0) +"RTN","ut",247,0) N Y,%utROU,%utLIST,%utVERB -"RTN","ut",249,0) +"RTN","ut",248,0) Q:$G(SETNAME)="" -"RTN","ut",250,0) +"RTN","ut",249,0) S %utVERB=$G(VERBOSE,0) -"RTN","ut",251,0) +"RTN","ut",250,0) S Y=+$$FIND1^DIC(17.9001,"","X",SETNAME) Q:Y'>0 -"RTN","ut",252,0) +"RTN","ut",251,0) D GETSET(Y,.%utROU,.%utLIST) -"RTN","ut",253,0) +"RTN","ut",252,0) N Y,SETNAME,%ut -"RTN","ut",254,0) +"RTN","ut",253,0) D SETUT -"RTN","ut",255,0) +"RTN","ut",254,0) D EN1(.%utROU,%utLIST) +"RTN","ut",255,0) + Q "RTN","ut",256,0) - Q + ; "RTN","ut",257,0) - ; -"RTN","ut",258,0) ; DOSET CAN BE USED TO RUN A SET OF TESTS BASED ON THE IEN IN THE MUNIT TEST GROUP file (#17.9001) -"RTN","ut",259,0) +"RTN","ut",258,0) DOSET(IEN,%utVERB) ; 140731 JLI added %utVERB as a second argument -"RTN","ut",260,0) +"RTN","ut",259,0) ; IEN - Internal entry number for selected set of tests in the MUNIT TEST GROUP file (#17.9001) -"RTN","ut",261,0) +"RTN","ut",260,0) ; %utVERB - optional input that indicates verbose output is permitted +"RTN","ut",261,0) + ; "RTN","ut",262,0) - ; -"RTN","ut",263,0) N %utROU,%utLIST -"RTN","ut",264,0) +"RTN","ut",263,0) I '$D(%utVERB) S %utVERB=0 -"RTN","ut",265,0) +"RTN","ut",264,0) S %utLIST=0 -"RTN","ut",266,0) +"RTN","ut",265,0) D GETSET($G(IEN),.%utROU,.%utLIST) -"RTN","ut",267,0) +"RTN","ut",266,0) I %utLIST>0 N IEN,%ut D SETUT,EN1(.%utROU,%utLIST) +"RTN","ut",267,0) + Q "RTN","ut",268,0) - Q + ; "RTN","ut",269,0) - ; -"RTN","ut",270,0) GETSET(IEN,%utROU,%utLIST) ; JLI 140731 - called from PICKSET, RUNSET, DOSET, GUISET -"RTN","ut",271,0) +"RTN","ut",270,0) N IENS,%utROOT -"RTN","ut",272,0) +"RTN","ut",271,0) S IENS=IEN_"," D GETS^DIQ(17.9001,IENS,"1*","","%utROOT") -"RTN","ut",273,0) +"RTN","ut",272,0) S %utLIST=0,IENS="" F S IENS=$O(%utROOT(17.90011,IENS)) Q:IENS="" S %utLIST=%utLIST+1,%utROU(%utLIST)=%utROOT(17.90011,IENS,.01) +"RTN","ut",273,0) + Q "RTN","ut",274,0) - Q + ; "RTN","ut",275,0) - ; -"RTN","ut",276,0) COV(NMSP,COVCODE,VERBOSITY) ; simply make it callable from %ut1 as well (along with other APIs) JLI 150101 -"RTN","ut",277,0) +"RTN","ut",276,0) D COV^%ut1(NMSP,COVCODE,+$G(VERBOSITY)) ; see COV^%ut1 for description of arguments +"RTN","ut",277,0) + Q "RTN","ut",278,0) - Q + ; "RTN","ut",279,0) - ; -"RTN","ut",280,0) MULTAPIS(TESTROUS) ; .SR - RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS -"RTN","ut",281,0) +"RTN","ut",280,0) ; input - TESTROUS - passed by reference -"RTN","ut",282,0) +"RTN","ut",281,0) ; see TESTONLY in routine %utcover for full description of TESTROUS argument -"RTN","ut",283,0) +"RTN","ut",282,0) D MULTAPIS^%utcover(.TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS +"RTN","ut",283,0) + Q "RTN","ut",284,0) - Q + ; "RTN","ut",285,0) - ; -"RTN","ut",286,0) COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ;.SR - run coverage analysis for multiple routines and entry points -"RTN","ut",287,0) +"RTN","ut",286,0) ; input ROUNMSP -"RTN","ut",288,0) +"RTN","ut",287,0) ; input TESTROUS - passed by reference -"RTN","ut",289,0) +"RTN","ut",288,0) ; input XCLDROUS - passed by reference -"RTN","ut",290,0) +"RTN","ut",289,0) ; input RESLTLVL -"RTN","ut",291,0) +"RTN","ut",290,0) ; see COVERAGE in routine %utcover for full description of arguments -"RTN","ut",292,0) +"RTN","ut",291,0) D COVERAGE^%utcover(ROUNMSP,.TESTROUS,.XCLDROUS,+$G(RESLTLVL)) +"RTN","ut",292,0) + Q "RTN","ut",293,0) - Q + ; "RTN","ut",294,0) - ; -"RTN","ut",295,0) GETUTVAL(UTDATA) ; .SR - returns totals for current unit test data in cumulative totals -"RTN","ut",296,0) +"RTN","ut",295,0) ; usage D GETUTVAL^%ut(.UTDATA) +"RTN","ut",296,0) + ; input - UTDATA - passed by reference "RTN","ut",297,0) - ; input - UTDATA - passed by reference + ; "RTN","ut",298,0) - ; -"RTN","ut",299,0) ; subscripted values returned: -"RTN","ut",300,0) +"RTN","ut",299,0) ; 1) cumulative number of routines run; 2) cumulative number of entry tags; -"RTN","ut",301,0) +"RTN","ut",300,0) ; 3) cumulative number of tests; 4) cummulative number of failures; -"RTN","ut",302,0) +"RTN","ut",301,0) ; 5) cumulative number of errors -"RTN","ut",303,0) +"RTN","ut",302,0) N VALS,I,VAL -"RTN","ut",304,0) +"RTN","ut",303,0) S VALS=$G(^TMP("%ut",$J,"UTVALS")) I VALS="" Q -"RTN","ut",305,0) +"RTN","ut",304,0) F I=1:1 S VAL=$P(VALS,U,I) Q:VAL="" S UTDATA(I)=$G(UTDATA(I))+VAL -"RTN","ut",306,0) +"RTN","ut",305,0) K ^TMP("%ut",$J,"UTVALS") +"RTN","ut",306,0) + Q "RTN","ut",307,0) - Q -"RTN","ut",308,0) ; -"RTN","ut",309,0) +"RTN","ut",308,0) LSTUTVAL(UTDATA) ; .SR - lists cumulative totals in UTDATA array -"RTN","ut",310,0) +"RTN","ut",309,0) ; usage D LSTUTVAL^%ut(.UTDATA) -"RTN","ut",311,0) +"RTN","ut",310,0) ; input - UTDATA - passed by reference -"RTN","ut",312,0) +"RTN","ut",311,0) W !!!,"------------ SUMMARY ------------" -"RTN","ut",313,0) +"RTN","ut",312,0) W !,"Ran ",UTDATA(1)," Routine",$S(UTDATA(1)>1:"s",1:""),", ",UTDATA(2)," Entry Tag",$S(UTDATA(2)>1:"s",1:"") -"RTN","ut",314,0) +"RTN","ut",313,0) W !,"Checked ",UTDATA(3)," test",$S(UTDATA(3)>1:"s",1:""),", with ",UTDATA(4)," failure",$S(UTDATA(4)'=1:"s",1:"")," and encountered ",UTDATA(5)," error",$S(UTDATA(5)'=1:"s",1:""),"." -"RTN","ut",315,0) +"RTN","ut",314,0) Q +"RTN","ut",315,0) + ; "RTN","ut",316,0) ; "RTN","ut",317,0) - ; -"RTN","ut",318,0) GUISET(%utRSLT,XTSET) ; Entry point for GUI start with selected Test Set IEN - called by %ut-TEST GROUP LOAD rpc -"RTN","ut",319,0) +"RTN","ut",318,0) N %utROU,%utLIST,%ut +"RTN","ut",319,0) + D SETUT "RTN","ut",320,0) - D SETUT + S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") "RTN","ut",321,0) - S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") -"RTN","ut",322,0) D GETSET(XTSET,.%utROU,.%utLIST) -"RTN","ut",323,0) +"RTN","ut",322,0) D GETLIST(.%utROU,%utLIST,%ut("RSLT")) +"RTN","ut",323,0) + S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version "RTN","ut",324,0) - S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version + S %utRSLT=%ut("RSLT") "RTN","ut",325,0) - S %utRSLT=%ut("RSLT") + Q "RTN","ut",326,0) - Q + ; "RTN","ut",327,0) - ; -"RTN","ut",328,0) GUILOAD(%utRSLT,%utROUN) ; Entry point for GUI start with %utROUN containing primary routine name - called by %ut-TEST LOAD rpc -"RTN","ut",329,0) +"RTN","ut",328,0) N %utROU,%ut +"RTN","ut",329,0) + D SETUT "RTN","ut",330,0) - D SETUT -"RTN","ut",331,0) S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") -"RTN","ut",332,0) +"RTN","ut",331,0) S %utROU(1)=%utROUN -"RTN","ut",333,0) +"RTN","ut",332,0) D GETLIST(.%utROU,1,%ut("RSLT")) -"RTN","ut",334,0) +"RTN","ut",333,0) S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version +"RTN","ut",334,0) + S %utRSLT=%ut("RSLT") "RTN","ut",335,0) - S %utRSLT=%ut("RSLT") + Q "RTN","ut",336,0) - Q + ; "RTN","ut",337,0) - ; -"RTN","ut",338,0) GETLIST(%utROU,%utLIST,%utRSLT) ; called from GUISET, GUILOAD -"RTN","ut",339,0) +"RTN","ut",338,0) N I,%utROUL,%utROUN,%ut,XTCOMNT,XTVALUE,%utCNT -"RTN","ut",340,0) +"RTN","ut",339,0) S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) K @XTVALUE -"RTN","ut",341,0) +"RTN","ut",340,0) S %utCNT=0,XTCOMNT="" -"RTN","ut",342,0) +"RTN","ut",341,0) D GETTREE^%ut1(.%utROU,%utLIST) -"RTN","ut",343,0) +"RTN","ut",342,0) F I=1:1 Q:'$D(%utROU(I)) S %utROUL(%utROU(I))="" -"RTN","ut",344,0) +"RTN","ut",343,0) S %utROUN="" F S %utROUN=$O(%utROUL(%utROUN)) Q:%utROUN="" D LOAD(%utROUN,.%utCNT,XTVALUE,XTCOMNT,.%utROUL) -"RTN","ut",345,0) +"RTN","ut",344,0) M @%utRSLT=@XTVALUE -"RTN","ut",346,0) +"RTN","ut",345,0) K @%utRSLT@("SHUTDOWN") -"RTN","ut",347,0) +"RTN","ut",346,0) K @%utRSLT@("STARTUP") -"RTN","ut",348,0) +"RTN","ut",347,0) S @XTVALUE@("LASTROU")="" ; Use this to keep track of place in routines +"RTN","ut",348,0) + Q "RTN","ut",349,0) - Q + ; "RTN","ut",350,0) - ; -"RTN","ut",351,0) ; generate list of unit test routines, entry points and comments on test for entry point -"RTN","ut",352,0) +"RTN","ut",351,0) LOAD(%utROUN,%utNCNT,XTVALUE,XTCOMNT,%utROUL) ; called from GETLIST, and recursively from LOAD -"RTN","ut",353,0) +"RTN","ut",352,0) I $T(@("^"_%utROUN))="" S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_"^^*** ERROR - ROUTINE NAME NOT FOUND" Q -"RTN","ut",354,0) +"RTN","ut",353,0) S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_U_XTCOMNT -"RTN","ut",355,0) +"RTN","ut",354,0) ;N %utI,XTX1,XTX2,LINE -"RTN","ut",356,0) +"RTN","ut",355,0) N %utI,XTX1,XTX2,LINE,LIST,I -"RTN","ut",357,0) +"RTN","ut",356,0) ; 100622 JLI added code to identify STARTUP and TEARDOWN -"RTN","ut",358,0) +"RTN","ut",357,0) I $T(@("STARTUP^"_%utROUN))'="",'$D(@XTVALUE@("STARTUP")) S @XTVALUE@("STARTUP")="STARTUP^"_%utROUN -"RTN","ut",359,0) +"RTN","ut",358,0) I $T(@("SHUTDOWN^"_%utROUN))'="",'$D(@XTVALUE@("SHUTDOWN")) S @XTVALUE@("SHUTDOWN")="SHUTDOWN^"_%utROUN -"RTN","ut",360,0) +"RTN","ut",359,0) ; JLI 140731 handle @TEST identified test tags -"RTN","ut",361,0) +"RTN","ut",360,0) D NEWSTYLE^%ut1(.LIST,%utROUN) -"RTN","ut",362,0) +"RTN","ut",361,0) F I=1:1:LIST S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_LIST(I) -"RTN","ut",363,0) +"RTN","ut",362,0) ; JLI 140731 end of @TEST addition -"RTN","ut",364,0) +"RTN","ut",363,0) F %utI=1:1 S LINE=$T(@("XTENT+"_%utI_"^"_%utROUN)) S XTX1=$P(LINE,";",3) Q:XTX1="" S XTX2=$P(LINE,";",4),%utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_XTX1_U_XTX2 -"RTN","ut",365,0) +"RTN","ut",364,0) F %utI=1:1 S LINE=$T(@("XTROU+"_%utI_"^"_%utROUN)) S XTX1=$P(LINE,";",3) Q:XTX1="" S XTCOMNT=$P(LINE,";",4) I '$D(%utROUL(XTX1)) S %utROUL(XTX1)="" D LOAD(XTX1,.%utNCNT,XTVALUE,XTCOMNT,.%utROUL) -"RTN","ut",366,0) +"RTN","ut",365,0) Q -"RTN","ut",367,0) +"RTN","ut",366,0) ; -"RTN","ut",368,0) +"RTN","ut",367,0) GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - called by %ut-TEST NEXT rpc -"RTN","ut",369,0) +"RTN","ut",368,0) ; XTGUISEP - added 110719 to provide for changing separator for GUI -"RTN","ut",370,0) +"RTN","ut",369,0) ; return from ^ to another value ~~^~~ so that data returned -"RTN","ut",371,0) +"RTN","ut",370,0) ; is not affected by ^ values in the data - if not present -"RTN","ut",372,0) +"RTN","ut",371,0) ; sets value to default ^ -"RTN","ut",373,0) +"RTN","ut",372,0) N %utETRY,%utROUT,XTOLROU,XTVALUE,%utERR,%utGUI -"RTN","ut",374,0) +"RTN","ut",373,0) N %ut -"RTN","ut",375,0) +"RTN","ut",374,0) I $G(XTGUISEP)="" S XTGUISEP="^" -"RTN","ut",376,0) +"RTN","ut",375,0) D SETUT +"RTN","ut",376,0) + S %ut("LOC")=%utLOC "RTN","ut",377,0) - S %ut("LOC")=%utLOC -"RTN","ut",378,0) S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 -"RTN","ut",379,0) +"RTN","ut",378,0) S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) -"RTN","ut",380,0) +"RTN","ut",379,0) S %ut("RSLT")=$NA(^TMP("GUINEXT",$J)) K @%ut("RSLT") -"RTN","ut",381,0) +"RTN","ut",380,0) S %utRSLT=%ut("RSLT") -"RTN","ut",382,0) +"RTN","ut",381,0) S %utETRY=$P(%utLOC,U),%utROUT=$P(%utLOC,U,2),XTOLROU=$G(@XTVALUE@("LASTROU")) -"RTN","ut",383,0) +"RTN","ut",382,0) S %utGUI=1 +"RTN","ut",383,0) + S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 "RTN","ut",384,0) - S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 -"RTN","ut",385,0) ; I %utROUT'=XTOLROU D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ;140731 JLI - commented out -"RTN","ut",386,0) +"RTN","ut",385,0) ;D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ; 140731 JLI - replaced previous line - moves check for SHUTDOWN at end of processing -"RTN","ut",387,0) +"RTN","ut",386,0) D I %utROUT="" S @%utRSLT@(1)="" Q ; 141018 JLI - Have to leave XTVALUE intact, in case they simply run again for STARTUP, etc. -"RTN","ut",388,0) +"RTN","ut",387,0) . I XTOLROU="",$D(@XTVALUE@("STARTUP")) D -"RTN","ut",389,0) +"RTN","ut",388,0) . . S %ut("LOC")=@XTVALUE@("STARTUP") +"RTN","ut",389,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" "RTN","ut",390,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",391,0) . . D @(@XTVALUE@("STARTUP")) +"RTN","ut",391,0) + . . Q "RTN","ut",392,0) - . . Q -"RTN","ut",393,0) . S @XTVALUE@("LASTROU")=%utROUT I %utROUT'="",$T(@("SETUP^"_%utROUT))'="" D -"RTN","ut",394,0) +"RTN","ut",393,0) . . S %ut("LOC")="SETUP^"_%utROUT +"RTN","ut",394,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" "RTN","ut",395,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",396,0) . . D @("SETUP^"_%utROUT) +"RTN","ut",396,0) + . . Q "RTN","ut",397,0) - . . Q -"RTN","ut",398,0) . I %utROUT="",$D(@XTVALUE@("SHUTDOWN")) D -"RTN","ut",399,0) +"RTN","ut",398,0) . . S %ut("LOC")=@XTVALUE@("SHUTDOWN") -"RTN","ut",400,0) +"RTN","ut",399,0) . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",401,0) +"RTN","ut",400,0) . . D @(@XTVALUE@("SHUTDOWN")) -"RTN","ut",402,0) +"RTN","ut",401,0) . . Q +"RTN","ut",402,0) + . Q "RTN","ut",403,0) - . Q -"RTN","ut",404,0) S %ut("LOC")=%utLOC -"RTN","ut",405,0) +"RTN","ut",404,0) S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 -"RTN","ut",406,0) +"RTN","ut",405,0) D ; to limit range of error trap so we continue through other tests +"RTN","ut",406,0) + . N $ETRAP S $ETRAP="D ERROR^%ut" "RTN","ut",407,0) - . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",408,0) . D @%ut("LOC") +"RTN","ut",408,0) + . Q "RTN","ut",409,0) - . Q -"RTN","ut",410,0) I $T(@("TEARDOWN^"_%utROUT))'="" D -"RTN","ut",411,0) +"RTN","ut",410,0) . S %ut("LOC")="TEARDOWN^"_%utROUT -"RTN","ut",412,0) +"RTN","ut",411,0) . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",413,0) +"RTN","ut",412,0) . D @("TEARDOWN^"_%utROUT) -"RTN","ut",414,0) +"RTN","ut",413,0) . Q -"RTN","ut",415,0) +"RTN","ut",414,0) S @%ut("RSLT")@(1)=%ut("CHK")_XTGUISEP_(%ut("CNT")-1-%utERR)_XTGUISEP_%utERR +"RTN","ut",415,0) + K ^TMP("%ut",$J,"UTVALS") "RTN","ut",416,0) Q "RTN","ut",417,0) ; "RTN","ut1") -0^2^B205876634 +0^2^B205168514 "RTN","ut1",1,0) -%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;08/10/15 14:32 +%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;09/14/15 09:37 "RTN","ut1",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 12 "RTN","ut1",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ut1",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","ut1",5,0) ; Original routine authored by Joel L. Ivey as XTMUNIT1 while working for U.S. Department of Veterans Affairs 2003-2012 -"RTN","ut1",6,0) +"RTN","ut1",5,0) ; Includes addition of original COV entry and code related coverage analysis as well as other substantial additions authored by Sam Habiel 07/2013?04/2014 -"RTN","ut1",7,0) +"RTN","ut1",6,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","ut1",7,0) + ; "RTN","ut1",8,0) - ; -"RTN","ut1",9,0) D ^%utt6 ; runs unit tests from several perspectives -"RTN","ut1",10,0) +"RTN","ut1",9,0) Q -"RTN","ut1",11,0) +"RTN","ut1",10,0) ; -"RTN","ut1",12,0) +"RTN","ut1",11,0) ;following is original header from XTMUNIT1 in unreleased patch XT*7.3*81 VA code -"RTN","ut1",13,0) +"RTN","ut1",12,0) ;XTMUNIT1 ;JLI/FO-OAK-CONTINUATION OF UNIT TEST ROUTINE ;2014-04-17 5:26 PM -"RTN","ut1",14,0) +"RTN","ut1",13,0) ;;7.3;TOOLKIT;**81**;APR 25 1995;Build 24 +"RTN","ut1",14,0) + ; "RTN","ut1",15,0) ; "RTN","ut1",16,0) - ; -"RTN","ut1",17,0) ; Original by Dr. Joel Ivey -"RTN","ut1",18,0) +"RTN","ut1",17,0) ; Major contributions by Dr. Sam Habiel +"RTN","ut1",18,0) + ; "RTN","ut1",19,0) - ; -"RTN","ut1",20,0) ; Changes: -"RTN","ut1",21,0) +"RTN","ut1",20,0) ; 130726 SMH - Moved test collection logic from %utUNIT to here (multiple places) -"RTN","ut1",22,0) +"RTN","ut1",21,0) ; 131218 SMH - dependence on XLFSTR removed -"RTN","ut1",23,0) +"RTN","ut1",22,0) ; 131218 SMH - CHEKTEST refactored to use $TEXT instead of ^%ZOSF("LOAD") -"RTN","ut1",24,0) +"RTN","ut1",23,0) ; 131218 SMH - CATCHERR now nulls out $ZS if on GT.M +"RTN","ut1",24,0) + ; "RTN","ut1",25,0) - ; -"RTN","ut1",26,0) ; ------- COMMENTS moved from %ut due to space requirements -"RTN","ut1",27,0) +"RTN","ut1",26,0) ; -"RTN","ut1",28,0) +"RTN","ut1",27,0) ; 100622 JLI - corrected typo in comments where %utINPT was listed as %utINP -"RTN","ut1",29,0) +"RTN","ut1",28,0) ; 100622 JLI - removed a comment which indicated data could potentially be returned from the called routine -"RTN","ut1",30,0) +"RTN","ut1",29,0) ; in the %utINPT array. -"RTN","ut1",31,0) +"RTN","ut1",30,0) ; 100622 JLI - added code to handle STARTUP and SHUTDOWN from GUI app -"RTN","ut1",32,0) +"RTN","ut1",31,0) ; 110719 JLI - modified separators in GUI handling from ^ to ~~^~~ -"RTN","ut1",33,0) +"RTN","ut1",32,0) ; in the variable XTGUISEP if using a newer version of the -"RTN","ut1",34,0) +"RTN","ut1",33,0) ; GUI app (otherwise, it is simply set to ^) since results -"RTN","ut1",35,0) +"RTN","ut1",34,0) ; with a series of ^ embedded disturbed the output reported -"RTN","ut1",36,0) +"RTN","ut1",35,0) ; 130726 SMH - Fixed SETUP and TEARDOWN so that they run before/after each -"RTN","ut1",37,0) +"RTN","ut1",36,0) ; test rather than once. General refactoring. -"RTN","ut1",38,0) +"RTN","ut1",37,0) ; 130726 SMH - SETUT initialized IO in case it's not there to $P. Inits vars -"RTN","ut1",39,0) +"RTN","ut1",38,0) ; using DT^DICRW. -"RTN","ut1",40,0) +"RTN","ut1",39,0) ; 131217 SMH - Change call in SETUP to S U="^" instead of DT^DICRW -"RTN","ut1",41,0) +"RTN","ut1",40,0) ; 131218 SMH - Any checks to $ZE will also check $ZS for GT.M. -"RTN","ut1",42,0) +"RTN","ut1",41,0) ; 131218 SMH - Remove calls to %ZISUTL to manage devices to prevent dependence on VISTA. -"RTN","ut1",43,0) +"RTN","ut1",42,0) ; Use %utNIT("DEV","OLD") for old devices -"RTN","ut1",44,0) +"RTN","ut1",43,0) ; 140109 SMH - Add parameter %utBREAK - Break upon error -"RTN","ut1",45,0) +"RTN","ut1",44,0) ; 1402 SMH - Break will cause the break to happen even on failed tests. -"RTN","ut1",46,0) +"RTN","ut1",45,0) ; 140401 SMH - Added Succeed entry point for take it into your hands tester. -"RTN","ut1",47,0) +"RTN","ut1",46,0) ; 140401 SMH - Reformatted the output of M-Unit so that the test's name -"RTN","ut1",48,0) +"RTN","ut1",47,0) ; will print BEFORE the execution of the test. This has been -"RTN","ut1",49,0) +"RTN","ut1",48,0) ; really confusing for beginning users of M-Unit, so this was -"RTN","ut1",50,0) +"RTN","ut1",49,0) ; necessary. -"RTN","ut1",51,0) +"RTN","ut1",50,0) ; 140401 SMH - OK message gets printed at the end of --- as [OK]. -"RTN","ut1",52,0) +"RTN","ut1",51,0) ; 140401 SMH - FAIL message now prints. Previously, OK failed to be printed. -"RTN","ut1",53,0) +"RTN","ut1",52,0) ; Unfortunately, that's rather passive aggressive. Now it -"RTN","ut1",54,0) +"RTN","ut1",53,0) ; explicitly says that a test failed. -"RTN","ut1",55,0) +"RTN","ut1",54,0) ; 140503 SMH - Fixed IO issues all over the routine. Much simpler now. -"RTN","ut1",56,0) +"RTN","ut1",55,0) ; 140731 JLI - Combined routine changes between JLI and SMH -"RTN","ut1",57,0) +"RTN","ut1",56,0) ; Moved routines from %utNIT and %utNIT1 to %ut and %ut1 -"RTN","ut1",58,0) +"RTN","ut1",57,0) ; Updated unit test routines (%utt1 to %utt6) -"RTN","ut1",59,0) +"RTN","ut1",58,0) ; Created M-UNIT TEST GROUP file at 17.9001 based on the 17.9001 file -"RTN","ut1",60,0) +"RTN","ut1",59,0) ; 141030 JLI - Removed tag TESTCOVR and code under it, not necessary -"RTN","ut1",61,0) +"RTN","ut1",60,0) ; since %uttcovr can handle all of the calling needed -"RTN","ut1",62,0) +"RTN","ut1",61,0) ; Added call to run routine %utt6 if run from the top, -"RTN","ut1",63,0) +"RTN","ut1",62,0) ; since this will run the full range of unit tests -"RTN","ut1",64,0) +"RTN","ut1",63,0) ; Modified STARTUP and SHUTDOWN commands to handle in -"RTN","ut1",65,0) +"RTN","ut1",64,0) ; each routine where they are available, since only -"RTN","ut1",66,0) +"RTN","ut1",65,0) ; running one STARTUP and SHUTDOWN (the first seen by -"RTN","ut1",67,0) +"RTN","ut1",66,0) ; the program) restricted their use in suites of multiple -"RTN","ut1",68,0) +"RTN","ut1",67,0) ; tests. -"RTN","ut1",69,0) +"RTN","ut1",68,0) ; 150101 JLI - Added COV entry to %ut (in addition to current in %ut1) so it is easier -"RTN","ut1",70,0) +"RTN","ut1",69,0) ; to remember how to use it. -"RTN","ut1",71,0) +"RTN","ut1",70,0) ; 150621 JLI - Added a global location to pick up summary data for a unit test call, so -"RTN","ut1",72,0) +"RTN","ut1",71,0) ; programs running multiple calls can generate a summary if desired. +"RTN","ut1",72,0) + ; "RTN","ut1",73,0) ; "RTN","ut1",74,0) - ; -"RTN","ut1",75,0) CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list. -"RTN","ut1",76,0) +"RTN","ut1",75,0) ; %utROU - input - Name of routine to check for tags with @TEST attribute -"RTN","ut1",77,0) +"RTN","ut1",76,0) ; %ut - input/output - passed by reference -"RTN","ut1",78,0) +"RTN","ut1",77,0) ; %utUETRY - input/output - passed by reference +"RTN","ut1",78,0) + ; "RTN","ut1",79,0) - ; -"RTN","ut1",80,0) ; Test list collected in two ways: -"RTN","ut1",81,0) +"RTN","ut1",80,0) ; - @TEST on labellines -"RTN","ut1",82,0) +"RTN","ut1",81,0) ; - Offsets of XTENT +"RTN","ut1",82,0) + ; "RTN","ut1",83,0) - ; -"RTN","ut1",84,0) S %ut("ENTN")=0 ; Number of test, sub to %utUETRY. +"RTN","ut1",84,0) + ; "RTN","ut1",85,0) - ; -"RTN","ut1",86,0) ; This stanza and everything below is for collecting @TEST. -"RTN","ut1",87,0) +"RTN","ut1",86,0) ; VEN/SMH - block refactored to use $TEXT instead of ^%ZOSF("LOAD") -"RTN","ut1",88,0) +"RTN","ut1",87,0) N I,LIST -"RTN","ut1",89,0) +"RTN","ut1",88,0) S I=$L($T(@(U_%utROU))) I I<0 Q "-1^Invalid Routine Name" -"RTN","ut1",90,0) +"RTN","ut1",89,0) D NEWSTYLE(.LIST,%utROU) -"RTN","ut1",91,0) +"RTN","ut1",90,0) F I=1:1:LIST S %ut("ENTN")=%ut("ENTN")+1,%utUETRY(%ut("ENTN"))=$P(LIST(I),U),%utUETRY(%ut("ENTN"),"NAME")=$P(LIST(I),U,2,99) +"RTN","ut1",91,0) + ; "RTN","ut1",92,0) - ; -"RTN","ut1",93,0) ; This Stanza is to collect XTENT offsets -"RTN","ut1",94,0) +"RTN","ut1",93,0) N %utUI F %utUI=1:1 S %ut("ELIN")=$T(@("XTENT+"_%utUI_"^"_%utROU)) Q:$P(%ut("ELIN"),";",3)="" D -"RTN","ut1",95,0) +"RTN","ut1",94,0) . S %ut("ENTN")=%ut("ENTN")+1,%utUETRY(%ut("ENTN"))=$P(%ut("ELIN"),";",3),%utUETRY(%ut("ENTN"),"NAME")=$P(%ut("ELIN"),";",4) +"RTN","ut1",95,0) + . Q "RTN","ut1",96,0) - . Q + ; "RTN","ut1",97,0) - ; + QUIT "RTN","ut1",98,0) - QUIT + ; "RTN","ut1",99,0) - ; -"RTN","ut1",100,0) ; VEN/SMH 26JUL2013 - Moved GETTREE here. -"RTN","ut1",101,0) +"RTN","ut1",100,0) GETTREE(%utROU,%utULIST) ; -"RTN","ut1",102,0) +"RTN","ut1",101,0) ; first get any other routines this one references for running subsequently -"RTN","ut1",103,0) +"RTN","ut1",102,0) ; then any that they refer to as well -"RTN","ut1",104,0) +"RTN","ut1",103,0) ; this builds a tree of all routines referred to by any routine including each only once -"RTN","ut1",105,0) +"RTN","ut1",104,0) N %utUK,%utUI,%utUJ,%utURNAM,%utURLIN -"RTN","ut1",106,0) +"RTN","ut1",105,0) F %utUK=1:1 Q:'$D(%utROU(%utUK)) D -"RTN","ut1",107,0) +"RTN","ut1",106,0) . F %utUI=1:1 S %utURLIN=$T(@("XTROU+"_%utUI_"^"_%utROU(%utUK))) S %utURNAM=$P(%utURLIN,";",3) Q:%utURNAM="" D -"RTN","ut1",108,0) +"RTN","ut1",107,0) . . F %utUJ=1:1:%utULIST I %utROU(%utUJ)=%utURNAM S %utURNAM="" Q -"RTN","ut1",109,0) +"RTN","ut1",108,0) . . I %utURNAM'="",$T(@("+1^"_%utURNAM))="" W:'$D(XWBOS) "Referenced routine ",%utURNAM," not found.",! Q -"RTN","ut1",110,0) +"RTN","ut1",109,0) . . S:%utURNAM'="" %utULIST=%utULIST+1,%utROU(%utULIST)=%utURNAM +"RTN","ut1",110,0) + QUIT "RTN","ut1",111,0) - QUIT + ; "RTN","ut1",112,0) - ; -"RTN","ut1",113,0) NEWSTYLE(LIST,ROUNAME) ; JLI 140726 identify and return list of newstyle tags or entries for this routine -"RTN","ut1",114,0) +"RTN","ut1",113,0) ; LIST - input, passed by reference - returns containing array with list of tags identified as tests -"RTN","ut1",115,0) +"RTN","ut1",114,0) ; LIST indicates number of tags identified, LIST(n)=tag^test_info where tag is entry point for test -"RTN","ut1",116,0) +"RTN","ut1",115,0) ; ROUNAME - input - routine name in which tests should be identified +"RTN","ut1",116,0) + ; "RTN","ut1",117,0) - ; -"RTN","ut1",118,0) N I,VALUE,LINE -"RTN","ut1",119,0) +"RTN","ut1",118,0) K LIST S LIST=0 -"RTN","ut1",120,0) +"RTN","ut1",119,0) ; search routine by line for a tag and @TEST declaration -"RTN","ut1",121,0) +"RTN","ut1",120,0) F I=1:1 S LINE=$T(@("+"_I_"^"_ROUNAME)) Q:LINE="" S VALUE=$$CHECKTAG(LINE) I VALUE'="" S LIST=LIST+1,LIST(LIST)=VALUE +"RTN","ut1",121,0) + Q "RTN","ut1",122,0) - Q + ; "RTN","ut1",123,0) - ; -"RTN","ut1",124,0) CHECKTAG(LINE) ; JLI 140726 check line to determine @test TAG -"RTN","ut1",125,0) +"RTN","ut1",124,0) ; LINE - input - Line of code to be checked -"RTN","ut1",126,0) +"RTN","ut1",125,0) ; returns null line if not @TEST line, otherwise TAG^NOTE -"RTN","ut1",127,0) +"RTN","ut1",126,0) N TAG,NOTE,CHAR -"RTN","ut1",128,0) +"RTN","ut1",127,0) I $E(LINE)=" " Q "" ; test entry must have a tag -"RTN","ut1",129,0) +"RTN","ut1",128,0) I $$UP(LINE)'["@TEST" Q "" ; must have @TEST declaration -"RTN","ut1",130,0) +"RTN","ut1",129,0) I $P($$UP(LINE),"@TEST")["(" Q "" ; can't have an argument -"RTN","ut1",131,0) +"RTN","ut1",130,0) S TAG=$P(LINE," "),LINE=$P(LINE," ",2,400),NOTE=$P($$UP(LINE),"@TEST"),LINE=$E(LINE,$L(NOTE)+5+1,$L(LINE)) -"RTN","ut1",132,0) +"RTN","ut1",131,0) F Q:NOTE="" S CHAR=$E(NOTE),NOTE=$E(NOTE,2,$L(NOTE)) I " ;"'[CHAR Q ; -"RTN","ut1",133,0) +"RTN","ut1",132,0) I $L(NOTE)'=0 Q "" ; @TEST must be first text on line -"RTN","ut1",134,0) +"RTN","ut1",133,0) F Q:$E(LINE)'=" " S LINE=$E(LINE,2,$L(LINE)) ; remove leading spaces from test info -"RTN","ut1",135,0) +"RTN","ut1",134,0) S TAG=TAG_U_LINE -"RTN","ut1",136,0) +"RTN","ut1",135,0) Q TAG +"RTN","ut1",136,0) + ; "RTN","ut1",137,0) - ; -"RTN","ut1",138,0) CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values -"RTN","ut1",139,0) +"RTN","ut1",138,0) ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut1",140,0) +"RTN","ut1",139,0) ; ZEXCEPT: %ut - NEWED IN EN +"RTN","ut1",140,0) + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut1",141,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",142,0) I '$D(XTSTVAL) D NVLDARG("CHKTF") Q +"RTN","ut1",142,0) + I $G(XTERMSG)="" S XTERMSG="no failure message provided" "RTN","ut1",143,0) - I $G(XTERMSG)="" S XTERMSG="no failure message provided" -"RTN","ut1",144,0) S %ut("CHK")=$G(%ut("CHK"))+1 +"RTN","ut1",144,0) + I '$D(%utGUI) D "RTN","ut1",145,0) - I '$D(%utGUI) D + . D SETIO "RTN","ut1",146,0) - . D SETIO -"RTN","ut1",147,0) . I 'XTSTVAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " D -"RTN","ut1",148,0) +"RTN","ut1",147,0) . . W XTERMSG,! S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") +"RTN","ut1",148,0) + . . I $D(%ut("BREAK")) BREAK ; Break upon failure "RTN","ut1",149,0) - . . I $D(%ut("BREAK")) BREAK ; Break upon failure + . . Q "RTN","ut1",150,0) - . . Q -"RTN","ut1",151,0) . I XTSTVAL W "." +"RTN","ut1",151,0) + . D RESETIO "RTN","ut1",152,0) - . D RESETIO + . Q "RTN","ut1",153,0) - . Q -"RTN","ut1",154,0) I $D(%utGUI),'XTSTVAL S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 +"RTN","ut1",154,0) + Q "RTN","ut1",155,0) - Q + ; "RTN","ut1",156,0) - ; -"RTN","ut1",157,0) CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut1",158,0) +"RTN","ut1",157,0) N FAILMSG +"RTN","ut1",158,0) + ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END "RTN","ut1",159,0) - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",160,0) ; ZEXCEPT: %ut -- NEWED IN EN +"RTN","ut1",160,0) + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut1",161,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",162,0) I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG("CHKEQ") Q -"RTN","ut1",163,0) +"RTN","ut1",162,0) S XTACTUAL=$G(XTACTUAL),XTEXPECT=$G(XTEXPECT) +"RTN","ut1",163,0) + I $G(XTERMSG)="" S XTERMSG="no failure message provided" "RTN","ut1",164,0) - I $G(XTERMSG)="" S XTERMSG="no failure message provided" + S %ut("CHK")=%ut("CHK")+1 "RTN","ut1",165,0) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut1",166,0) I XTEXPECT'=XTACTUAL S FAILMSG="<"_XTEXPECT_"> vs <"_XTACTUAL_"> - " +"RTN","ut1",166,0) + I '$D(%utGUI) D "RTN","ut1",167,0) - I '$D(%utGUI) D + . D SETIO "RTN","ut1",168,0) - . D SETIO -"RTN","ut1",169,0) . I XTEXPECT'=XTACTUAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W FAILMSG,XTERMSG,! D +"RTN","ut1",169,0) + . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") "RTN","ut1",170,0) - . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut1",171,0) . . I $D(%ut("BREAK")) BREAK ; Break upon failure +"RTN","ut1",171,0) + . . Q "RTN","ut1",172,0) - . . Q -"RTN","ut1",173,0) . E W "." +"RTN","ut1",173,0) + . D RESETIO "RTN","ut1",174,0) - . D RESETIO + . Q "RTN","ut1",175,0) - . Q -"RTN","ut1",176,0) I $D(%utGUI),XTEXPECT'=XTACTUAL S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_FAILMSG_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 +"RTN","ut1",176,0) + Q "RTN","ut1",177,0) - Q + ; "RTN","ut1",178,0) - ; -"RTN","ut1",179,0) FAIL(XTERMSG) ; Entry point for generating a failure message +"RTN","ut1",179,0) + ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END "RTN","ut1",180,0) - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut1",181,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut1",182,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",183,0) I $G(XTERMSG)="" S XTERMSG="no failure message provided" -"RTN","ut1",184,0) +"RTN","ut1",183,0) S %ut("CHK")=%ut("CHK")+1 +"RTN","ut1",184,0) + I '$D(%utGUI) D "RTN","ut1",185,0) - I '$D(%utGUI) D + . D SETIO "RTN","ut1",186,0) - . D SETIO + . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D "RTN","ut1",187,0) - . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D + . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") "RTN","ut1",188,0) - . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") -"RTN","ut1",189,0) . . I $D(%ut("BREAK")) BREAK ; Break upon failure +"RTN","ut1",189,0) + . . Q "RTN","ut1",190,0) - . . Q + . D RESETIO "RTN","ut1",191,0) - . D RESETIO + . Q "RTN","ut1",192,0) - . Q + I $D(%utGUI) S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 "RTN","ut1",193,0) - I $D(%utGUI) S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 + Q "RTN","ut1",194,0) - Q + ; "RTN","ut1",195,0) - ; -"RTN","ut1",196,0) NVLDARG(API) ; generate message for invalid arguments to test -"RTN","ut1",197,0) +"RTN","ut1",196,0) N XTERMSG +"RTN","ut1",197,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut1",198,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",199,0) ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",200,0) +"RTN","ut1",199,0) ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",201,0) +"RTN","ut1",200,0) S XTERMSG="NO VALUES INPUT TO "_API_"^%ut - no evaluation possible" -"RTN","ut1",202,0) +"RTN","ut1",201,0) I '$D(%utGUI) D -"RTN","ut1",203,0) +"RTN","ut1",202,0) . D SETIO -"RTN","ut1",204,0) +"RTN","ut1",203,0) . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D -"RTN","ut1",205,0) +"RTN","ut1",204,0) . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") +"RTN","ut1",205,0) + . . Q "RTN","ut1",206,0) - . . Q -"RTN","ut1",207,0) . D RESETIO +"RTN","ut1",207,0) + . Q "RTN","ut1",208,0) - . Q -"RTN","ut1",209,0) I $D(%utGUI) S %ut("CNT")=%ut("CNT")+1,@%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"FAILURE"_XTGUISEP_XTERMSG,%ut("FAIL")=%ut("FAIL")+1 +"RTN","ut1",209,0) + Q "RTN","ut1",210,0) - Q + ; "RTN","ut1",211,0) - ; -"RTN","ut1",212,0) SETIO ; Set M-Unit Device to write the results to... +"RTN","ut1",212,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut1",213,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",214,0) I $IO'=%ut("IO") S (IO(0),%ut("DEV","OLD"))=$IO USE %ut("IO") SET IO=$IO +"RTN","ut1",214,0) + QUIT "RTN","ut1",215,0) - QUIT + ; "RTN","ut1",216,0) - ; -"RTN","ut1",217,0) RESETIO ; Reset $IO back to the original device if we changed it. -"RTN","ut1",218,0) +"RTN","ut1",217,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",219,0) +"RTN","ut1",218,0) I $D(%ut("DEV","OLD")) S IO(0)=%ut("IO") U %ut("DEV","OLD") S IO=$IO K %ut("DEV","OLD") +"RTN","ut1",219,0) + QUIT "RTN","ut1",220,0) - QUIT + ; "RTN","ut1",221,0) - ; -"RTN","ut1",222,0) ; VEN/SMH 17DEC2013 - Remove dependence on VISTA - Uppercase here instead of XLFSTR. -"RTN","ut1",223,0) +"RTN","ut1",222,0) UP(X) ; -"RTN","ut1",224,0) +"RTN","ut1",223,0) Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") +"RTN","ut1",224,0) + ; "RTN","ut1",225,0) - ; -"RTN","ut1",226,0) COV(NMSP,COVCODE,VERBOSITY) ; VEN/SMH - PUBLIC ENTRY POINT; Coverage calculations -"RTN","ut1",227,0) +"RTN","ut1",226,0) ; NMSP: Namespace of the routines to analyze. End with * to include all routines. -"RTN","ut1",228,0) +"RTN","ut1",227,0) ; Not using * will only include the routine with NMSP name. -"RTN","ut1",229,0) +"RTN","ut1",228,0) ; e.g. PSOM* will include all routines starting with PSOM -"RTN","ut1",230,0) +"RTN","ut1",229,0) ; PSOM will only include PSOM. -"RTN","ut1",231,0) +"RTN","ut1",230,0) ; COVCODE: Mumps code to run over which coverage will be calculated. Typically Unit Tests. -"RTN","ut1",232,0) +"RTN","ut1",231,0) ; VERBOSITY (optional): Scalar from -1 to 3. -"RTN","ut1",233,0) +"RTN","ut1",232,0) ; - -1 = Global output in ^TMP("%utCOVREPORT",$J) -"RTN","ut1",234,0) +"RTN","ut1",233,0) ; - 0 = Print only total coverage -"RTN","ut1",235,0) +"RTN","ut1",234,0) ; - 1 = Break down by routine -"RTN","ut1",236,0) +"RTN","ut1",235,0) ; - 2 = Break down by routine and tag -"RTN","ut1",237,0) +"RTN","ut1",236,0) ; - 3 = Break down by routine and tag, and print lines that didn't execute for each tag. +"RTN","ut1",237,0) + ; "RTN","ut1",238,0) - ; -"RTN","ut1",239,0) ; ZEXCEPT: %utcovxx - SET and KILLED in this code at top level -"RTN","ut1",240,0) +"RTN","ut1",239,0) Q:'(+$SY=47) ; GT.M only! +"RTN","ut1",240,0) + ; "RTN","ut1",241,0) - ; -"RTN","ut1",242,0) ; ZEXCEPT: CTRAP - not really a variable -"RTN","ut1",243,0) +"RTN","ut1",242,0) S VERBOSITY=+$G(VERBOSITY) ; Get 0 if not passed. -"RTN","ut1",244,0) +"RTN","ut1",243,0) N %ZR ; GT.M specific -"RTN","ut1",245,0) +"RTN","ut1",244,0) D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R(RTN)). +"RTN","ut1",245,0) + ; "RTN","ut1",246,0) - ; -"RTN","ut1",247,0) N RN S RN="" -"RTN","ut1",248,0) +"RTN","ut1",247,0) W !,"Loading routines to test coverage...",! -"RTN","ut1",249,0) +"RTN","ut1",248,0) F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D -"RTN","ut1",250,0) +"RTN","ut1",249,0) . N L2 S L2=$T(+2^@RN) -"RTN","ut1",251,0) +"RTN","ut1",250,0) . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out -"RTN","ut1",252,0) +"RTN","ut1",251,0) . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine +"RTN","ut1",252,0) + ; "RTN","ut1",253,0) - ; -"RTN","ut1",254,0) N RTNS M RTNS=%ZR -"RTN","ut1",255,0) +"RTN","ut1",254,0) K %ZR +"RTN","ut1",255,0) + ; "RTN","ut1",256,0) - ; -"RTN","ut1",257,0) N GL -"RTN","ut1",258,0) +"RTN","ut1",257,0) S GL=$NA(^TMP("%utCOVCOHORT",$J)) -"RTN","ut1",259,0) +"RTN","ut1",258,0) I '$D(^TMP("%utcovrunning",$J)) K @GL -"RTN","ut1",260,0) +"RTN","ut1",259,0) D RTNANAL(.RTNS,GL) +"RTN","ut1",260,0) + I '$D(^TMP("%utcovrunning",$J)) D "RTN","ut1",261,0) - I '$D(^TMP("%utcovrunning",$J)) D -"RTN","ut1",262,0) . K ^TMP("%utCOVCOHORTSAV",$J) -"RTN","ut1",263,0) +"RTN","ut1",262,0) . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) -"RTN","ut1",264,0) +"RTN","ut1",263,0) . K ^TMP("%utCOVRESULT",$J) -"RTN","ut1",265,0) +"RTN","ut1",264,0) . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 -"RTN","ut1",266,0) +"RTN","ut1",265,0) . VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M START PROFILING +"RTN","ut1",266,0) + . Q "RTN","ut1",267,0) - . Q -"RTN","ut1",268,0) DO ; Run the code, but keep our variables to ourselves. -"RTN","ut1",269,0) +"RTN","ut1",268,0) . NEW $ETRAP,$ESTACK -"RTN","ut1",270,0) +"RTN","ut1",269,0) . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" -"RTN","ut1",271,0) +"RTN","ut1",270,0) . USE $PRINCIPAL:(CTRAP=$C(3)) -"RTN","ut1",272,0) +"RTN","ut1",271,0) . NEW (DUZ,IO,COVCODE,U,DILOCKTM,DISYS,DT,DTIME,IOBS,IOF,IOM,ION,IOS,IOSL,IOST,IOT,IOXY) -"RTN","ut1",273,0) +"RTN","ut1",272,0) . XECUTE COVCODE +"RTN","ut1",273,0) + . Q "RTN","ut1",274,0) - . Q -"RTN","ut1",275,0) ; GT.M STOP PROFILING if this is the original level that started it -"RTN","ut1",276,0) +"RTN","ut1",275,0) I $D(^TMP("%utcovrunning",$J)),$D(%utcovxx) VIEW "TRACE":0:$NA(^TMP("%utCOVRESULT",$J)) K %utcovxx,^TMP("%utcovrunning",$J) +"RTN","ut1",276,0) + ; "RTN","ut1",277,0) - ; -"RTN","ut1",278,0) I '$D(^TMP("%utcovrunning",$J)) D -"RTN","ut1",279,0) +"RTN","ut1",278,0) . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J))) ; Venn diagram matching between globals -"RTN","ut1",280,0) +"RTN","ut1",279,0) . ; Report -"RTN","ut1",281,0) +"RTN","ut1",280,0) . I VERBOSITY=-1 D -"RTN","ut1",282,0) +"RTN","ut1",281,0) . . K ^TMP("%utCOVREPORT",$J) -"RTN","ut1",283,0) +"RTN","ut1",282,0) . . D COVRPTGL($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),$NA(^TMP("%utCOVREPORT",$J))) +"RTN","ut1",283,0) + . . Q "RTN","ut1",284,0) - . . Q -"RTN","ut1",285,0) . E D COVRPT($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),VERBOSITY) +"RTN","ut1",285,0) + . Q "RTN","ut1",286,0) - . Q + QUIT "RTN","ut1",287,0) - QUIT + ; "RTN","ut1",288,0) - ; -"RTN","ut1",289,0) RTNANAL(RTNS,GL) ; [Private] - Routine Analysis -"RTN","ut1",290,0) +"RTN","ut1",289,0) ; Create a global similar to the trace global produced by GT.M in GL -"RTN","ut1",291,0) +"RTN","ut1",290,0) ; Only non-comment lines are stored. -"RTN","ut1",292,0) +"RTN","ut1",291,0) ; A tag is always stored. Tag,0 is stored only if there is code on the tag line (format list or actual code). -"RTN","ut1",293,0) +"RTN","ut1",292,0) ; tags by themselves don't count toward the total. +"RTN","ut1",293,0) + ; "RTN","ut1",294,0) - ; + N RTN S RTN="" "RTN","ut1",295,0) - N RTN S RTN="" -"RTN","ut1",296,0) F S RTN=$O(RTNS(RTN)) Q:RTN="" D ; for each routine -"RTN","ut1",297,0) +"RTN","ut1",296,0) . N TAG -"RTN","ut1",298,0) +"RTN","ut1",297,0) . S TAG=RTN ; start the tags at the first -"RTN","ut1",299,0) +"RTN","ut1",298,0) . N I,LN F I=2:1 S LN=$T(@TAG+I^@RTN) Q:LN="" D ; for each line, starting with the 3rd line (2 off the first tag) -"RTN","ut1",300,0) +"RTN","ut1",299,0) . . I $E(LN)?1A D QUIT ; formal line -"RTN","ut1",301,0) +"RTN","ut1",300,0) . . . N T ; Terminator -"RTN","ut1",302,0) +"RTN","ut1",301,0) . . . N J F J=1:1:$L(LN) S T=$E(LN,J) Q:T'?1AN ; Loop to... -"RTN","ut1",303,0) +"RTN","ut1",302,0) . . . S TAG=$E(LN,1,J-1) ; Get tag -"RTN","ut1",304,0) +"RTN","ut1",303,0) . . . S @GL@(RTN,TAG)=TAG ; store line -"RTN","ut1",305,0) +"RTN","ut1",304,0) . . . ;I T="(" S @GL@(RTN,TAG,0)=LN ; formal list -"RTN","ut1",306,0) +"RTN","ut1",305,0) . . . I T="(" D ; formal list -"RTN","ut1",307,0) +"RTN","ut1",306,0) . . . . N PCNT,STR,CHR S PCNT=0,STR=$E(LN,J+1,$L(LN)) -"RTN","ut1",308,0) +"RTN","ut1",307,0) . . . . F S CHR=$E(STR),STR=$E(STR,2,$L(STR)) Q:(PCNT=0)&(CHR=")") D -"RTN","ut1",309,0) +"RTN","ut1",308,0) . . . . . I CHR="(" S PCNT=PCNT+1 -"RTN","ut1",310,0) +"RTN","ut1",309,0) . . . . . I CHR=")" S PCNT=PCNT-1 -"RTN","ut1",311,0) +"RTN","ut1",310,0) . . . . . Q -"RTN","ut1",312,0) +"RTN","ut1",311,0) . . . . S STR=$TR(STR,$C(9,32)) -"RTN","ut1",313,0) +"RTN","ut1",312,0) . . . . I $E(STR)=";" QUIT -"RTN","ut1",314,0) +"RTN","ut1",313,0) . . . . S @GL@(RTN,TAG,0)=LN -"RTN","ut1",315,0) +"RTN","ut1",314,0) . . . . Q -"RTN","ut1",316,0) +"RTN","ut1",315,0) . . . E D ; No formal list -"RTN","ut1",317,0) +"RTN","ut1",316,0) . . . . N LNTR S LNTR=$P(LN,TAG,2,999),LNTR=$TR(LNTR,$C(9,32)) ; Get rest of line, Remove spaces and tabs -"RTN","ut1",318,0) +"RTN","ut1",317,0) . . . . I $E(LNTR)=";" QUIT ; Comment -"RTN","ut1",319,0) +"RTN","ut1",318,0) . . . . S @GL@(RTN,TAG,0)=LN ; Otherwise, store for testing -"RTN","ut1",320,0) +"RTN","ut1",319,0) . . . S I=0 ; Start offsets from zero (first one at the for will be 1) -"RTN","ut1",321,0) +"RTN","ut1",320,0) . . I $C(32,9)[$E(LN) D QUIT ; Regular line -"RTN","ut1",322,0) +"RTN","ut1",321,0) . . . N LNTR S LNTR=$TR(LN,$C(32,9,46)) ; Remove all spaces and tabs - JLI 150202 remove periods as well -"RTN","ut1",323,0) +"RTN","ut1",322,0) . . . I $E(LNTR)=";" QUIT ; Comment line -- don't want. -"RTN","ut1",324,0) +"RTN","ut1",323,0) . . . S @GL@(RTN,TAG,I)=LN ; Record line +"RTN","ut1",324,0) + QUIT "RTN","ut1",325,0) - QUIT + ; "RTN","ut1",326,0) - ; -"RTN","ut1",327,0) ACTLINES(GL) ; [Private] $$ ; Count active lines +"RTN","ut1",327,0) + ; "RTN","ut1",328,0) - ; -"RTN","ut1",329,0) N CNT S CNT=0 -"RTN","ut1",330,0) +"RTN","ut1",329,0) N REF S REF=GL -"RTN","ut1",331,0) +"RTN","ut1",330,0) N GLQL S GLQL=$QL(GL) -"RTN","ut1",332,0) +"RTN","ut1",331,0) F S REF=$Q(@REF) Q:REF="" Q:(GL'=$NA(@REF,GLQL)) D -"RTN","ut1",333,0) +"RTN","ut1",332,0) . N REFQL S REFQL=$QL(REF) -"RTN","ut1",334,0) +"RTN","ut1",333,0) . N LASTSUB S LASTSUB=$QS(REF,REFQL) -"RTN","ut1",335,0) +"RTN","ut1",334,0) . I LASTSUB?1.N S CNT=CNT+1 -"RTN","ut1",336,0) +"RTN","ut1",335,0) QUIT CNT +"RTN","ut1",336,0) + ; "RTN","ut1",337,0) - ; -"RTN","ut1",338,0) COVCOV(C,R) ; [Private] - Analyze coverage Cohort vs Result +"RTN","ut1",338,0) + N RTN S RTN="" "RTN","ut1",339,0) - N RTN S RTN="" -"RTN","ut1",340,0) F S RTN=$O(@C@(RTN)) Q:RTN="" D ; For each routine in cohort set -"RTN","ut1",341,0) +"RTN","ut1",340,0) . I '$D(@R@(RTN)) QUIT ; Not present in result set +"RTN","ut1",341,0) + . N TAG S TAG="" "RTN","ut1",342,0) - . N TAG S TAG="" -"RTN","ut1",343,0) . F S TAG=$O(@R@(RTN,TAG)) Q:TAG="" D ; For each tag in the routine in the result set +"RTN","ut1",343,0) + . . N LN S LN="" "RTN","ut1",344,0) - . . N LN S LN="" -"RTN","ut1",345,0) . . F S LN=$O(@R@(RTN,TAG,LN)) Q:LN="" D ; for each line in the tag in the routine in the result set -"RTN","ut1",346,0) +"RTN","ut1",345,0) . . . I $D(@C@(RTN,TAG,LN)) K ^(LN) ; if present in cohort, kill off +"RTN","ut1",346,0) + QUIT "RTN","ut1",347,0) - QUIT + ; "RTN","ut1",348,0) - ; -"RTN","ut1",349,0) COVRPT(C,S,R,V) ; [Private] - Coverage Report +"RTN","ut1",349,0) + ; C = COHORT - Global name "RTN","ut1",350,0) - ; C = COHORT - Global name + ; S = SURVIVORS - Global name "RTN","ut1",351,0) - ; S = SURVIVORS - Global name + ; R = RESULT - Global name "RTN","ut1",352,0) - ; R = RESULT - Global name -"RTN","ut1",353,0) ; V = Verbosity - Scalar from -1 to 3 -"RTN","ut1",354,0) +"RTN","ut1",353,0) ; JLI 150702 - modified to be able to do unit tests on setting up the text via COVRPTLS -"RTN","ut1",355,0) +"RTN","ut1",354,0) N X,I -"RTN","ut1",356,0) +"RTN","ut1",355,0) S X=$NA(^TMP("%ut1-covrpt",$J)) K @X -"RTN","ut1",357,0) +"RTN","ut1",356,0) D COVRPTLS(C,S,R,V,X) -"RTN","ut1",358,0) +"RTN","ut1",357,0) I '$$ISUTEST^%ut() F I=1:1 W:$D(@X@(I)) !,@X@(I) I '$D(@X@(I)) K @X Q -"RTN","ut1",359,0) +"RTN","ut1",358,0) Q +"RTN","ut1",359,0) + ; "RTN","ut1",360,0) - ; -"RTN","ut1",361,0) COVRPTLS(C,S,R,V,X) ; +"RTN","ut1",361,0) + ; "RTN","ut1",362,0) - ; -"RTN","ut1",363,0) N LINNUM S LINNUM=0 -"RTN","ut1",364,0) +"RTN","ut1",363,0) N ORIGLINES S ORIGLINES=$$ACTLINES(C) -"RTN","ut1",365,0) +"RTN","ut1",364,0) N LEFTLINES S LEFTLINES=$$ACTLINES(S) +"RTN","ut1",365,0) + ;W !! "RTN","ut1",366,0) - ;W !! + S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" "RTN","ut1",367,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",368,0) ;W "ORIG: "_ORIGLINES,! -"RTN","ut1",369,0) +"RTN","ut1",368,0) S LINNUM=LINNUM+1,@X@(LINNUM)="ORIG: "_ORIGLINES -"RTN","ut1",370,0) +"RTN","ut1",369,0) ;W "LEFT: "_LEFTLINES,! -"RTN","ut1",371,0) +"RTN","ut1",370,0) S LINNUM=LINNUM+1,@X@(LINNUM)="LEFT: "_LEFTLINES -"RTN","ut1",372,0) +"RTN","ut1",371,0) ;W "COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00),! -"RTN","ut1",373,0) +"RTN","ut1",372,0) S LINNUM=LINNUM+1,@X@(LINNUM)="COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00) -"RTN","ut1",374,0) +"RTN","ut1",373,0) ;W !! -"RTN","ut1",375,0) +"RTN","ut1",374,0) S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",376,0) +"RTN","ut1",375,0) ;W "BY ROUTINE:",! -"RTN","ut1",377,0) +"RTN","ut1",376,0) S LINNUM=LINNUM+1,@X@(LINNUM)="BY ROUTINE:" -"RTN","ut1",378,0) +"RTN","ut1",377,0) I V=0 QUIT ; No verbosity. Don't print routine detail -"RTN","ut1",379,0) +"RTN","ut1",378,0) N RTN S RTN="" +"RTN","ut1",379,0) + F S RTN=$O(@C@(RTN)) Q:RTN="" D "RTN","ut1",380,0) - F S RTN=$O(@C@(RTN)) Q:RTN="" D + . N O S O=$$ACTLINES($NA(@C@(RTN))) "RTN","ut1",381,0) - . N O S O=$$ACTLINES($NA(@C@(RTN))) + . N L S L=$$ACTLINES($NA(@S@(RTN))) "RTN","ut1",382,0) - . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",383,0) . ;W ?3,RTN,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",384,0) +"RTN","ut1",383,0) . N XX S XX=" "_RTN_" ",XX=$E(XX,1,20) -"RTN","ut1",385,0) +"RTN","ut1",384,0) . S LINNUM=LINNUM+1,@X@(LINNUM)=XX+$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",386,0) +"RTN","ut1",385,0) . I V=1 QUIT ; Just print the routine coverage for V=1 -"RTN","ut1",387,0) +"RTN","ut1",386,0) . N TAG S TAG="" +"RTN","ut1",387,0) + . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D "RTN","ut1",388,0) - . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D + . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) "RTN","ut1",389,0) - . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) + . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) "RTN","ut1",390,0) - . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",391,0) . . ;W ?5,TAG,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",392,0) +"RTN","ut1",391,0) . . S XX=" "_TAG_" ",XX=$E(XX,1,20) -"RTN","ut1",393,0) +"RTN","ut1",392,0) . . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",394,0) +"RTN","ut1",393,0) . . I V=2 QUIT ; Just print routine/tags coverage for V=2; V=3 print uncovered lines -"RTN","ut1",395,0) +"RTN","ut1",394,0) . . N LN S LN="" -"RTN","ut1",396,0) +"RTN","ut1",395,0) . . ;F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" W TAG_"+"_LN_": "_^(LN),! -"RTN","ut1",397,0) +"RTN","ut1",396,0) . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S LINNUM=LINNUM+1,@X@(LINNUM)=TAG_"+"_LN_": "_^(LN) -"RTN","ut1",398,0) +"RTN","ut1",397,0) . . Q -"RTN","ut1",399,0) +"RTN","ut1",398,0) . Q +"RTN","ut1",399,0) + QUIT "RTN","ut1",400,0) - QUIT + ; "RTN","ut1",401,0) - ; -"RTN","ut1",402,0) COVRPTGL(C,S,R,OUT) ; [Private] - Coverage Global for silent invokers -"RTN","ut1",403,0) +"RTN","ut1",402,0) ; C = COHORT - Global name -"RTN","ut1",404,0) +"RTN","ut1",403,0) ; S = SURVIVORS - Global name -"RTN","ut1",405,0) +"RTN","ut1",404,0) ; R = RESULT - Global name -"RTN","ut1",406,0) +"RTN","ut1",405,0) ; OUT = OUTPUT - Global name -"RTN","ut1",407,0) +"RTN","ut1",406,0) ; -"RTN","ut1",408,0) +"RTN","ut1",407,0) N O S O=$$ACTLINES(C) -"RTN","ut1",409,0) +"RTN","ut1",408,0) N L S L=$$ACTLINES(S) -"RTN","ut1",410,0) +"RTN","ut1",409,0) S @OUT=(O-L)_"/"_O -"RTN","ut1",411,0) +"RTN","ut1",410,0) N RTN,TAG,LN S (RTN,TAG,LN)="" -"RTN","ut1",412,0) +"RTN","ut1",411,0) F S RTN=$O(@C@(RTN)) Q:RTN="" D -"RTN","ut1",413,0) +"RTN","ut1",412,0) . N O S O=$$ACTLINES($NA(@C@(RTN))) -"RTN","ut1",414,0) +"RTN","ut1",413,0) . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",415,0) +"RTN","ut1",414,0) . S @OUT@(RTN)=(O-L)_"/"_O -"RTN","ut1",416,0) +"RTN","ut1",415,0) . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D -"RTN","ut1",417,0) +"RTN","ut1",416,0) . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) -"RTN","ut1",418,0) +"RTN","ut1",417,0) . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",419,0) +"RTN","ut1",418,0) . . S @OUT@(RTN,TAG)=(O-L)_"/"_O -"RTN","ut1",420,0) +"RTN","ut1",419,0) . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S @OUT@(RTN,TAG,LN)=@S@(RTN,TAG,LN) -"RTN","ut1",421,0) +"RTN","ut1",420,0) QUIT -"RTN","ut1",422,0) +"RTN","ut1",421,0) ; "RTN","utcover") -0^10^B33175345 +0^10^B32934852 "RTN","utcover",1,0) -%utcover ;JLI - generic coverage and unit test runner ;08/10/15 14:32 +%utcover ;JLI - generic coverage and unit test runner ;09/14/15 09:37 "RTN","utcover",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 12 "RTN","utcover",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utcover",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utcover",5,0) ; Original routine authored by Joel L. Ivey +"RTN","utcover",5,0) + ; "RTN","utcover",6,0) - ; -"RTN","utcover",7,0) D EN^%ut("%uttcovr") ; unit tests +"RTN","utcover",7,0) + Q "RTN","utcover",8,0) - Q + ; "RTN","utcover",9,0) - ; -"RTN","utcover",10,0) MULTAPIS(TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS -"RTN","utcover",11,0) +"RTN","utcover",10,0) ; can be run from %ut using D MULTAPIS^%ut(.TESTROUS) -"RTN","utcover",12,0) +"RTN","utcover",11,0) ; input TESTROUS - passed by reference - array of routine names to run tests for -"RTN","utcover",13,0) +"RTN","utcover",12,0) ; specify those to be called directly by including ^ as part of -"RTN","utcover",14,0) +"RTN","utcover",13,0) ; TAG^ROUTINE or ^ROUTINE. -"RTN","utcover",15,0) +"RTN","utcover",14,0) ; ROUTINE names without a ^ will be called as EN^%ut("ROUTINE") -"RTN","utcover",16,0) +"RTN","utcover",15,0) ; Sometimes to get complete coverage, different entry points may -"RTN","utcover",17,0) +"RTN","utcover",16,0) ; need to be called (e.g., at top and for VERBOSE), these should each -"RTN","utcover",18,0) +"RTN","utcover",17,0) ; be included. -"RTN","utcover",19,0) +"RTN","utcover",18,0) ; If the subscript is a number, it will take the list of comma separated -"RTN","utcover",20,0) +"RTN","utcover",19,0) ; values as the routines. If the the subscript is not a number, it will -"RTN","utcover",21,0) +"RTN","utcover",20,0) ; take it as a routine to be added to the list, then if the value of the -"RTN","utcover",22,0) +"RTN","utcover",21,0) ; contains a comma separated list of routines, they will be added as well. -"RTN","utcover",23,0) +"RTN","utcover",22,0) ; Thus a value of -"RTN","utcover",24,0) +"RTN","utcover",23,0) ; TESTROUS(1)="A^ROU1,^ROU1,^ROU2,ROU3" -"RTN","utcover",25,0) +"RTN","utcover",24,0) ; or a value of -"RTN","utcover",26,0) +"RTN","utcover",25,0) ; TESTROUS("A^ROU1")="^ROU1,^ROU2,ROU3" -"RTN","utcover",27,0) +"RTN","utcover",26,0) ; will both result in tests for -"RTN","utcover",28,0) +"RTN","utcover",27,0) ; D A^ROU1,^ROU1,^ROU2,EN^%ut("ROU3") +"RTN","utcover",28,0) + K ^TMP("%utcover",$J,"TESTROUS") "RTN","utcover",29,0) - K ^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",30,0) M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS -"RTN","utcover",31,0) +"RTN","utcover",30,0) D COVENTRY +"RTN","utcover",31,0) + K ^TMP("%utcover",$J,"TESTROUS") "RTN","utcover",32,0) - K ^TMP("%utcover",$J,"TESTROUS") + Q "RTN","utcover",33,0) - Q + ; "RTN","utcover",34,0) - ; -"RTN","utcover",35,0) COVENTRY ; setup of COVERAGE NEWs most variables, so TESTROUS passed by global +"RTN","utcover",35,0) + ; "RTN","utcover",36,0) - ; -"RTN","utcover",37,0) N I,ROU,VAL,VALS,UTDATA,TESTS,TESTROUS -"RTN","utcover",38,0) +"RTN","utcover",37,0) M TESTROUS=^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",39,0) +"RTN","utcover",38,0) S ROU="" F S ROU=$O(TESTROUS(ROU)) Q:ROU="" D -"RTN","utcover",40,0) +"RTN","utcover",39,0) . I ROU'=+ROU S TESTS(ROU)="" -"RTN","utcover",41,0) +"RTN","utcover",40,0) . F I=1:1 S VAL=$P(TESTROUS(ROU),",",I) Q:VAL="" S TESTS(VAL)="" +"RTN","utcover",41,0) + . Q "RTN","utcover",42,0) - . Q -"RTN","utcover",43,0) S ROU="" F S ROU=$O(TESTS(ROU)) Q:ROU="" D -"RTN","utcover",44,0) +"RTN","utcover",43,0) . W !!,"------------------- RUNNING ",ROU," -------------------" -"RTN","utcover",45,0) +"RTN","utcover",44,0) . I ROU[U D @ROU -"RTN","utcover",46,0) +"RTN","utcover",45,0) . I ROU'[U D @("EN^%ut("""_ROU_""")") -"RTN","utcover",47,0) +"RTN","utcover",46,0) . D GETUTVAL^%ut(.UTDATA) +"RTN","utcover",47,0) + . Q "RTN","utcover",48,0) - . Q -"RTN","utcover",49,0) I $D(UTDATA) D LSTUTVAL^%ut(.UTDATA) +"RTN","utcover",49,0) + Q "RTN","utcover",50,0) - Q + ; "RTN","utcover",51,0) - ; -"RTN","utcover",52,0) COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ; run coverage analysis for multiple routines and entry points -"RTN","utcover",53,0) +"RTN","utcover",52,0) ; can be run from %ut using D COVERAGE^%ut(ROUNMSP,.TESTROUS,.XCLDROUS,RESLTLVL) -"RTN","utcover",54,0) +"RTN","utcover",53,0) ; input ROUNMSP - Namespace for routine(s) to be analyzed -"RTN","utcover",55,0) +"RTN","utcover",54,0) ; ROUNAME will result in only the routine ROUNAME being analyzed -"RTN","utcover",56,0) +"RTN","utcover",55,0) ; ROUN* will result in all routines beginning with ROUN being analyzed -"RTN","utcover",57,0) +"RTN","utcover",56,0) ; input TESTROUS - passed by reference - see TESTROUS description for JUSTTEST -"RTN","utcover",58,0) +"RTN","utcover",57,0) ; input XCLDROUS - passed by reference - routines passed in a manner similar to TESTROUS, -"RTN","utcover",59,0) +"RTN","utcover",58,0) ; but only the routine names, whether as arguments or a comma separated -"RTN","utcover",60,0) +"RTN","utcover",59,0) ; list of routines, will be excluded from the analysis of coverage. These -"RTN","utcover",61,0) +"RTN","utcover",60,0) ; would normally be names of routines which are only for unit tests, or -"RTN","utcover",62,0) +"RTN","utcover",61,0) ; others which should not be included in the analysis for some reason. -"RTN","utcover",63,0) +"RTN","utcover",62,0) ; input RESLTLVL - This value determines the amount of information to be generated for the -"RTN","utcover",64,0) +"RTN","utcover",63,0) ; analysis. A missing or null value will be considered to be level 1 -"RTN","utcover",65,0) +"RTN","utcover",64,0) ; 1 - Listing of analysis only for routine overall -"RTN","utcover",66,0) +"RTN","utcover",65,0) ; 2 - Listing of analysis for routine overall and for each TAG -"RTN","utcover",67,0) +"RTN","utcover",66,0) ; 3 - Full analysis for each tag, and lists out those lines which were -"RTN","utcover",68,0) +"RTN","utcover",67,0) ; not executed during the analysis +"RTN","utcover",68,0) + ; "RTN","utcover",69,0) - ; -"RTN","utcover",70,0) N I,ROU,TYPE,VAL,XCLUDE -"RTN","utcover",71,0) +"RTN","utcover",70,0) S RESLTLVL=$G(RESLTLVL,1) -"RTN","utcover",72,0) +"RTN","utcover",71,0) I (RESLTLVL<1) S RESLTLVL=1 -"RTN","utcover",73,0) +"RTN","utcover",72,0) I (RESLTLVL>3) S RESLTLVL=3 -"RTN","utcover",74,0) +"RTN","utcover",73,0) M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS ; -"RTN","utcover",75,0) +"RTN","utcover",74,0) D COV^%ut1(ROUNMSP,"D COVENTRY^%utcover",-1) -"RTN","utcover",76,0) +"RTN","utcover",75,0) K ^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",77,0) +"RTN","utcover",76,0) S ROU="" F S ROU=$O(XCLDROUS(ROU)) Q:ROU="" D -"RTN","utcover",78,0) +"RTN","utcover",77,0) . I ROU'=+ROU S XCLUDE(ROU)="" -"RTN","utcover",79,0) +"RTN","utcover",78,0) . F I=1:1 S VAL=$P(XCLDROUS(ROU),",",I) Q:VAL="" S XCLUDE(VAL)="" +"RTN","utcover",79,0) + . Q "RTN","utcover",80,0) - . Q -"RTN","utcover",81,0) N TEXTGLOB S TEXTGLOB=$NA(^TMP("%utcover-text",$J)) K @TEXTGLOB -"RTN","utcover",82,0) +"RTN","utcover",81,0) D LIST(.XCLUDE,RESLTLVL,TEXTGLOB) -"RTN","utcover",83,0) +"RTN","utcover",82,0) F I=1:1 Q:'$D(@TEXTGLOB@(I)) W !,@TEXTGLOB@(I) -"RTN","utcover",84,0) +"RTN","utcover",83,0) K @TEXTGLOB +"RTN","utcover",84,0) + Q "RTN","utcover",85,0) - Q + ; "RTN","utcover",86,0) - ; -"RTN","utcover",87,0) LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; -"RTN","utcover",88,0) +"RTN","utcover",87,0) ; ZEXCEPT: TYPE1 - NEWed and set below for recursion -"RTN","utcover",89,0) +"RTN","utcover",88,0) ; input - ROULIST - a comma separated list of routine names that will -"RTN","utcover",90,0) +"RTN","utcover",89,0) ; be used to identify desired routines. Any name -"RTN","utcover",91,0) +"RTN","utcover",90,0) ; that begins with one of the specified values will -"RTN","utcover",92,0) +"RTN","utcover",91,0) ; be included -"RTN","utcover",93,0) +"RTN","utcover",92,0) ; input - TYPE - value indicating amount of detail desired -"RTN","utcover",94,0) +"RTN","utcover",93,0) ; 3=full with listing of untouched lines -"RTN","utcover",95,0) +"RTN","utcover",94,0) ; 2=moderated with listing by tags -"RTN","utcover",96,0) +"RTN","utcover",95,0) ; 1=summary with listing by routine -"RTN","utcover",97,0) +"RTN","utcover",96,0) ; input - TEXTGLOB - closed global location in which text is returned -"RTN","utcover",98,0) +"RTN","utcover",97,0) ; input - GLOB - used for unit tests - specifies global to work with -"RTN","utcover",99,0) +"RTN","utcover",98,0) ; so that coverage data is not impacted +"RTN","utcover",99,0) + ; "RTN","utcover",100,0) - ; -"RTN","utcover",101,0) N CURRCOV,CURRLIN,LINCOV,LINE,LINTOT,ROULIST,ROUNAME,TAG,TOTCOV,TOTLIN,XVAL +"RTN","utcover",101,0) + ; "RTN","utcover",102,0) - ; -"RTN","utcover",103,0) I '$D(LINNUM) S LINNUM=0 ; initialize on first entry -"RTN","utcover",104,0) +"RTN","utcover",103,0) I '$D(GLOB) N GLOB S GLOB=$NA(^TMP("%utCOVREPORT",$J)) -"RTN","utcover",105,0) +"RTN","utcover",104,0) D TRIMDATA(.XCLDROUS,GLOB) ; remove undesired routines from data +"RTN","utcover",105,0) + ; "RTN","utcover",106,0) - ; -"RTN","utcover",107,0) N JOB,NAME,BASE -"RTN","utcover",108,0) +"RTN","utcover",107,0) S TOTCOV=0,TOTLIN=0 -"RTN","utcover",109,0) +"RTN","utcover",108,0) ; F NAME="%utCOVREPORT","%utCOVRESULT","%utCOVCOHORT","%utCOVCOHORTSAV" D -"RTN","utcover",110,0) +"RTN","utcover",109,0) I TYPE>1 S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D +"RTN","utcover",110,0) + . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) "RTN","utcover",111,0) - . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) -"RTN","utcover",112,0) . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" +"RTN","utcover",112,0) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") "RTN","utcover",113,0) - . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") -"RTN","utcover",114,0) . I TYPE>1 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" - "_$S(TYPE=2:"Summary",1:"Detailed Breakdown") -"RTN","utcover",115,0) +"RTN","utcover",114,0) . S TAG="" F S TAG=$O(@GLOB@(ROUNAME,TAG)) Q:TAG="" S XVAL=^(TAG) D -"RTN","utcover",116,0) +"RTN","utcover",115,0) . . S LINCOV=$P(XVAL,"/"),LINTOT=$P(XVAL,"/",2) -"RTN","utcover",117,0) +"RTN","utcover",116,0) . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" Tag "_TAG_"^"_ROUNAME_" "_LINCOV_" out of "_LINTOT_" lines covered" -"RTN","utcover",118,0) +"RTN","utcover",117,0) . . I TYPE=2 Q -"RTN","utcover",119,0) +"RTN","utcover",118,0) . . I LINCOV=LINTOT Q -"RTN","utcover",120,0) +"RTN","utcover",119,0) . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" the following is a list of the lines **NOT** covered" -"RTN","utcover",121,0) +"RTN","utcover",120,0) . . S LINE="" F S LINE=$O(@GLOB@(ROUNAME,TAG,LINE)) Q:LINE="" D -"RTN","utcover",122,0) +"RTN","utcover",121,0) . . . I LINE=0 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_" "_@GLOB@(ROUNAME,TAG,LINE) Q -"RTN","utcover",123,0) +"RTN","utcover",122,0) . . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_"+"_LINE_" "_@GLOB@(ROUNAME,TAG,LINE) -"RTN","utcover",124,0) +"RTN","utcover",123,0) . . . Q -"RTN","utcover",125,0) +"RTN","utcover",124,0) . . Q +"RTN","utcover",125,0) + . Q "RTN","utcover",126,0) - . Q -"RTN","utcover",127,0) ; for type=3 generate a summary at bottom after detail -"RTN","utcover",128,0) +"RTN","utcover",127,0) I TYPE=3 N TYPE1 S TYPE1=2 D LIST(.XCLDROUS,2,TEXTGLOB,GLOB,.LINNUM) K TYPE1 -"RTN","utcover",129,0) +"RTN","utcover",128,0) I TYPE=2,$G(TYPE1) Q ; CAME IN FROM ABOVE LINE -"RTN","utcover",130,0) +"RTN","utcover",129,0) ; summarize by just routine name +"RTN","utcover",130,0) + S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" "RTN","utcover",131,0) - S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" -"RTN","utcover",132,0) S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D -"RTN","utcover",133,0) +"RTN","utcover",132,0) . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) -"RTN","utcover",134,0) +"RTN","utcover",133,0) . S TOTCOV=TOTCOV+CURRCOV,TOTLIN=TOTLIN+CURRLIN -"RTN","utcover",135,0) +"RTN","utcover",134,0) . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") -"RTN","utcover",136,0) +"RTN","utcover",135,0) . Q -"RTN","utcover",137,0) +"RTN","utcover",136,0) S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" -"RTN","utcover",138,0) +"RTN","utcover",137,0) S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Overall Analysis "_TOTCOV_" out of "_TOTLIN_" lines covered"_$S(TOTLIN>0:" ("_$P((100*TOTCOV)/TOTLIN,".")_"% coverage)",1:"") +"RTN","utcover",138,0) + Q "RTN","utcover",139,0) - Q -"RTN","utcover",140,0) ; -"RTN","utcover",141,0) +"RTN","utcover",140,0) TRIMDATA(ROULIST,GLOB) ; -"RTN","utcover",142,0) +"RTN","utcover",141,0) N ROUNAME -"RTN","utcover",143,0) +"RTN","utcover",142,0) S ROUNAME="" F S ROUNAME=$O(ROULIST(ROUNAME)) Q:ROUNAME="" K @GLOB@(ROUNAME) -"RTN","utcover",144,0) +"RTN","utcover",143,0) Q -"RTN","utcover",145,0) +"RTN","utcover",144,0) ; "RTN","utt1") -0^3^B29220013 +0^3^B28788704 "RTN","utt1",1,0) -%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;08/10/15 14:32 +%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;09/14/15 09:38 "RTN","utt1",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 12 "RTN","utt1",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt1",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt1",5,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 -"RTN","utt1",6,0) +"RTN","utt1",5,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","utt1",6,0) + ; "RTN","utt1",7,0) - ; -"RTN","utt1",8,0) ; THIS ROUTINE IS THE UNIFIED UNIT TESTER FOR ALL OF M-UNIT. +"RTN","utt1",8,0) + ; "RTN","utt1",9,0) - ; -"RTN","utt1",10,0) ; Dear Users, +"RTN","utt1",10,0) + ; "RTN","utt1",11,0) - ; -"RTN","utt1",12,0) ; I know about about the irony of a test suite for the testing suite, -"RTN","utt1",13,0) +"RTN","utt1",12,0) ; so stop snikering. Aside from that, it's actually going to be hard. +"RTN","utt1",13,0) + ; "RTN","utt1",14,0) - ; -"RTN","utt1",15,0) ; Truly yours, +"RTN","utt1",15,0) + ; "RTN","utt1",16,0) - ; -"RTN","utt1",17,0) ; Sam H +"RTN","utt1",17,0) + ; "RTN","utt1",18,0) - ; -"RTN","utt1",19,0) D EN^%ut($T(+0),1) ; Run tests here, be verbose. +"RTN","utt1",19,0) + QUIT "RTN","utt1",20,0) - QUIT + ; "RTN","utt1",21,0) - ; -"RTN","utt1",22,0) STARTUP ; M-Unit Start-Up - This runs before anything else. -"RTN","utt1",23,0) +"RTN","utt1",22,0) ; ZEXCEPT: KBANCOUNT - created here, removed in SHUTDOWN -"RTN","utt1",24,0) +"RTN","utt1",23,0) S ^TMP($J,"%ut","STARTUP")="" -"RTN","utt1",25,0) +"RTN","utt1",24,0) S KBANCOUNT=1 +"RTN","utt1",25,0) + QUIT "RTN","utt1",26,0) - QUIT -"RTN","utt1",27,0) ; -"RTN","utt1",28,0) +"RTN","utt1",27,0) SHUTDOWN ; M-Unit Shutdown - This runs after everything else is done. -"RTN","utt1",29,0) +"RTN","utt1",28,0) ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed here -"RTN","utt1",30,0) +"RTN","utt1",29,0) K ^TMP($J,"%ut","STARTUP") -"RTN","utt1",31,0) +"RTN","utt1",30,0) K KBANCOUNT -"RTN","utt1",32,0) +"RTN","utt1",31,0) QUIT +"RTN","utt1",32,0) + ; "RTN","utt1",33,0) ; "RTN","utt1",34,0) ; "RTN","utt1",35,0) - ; -"RTN","utt1",36,0) SETUP ; This runs before every test. +"RTN","utt1",36,0) + ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN "RTN","utt1",37,0) - ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",38,0) S KBANCOUNT=KBANCOUNT+1 +"RTN","utt1",38,0) + QUIT "RTN","utt1",39,0) - QUIT -"RTN","utt1",40,0) ; -"RTN","utt1",41,0) +"RTN","utt1",40,0) TEARDOWN ; This runs after every test -"RTN","utt1",42,0) +"RTN","utt1",41,0) ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",43,0) +"RTN","utt1",42,0) S KBANCOUNT=KBANCOUNT-1 -"RTN","utt1",44,0) +"RTN","utt1",43,0) QUIT +"RTN","utt1",44,0) + ; "RTN","utt1",45,0) ; "RTN","utt1",46,0) ; "RTN","utt1",47,0) - ; -"RTN","utt1",48,0) T1 ; @TEST - Make sure Start-up Ran -"RTN","utt1",49,0) +"RTN","utt1",48,0) D CHKTF($D(^TMP($J,"%ut","STARTUP")),"Start-up node on ^TMP must exist") +"RTN","utt1",49,0) + QUIT "RTN","utt1",50,0) - QUIT + ; "RTN","utt1",51,0) - ; -"RTN","utt1",52,0) T2 ; @TEST - Make sure Set-up runs +"RTN","utt1",52,0) + ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN "RTN","utt1",53,0) - ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",54,0) D CHKEQ(KBANCOUNT,2,"KBANCount not incremented properly at SETUP") +"RTN","utt1",54,0) + QUIT "RTN","utt1",55,0) - QUIT + ; "RTN","utt1",56,0) - ; -"RTN","utt1",57,0) T3 ; @TEST - Make sure Teardown runs -"RTN","utt1",58,0) +"RTN","utt1",57,0) ; ZEXCEPT: KBANCOUNT - created in STARTUP, removed in SHUTDOWN -"RTN","utt1",59,0) +"RTN","utt1",58,0) D CHKEQ(KBANCOUNT,2,"KBANCount not decremented properly at TEARDOWN") +"RTN","utt1",59,0) + QUIT "RTN","utt1",60,0) - QUIT + ; "RTN","utt1",61,0) - ; -"RTN","utt1",62,0) T4 ; Specified in XTMTAG -"RTN","utt1",63,0) +"RTN","utt1",62,0) ; 140731 JLI - note that this will fail when run from the GUI runner, since it calls each tag separately -"RTN","utt1",64,0) +"RTN","utt1",63,0) ; ZEXCEPT: %utETRY - newed and created in EN1^%ut -"RTN","utt1",65,0) +"RTN","utt1",64,0) ; ZEXCEPT: %utGUI -- CONDITIONALLY DEFINED BY GUINEXT^%ut -"RTN","utt1",66,0) +"RTN","utt1",65,0) I $G(%utGUI) D CHKEQ(%utETRY,"T4","T4 should be the value for %utETRY in the GUI Runner") -"RTN","utt1",67,0) +"RTN","utt1",66,0) I '$G(%utGUI) D CHKEQ(%utETRY(4),"T4","T4 should be the collected as the fourth entry in %utETRY") +"RTN","utt1",67,0) + QUIT "RTN","utt1",68,0) - QUIT + ; "RTN","utt1",69,0) - ; -"RTN","utt1",70,0) T5 ; ditto +"RTN","utt1",70,0) + ; ZEXCEPT: %ut - NEWed and created in EN1^%ut "RTN","utt1",71,0) - ; ZEXCEPT: %ut - NEWed and created in EN1^%ut -"RTN","utt1",72,0) D CHKTF(0,"This is an intentional failure.") -"RTN","utt1",73,0) +"RTN","utt1",72,0) D CHKEQ(%ut("FAIL"),1,"By this point, we should have failed one test") -"RTN","utt1",74,0) +"RTN","utt1",73,0) D FAIL^%ut("Intentionally throwing a failure") -"RTN","utt1",75,0) +"RTN","utt1",74,0) D CHKEQ(%ut("FAIL"),2,"By this point, we should have failed two tests") -"RTN","utt1",76,0) +"RTN","utt1",75,0) ; S %ut("FAIL")=0 ; Okay... Boy's and Girls... as the developer I can do that. -"RTN","utt1",77,0) +"RTN","utt1",76,0) QUIT -"RTN","utt1",78,0) +"RTN","utt1",77,0) ; -"RTN","utt1",79,0) +"RTN","utt1",78,0) T6 ; ditto -"RTN","utt1",80,0) +"RTN","utt1",79,0) ; ZEXCEPT: %ut - NEWed and created in EN1^%ut -"RTN","utt1",81,0) +"RTN","utt1",80,0) N TESTCOUNT S TESTCOUNT=%ut("CHK") +"RTN","utt1",81,0) + D SUCCEED^%ut "RTN","utt1",82,0) D SUCCEED^%ut "RTN","utt1",83,0) - D SUCCEED^%ut -"RTN","utt1",84,0) D CHKEQ(%ut("CHK"),TESTCOUNT+2,"Succeed should increment the number of tests") -"RTN","utt1",85,0) +"RTN","utt1",84,0) QUIT -"RTN","utt1",86,0) +"RTN","utt1",85,0) ; -"RTN","utt1",87,0) +"RTN","utt1",86,0) T7 ; Make sure we write to principal even though we are on another device -"RTN","utt1",88,0) +"RTN","utt1",87,0) ; This is a rather difficult test to carry out for GT.M and Cache... -"RTN","utt1",89,0) +"RTN","utt1",88,0) ; ZEXCEPT: GetEnviron,Util,delete,newversion,readonly - not really variables -"RTN","utt1",90,0) +"RTN","utt1",89,0) N D -"RTN","utt1",91,0) +"RTN","utt1",90,0) I +$SY=47 S D="/tmp/test.txt" ; All GT.M ; VMS not supported. -"RTN","utt1",92,0) +"RTN","utt1",91,0) I +$SY=0 D ; All Cache -"RTN","utt1",93,0) +"RTN","utt1",92,0) . I $ZVERSION(1)=2 S D=$SYSTEM.Util.GetEnviron("temp")_"\test.txt" I 1 ; Windows -"RTN","utt1",94,0) +"RTN","utt1",93,0) . E S D="/tmp/test.txt" ; not windows; VMS not supported. -"RTN","utt1",95,0) +"RTN","utt1",94,0) I +$SY=0 O D:"NWS" ; Cache new file -"RTN","utt1",96,0) +"RTN","utt1",95,0) I +$SY=47 O D:(newversion) ; GT.M new file -"RTN","utt1",97,0) +"RTN","utt1",96,0) U D +"RTN","utt1",97,0) + WRITE "HELLO",! "RTN","utt1",98,0) WRITE "HELLO",! "RTN","utt1",99,0) - WRITE "HELLO",! + C D "RTN","utt1",100,0) - C D + ; "RTN","utt1",101,0) - ; -"RTN","utt1",102,0) ; Now open back the file, and read the hello, but open in read only so -"RTN","utt1",103,0) +"RTN","utt1",102,0) ; M-Unit will error out if it will write something out there. +"RTN","utt1",103,0) + ; "RTN","utt1",104,0) - ; -"RTN","utt1",105,0) - ; Per VISTA conventions, current IO device should be IO, old is IO(0). -"RTN","utt1",106,0) - ; -"RTN","utt1",107,0) I +$SY=0 O D:"R" -"RTN","utt1",108,0) +"RTN","utt1",105,0) I +$SY=47 O D:(readonly) -"RTN","utt1",109,0) +"RTN","utt1",106,0) U D -"RTN","utt1",110,0) +"RTN","utt1",107,0) N X READ X:1 -"RTN","utt1",111,0) +"RTN","utt1",108,0) D CHKTF(X="HELLO") ; This should write to the screen the dot not to the file. -"RTN","utt1",112,0) +"RTN","utt1",109,0) D CHKTF(($$LO($IO)=$$LO(D)),"IO device didn't get reset back") ; $$LO is b/c of a bug in Cache/Windows. $IO is not the same cas D. -"RTN","utt1",113,0) +"RTN","utt1",110,0) I +$SY=0 C D:"D" -"RTN","utt1",114,0) +"RTN","utt1",111,0) I +$SY=47 C D:(delete) -"RTN","utt1",115,0) +"RTN","utt1",112,0) U $P -"RTN","utt1",116,0) +"RTN","utt1",113,0) S IO=$IO -"RTN","utt1",117,0) +"RTN","utt1",114,0) QUIT -"RTN","utt1",118,0) +"RTN","utt1",115,0) ; -"RTN","utt1",119,0) +"RTN","utt1",116,0) ; At the moment T8^%utt1 throws a fail, with no message -"RTN","utt1",120,0) +"RTN","utt1",117,0) ; in the GUI runner. For some reason, both X and Y -"RTN","utt1",121,0) +"RTN","utt1",118,0) ; variables are returned as null strings, while in the -"RTN","utt1",122,0) +"RTN","utt1",119,0) ; command line runner, Y has a value containing the -"RTN","utt1",123,0) +"RTN","utt1",120,0) ; word being sought -"RTN","utt1",124,0) +"RTN","utt1",121,0) ; -"RTN","utt1",125,0) +"RTN","utt1",122,0) T8 ; If IO starts with another device, write to that device as if it's the pricipal device -"RTN","utt1",126,0) +"RTN","utt1",123,0) ; ZEXCEPT: GetEnviron,Util,delete,newversion,readonly - not really variables -"RTN","utt1",127,0) +"RTN","utt1",124,0) N D -"RTN","utt1",128,0) +"RTN","utt1",125,0) I +$SY=47 S D="/tmp/test.txt" ; All GT.M ; VMS not supported. -"RTN","utt1",129,0) +"RTN","utt1",126,0) I +$SY=0 D ; All Cache -"RTN","utt1",130,0) +"RTN","utt1",127,0) . I $ZVERSION(1)=2 S D=$SYSTEM.Util.GetEnviron("temp")_"\test.txt" I 1 ; Windows -"RTN","utt1",131,0) +"RTN","utt1",128,0) . E S D="/tmp/test.txt" ; not windows; VMS not supported. -"RTN","utt1",132,0) +"RTN","utt1",129,0) I +$SY=0 O D:"NWS" ; Cache new file -"RTN","utt1",133,0) +"RTN","utt1",130,0) I +$SY=47 O D:(newversion) ; GT.M new file -"RTN","utt1",134,0) +"RTN","utt1",131,0) S IO=D -"RTN","utt1",135,0) +"RTN","utt1",132,0) U D -"RTN","utt1",136,0) +"RTN","utt1",133,0) D ^%utt4 ; Run some Unit Tests -"RTN","utt1",137,0) +"RTN","utt1",134,0) C D -"RTN","utt1",138,0) +"RTN","utt1",135,0) I +$SY=0 O D:"R" ; Cache read only -"RTN","utt1",139,0) +"RTN","utt1",136,0) I +$SY=47 O D:(readonly) ; GT.M read only -"RTN","utt1",140,0) +"RTN","utt1",137,0) U D -"RTN","utt1",141,0) +"RTN","utt1",138,0) N X,Y,Z R X:1,Y:1,Z:1 -"RTN","utt1",142,0) +"RTN","utt1",139,0) I +$SY=0 C D:"D" -"RTN","utt1",143,0) +"RTN","utt1",140,0) I +$SY=47 C D:(delete) -"RTN","utt1",144,0) +"RTN","utt1",141,0) ;D CHKTF(Y["MAIN") ; JLI 140829 commented out, gui doesn't run verbose -"RTN","utt1",145,0) +"RTN","utt1",142,0) D CHKTF((Y["MAIN")!(Z["Ran 1 Routine"),"Write to system during test didn't work") -"RTN","utt1",146,0) +"RTN","utt1",143,0) S IO=$P -"RTN","utt1",147,0) +"RTN","utt1",144,0) QUIT -"RTN","utt1",148,0) +"RTN","utt1",145,0) ; -"RTN","utt1",149,0) +"RTN","utt1",146,0) LO(X) Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") -"RTN","utt1",150,0) +"RTN","utt1",147,0) ; Shortcut methods for M-Unit -"RTN","utt1",151,0) +"RTN","utt1",148,0) CHKTF(X,Y) ; -"RTN","utt1",152,0) +"RTN","utt1",149,0) D CHKTF^%ut(X,$G(Y)) -"RTN","utt1",153,0) +"RTN","utt1",150,0) QUIT -"RTN","utt1",154,0) +"RTN","utt1",151,0) ; -"RTN","utt1",155,0) +"RTN","utt1",152,0) CHKEQ(A,B,M) ; -"RTN","utt1",156,0) +"RTN","utt1",153,0) D CHKEQ^%ut(A,B,$G(M)) -"RTN","utt1",157,0) +"RTN","utt1",154,0) QUIT -"RTN","utt1",158,0) +"RTN","utt1",155,0) ; -"RTN","utt1",159,0) +"RTN","utt1",156,0) XTENT ; Entry points -"RTN","utt1",160,0) +"RTN","utt1",157,0) ;;T4;Entry point using XTMENT -"RTN","utt1",161,0) +"RTN","utt1",158,0) ;;T5;Error count check -"RTN","utt1",162,0) +"RTN","utt1",159,0) ;;T6;Succeed Entry Point -"RTN","utt1",163,0) +"RTN","utt1",160,0) ;;T7;Make sure we write to principal even though we are on another device -"RTN","utt1",164,0) +"RTN","utt1",161,0) ;;T8;If IO starts with another device, write to that device as if it's the pricipal device -"RTN","utt1",165,0) +"RTN","utt1",162,0) ; -"RTN","utt1",166,0) +"RTN","utt1",163,0) XTROU ; Routines containing additional tests -"RTN","utt1",167,0) +"RTN","utt1",164,0) ;;%utt2; old %utNITU -"RTN","utt1",168,0) +"RTN","utt1",165,0) ;;%utt4; old %utNITW -"RTN","utt1",169,0) +"RTN","utt1",166,0) ;;%utt5; -"RTN","utt1",170,0) +"RTN","utt1",167,0) ;;%utt6; -"RTN","utt1",171,0) +"RTN","utt1",168,0) ;;%uttcovr;coverage related tests "RTN","utt2") -0^4^B512658 +0^4^B501728 "RTN","utt2",1,0) -%utt2 ; VEN/SMH - Bad Ass Continuation of Unit Tests;08/10/15 14:29 +%utt2 ; VEN/SMH - Bad Ass Continuation of Unit Tests;09/14/15 09:38 "RTN","utt2",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 12 "RTN","utt2",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt2",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt2",5,0) ; Original routine authored by Sam H. Habiel -"RTN","utt2",6,0) +"RTN","utt2",5,0) ; Modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","utt2",6,0) + ; "RTN","utt2",7,0) ; "RTN","utt2",8,0) - ; -"RTN","utt2",9,0) T11 ; @TEST An @TEST Entry point in Another Routine invoked through XTROU offsets +"RTN","utt2",9,0) + D CHKTF^%ut(1) "RTN","utt2",10,0) - D CHKTF^%ut(1) + QUIT "RTN","utt2",11,0) - QUIT -"RTN","utt2",12,0) T12 ; -"RTN","utt2",13,0) +"RTN","utt2",12,0) D CHKTF^%ut(1) -"RTN","utt2",14,0) +"RTN","utt2",13,0) QUIT -"RTN","utt2",15,0) +"RTN","utt2",14,0) XTENT ; -"RTN","utt2",16,0) +"RTN","utt2",15,0) ;;T12;An XTENT offset entry point in Another Routine invoked through XTROU offsets "RTN","utt3") -0^5^B1662421 +0^5^B1628564 "RTN","utt3",1,0) -%utt3 ; VEN/SMH-JLI - Unit Tests Coverage Tests;08/10/15 14:29 +%utt3 ; VEN/SMH-JLI - Unit Tests Coverage Tests;09/14/15 09:38 "RTN","utt3",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 12 "RTN","utt3",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt3",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt3",5,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 -"RTN","utt3",6,0) +"RTN","utt3",5,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","utt3",6,0) + ; "RTN","utt3",7,0) - ; -"RTN","utt3",8,0) XTMUNITV ; VEN/SMH - Unit Tests Coverage Tests;2014-04-16 7:14 PM +"RTN","utt3",8,0) + ; "RTN","utt3",9,0) - ; -"RTN","utt3",10,0) ; *** BE VERY CAREFUL IN MODIFIYING THIS ROUTINE *** -"RTN","utt3",11,0) +"RTN","utt3",10,0) ; *** THE UNIT TEST COUNTS ACTIVE AND INACTIVE LINES OF CODE *** -"RTN","utt3",12,0) +"RTN","utt3",11,0) ; *** IF YOU MODIFY THIS, MODIFY XTMUNITW AS WELL *** +"RTN","utt3",12,0) + ; "RTN","utt3",13,0) - ; -"RTN","utt3",14,0) ; Coverage tester in %utt4 -"RTN","utt3",15,0) +"RTN","utt3",14,0) ; 20 Lines of code -"RTN","utt3",16,0) +"RTN","utt3",15,0) ; 5 do not run as they are dead code -"RTN","utt3",17,0) +"RTN","utt3",16,0) ; Expected Coverage: 15/20 = 75% +"RTN","utt3",17,0) + ; "RTN","utt3",18,0) - ; -"RTN","utt3",19,0) STARTUP ; Doesn't count -"RTN","utt3",20,0) +"RTN","utt3",19,0) N X ; Counts -"RTN","utt3",21,0) +"RTN","utt3",20,0) S X=1 ; Counts -"RTN","utt3",22,0) +"RTN","utt3",21,0) QUIT ; Counts +"RTN","utt3",22,0) + ; "RTN","utt3",23,0) - ; -"RTN","utt3",24,0) SHUTDOWN K X,Y QUIT ; Counts; ZEXCEPT: X,Y +"RTN","utt3",24,0) + ; "RTN","utt3",25,0) - ; -"RTN","utt3",26,0) SETUP S Y=$G(Y)+1 QUIT ; Counts +"RTN","utt3",26,0) + ; "RTN","utt3",27,0) - ; -"RTN","utt3",28,0) TEARDOWN ; Doesn't count -"RTN","utt3",29,0) +"RTN","utt3",28,0) S Y=Y-1 ; Counts -"RTN","utt3",30,0) +"RTN","utt3",29,0) QUIT ; Counts +"RTN","utt3",30,0) + ; "RTN","utt3",31,0) - ; -"RTN","utt3",32,0) T1 ; @TEST Test 1 -"RTN","utt3",33,0) +"RTN","utt3",32,0) D CHKTF^%ut($D(Y)) ; Counts +"RTN","utt3",33,0) + QUIT ; Counts "RTN","utt3",34,0) - QUIT ; Counts + ; "RTN","utt3",35,0) - ; -"RTN","utt3",36,0) T2 ; @TEST Test 2 -"RTN","utt3",37,0) +"RTN","utt3",36,0) D INTERNAL(1) ; Counts -"RTN","utt3",38,0) +"RTN","utt3",37,0) D CHKTF^%ut(1) ; Counts -"RTN","utt3",39,0) +"RTN","utt3",38,0) QUIT ; Counts -"RTN","utt3",40,0) +"RTN","utt3",39,0) S X=1 ; Dead code -"RTN","utt3",41,0) +"RTN","utt3",40,0) QUIT ; Dead code -"RTN","utt3",42,0) +"RTN","utt3",41,0) ; -"RTN","utt3",43,0) +"RTN","utt3",42,0) INTERNAL(A) ; Counts -"RTN","utt3",44,0) +"RTN","utt3",43,0) S A=A+1 ; Counts -"RTN","utt3",45,0) +"RTN","utt3",44,0) QUIT ; Counts -"RTN","utt3",46,0) +"RTN","utt3",45,0) S A=2 ; Dead code -"RTN","utt3",47,0) +"RTN","utt3",46,0) S Y=2 ; Dead code -"RTN","utt3",48,0) +"RTN","utt3",47,0) QUIT ; Dead code "RTN","utt4") -0^6^B1555396 +0^6^B1522726 "RTN","utt4",1,0) -%utt4 ; VEN/SMH/JLI - Coverage Test Runner;08/10/15 14:30 +%utt4 ; VEN/SMH/JLI - Coverage Test Runner;09/14/15 09:38 "RTN","utt4",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 12 "RTN","utt4",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt4",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt4",5,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 -"RTN","utt4",6,0) +"RTN","utt4",5,0) ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 +"RTN","utt4",6,0) + ; "RTN","utt4",7,0) - ; -"RTN","utt4",8,0) XTMUNITW ; VEN/SMH - Coverage Test Runner;2014-04-17 3:30 PM -"RTN","utt4",9,0) +"RTN","utt4",8,0) ;;7.3;KERNEL TOOLKIT;; +"RTN","utt4",9,0) + ; "RTN","utt4",10,0) - ; -"RTN","utt4",11,0) ; This tests code in XTMUNITV for coverage -"RTN","utt4",12,0) +"RTN","utt4",11,0) D EN^%ut($T(+0),1) QUIT -"RTN","utt4",13,0) +"RTN","utt4",12,0) ; -"RTN","utt4",14,0) +"RTN","utt4",13,0) MAIN ; @TEST - Test coverage calculations -"RTN","utt4",15,0) +"RTN","utt4",14,0) Q:$D(^TMP("%uttcovr",$J)) ; already running coverage analysis from %uttcovr -"RTN","utt4",16,0) +"RTN","utt4",15,0) Q:'(+$SY=47) ; GT.M ONLY -"RTN","utt4",17,0) +"RTN","utt4",16,0) D COV^%ut1("%utt3","D EN^%ut(""%utt3"",1)",-1) ; Only produce output global. -"RTN","utt4",18,0) +"RTN","utt4",17,0) D CHKEQ^%ut("14/19",^TMP("%utCOVREPORT",$J)) -"RTN","utt4",19,0) +"RTN","utt4",18,0) D CHKEQ^%ut("2/5",^TMP("%utCOVREPORT",$J,"%utt3","INTERNAL")) -"RTN","utt4",20,0) +"RTN","utt4",19,0) D CHKTF^%ut($D(^TMP("%utCOVREPORT",$J,"%utt3","T2",4))) -"RTN","utt4",21,0) +"RTN","utt4",20,0) D CHKEQ^%ut("1/1",^TMP("%utCOVREPORT",$J,"%utt3","SETUP")) -"RTN","utt4",22,0) +"RTN","utt4",21,0) QUIT "RTN","utt5") -0^7^B23265101 +0^7^B23054235 "RTN","utt5",1,0) -%utt5 ;JLI - test for aspects of MUnit functionality ;08/10/15 14:30 +%utt5 ;JLI - test for aspects of MUnit functionality ;09/14/15 09:38 "RTN","utt5",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 12 "RTN","utt5",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt5",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt5",5,0) ; Original routine authored by Joel L. Ivey +"RTN","utt5",5,0) + ; "RTN","utt5",6,0) - ; + Q "RTN","utt5",7,0) - Q + ; "RTN","utt5",8,0) - ; -"RTN","utt5",9,0) OLDSTYLE ; +"RTN","utt5",9,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",10,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",11,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",12,0) I $D(%utt6var) S %ut("ENT")="OLDSTYLE",%utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"OLDSTYLE")="" -"RTN","utt5",13,0) +"RTN","utt5",12,0) D CHKEQ^%ut(5,5,"SET EQUAL ON PURPOSE - OLDSTYLE DONE") -"RTN","utt5",14,0) +"RTN","utt5",13,0) D CHKTF^%ut(4=4,"MY EQUAL VALUE") +"RTN","utt5",14,0) + Q "RTN","utt5",15,0) - Q + ; "RTN","utt5",16,0) - ; -"RTN","utt5",17,0) OLDSTYL1 ; +"RTN","utt5",17,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",18,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",19,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",20,0) I $D(%utt6var) S %ut("ENT")="OLDSTYL1",%utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"OLDSTYL1")="" -"RTN","utt5",21,0) +"RTN","utt5",20,0) D CHKEQ^%ut(4,4,"SET EQUAL ON PURPOSE - OLDSTYL1 DONE") +"RTN","utt5",21,0) + Q "RTN","utt5",22,0) - Q + ; "RTN","utt5",23,0) - ; -"RTN","utt5",24,0) NEWSTYLE ; @TEST identify new style test indicator functionality +"RTN","utt5",24,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",25,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",26,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",27,0) I $D(%utt6var) S %ut("ENT")="NEWSTYLE" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"NEWSTYLE")="" -"RTN","utt5",28,0) +"RTN","utt5",27,0) D CHKEQ^%ut(4,4,"SET EQUAL ON PURPOSE - NEWSTYLE DONE") +"RTN","utt5",28,0) + Q "RTN","utt5",29,0) - Q + ; "RTN","utt5",30,0) - ; -"RTN","utt5",31,0) BADCHKEQ ; +"RTN","utt5",31,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",32,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",33,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",34,0) I $D(%utt6var) S %ut("ENT")="BADCHKEQ" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADCHKEQ")="" -"RTN","utt5",35,0) +"RTN","utt5",34,0) D CHKEQ^%ut(4,3,"SET UNEQUAL ON PURPOSE - SHOULD FAIL") +"RTN","utt5",35,0) + Q "RTN","utt5",36,0) - Q + ; "RTN","utt5",37,0) - ; -"RTN","utt5",38,0) BADCHKTF ; +"RTN","utt5",38,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",39,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",40,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",41,0) I $D(%utt6var) S %ut("ENT")="BADCHKTF" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADCHKTF")="" -"RTN","utt5",42,0) +"RTN","utt5",41,0) D CHKTF^%ut(0,"SET FALSE (0) ON PURPOSE - SHOULD FAIL") +"RTN","utt5",42,0) + Q "RTN","utt5",43,0) - Q + ; "RTN","utt5",44,0) - ; -"RTN","utt5",45,0) BADERROR ; +"RTN","utt5",45,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",46,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",47,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 + N X "RTN","utt5",48,0) - N X -"RTN","utt5",49,0) I $D(%utt6var) S %ut("ENT")="BADERROR" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADERROR")="" -"RTN","utt5",50,0) +"RTN","utt5",49,0) ; following syntax error is on purpose to throw an error -"RTN","utt5",51,0) +"RTN","utt5",50,0) S X= ; syntax error on purpose +"RTN","utt5",51,0) + Q "RTN","utt5",52,0) - Q + ; "RTN","utt5",53,0) - ; -"RTN","utt5",54,0) CALLFAIL ; +"RTN","utt5",54,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",55,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",56,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",57,0) N X -"RTN","utt5",58,0) +"RTN","utt5",57,0) I $D(%utt6var) S %ut("ENT")="CALLFAIL" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"CALLFAIL")="" -"RTN","utt5",59,0) +"RTN","utt5",58,0) D FAIL^%ut("Called FAIL to test it") +"RTN","utt5",59,0) + Q "RTN","utt5",60,0) - Q + ; "RTN","utt5",61,0) - ; -"RTN","utt5",62,0) LEAKSOK ; +"RTN","utt5",62,0) + N CODE,LOCATN,MYVALS,X "RTN","utt5",63,0) - N CODE,LOCATN,MYVALS,X -"RTN","utt5",64,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSOK TEST",MYVALS("X")="" -"RTN","utt5",65,0) +"RTN","utt5",64,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find no leaks +"RTN","utt5",65,0) + Q "RTN","utt5",66,0) - Q + ; "RTN","utt5",67,0) - ; -"RTN","utt5",68,0) LEAKSBAD ; -"RTN","utt5",69,0) +"RTN","utt5",68,0) N CODE,LOCATN,MYVALS,X -"RTN","utt5",70,0) +"RTN","utt5",69,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSBAD TEST - X NOT SPECIFIED" -"RTN","utt5",71,0) +"RTN","utt5",70,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find X since it isn't indicated +"RTN","utt5",71,0) + Q "RTN","utt5",72,0) - Q + ; "RTN","utt5",73,0) - ; -"RTN","utt5",74,0) NVLDARG1 ; -"RTN","utt5",75,0) +"RTN","utt5",74,0) D CHKEQ^%ut(1) +"RTN","utt5",75,0) + Q "RTN","utt5",76,0) - Q + ; "RTN","utt5",77,0) - ; -"RTN","utt5",78,0) ISUTEST ; -"RTN","utt5",79,0) +"RTN","utt5",78,0) D CHKTF^%ut($$ISUTEST^%ut,"ISUTEST returned FALSE!") +"RTN","utt5",79,0) + Q "RTN","utt5",80,0) - Q + ; "RTN","utt5",81,0) - ; -"RTN","utt5",82,0) BADFORM1(X) ; @TEST should not be selected - arguments +"RTN","utt5",82,0) + ; ZEXCEPT: %ut - Newed in EN^%zu "RTN","utt5",83,0) - ; ZEXCEPT: %ut - Newed in EN^%zu + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",84,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",85,0) I $D(%utt6var) S %ut("ENT")="NEWSTYLE" S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADFORM1")="" -"RTN","utt5",86,0) +"RTN","utt5",85,0) D CHKEQ^%ut(4,3,"SHOULD NOT BE SELECTED - ARGUMENTS - BADFORM1") +"RTN","utt5",86,0) + Q "RTN","utt5",87,0) - Q + ; "RTN","utt5",88,0) - ; -"RTN","utt5",89,0) BADFORM2 ; ABC @TEST should not be selected - @TEST NOT FIRST -"RTN","utt5",90,0) +"RTN","utt5",89,0) ; ZEXCEPT: %ut - Newed in EN^%zu +"RTN","utt5",90,0) + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",91,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",92,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"BADFORM2")="" -"RTN","utt5",93,0) +"RTN","utt5",92,0) D CHKEQ^%ut(4,3,"SHOULD NOT BE SELECTED - @TEST NOT FIRST - BADFORM2") +"RTN","utt5",93,0) + Q "RTN","utt5",94,0) - Q + ; "RTN","utt5",95,0) - ; -"RTN","utt5",96,0) STARTUP ; +"RTN","utt5",96,0) + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",97,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",98,0) ; ZEXCEPT: KBANCOUNT created here, killed in SHUTDOWN -"RTN","utt5",99,0) +"RTN","utt5",98,0) I $D(%utt6var),$D(^TMP("%utt5",$J)) K ^TMP("%utt5",$J) -"RTN","utt5",100,0) +"RTN","utt5",99,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"STARTUP")="" -"RTN","utt5",101,0) +"RTN","utt5",100,0) ; following brought from %utt1, since only one STARTUP can RUN in a set +"RTN","utt5",101,0) + I '$D(%utt6var) D "RTN","utt5",102,0) - I '$D(%utt6var) D -"RTN","utt5",103,0) . S ^TMP($J,"%ut","STARTUP")="" -"RTN","utt5",104,0) +"RTN","utt5",103,0) . S KBANCOUNT=1 +"RTN","utt5",104,0) + . Q "RTN","utt5",105,0) - . Q + Q "RTN","utt5",106,0) - Q + ; "RTN","utt5",107,0) - ; -"RTN","utt5",108,0) SHUTDOWN ; +"RTN","utt5",108,0) + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",109,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",110,0) ; ZEXCEPT: KBANCOUNT created in STARTUP, killed here -"RTN","utt5",111,0) +"RTN","utt5",110,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"SHUTDOWN")="" -"RTN","utt5",112,0) +"RTN","utt5",111,0) ; following brought from %utt1, since only one SHUTDOWN can RUN in a set -"RTN","utt5",113,0) +"RTN","utt5",112,0) I '$D(%utt6var) D -"RTN","utt5",114,0) +"RTN","utt5",113,0) . K ^TMP($J,"%ut","STARTUP") -"RTN","utt5",115,0) +"RTN","utt5",114,0) . K KBANCOUNT -"RTN","utt5",116,0) +"RTN","utt5",115,0) . Q +"RTN","utt5",116,0) + Q "RTN","utt5",117,0) - Q + ; "RTN","utt5",118,0) - ; -"RTN","utt5",119,0) SETUP ; +"RTN","utt5",119,0) + ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 "RTN","utt5",120,0) - ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",121,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"SETUP")="" +"RTN","utt5",121,0) + Q "RTN","utt5",122,0) - Q + ; "RTN","utt5",123,0) - ; -"RTN","utt5",124,0) TEARDOWN ; -"RTN","utt5",125,0) +"RTN","utt5",124,0) ; ZEXCEPT: %utt6cnt,%utt6var - if present, NEWED following top entry of routine %utt6 -"RTN","utt5",126,0) +"RTN","utt5",125,0) I $D(%utt6var) S %utt6cnt=$G(%utt6cnt)+1,^TMP("%utt5",$J,%utt6cnt,"TEARDOWN")="" -"RTN","utt5",127,0) +"RTN","utt5",126,0) Q -"RTN","utt5",128,0) +"RTN","utt5",127,0) ; -"RTN","utt5",129,0) +"RTN","utt5",128,0) XTENT ; -"RTN","utt5",130,0) +"RTN","utt5",129,0) ;;OLDSTYLE; identify old style test indicator functionality -"RTN","utt5",131,0) +"RTN","utt5",130,0) ;;OLDSTYL1; identify old style test indicator 2 -"RTN","utt5",132,0) +"RTN","utt5",131,0) ;;BADCHKEQ; CHKEQ should fail on unequal value -"RTN","utt5",133,0) +"RTN","utt5",132,0) ;;BADCHKTF; CHKTF should fail on false value -"RTN","utt5",134,0) +"RTN","utt5",133,0) ;;BADERROR; throws an error on purpose -"RTN","utt5",135,0) +"RTN","utt5",134,0) ;;CALLFAIL; called FAIL to test it -"RTN","utt5",136,0) +"RTN","utt5",135,0) ;;LEAKSOK;check leaks should be ok -"RTN","utt5",137,0) +"RTN","utt5",136,0) ;;LEAKSBAD;check leaks with leak -"RTN","utt5",138,0) +"RTN","utt5",137,0) ;;NVLDARG1;check invalid arg in CHKEQ -"RTN","utt5",139,0) +"RTN","utt5",138,0) ;;ISUTEST;check ISUTEST inside unit test "RTN","utt6") -0^8^B31141903 +0^8^B30891565 "RTN","utt6",1,0) -%utt6 ;JLI - Unit tests for MUnit functionality ;08/10/15 14:30 +%utt6 ;JLI - Unit tests for MUnit functionality ;09/14/15 09:38 "RTN","utt6",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 12 "RTN","utt6",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt6",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","utt6",5,0) ; Original routine authored by Joel L. Ivey 05/2014-08/2015 +"RTN","utt6",5,0) + ; "RTN","utt6",6,0) ; "RTN","utt6",7,0) - ; -"RTN","utt6",8,0) ; This routine uses ZZUTJLI2 as a test routine, it does not include the routine as an extension, -"RTN","utt6",9,0) +"RTN","utt6",8,0) ; since it uses it for tests. +"RTN","utt6",9,0) + ; "RTN","utt6",10,0) - ; -"RTN","utt6",11,0) ; ZZUTJLI2 currently contains 3 tests (2 old style, 1 new style), it also specifies STARTUP and -"RTN","utt6",12,0) +"RTN","utt6",11,0) ; SHUTDOWN (should be 1 each) and SETUP and TEARDOWN (should be 3 each, 1 for each test) enteries, each of these -"RTN","utt6",13,0) +"RTN","utt6",12,0) ; creates an entry under the ^TMP("ZZUTJLI2" global node, indicating function then continues the process. -"RTN","utt6",14,0) +"RTN","utt6",13,0) ; Should be 2+3n entries (1+1 for STARTUP and SHUTDOWN, then 3 for each of the tests (SETUP, test, -"RTN","utt6",15,0) +"RTN","utt6",14,0) ; and TEARDOWN). +"RTN","utt6",15,0) + ; "RTN","utt6",16,0) - ; -"RTN","utt6",17,0) ; This first section is more of a functional test, since it checks the full unit test processing from both -"RTN","utt6",18,0) +"RTN","utt6",17,0) ; a command line and a GUI call approach. Data for analysis is saved under ^TMP("ZZUTJLI2_C", for command -"RTN","utt6",19,0) +"RTN","utt6",18,0) ; line and ^TMP("ZZUTJLI2_G", for gui processing. +"RTN","utt6",19,0) + ; "RTN","utt6",20,0) - ; -"RTN","utt6",21,0) ; The counts for the command line processing are based on the number of unit test tags -"RTN","utt6",22,0) +"RTN","utt6",21,0) ; determined for the GUI processing as well. The numbers are 2 (startup and shutdown) -"RTN","utt6",23,0) +"RTN","utt6",22,0) ; + 3 x the number of tests present. +"RTN","utt6",23,0) + ; "RTN","utt6",24,0) - ; -"RTN","utt6",25,0) ; run unit tests by command line -"RTN","utt6",26,0) +"RTN","utt6",25,0) N VERBOSE -"RTN","utt6",27,0) +"RTN","utt6",26,0) S VERBOSE=0 -"RTN","utt6",28,0) +"RTN","utt6",27,0) VERBOSE ; -"RTN","utt6",29,0) +"RTN","utt6",28,0) I '$D(VERBOSE) N VERBOSE S VERBOSE=1 -"RTN","utt6",30,0) +"RTN","utt6",29,0) N ZZUTCNT,JLICNT,JLIEXPCT,JLII,JLIX,ZZUTRSLT,%utt5,%utt6,%utt6var -"RTN","utt6",31,0) +"RTN","utt6",30,0) W !!,"RUNNING COMMAND LINE TESTS VIA DOSET^%ut",! -"RTN","utt6",32,0) +"RTN","utt6",31,0) D DOSET^%ut(1,VERBOSE) ; run `1 in M-UNIT TEST GROUP file +"RTN","utt6",32,0) + ; "RTN","utt6",33,0) - ; -"RTN","utt6",34,0) W !!!,"Running command line tests by RUNSET^%ut",! -"RTN","utt6",35,0) +"RTN","utt6",34,0) D RUNSET^%ut("TESTS FOR UNIT TEST ROUTINES") +"RTN","utt6",35,0) + ; "RTN","utt6",36,0) - ; -"RTN","utt6",37,0) ; Call GUISET to obtain list of tags via entry in M-UNIT TEST GROUP file -"RTN","utt6",38,0) +"RTN","utt6",37,0) ; silent to the user -"RTN","utt6",39,0) +"RTN","utt6",38,0) D GUISET^%ut(.%utt6,1) -"RTN","utt6",40,0) +"RTN","utt6",39,0) K ^TMP("%utt6_GUISET",$J) M ^TMP("%utt6_GUISET",$J)=@%utt6 +"RTN","utt6",40,0) + ; "RTN","utt6",41,0) - ; -"RTN","utt6",42,0) W !!!,"RUNNING COMMAND LINE UNIT TESTS FOR %utt5",! -"RTN","utt6",43,0) +"RTN","utt6",42,0) N ZZUTCNT,JLICNT,JLIEXPCT,JLII,JLIX,ZZUTRSLT +"RTN","utt6",43,0) + S ZZUTCNT=0 "RTN","utt6",44,0) - S ZZUTCNT=0 -"RTN","utt6",45,0) K ^TMP("%utt5",$J) ; kill any contents of data storage -"RTN","utt6",46,0) +"RTN","utt6",45,0) D EN^%ut("%utt5",VERBOSE) ; should do STARTUP(1x), then SETUP, test, TEARDOWN (each together 3x) and SHUTDOWN (1x) -"RTN","utt6",47,0) +"RTN","utt6",46,0) K ^TMP("%utt5_C",$J) M ^TMP("%utt5_C",$J)=^TMP("%utt5",$J) +"RTN","utt6",47,0) + ; "RTN","utt6",48,0) - ; -"RTN","utt6",49,0) ; now run unit tests by GUI - first determines unit test tags -"RTN","utt6",50,0) +"RTN","utt6",49,0) W !!!,"RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent",! -"RTN","utt6",51,0) +"RTN","utt6",50,0) S ZZUTCNT=0 -"RTN","utt6",52,0) +"RTN","utt6",51,0) K ^TMP("%utt5",$J),^TMP("%utt6",$J) -"RTN","utt6",53,0) +"RTN","utt6",52,0) D GUILOAD^%ut(.%utt6,"%utt5") -"RTN","utt6",54,0) +"RTN","utt6",53,0) M ^TMP("%utt6",$J)=@%utt6 -"RTN","utt6",55,0) +"RTN","utt6",54,0) S %utt6=$NA(^TMP("%utt6",$J)) -"RTN","utt6",56,0) +"RTN","utt6",55,0) ; then run each tag separately -"RTN","utt6",57,0) +"RTN","utt6",56,0) ; JLICNT is count of unit test tags, which can be determined for GUI call for each unit test tag -"RTN","utt6",58,0) +"RTN","utt6",57,0) S JLICNT=0 F JLII=1:1 S JLIX=$G(@%utt6@(JLII)) Q:JLIX="" I $P(JLIX,U,2)'="" S JLICNT=JLICNT+1 D GUINEXT^%ut(.ZZUTRSLT,$P(JLIX,U,2)_U_$P(JLIX,U)) -"RTN","utt6",59,0) +"RTN","utt6",58,0) ; and close it with a null routine name -"RTN","utt6",60,0) +"RTN","utt6",59,0) D GUINEXT^%ut(.ZZUTRSLT,"") -"RTN","utt6",61,0) +"RTN","utt6",60,0) K ^TMP("%utt5_G",$J) M ^TMP("%utt5_G",$J)=^TMP("%utt5",$J) -"RTN","utt6",62,0) +"RTN","utt6",61,0) S JLIEXPCT=2+(3*JLICNT) ; number of lines that should be in the global nodes for command line and GUI +"RTN","utt6",62,0) + ; "RTN","utt6",63,0) - ; -"RTN","utt6",64,0) W !!,"NOW RUNNING UNIT TESTS FOR %uttcovr",!! -"RTN","utt6",65,0) +"RTN","utt6",64,0) D EN^%ut("%uttcovr",VERBOSE) -"RTN","utt6",66,0) +"RTN","utt6",65,0) ; -"RTN","utt6",67,0) +"RTN","utt6",66,0) ; now run the unit tests in this routine -"RTN","utt6",68,0) +"RTN","utt6",67,0) W !!,"NOW RUNNING UNIT TESTS FOR %utt6",!! -"RTN","utt6",69,0) +"RTN","utt6",68,0) D EN^%ut("%utt6",VERBOSE) -"RTN","utt6",70,0) +"RTN","utt6",69,0) K ^TMP("%utt5",$J),^TMP("%utt5_C",$J),^TMP("%utt5_G",$J),^TMP("%utt6",$J),^TMP("%utt6_GUISET",$J) -"RTN","utt6",71,0) +"RTN","utt6",70,0) ; clean up after GUI calls as well -"RTN","utt6",72,0) +"RTN","utt6",71,0) K ^TMP("GUI-MUNIT",$J),^TMP("GUINEXT",$J),^TMP("MUNIT-%utRSLT",$J) -"RTN","utt6",73,0) +"RTN","utt6",72,0) Q +"RTN","utt6",73,0) + ; "RTN","utt6",74,0) ; "RTN","utt6",75,0) - ; -"RTN","utt6",76,0) ; WARNING -- WARNING -- WARNING -"RTN","utt6",77,0) +"RTN","utt6",76,0) ; If the number of NEW STYLE tests in %utt5 is increased (it is currently 1), then the following -"RTN","utt6",78,0) +"RTN","utt6",77,0) ; test will need to be updated to reflect the change(s) -"RTN","utt6",79,0) +"RTN","utt6",78,0) ; END OF WARNING -- END OF WARNING -- END OF WARNING +"RTN","utt6",79,0) + ; "RTN","utt6",80,0) - ; -"RTN","utt6",81,0) NEWSTYLE ; tests return of valid new style or @TEST indicators -"RTN","utt6",82,0) +"RTN","utt6",81,0) N LIST -"RTN","utt6",83,0) +"RTN","utt6",82,0) D NEWSTYLE^%ut1(.LIST,"%utt5") -"RTN","utt6",84,0) +"RTN","utt6",83,0) D CHKEQ^%ut(LIST,1,"Returned an incorrect number ("_LIST_") of New Style indicators - should be one") -"RTN","utt6",85,0) +"RTN","utt6",84,0) I LIST>0 D CHKEQ^%ut(LIST(1),"NEWSTYLE^identify new style test indicator functionality","Returned incorrect TAG^reason "_LIST(1)) -"RTN","utt6",86,0) +"RTN","utt6",85,0) I LIST>0 D CHKEQ^%ut($G(LIST(2)),"","Returned a value for LIST(2) - should not have any value (i.e., null)") +"RTN","utt6",86,0) + Q "RTN","utt6",87,0) - Q + ; "RTN","utt6",88,0) - ; -"RTN","utt6",89,0) CKGUISET ; -"RTN","utt6",90,0) +"RTN","utt6",89,0) ; ZEXCEPT: %utt6var - if present, is NEWed and created in code following VERBOSE +"RTN","utt6",90,0) + I '$D(%utt6var) Q "RTN","utt6",91,0) - I '$D(%utt6var) Q -"RTN","utt6",92,0) N MAX -"RTN","utt6",93,0) +"RTN","utt6",92,0) S MAX=$O(^TMP("%utt6_GUISET",$J,""),-1) -"RTN","utt6",94,0) +"RTN","utt6",93,0) D CHKTF^%ut(^TMP("%utt6_GUISET",$J,MAX)["%utt6^NEWSTYLE","GUISET returned incorrect list") +"RTN","utt6",94,0) + Q "RTN","utt6",95,0) - Q + ; "RTN","utt6",96,0) - ; -"RTN","utt6",97,0) CHKCMDLN ; check command line processing of %utt5 +"RTN","utt6",97,0) + ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag "RTN","utt6",98,0) - ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag + I '$D(%utt6var) Q "RTN","utt6",99,0) - I '$D(%utt6var) Q -"RTN","utt6",100,0) D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",101,0) +"RTN","utt6",100,0) D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",102,0) +"RTN","utt6",101,0) D CHKTF^%ut($O(^TMP("%utt5_C",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5_C",$J,1,""))_"' should be 'STARTUP'") -"RTN","utt6",103,0) +"RTN","utt6",102,0) D CHKTF^%ut($O(^TMP("%utt5_C",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_C",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") +"RTN","utt6",103,0) + Q "RTN","utt6",104,0) - Q + ; "RTN","utt6",105,0) - ; -"RTN","utt6",106,0) CHKGUI ; check GUI processing of %utt5 -"RTN","utt6",107,0) +"RTN","utt6",106,0) ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag -"RTN","utt6",108,0) +"RTN","utt6",107,0) I '$D(%utt6var) Q -"RTN","utt6",109,0) +"RTN","utt6",108,0) D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",110,0) +"RTN","utt6",109,0) D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) -"RTN","utt6",111,0) +"RTN","utt6",110,0) D CHKTF^%ut($O(^TMP("%utt5_G",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5Z_G",1,""))_"' should be 'STARTUP'") -"RTN","utt6",112,0) +"RTN","utt6",111,0) D CHKTF^%ut($O(^TMP("%utt5_G",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_G",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") -"RTN","utt6",113,0) +"RTN","utt6",112,0) Q -"RTN","utt6",114,0) +"RTN","utt6",113,0) ; -"RTN","utt6",115,0) +"RTN","utt6",114,0) XTENT ; -"RTN","utt6",116,0) +"RTN","utt6",115,0) ;;CHKCMDLN;check command line processing of %utt5 -"RTN","utt6",117,0) +"RTN","utt6",116,0) ;;CHKGUI;check GUI processing of %utt5 -"RTN","utt6",118,0) +"RTN","utt6",117,0) ;;CKGUISET;check list of tests returned by GUISET -"RTN","utt6",119,0) +"RTN","utt6",118,0) ;;NEWSTYLE;test return of valid new style or @TEST indicators "RTN","uttcovr") -0^9^B147322146 +0^9^B146530441 "RTN","uttcovr",1,0) -%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;08/10/15 14:31 +%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;09/14/15 09:35 "RTN","uttcovr",2,0) - ;;0.2;MASH UTILITIES;;;Build 10 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 12 "RTN","uttcovr",3,0) - ; + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","uttcovr",4,0) - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey -"RTN","uttcovr",5,0) ; Original routine authored by Joel L. Ivey +"RTN","uttcovr",5,0) + ; "RTN","uttcovr",6,0) ; "RTN","uttcovr",7,0) - ; -"RTN","uttcovr",8,0) ; ZEXCEPT: DTIME - if present the value is Kernel timeout for reads -"RTN","uttcovr",9,0) +"RTN","uttcovr",8,0) N RUNCODE,XCLUDE +"RTN","uttcovr",9,0) + ; "RTN","uttcovr",10,0) - ; -"RTN","uttcovr",11,0) ; Have it run the following entry points or, if no ^, call EN^%ut with routine name -"RTN","uttcovr",12,0) +"RTN","uttcovr",11,0) S RUNCODE(1)="^%utt1,%utt1,^%utt6,VERBOSE^%utt6,%uttcovr,^%ut,^%ut1,^%utcover" -"RTN","uttcovr",13,0) +"RTN","uttcovr",12,0) S RUNCODE("ENTRY^%uttcovr")="" -"RTN","uttcovr",14,0) +"RTN","uttcovr",13,0) I '(+$SY=47) D Q ; GT.M only! -"RTN","uttcovr",15,0) +"RTN","uttcovr",14,0) . W !,"This coverage analysis is currently only available in GT.M" -"RTN","uttcovr",16,0) +"RTN","uttcovr",15,0) . N VAL R !,"Do you want to run the same tests using MULTAPIS Y/N ? ",VAL:$G(DTIME,300) Q:'$T -"RTN","uttcovr",17,0) +"RTN","uttcovr",16,0) . I "Yy"[$E(VAL) D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",18,0) +"RTN","uttcovr",17,0) . Q -"RTN","uttcovr",19,0) +"RTN","uttcovr",18,0) ; Have the analysis EXCLUDE the following routines from coverage - unit test routines -"RTN","uttcovr",20,0) +"RTN","uttcovr",19,0) S XCLUDE(1)="%utt1,%utt2,%utt3,%utt4,%utt5,%utt6,%uttcovr" -"RTN","uttcovr",21,0) +"RTN","uttcovr",20,0) S XCLUDE(2)="%utf2hex" ; a GT.M system file, although it wasn't showing up anyway -"RTN","uttcovr",22,0) +"RTN","uttcovr",21,0) M ^TMP("%uttcovr",$J,"XCLUDE")=XCLUDE +"RTN","uttcovr",22,0) + D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) "RTN","uttcovr",23,0) - D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) + Q "RTN","uttcovr",24,0) - Q + ; "RTN","uttcovr",25,0) - ; -"RTN","uttcovr",26,0) ENTRY ; +"RTN","uttcovr",26,0) + K ^TMP("ENTRY^%uttcovr",$J,"VALS") "RTN","uttcovr",27,0) - K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",28,0) M ^TMP("ENTRY^%uttcovr",$J,"VALS")=^TMP("%ut",$J,"UTVALS") +"RTN","uttcovr",28,0) + K ^TMP("%ut",$J,"UTVALS") "RTN","uttcovr",29,0) - K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",30,0) ; these tests run outside of unit tests to handle CHKLEAKS calls not in unit tests -"RTN","uttcovr",31,0) +"RTN","uttcovr",30,0) ; they need data set, so they are called in here -"RTN","uttcovr",32,0) +"RTN","uttcovr",31,0) ; LEAKSOK ; -"RTN","uttcovr",33,0) +"RTN","uttcovr",32,0) N CODE,LOCATN,MYVALS,X,I -"RTN","uttcovr",34,0) +"RTN","uttcovr",33,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSOK TEST",MYVALS("X")="" -"RTN","uttcovr",35,0) +"RTN","uttcovr",34,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find no leaks -"RTN","uttcovr",36,0) +"RTN","uttcovr",35,0) ; LEAKSBAD ; -"RTN","uttcovr",37,0) +"RTN","uttcovr",36,0) N CODE,LOCATN,MYVALS,X -"RTN","uttcovr",38,0) +"RTN","uttcovr",37,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSBAD TEST - X NOT SPECIFIED" -"RTN","uttcovr",39,0) +"RTN","uttcovr",38,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find X since it isn't indicated -"RTN","uttcovr",40,0) +"RTN","uttcovr",39,0) ; try to run coverage -"RTN","uttcovr",41,0) +"RTN","uttcovr",40,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at 3",!!! -"RTN","uttcovr",42,0) +"RTN","uttcovr",41,0) D COV^%ut("%ut1","D EN^%ut(""%utt5"")",3) -"RTN","uttcovr",43,0) +"RTN","uttcovr",42,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at -1",!!! -"RTN","uttcovr",44,0) +"RTN","uttcovr",43,0) D COV^%ut("%ut1","D EN^%ut(""%utt5"")",-1) -"RTN","uttcovr",45,0) +"RTN","uttcovr",44,0) N RUNCODE S RUNCODE(1)="^%utt4,^%ut" -"RTN","uttcovr",46,0) +"RTN","uttcovr",45,0) N XCLUDE M XCLUDE=^TMP("%uttcovr",$J,"XCLUDE") -"RTN","uttcovr",47,0) +"RTN","uttcovr",46,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO MULTAPIS for %utt4 and %ut",!!! -"RTN","uttcovr",48,0) +"RTN","uttcovr",47,0) D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",49,0) +"RTN","uttcovr",48,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COVERAGE for %utt4 and %ut at 3",!!! -"RTN","uttcovr",50,0) +"RTN","uttcovr",49,0) D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) -"RTN","uttcovr",51,0) +"RTN","uttcovr",50,0) N GLT S GLT=$NA(^TMP("%uttcovr-text",$J)) K @GLT -"RTN","uttcovr",52,0) +"RTN","uttcovr",51,0) W !,"xxxxxxxxxxxxxxxxxxxx LISTING DATA VIA LIST",!!! -"RTN","uttcovr",53,0) +"RTN","uttcovr",52,0) D LIST^%utcover(.XCLUDE,3,GLT) ; get coverage for listing and trimdata in %utcover -"RTN","uttcovr",54,0) +"RTN","uttcovr",53,0) F I=1:1 Q:'$D(@GLT@(I)) W !,@GLT@(I) +"RTN","uttcovr",54,0) + K @GLT "RTN","uttcovr",55,0) - K @GLT -"RTN","uttcovr",56,0) ; restore unit test totals from before entry -"RTN","uttcovr",57,0) +"RTN","uttcovr",56,0) K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",58,0) +"RTN","uttcovr",57,0) M ^TMP("%ut",$J,"UTVALS")=^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",59,0) +"RTN","uttcovr",58,0) K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",60,0) +"RTN","uttcovr",59,0) W !,"xxxxxxxxxxxxxxxxxxxx Finished in ENTRY^%uttcovr",!!! +"RTN","uttcovr",60,0) + Q "RTN","uttcovr",61,0) - Q + ; "RTN","uttcovr",62,0) - ; -"RTN","uttcovr",63,0) RTNANAL ; @TEST - routine analysis -"RTN","uttcovr",64,0) +"RTN","uttcovr",63,0) N ROUS,GLB -"RTN","uttcovr",65,0) +"RTN","uttcovr",64,0) S ROUS("%utt4")="" -"RTN","uttcovr",66,0) +"RTN","uttcovr",65,0) S GLB=$NA(^TMP("%uttcovr-rtnanal",$J)) K @GLB -"RTN","uttcovr",67,0) +"RTN","uttcovr",66,0) D RTNANAL^%ut1(.ROUS,GLB) -"RTN","uttcovr",68,0) +"RTN","uttcovr",67,0) D CHKTF^%ut($D(@GLB@("%utt4","MAIN"))>1,"Not enough 'MAIN' nodes found") -"RTN","uttcovr",69,0) +"RTN","uttcovr",68,0) D CHKTF^%ut($G(@GLB@("%utt4","MAIN",2))["+$SY=47","Check for GT.M not found in expected line") -"RTN","uttcovr",70,0) +"RTN","uttcovr",69,0) D CHKTF^%ut($G(@GLB@("%utt4","MAIN",8))=" QUIT","Final QUIT not on expected line") -"RTN","uttcovr",71,0) +"RTN","uttcovr",70,0) K @GLB +"RTN","uttcovr",71,0) + Q "RTN","uttcovr",72,0) - Q + ; "RTN","uttcovr",73,0) - ; -"RTN","uttcovr",74,0) COVCOV ; @TEST - check COVCOV - remove seen lines -"RTN","uttcovr",75,0) +"RTN","uttcovr",74,0) N C,R -"RTN","uttcovr",76,0) +"RTN","uttcovr",75,0) S C=$NA(^TMP("%uttcovr_C",$J)) -"RTN","uttcovr",77,0) +"RTN","uttcovr",76,0) S R=$NA(^TMP("%uttcovr_R",$J)) -"RTN","uttcovr",78,0) +"RTN","uttcovr",77,0) S @C@("ROU1")="" -"RTN","uttcovr",79,0) +"RTN","uttcovr",78,0) S @C@("ROU2")="",@R@("ROU2")="" -"RTN","uttcovr",80,0) +"RTN","uttcovr",79,0) S @C@("ROU2","TAG1")="",@R@("ROU2","TAG1")="" -"RTN","uttcovr",81,0) +"RTN","uttcovr",80,0) S @C@("ROU2","TAG1",1)="AAA" -"RTN","uttcovr",82,0) +"RTN","uttcovr",81,0) S @C@("ROU2","TAG1",2)="AAA",@R@("ROU2","TAG1",2)="AAA" -"RTN","uttcovr",83,0) +"RTN","uttcovr",82,0) S @C@("ROU2","TAG1",3)="ABB",@R@("ROU2","TAG1",3)="ABB" -"RTN","uttcovr",84,0) +"RTN","uttcovr",83,0) S @C@("ROU2","TAG2",6)="ACC" -"RTN","uttcovr",85,0) +"RTN","uttcovr",84,0) S @C@("ROU2","TAG2",7)="ADD",@R@("ROU2","TAG2",7)="ADD" -"RTN","uttcovr",86,0) +"RTN","uttcovr",85,0) S @C@("ROU3","TAG1",2)="BAA",@R@("ROU3","TAG1",2)="BAA" -"RTN","uttcovr",87,0) +"RTN","uttcovr",86,0) S @C@("ROU3","TAG1",3)="CAA" -"RTN","uttcovr",88,0) +"RTN","uttcovr",87,0) S @C@("ROU3","TAG1",4)="DAA" -"RTN","uttcovr",89,0) +"RTN","uttcovr",88,0) S @C@("ROU3","TAG1",5)="EAA",@R@("ROU3","TAG1",5)="EAA" -"RTN","uttcovr",90,0) +"RTN","uttcovr",89,0) S @C@("ROU3","TAG1",6)="FAA",@R@("ROU3","TAG1",6)="FAA" -"RTN","uttcovr",91,0) +"RTN","uttcovr",90,0) D COVCOV^%ut1(C,R) -"RTN","uttcovr",92,0) +"RTN","uttcovr",91,0) D CHKTF^%ut($D(@C@("ROU2","TAG1",1)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",93,0) +"RTN","uttcovr",92,0) D CHKTF^%ut('$D(@C@("ROU2","TAG1",2)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",94,0) +"RTN","uttcovr",93,0) D CHKTF^%ut($D(@C@("ROU2","TAG2",6)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",95,0) +"RTN","uttcovr",94,0) D CHKTF^%ut('$D(@C@("ROU2","TAG2",7)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",96,0) +"RTN","uttcovr",95,0) D CHKTF^%ut($D(@C@("ROU3","TAG1",4)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",97,0) +"RTN","uttcovr",96,0) D CHKTF^%ut('$D(@C@("ROU3","TAG1",5)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",98,0) +"RTN","uttcovr",97,0) K @C,@R +"RTN","uttcovr",98,0) + Q "RTN","uttcovr",99,0) - Q + ; "RTN","uttcovr",100,0) - ; -"RTN","uttcovr",101,0) COVRPTGL ; @TEST - coverage report returning global -"RTN","uttcovr",102,0) +"RTN","uttcovr",101,0) N GL1,GL2,GL3,GL4 +"RTN","uttcovr",102,0) + S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 "RTN","uttcovr",103,0) - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 + S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 "RTN","uttcovr",104,0) - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 + S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 "RTN","uttcovr",105,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 + S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 "RTN","uttcovr",106,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 + D SETGLOBS(GL1,GL2) "RTN","uttcovr",107,0) - D SETGLOBS(GL1,GL2) -"RTN","uttcovr",108,0) D COVRPTGL^%ut1(GL1,GL2,GL3,GL4) -"RTN","uttcovr",109,0) +"RTN","uttcovr",108,0) D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES")),"0/9","Wrong number of lines covered f>>or ACTLINES") -"RTN","uttcovr",110,0) +"RTN","uttcovr",109,0) D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES",9))," QUIT CNT","Wrong result for last l>>ine not covered for ACTLINES") -"RTN","uttcovr",111,0) +"RTN","uttcovr",110,0) D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST")),"8/10","Wrong number of lines covered >>for CHEKTEST") -"RTN","uttcovr",112,0) +"RTN","uttcovr",111,0) D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST",39))," . Q","Wrong result for last line >>not covered for CHEKTEST") +"RTN","uttcovr",112,0) + K @GL1,@GL2,@GL3,@GL4 "RTN","uttcovr",113,0) - K @GL1,@GL2,@GL3,@GL4 + Q "RTN","uttcovr",114,0) - Q + ; "RTN","uttcovr",115,0) - ; -"RTN","uttcovr",116,0) COVRPT ; @TEST -"RTN","uttcovr",117,0) +"RTN","uttcovr",116,0) N GL1,GL2,GL3,GL4,VRBOSITY,GL5 +"RTN","uttcovr",117,0) + S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 "RTN","uttcovr",118,0) - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 + S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 "RTN","uttcovr",119,0) - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 + S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 "RTN","uttcovr",120,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 + S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 "RTN","uttcovr",121,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",122,0) S GL5=$NA(^TMP("%ut1-covrpt",$J)) K @GL5 +"RTN","uttcovr",122,0) + D SETGLOBS(GL1,GL2) "RTN","uttcovr",123,0) - D SETGLOBS(GL1,GL2) + S VRBOSITY=1 "RTN","uttcovr",124,0) - S VRBOSITY=1 + D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) "RTN","uttcovr",125,0) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",126,0) D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL5@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",127,0) +"RTN","uttcovr",126,0) D CHKEQ^%ut("42.11",$G(@GL5@(9)),"Verbosity 1 - not expected value for line 9") -"RTN","uttcovr",128,0) +"RTN","uttcovr",127,0) D CHKTF^%ut('$D(@GL5@(10)),"Verbosity 1 - unexpected data in 10th line") +"RTN","uttcovr",128,0) + ; "RTN","uttcovr",129,0) - ; + S VRBOSITY=2 "RTN","uttcovr",130,0) - S VRBOSITY=2 + D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) "RTN","uttcovr",131,0) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",132,0) D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",133,0) +"RTN","uttcovr",132,0) D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(11)),"Verbosity 2 - not expected value for 11th line") -"RTN","uttcovr",134,0) +"RTN","uttcovr",133,0) D CHKTF^%ut('$D(@GL5@(12)),"Verbosity 2 - unexpected data for 12th line") +"RTN","uttcovr",134,0) + ; "RTN","uttcovr",135,0) - ; + S VRBOSITY=3 "RTN","uttcovr",136,0) - S VRBOSITY=3 -"RTN","uttcovr",137,0) D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",138,0) +"RTN","uttcovr",137,0) D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",139,0) +"RTN","uttcovr",138,0) D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL5@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",140,0) +"RTN","uttcovr",139,0) D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",141,0) +"RTN","uttcovr",140,0) D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL5@(22)),"Verbosity 3 - unexpected value for line 22") -"RTN","uttcovr",142,0) +"RTN","uttcovr",141,0) D CHKTF^%ut('$D(@GL5@(23)),"Verbosity 3 - unexpected line 23") +"RTN","uttcovr",142,0) + ; "RTN","uttcovr",143,0) - ; -"RTN","uttcovr",144,0) K @GL1,@GL2,@GL3,@GL4,@GL5 +"RTN","uttcovr",144,0) + Q "RTN","uttcovr",145,0) - Q + ; "RTN","uttcovr",146,0) - ; -"RTN","uttcovr",147,0) COVRPTLS ; @TEST - coverage report returning text in global -"RTN","uttcovr",148,0) +"RTN","uttcovr",147,0) N GL1,GL2,GL3,GL4,VRBOSITY -"RTN","uttcovr",149,0) +"RTN","uttcovr",148,0) S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 -"RTN","uttcovr",150,0) +"RTN","uttcovr",149,0) S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",151,0) +"RTN","uttcovr",150,0) S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",152,0) +"RTN","uttcovr",151,0) S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",153,0) +"RTN","uttcovr",152,0) D SETGLOBS(GL1,GL2) -"RTN","uttcovr",154,0) +"RTN","uttcovr",153,0) S VRBOSITY=1 +"RTN","uttcovr",154,0) + D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) "RTN","uttcovr",155,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",156,0) D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL4@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",157,0) +"RTN","uttcovr",156,0) D CHKEQ^%ut("42.11",$G(@GL4@(9)),"Verbosity 1 - not expected value for line 9") -"RTN","uttcovr",158,0) +"RTN","uttcovr",157,0) D CHKTF^%ut('$D(@GL4@(10)),"Verbosity 1 - unexpected data in 10th line") +"RTN","uttcovr",158,0) + K @GL4 "RTN","uttcovr",159,0) - K @GL4 + ; "RTN","uttcovr",160,0) - ; -"RTN","uttcovr",161,0) S VRBOSITY=2 +"RTN","uttcovr",161,0) + D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) "RTN","uttcovr",162,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",163,0) D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",164,0) +"RTN","uttcovr",163,0) D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(11)),"Verbosity 2 - not expected value for 11th line") -"RTN","uttcovr",165,0) +"RTN","uttcovr",164,0) D CHKTF^%ut('$D(@GL4@(12)),"Verbosity 2 - unexpected data for 12th line") -"RTN","uttcovr",166,0) +"RTN","uttcovr",165,0) K @GL4 +"RTN","uttcovr",166,0) + ; "RTN","uttcovr",167,0) - ; -"RTN","uttcovr",168,0) S VRBOSITY=3 -"RTN","uttcovr",169,0) +"RTN","uttcovr",168,0) D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",170,0) +"RTN","uttcovr",169,0) D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",171,0) +"RTN","uttcovr",170,0) D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL4@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",172,0) +"RTN","uttcovr",171,0) D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",173,0) +"RTN","uttcovr",172,0) D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL4@(22)),"Verbosity 3 - unexpected value for line 22") -"RTN","uttcovr",174,0) +"RTN","uttcovr",173,0) D CHKTF^%ut('$D(@GL4@(23)),"Verbosity 3 - unexpected line 23") +"RTN","uttcovr",174,0) + ; "RTN","uttcovr",175,0) - ; -"RTN","uttcovr",176,0) K @GL1,@GL2,@GL3,@GL4 +"RTN","uttcovr",176,0) + Q "RTN","uttcovr",177,0) - Q + ; "RTN","uttcovr",178,0) - ; -"RTN","uttcovr",179,0) TRIMDATA ; @TEST - TRIMDATA in %utcover -"RTN","uttcovr",180,0) +"RTN","uttcovr",179,0) N GL1,XCLUD -"RTN","uttcovr",181,0) +"RTN","uttcovr",180,0) S GL1=$NA(^TMP("%uttcovr-trimdata",$J)) K @GL1 -"RTN","uttcovr",182,0) +"RTN","uttcovr",181,0) S @GL1@("GOOD",1)="1" -"RTN","uttcovr",183,0) +"RTN","uttcovr",182,0) S @GL1@("BAD",1)="1" -"RTN","uttcovr",184,0) +"RTN","uttcovr",183,0) S XCLUD("BAD")="" -"RTN","uttcovr",185,0) +"RTN","uttcovr",184,0) D TRIMDATA^%utcover(.XCLUD,GL1) -"RTN","uttcovr",186,0) +"RTN","uttcovr",185,0) D CHKTF^%ut($D(@GL1@("GOOD")),"GOOD ENTRY WAS REMOVED") -"RTN","uttcovr",187,0) +"RTN","uttcovr",186,0) D CHKTF^%ut('$D(@GL1@("BAD")),"ENTRY WAS NOT TRIMMED") -"RTN","uttcovr",188,0) +"RTN","uttcovr",187,0) K @GL1,XCLUD +"RTN","uttcovr",188,0) + Q "RTN","uttcovr",189,0) - Q + ; "RTN","uttcovr",190,0) - ; -"RTN","uttcovr",191,0) LIST ; @TEST - LIST in %utcover -"RTN","uttcovr",192,0) +"RTN","uttcovr",191,0) N GL1,GLT S GL1=$NA(^TMP("%uttcovr-list",$J)),GLT=$NA(^TMP("%uttcovr-text",$J)) -"RTN","uttcovr",193,0) +"RTN","uttcovr",192,0) S @GL1@("%ut1")="89/160" -"RTN","uttcovr",194,0) +"RTN","uttcovr",193,0) S @GL1@("%ut1","%ut1")="2/2" -"RTN","uttcovr",195,0) +"RTN","uttcovr",194,0) S @GL1@("%ut1","ACTLINES")="0/8" +"RTN","uttcovr",195,0) + S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" "RTN","uttcovr",196,0) - S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" + S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" "RTN","uttcovr",197,0) - S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" + S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" "RTN","uttcovr",198,0) - S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" + S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" "RTN","uttcovr",199,0) - S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" + S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" "RTN","uttcovr",200,0) - S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" + S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" "RTN","uttcovr",201,0) - S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" + S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" "RTN","uttcovr",202,0) - S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" + S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" "RTN","uttcovr",203,0) - S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",204,0) S @GL1@("%ut1","CHECKTAG")="11/11" -"RTN","uttcovr",205,0) +"RTN","uttcovr",204,0) S @GL1@("%ut1","CHEKTEST")="10/10" -"RTN","uttcovr",206,0) +"RTN","uttcovr",205,0) N XCLUD S XCLUD("%utt1")="" -"RTN","uttcovr",207,0) +"RTN","uttcovr",206,0) D LIST^%utcover(.XCLUD,1,GLT,GL1) -"RTN","uttcovr",208,0) +"RTN","uttcovr",207,0) D CHKEQ^%ut("Routine %ut1 89 out of 160 lines covered (55%)",$G(@GLT@(3)),"Verbosity 1 - Unexpected text for line 3") -"RTN","uttcovr",209,0) +"RTN","uttcovr",208,0) D CHKEQ^%ut("Overall Analysis 89 out of 160 lines covered (55% coverage)",$G(@GLT@(6)),"Verbosity 1 - unexpected text for line 6") -"RTN","uttcovr",210,0) +"RTN","uttcovr",209,0) D CHKTF^%ut('$D(@GLT@(7)),"Verbosity 1 - Unexpected line 7 present") +"RTN","uttcovr",210,0) + K @GLT "RTN","uttcovr",211,0) - K @GLT + ; "RTN","uttcovr",212,0) - ; -"RTN","uttcovr",213,0) D LIST^%utcover(.XCLUD,2,GLT,GL1) -"RTN","uttcovr",214,0) +"RTN","uttcovr",213,0) D CHKEQ^%ut(" - Summary",$G(@GLT@(4)),"Verbosity 2 - unexpected text at line 4") -"RTN","uttcovr",215,0) +"RTN","uttcovr",214,0) D CHKEQ^%ut(" Tag ACTLINES^%ut1 0 out of 8 lines covered",$G(@GLT@(6)),"Verbosity 2 - unexpected text at line 6") -"RTN","uttcovr",216,0) +"RTN","uttcovr",215,0) D CHKEQ^%ut(" Tag CHEKTEST^%ut1 10 out of 10 lines covered",$G(@GLT@(8)),"Verbosity 2 - unexpected text at line 8") -"RTN","uttcovr",217,0) +"RTN","uttcovr",216,0) D CHKTF^%ut($D(@GLT@(14)),"Verbosity 2 - expected line at line 14") -"RTN","uttcovr",218,0) +"RTN","uttcovr",217,0) D CHKTF^%ut('$D(@GLT@(15)),"Verbosity 2 - unexpected line at line 15") -"RTN","uttcovr",219,0) +"RTN","uttcovr",218,0) K @GLT +"RTN","uttcovr",219,0) + ; "RTN","uttcovr",220,0) - ; -"RTN","uttcovr",221,0) D LIST^%utcover(.XCLUD,3,GLT,GL1) -"RTN","uttcovr",222,0) +"RTN","uttcovr",221,0) D CHKEQ^%ut(" Tag %ut1^%ut1 2 out of 2 lines covered",$G(@GLT@(5)),"Verbosity 3 - Incorrect text at line 5") -"RTN","uttcovr",223,0) +"RTN","uttcovr",222,0) D CHKEQ^%ut(" ACTLINES+9 QUIT CNT",$G(@GLT@(15)),"Verbosity 3 - incorrect line 15") -"RTN","uttcovr",224,0) +"RTN","uttcovr",223,0) D CHKTF^%ut($D(@GLT@(31)),"Verbosity 3 - expected data in line 31") -"RTN","uttcovr",225,0) +"RTN","uttcovr",224,0) D CHKTF^%ut('$D(@GLT@(32)),"Verbosity 3 - did not expect a line 32") +"RTN","uttcovr",225,0) + ; "RTN","uttcovr",226,0) - ; -"RTN","uttcovr",227,0) K @GL1,@GLT +"RTN","uttcovr",227,0) + Q "RTN","uttcovr",228,0) - Q -"RTN","uttcovr",229,0) ; -"RTN","uttcovr",230,0) +"RTN","uttcovr",229,0) SETGLOBS(GL1,GL2) ; -"RTN","uttcovr",231,0) +"RTN","uttcovr",230,0) S @GL1@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",232,0) +"RTN","uttcovr",231,0) S @GL1@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",233,0) +"RTN","uttcovr",232,0) S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",234,0) +"RTN","uttcovr",233,0) S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",235,0) +"RTN","uttcovr",234,0) S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",236,0) +"RTN","uttcovr",235,0) S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",237,0) +"RTN","uttcovr",236,0) S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",238,0) +"RTN","uttcovr",237,0) S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",239,0) +"RTN","uttcovr",238,0) S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",240,0) +"RTN","uttcovr",239,0) S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",241,0) +"RTN","uttcovr",240,0) S @GL1@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",242,0) +"RTN","uttcovr",241,0) S @GL1@("%ut1","CHEKTEST",0)="CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list." -"RTN","uttcovr",243,0) +"RTN","uttcovr",242,0) S @GL1@("%ut1","CHEKTEST",13)=" N I,LIST" -"RTN","uttcovr",244,0) +"RTN","uttcovr",243,0) S @GL1@("%ut1","CHEKTEST",14)=" S I=$L($T(@(U_%utROU))) I I<0 Q ""-1^Invalid Routine Name""" -"RTN","uttcovr",245,0) +"RTN","uttcovr",244,0) S @GL1@("%ut1","CHEKTEST",31)=" D NEWSTYLE(.LIST,%utROU)" -"RTN","uttcovr",246,0) +"RTN","uttcovr",245,0) S @GL1@("%ut1","CHEKTEST",32)=" F I=1:1:LIST S %ut(""ENTN"")=%ut(""ENTN"")+1,%utUETRY(%ut(""ENTN""))=$P(LIST(I),U),%utUETRY(%ut(""ENTN""),""NAME"")=$P(LIST(I),U,2,99)" -"RTN","uttcovr",247,0) +"RTN","uttcovr",246,0) S @GL1@("%ut1","CHEKTEST",37)=" N %utUI F %utUI=1:1 S %ut(""ELIN"")=$T(@(""XTENT+""_%utUI_""^""_%utROU)) Q:$P(%ut(""ELIN""),"";"",3)="""" D" -"RTN","uttcovr",248,0) +"RTN","uttcovr",247,0) S @GL1@("%ut1","CHEKTEST",38)=" . S %ut(""ENTN"")=%ut(""ENTN"")+1,%utUETRY(%ut(""ENTN""))=$P(%ut(""ELIN""),"";"",3),%utUETRY(%ut(""ENTN""),""NAME"")=$P(%ut(""ELIN""),"";"",4)" -"RTN","uttcovr",249,0) +"RTN","uttcovr",248,0) S @GL1@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",250,0) +"RTN","uttcovr",249,0) S @GL1@("%ut1","CHEKTEST",41)=" QUIT" -"RTN","uttcovr",251,0) +"RTN","uttcovr",250,0) S @GL1@("%ut1","CHEKTEST",9)=" S %ut(""ENTN"")=0 ; Number of test, sub to %utUETRY." -"RTN","uttcovr",252,0) +"RTN","uttcovr",251,0) S @GL2@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",253,0) +"RTN","uttcovr",252,0) S @GL2@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",254,0) +"RTN","uttcovr",253,0) S @GL2@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",255,0) +"RTN","uttcovr",254,0) S @GL2@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",256,0) +"RTN","uttcovr",255,0) S @GL2@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",257,0) +"RTN","uttcovr",256,0) S @GL2@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",258,0) +"RTN","uttcovr",257,0) S @GL2@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",259,0) +"RTN","uttcovr",258,0) S @GL2@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",260,0) +"RTN","uttcovr",259,0) S @GL2@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",261,0) +"RTN","uttcovr",260,0) S @GL2@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",262,0) +"RTN","uttcovr",261,0) S @GL2@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",263,0) +"RTN","uttcovr",262,0) S @GL2@("%ut1","CHEKTEST",38)=" . S %ut(""ENTN"")=%ut(""ENTN"")+1,%utUETRY(%ut(""ENTN""))=$P(%ut(""ELIN""),"";"",3),%utUETRY(%ut(""ENTN""),""NAME"")=$P(%ut(""ELIN""),"";"",4)" -"RTN","uttcovr",264,0) +"RTN","uttcovr",263,0) S @GL2@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",265,0) +"RTN","uttcovr",264,0) Q -"RTN","uttcovr",266,0) +"RTN","uttcovr",265,0) ; "SEC","^DIC",17.9001,17.9001,0,"AUDIT") @ diff --git a/Routines/%ut.m b/Routines/%ut.m index f93d324..bac9962 100644 --- a/Routines/%ut.m +++ b/Routines/%ut.m @@ -1,7 +1,6 @@ -%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;08/10/15 14:31 +%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;09/14/15 09:38 ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Joel L. Ivey as XTMUNIT while working for U.S. Department of Veterans Affairs 2003-2012 ; Includes addition of %utVERB and %utBREAK arguments and code related to them as well as other substantial additions authored by Sam Habiel 07/2013?04/2014 ; @@ -413,5 +412,6 @@ GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - calle . D @("TEARDOWN^"_%utROUT) . Q S @%ut("RSLT")@(1)=%ut("CHK")_XTGUISEP_(%ut("CNT")-1-%utERR)_XTGUISEP_%utERR + K ^TMP("%ut",$J,"UTVALS") Q ; diff --git a/Routines/%ut1.m b/Routines/%ut1.m index 9a36749..f24350c 100644 --- a/Routines/%ut1.m +++ b/Routines/%ut1.m @@ -1,7 +1,6 @@ -%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;08/10/15 14:32 - ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey +%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;09/14/15 09:37 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 7 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Joel L. Ivey as XTMUNIT1 while working for U.S. Department of Veterans Affairs 2003-2012 ; Includes addition of original COV entry and code related coverage analysis as well as other substantial additions authored by Sam Habiel 07/2013?04/2014 ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 diff --git a/Routines/%utcover.m b/Routines/%utcover.m index 6dcb468..6634d41 100644 --- a/Routines/%utcover.m +++ b/Routines/%utcover.m @@ -1,7 +1,6 @@ -%utcover ;JLI - generic coverage and unit test runner ;08/10/15 14:32 - ;;0.2;MASH UTILITIES;; - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey +%utcover ;JLI - generic coverage and unit test runner ;09/14/15 09:37 + ;;0.2;MASH UTILITIES;;Sep 14, 2015 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Joel L. Ivey ; D EN^%ut("%uttcovr") ; unit tests diff --git a/Routines/%utt1.m b/Routines/%utt1.m index 32545c0..b87a7bd 100644 --- a/Routines/%utt1.m +++ b/Routines/%utt1.m @@ -1,7 +1,6 @@ -%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;08/10/15 14:32 - ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey +%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;09/14/15 09:38 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 7 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 ; @@ -102,8 +101,6 @@ T7 ; Make sure we write to principal even though we are on another device ; Now open back the file, and read the hello, but open in read only so ; M-Unit will error out if it will write something out there. ; - ; Per VISTA conventions, current IO device should be IO, old is IO(0). - ; I +$SY=0 O D:"R" I +$SY=47 O D:(readonly) U D diff --git a/Routines/%utt2.m b/Routines/%utt2.m index 31fc7b3..eb7ee67 100644 --- a/Routines/%utt2.m +++ b/Routines/%utt2.m @@ -1,7 +1,6 @@ -%utt2 ; VEN/SMH - Bad Ass Continuation of Unit Tests;08/10/15 14:29 - ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey +%utt2 ; VEN/SMH - Bad Ass Continuation of Unit Tests;09/14/15 09:38 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 7 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Sam H. Habiel ; Modifications made by Joel L. Ivey 05/2014-08/2015 ; diff --git a/Routines/%utt3.m b/Routines/%utt3.m index 0337df7..46f0f1b 100644 --- a/Routines/%utt3.m +++ b/Routines/%utt3.m @@ -1,7 +1,6 @@ -%utt3 ; VEN/SMH-JLI - Unit Tests Coverage Tests;08/10/15 14:29 - ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey +%utt3 ; VEN/SMH-JLI - Unit Tests Coverage Tests;09/14/15 09:38 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 7 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 ; diff --git a/Routines/%utt4.m b/Routines/%utt4.m index c09c53f..2a711b4 100644 --- a/Routines/%utt4.m +++ b/Routines/%utt4.m @@ -1,7 +1,6 @@ -%utt4 ; VEN/SMH/JLI - Coverage Test Runner;08/10/15 14:30 - ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey +%utt4 ; VEN/SMH/JLI - Coverage Test Runner;09/14/15 09:38 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 7 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 ; diff --git a/Routines/%utt5.m b/Routines/%utt5.m index c7a23bb..d8b83fd 100644 --- a/Routines/%utt5.m +++ b/Routines/%utt5.m @@ -1,7 +1,6 @@ -%utt5 ;JLI - test for aspects of MUnit functionality ;08/10/15 14:30 - ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey +%utt5 ;JLI - test for aspects of MUnit functionality ;09/14/15 09:38 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 7 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Joel L. Ivey ; Q diff --git a/Routines/%utt6.m b/Routines/%utt6.m index 03f812d..6ff9888 100644 --- a/Routines/%utt6.m +++ b/Routines/%utt6.m @@ -1,7 +1,6 @@ -%utt6 ;JLI - Unit tests for MUnit functionality ;08/10/15 14:30 - ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey +%utt6 ;JLI - Unit tests for MUnit functionality ;09/14/15 09:38 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 7 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Joel L. Ivey 05/2014-08/2015 ; ; diff --git a/Routines/%uttcovr.m b/Routines/%uttcovr.m index 96639f9..6d84de1 100644 --- a/Routines/%uttcovr.m +++ b/Routines/%uttcovr.m @@ -1,7 +1,6 @@ -%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;08/10/15 14:31 - ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey +%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;09/14/15 09:35 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 7 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Joel L. Ivey ; ; diff --git a/Routines/ZZUTPOST.m b/Routines/ZZUTPOST.m index 246af73..556e698 100644 --- a/Routines/ZZUTPOST.m +++ b/Routines/ZZUTPOST.m @@ -1,8 +1,7 @@ -%utPOST ;VEN-SMH/JLI - post install for M-Unit Test software ;08/10/15 14:34 +%utPOST ;VEN-SMH/JLI - post install for M-Unit Test software ;09/14/15 12:39 ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey - ; Original routine authored by Sam H. Habiel 07/2013?04/2014 + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) + ; Original routine authored by Sam H. Habiel 07/2013-04/2014 ; Additions and modifications made by Joel L. Ivey 05/2014-08/2015 ; N X,I diff --git a/Routines/ZZUTPRE.m b/Routines/ZZUTPRE.m index 76f42ea..6352891 100644 --- a/Routines/ZZUTPRE.m +++ b/Routines/ZZUTPRE.m @@ -1,7 +1,6 @@ -%utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;08/10/15 14:35 +%utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;09/14/15 12:39 ;;0.2;MASH UTILITIES;;;Build 7 - ; - ; Submitted to OSEHRA 08/10/2015 by Joel L. Ivey + ; Submitted to OSEHRA Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 ; ;