diff --git a/151208_MUNIT_CACHE_INSTALL_LOG.TXT b/151208_MUNIT_CACHE_INSTALL_LOG.TXT new file mode 100644 index 0000000..d531e45 --- /dev/null +++ b/151208_MUNIT_CACHE_INSTALL_LOG.TXT @@ -0,0 +1,1497 @@ +VISTA2A>D ^XUP + +Setting up programmer environment +This is a TEST account. + +Terminal Type set to: C-VT100 + +Select OPTION NAME: EVE + 1 EVE Systems Manager Menu + 2 EVENT CAPTURE ECX ECS MAINTENANCE Event Capture + 3 EVENT CAPTURE (ECS) EXTRACT AU ECX ECS SOURCE AUDIT Event Capture +(ECS) Extract Audit + 4 EVENT CAPTURE DATA ENTRY ECENTER Event Capture Data Entry + 5 EVENT CAPTURE EXTRACT ECXEC Event Capture Extract +Press to see more, '^' to exit this list, OR +CHOOSE 1-5: 1 EVE Systems Manager Menu +Select Systems Manager Menu Option: PROgrammer Options +Select Programmer Options Option: KIDS Kernel Installation & Distribution Syste +m + + Edits and Distribution ... + Utilities ... + Installation ... + Patch Monitor Main Menu ... + +Select Kernel Installation & Distribution System Option: INStallation + + 1 Load a Distribution + 2 Verify Checksums in Transport Global + 3 Print Transport Global + 4 Compare Transport Global to Current System + 5 Backup a Transport Global + 6 Install Package(s) + Restart Install of Package(s) + Unload a Distribution + +Select Installation Option: 1 Load a Distribution +Enter a Host File: C:\TEMP\M\MASH_0.3.0_151207.KID + +KIDS Distribution saved on Dec 07, 2015@17:14:06 +Comment: Update with coverage for Cache systems + +This Distribution contains Transport Globals for the following Package(s): + MASH*0.3*0 +Distribution OK! + +Want to Continue with Load? YES// +Loading Distribution... + + MASH*0.3*0 +Use INSTALL NAME: MASH*0.3*0 to install this Distribution. + + 1 Load a Distribution + 2 Verify Checksums in Transport Global + 3 Print Transport Global + 4 Compare Transport Global to Current System + 5 Backup a Transport Global + 6 Install Package(s) + Restart Install of Package(s) + Unload a Distribution + +Select Installation Option: 6 Install Package(s) +Select INSTALL NAME: MASH*0.3*0 Loaded from Distribution 12/8/15@09:23: +07 + => Update with coverage for Cache systems ;Created on Dec 07, 2015@17:14 + +This Distribution was loaded on Dec 08, 2015@09:23:07 with header of + Update with coverage for Cache systems ;Created on Dec 07, 2015@17:14:06 + It consisted of the following Install(s): + MASH*0.3*0 +Checking Install for Package MASH*0.3*0 + +Install Questions for MASH*0.3*0 + +Incoming Files: + 17.9001 M-UNIT TEST GROUP (including data) +Want KIDS to Rebuild Menu Trees Upon Completion of Install? NO// NO +Want KIDS to INHIBIT LOGONs during the install? NO// NO +Want to DISABLE Scheduled Options, Menu Options, and Protocols? NO// NO + +Enter the Device you want to print the Install messages. +You can queue the install by enter a 'Q' at the device prompt. +Enter a '^' to abort the install. + +DEVICE: HOME// Console (Cache' on Windows) + Install Started for MASH*0.3*0 : + Dec 08, 2015@09:57:53 +Build Distribution Date: Dec 07, 2015 + + Installing Routines: + Dec 08, 2015@09:57:53 + + Running Pre-Install Routine: ^ZZUTPRE + + Installing Data Dictionaries: + Dec 08, 2015@09:57:53 + + Installing Data: + Dec 08, 2015@09:57:53 + + Installing PACKAGE COMPONENTS: + + Installing REMOTE PROCEDURE + + Installing OPTION + Dec 08, 2015@09:57:53 + +Running Post-Install Routine: ^ZZUTPOST +Routine: ut Loaded, Saved as %ut +Routine: ut1 Loaded, Saved as %ut1 +Routine: utcover Loaded, Saved as %utcover +Routine: utt1 Loaded, Saved as %utt1 +Routine: utt2 Loaded, Saved as %utt2 +Routine: utt3 Loaded, Saved as %utt3 +Routine: utt4 Loaded, Saved as %utt4 +Routine: utt5 Loaded, Saved as %utt5 +Routine: utt6 Loaded, Saved as %utt6 +Routine: uttcovr Loaded, Saved as %uttcovr + + Updating Routine file... + + Updating KIDS files... + + MASH*0.3*0 Installed. + Dec 08, 2015@09:57:53 + + NO Install Message sent + +Install Completed + + 1 Load a Distribution + 2 Verify Checksums in Transport Global + 3 Print Transport Global + 4 Compare Transport Global to Current System + 5 Backup a Transport Global + 6 Install Package(s) + Restart Install of Package(s) + Unload a Distribution + +Select Installation Option: ^PG Programmer mode + + ------------------ START OF ADDED COMMENT ---------------------- + ---- RUNNING THE BASIC UNIT TESTS - Note these do throw expected errors ---- + ----- Also, GTM invalid function names messages have been removed ----- + ----- they won't appear in subsequent runs ----- + ------------------- END OF ADDED COMMMENT ---------------------- + +VISTA2A>D ^%utt1 + +T1 - - Make sure Start-up Ran.----------------------------------------- [OK] +T2 - - Make sure Set-up runs.------------------------------------------ [OK] +T3 - - Make sure Teardown runs.---------------------------------------- [OK] +T4 - Entry point using XTMENT.----------------------------------------- [OK] +T5 - Error count check +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +.---------------------------------------------------------------------- [FAIL] +T6 - Succeed Entry Point...-------------------------------------------- [OK] +T7 - Make sure we write to principal even though we are on another device..[OK] +T8 - If IO starts with another device, write to that device as if it's the prici +pal device.------------------------------------------------------------ [OK] +COVRPTGL - coverage report returning global....------------------------ [OK] +T11 - An @TEST Entry point in Another Routine invoked through XTROU offsets.[OK] +T12 - An XTENT offset entry point in Another Routine invoked through XTROU offse +ts.-------------------------------------------------------------------- [OK] +MAIN - - Test coverage calculations +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] +NEWSTYLE - identify new style test indicator functionality.------------ [OK] +OLDSTYLE - identify old style test indicator functionality..---------- [OK] +OLDSTYL1 - identify old style test indicator 2.----------------------- [OK] +BADCHKEQ - CHKEQ should fail on unequal value +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADCHKTF - CHKTF should fail on false value +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADERROR - throws an error on purpose +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q +----------------------------------------------------------------------- [FAIL] +CALLFAIL - called FAIL to test it +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it +----------------------------------------------------------------------- [FAIL] +LEAKSOK - check leaks should be ok------------------------------------- [OK] +LEAKSBAD - check leaks with leak +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X +----------------------------------------------------------------------- [FAIL] +NVLDARG1 - check invalid arg in CHKEQ +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +----------------------------------------------------------------------- [FAIL] +ISUTEST - check ISUTEST inside unit test.------------------------------ [OK] +SETROUS - - generate array with indices of routines to exclude......--- [OK] +CHKCMDLN - check command line processing of %utt5---------------------- [OK] +CHKGUI - check GUI processing of %utt5--------------------------------- [OK] +CKGUISET - check list of tests returned by GUISET---------------------- [OK] +NEWSTYLE - test return of valid new style or @TEST indicators...------- [OK] +RTNANAL - - routine analysis...---------------------------------------- [OK] +COVCOV - - check COVCOV - remove seen lines......---------------------- [OK] +COVRPT...........------------------------------------------------------ [OK] +COVRPTLS - - coverage report returning text in global...........------- [OK] +TRIMDATA - - TRIMDATA in %utcover..------------------------------------ [OK] +LIST - - LIST in %utcover............---------------------------------- [OK] +CACHECOV - - set up routine for analysis in globals..------------------ [OK] +LINEDATA - - convert code line to based on tags and offset, and identify active +code lines............------------------------------------------------- [OK] +TOTAGS - - convert from lines of code by line number to lines ordered by tag, li +ne from tag, and only not covered...........--------------------------- [OK] + +Ran 6 Routines, 37 Entry Tags +Checked 113 tests, with 7 failures and encountered 1 error. + + ------------------ START OF ADDED COMMENT ---------------------- + Running the %utt6 routine from the top runs a number of different + entry points as unit tests + ------------------- END OF ADDED COMMMENT ---------------------- + +VISTA2A>D ^%utt6 + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + + ------------------ START OF ADDED COMMENT ---------------------- + Running %uttcovr from the top of the routine runs coverage by + calling a number of unit tests from different entry points so + that each of them is included in the analysis. Looking at + this shows how to run many different entry points in one + coverage analysis, as well as removing unit tests that may + have the same base namespace from the displayed analysis. + ------------------- END OF ADDED COMMMENT ---------------------- + +VISTA2A>d ^%uttcovr + +------------------- RUNNING %utt1 -------------------.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +................. +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 6 Routines, 37 Entry Tags +Checked 109 tests, with 7 failures and encountered 1 error. + +------------------- RUNNING %uttcovr -------------------........................ +.............................................. + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ENTRY^%uttcovr ------------------- +LEAKSBAD TEST - X NOT SPECIFIED VARIABLE LEAK: X +xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at 3 + +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. +xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at -1 + +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. +xxxxxxxxxxxxxxxxxxxx GOING TO MULTAPIS for %utt4 and %ut + +------------------- RUNNING ^%ut ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%utt4 ------------------- +MAIN - - Test coverage calculations +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] + +Ran 1 Routine, 1 Entry Tag +Checked 4 tests, with 0 failures and encountered 0 errors. + +------------ SUMMARY ------------ +Ran 2 Routines, 6 Entry Tags +Checked 13 tests, with 0 failures and encountered 0 errors. +xxxxxxxxxxxxxxxxxxxx GOING TO COVERAGE for %utt4 and %ut at 3 + +------------------- RUNNING ^%ut ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + + ------------------ START OF ADDED COMMENT ---------------------- + %utt4 contains unit tests to run coverage analysis on the + %utt3 routine from the COV^%ut API, while %uttcovr runs + all of the analyses from the COVERAGE^%utcover API. + ------------------- END OF ADDED COMMMENT ---------------------- + +------------------- RUNNING ^%utt4 ------------------- +MAIN - - Test coverage calculations +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] + +Ran 1 Routine, 1 Entry Tag +Checked 4 tests, with 0 failures and encountered 0 errors. + +------------ SUMMARY ------------ +Ran 2 Routines, 6 Entry Tags +Checked 13 tests, with 0 failures and encountered 0 errors. + +Routine %utt3 (73.68%) 14 out of 19 lines covered + - Detailed Breakdown + Tag %utt3^%utt3 ------ 0 out of 0 lines covered + Tag INTERNAL^%utt3 (40.00%) 2 out of 5 lines covered + the following is a list of the lines **NOT** covered + INTERNAL+3 S A=2 ; Dead code + INTERNAL+4 S Y=2 ; Dead code + INTERNAL+5 QUIT ; Dead code + Tag SETUP^%utt3 (100.00%) 1 out of 1 lines covered + Tag SHUTDOWN^%utt3 (100.00%) 1 out of 1 lines covered + Tag STARTUP^%utt3 (100.00%) 3 out of 3 lines covered + Tag T1^%utt3 (100.00%) 2 out of 2 lines covered + Tag T2^%utt3 (60.00%) 3 out of 5 lines covered + the following is a list of the lines **NOT** covered + T2+4 S X=1 ; Dead code + T2+5 QUIT ; Dead code + Tag TEARDOWN^%utt3 (100.00%) 2 out of 2 lines covered + Tag XTMUNITV^%utt3 ------ 0 out of 0 lines covered + +Routine %utt3 (73.68%) 14 out of 19 lines covered + - Summary + Tag %utt3^%utt3 ------ 0 out of 0 lines covered + Tag INTERNAL^%utt3 (40.00%) 2 out of 5 lines covered + Tag SETUP^%utt3 (100.00%) 1 out of 1 lines covered + Tag SHUTDOWN^%utt3 (100.00%) 1 out of 1 lines covered + Tag STARTUP^%utt3 (100.00%) 3 out of 3 lines covered + Tag T1^%utt3 (100.00%) 2 out of 2 lines covered + Tag T2^%utt3 (60.00%) 3 out of 5 lines covered + Tag TEARDOWN^%utt3 (100.00%) 2 out of 2 lines covered + Tag XTMUNITV^%utt3 ------ 0 out of 0 lines covered + +Routine %utt3 (73.68%) 14 out of 19 lines covered + +Overall Analysis 14 out of 19 lines covered (73% coverage) +xxxxxxxxxxxxxxxxxxxx LISTING DATA VIA LIST + +Routine %utt3 (73.68%) 14 out of 19 lines covered + - Detailed Breakdown + Tag %utt3^%utt3 ------ 0 out of 0 lines covered + Tag INTERNAL^%utt3 (40.00%) 2 out of 5 lines covered + the following is a list of the lines **NOT** covered + INTERNAL+3 S A=2 ; Dead code + INTERNAL+4 S Y=2 ; Dead code + INTERNAL+5 QUIT ; Dead code + Tag SETUP^%utt3 (100.00%) 1 out of 1 lines covered + Tag SHUTDOWN^%utt3 (100.00%) 1 out of 1 lines covered + Tag STARTUP^%utt3 (100.00%) 3 out of 3 lines covered + Tag T1^%utt3 (100.00%) 2 out of 2 lines covered + Tag T2^%utt3 (60.00%) 3 out of 5 lines covered + the following is a list of the lines **NOT** covered + T2+4 S X=1 ; Dead code + T2+5 QUIT ; Dead code + Tag TEARDOWN^%utt3 (100.00%) 2 out of 2 lines covered + Tag XTMUNITV^%utt3 ------ 0 out of 0 lines covered + +Routine %utt3 (73.68%) 14 out of 19 lines covered + - Summary + Tag %utt3^%utt3 ------ 0 out of 0 lines covered + Tag INTERNAL^%utt3 (40.00%) 2 out of 5 lines covered + Tag SETUP^%utt3 (100.00%) 1 out of 1 lines covered + Tag SHUTDOWN^%utt3 (100.00%) 1 out of 1 lines covered + Tag STARTUP^%utt3 (100.00%) 3 out of 3 lines covered + Tag T1^%utt3 (100.00%) 2 out of 2 lines covered + Tag T2^%utt3 (60.00%) 3 out of 5 lines covered + Tag TEARDOWN^%utt3 (100.00%) 2 out of 2 lines covered + Tag XTMUNITV^%utt3 ------ 0 out of 0 lines covered + +Routine %utt3 (73.68%) 14 out of 19 lines covered + +Overall Analysis 14 out of 19 lines covered (73% coverage) +xxxxxxxxxxxxxxxxxxxx Finished in ENTRY^%uttcovr + +------------------- RUNNING VERBOSE^%utt6 ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut + +T1 - - Make sure Start-up Ran.----------------------------------------- [OK] +T2 - - Make sure Set-up runs.------------------------------------------ [OK] +T3 - - Make sure Teardown runs.---------------------------------------- [OK] +T4 - Entry point using XTMENT.----------------------------------------- [OK] +T5 - Error count check +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +.---------------------------------------------------------------------- [FAIL] +T6 - Succeed Entry Point...-------------------------------------------- [OK] +T7 - Make sure we write to principal even though we are on another device..[OK] +T8 - If IO starts with another device, write to that device as if it's the prici +pal device.------------------------------------------------------------ [OK] +COVRPTGL - coverage report returning global....------------------------ [OK] +T11 - An @TEST Entry point in Another Routine invoked through XTROU offsets.[OK] +T12 - An XTENT offset entry point in Another Routine invoked through XTROU offse +ts.-------------------------------------------------------------------- [OK] +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] +MAIN - - Test coverage calculations +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] +NEWSTYLE - identify new style test indicator functionality.------------ [OK] +OLDSTYLE - identify old style test indicator functionality..---------- [OK] +OLDSTYL1 - identify old style test indicator 2.----------------------- [OK] +BADCHKEQ - CHKEQ should fail on unequal value +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADCHKTF - CHKTF should fail on false value +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADERROR - throws an error on purpose +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q +----------------------------------------------------------------------- [FAIL] +CALLFAIL - called FAIL to test it +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it +----------------------------------------------------------------------- [FAIL] +LEAKSOK - check leaks should be ok------------------------------------- [OK] +LEAKSBAD - check leaks with leak +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X +----------------------------------------------------------------------- [FAIL] +NVLDARG1 - check invalid arg in CHKEQ +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +----------------------------------------------------------------------- [FAIL] +ISUTEST - check ISUTEST inside unit test.------------------------------ [OK] +SETROUS - - generate array with indices of routines to exclude......--- [OK] +CHKCMDLN - check command line processing of %utt5---------------------- [OK] +CHKGUI - check GUI processing of %utt5--------------------------------- [OK] +CKGUISET - check list of tests returned by GUISET---------------------- [OK] +NEWSTYLE - test return of valid new style or @TEST indicators...------- [OK] +RTNANAL - - routine analysis...---------------------------------------- [OK] +COVCOV - - check COVCOV - remove seen lines......---------------------- [OK] +COVRPT...........------------------------------------------------------ [OK] +COVRPTLS - - coverage report returning text in global...........------- [OK] +TRIMDATA - - TRIMDATA in %utcover..------------------------------------ [OK] +LIST - - LIST in %utcover............---------------------------------- [OK] +CACHECOV - - set up routine for analysis in globals..------------------ [OK] +LINEDATA - - convert code line to based on tags and offset, and identify active +code lines............------------------------------------------------- [OK] +TOTAGS - - convert from lines of code by line number to lines ordered by tag, li +ne from tag, and only not covered...........--------------------------- [OK] + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 + +NEWSTYLE - identify new style test indicator functionality.------------ [OK] +OLDSTYLE - identify old style test indicator functionality..---------- [OK] +OLDSTYL1 - identify old style test indicator 2.----------------------- [OK] +BADCHKEQ - CHKEQ should fail on unequal value +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADCHKTF - CHKTF should fail on false value +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADERROR - throws an error on purpose +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q +----------------------------------------------------------------------- [FAIL] +CALLFAIL - called FAIL to test it +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it +----------------------------------------------------------------------- [FAIL] +LEAKSOK - check leaks should be ok------------------------------------- [OK] +LEAKSBAD - check leaks with leak +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X +----------------------------------------------------------------------- [FAIL] +NVLDARG1 - check invalid arg in CHKEQ +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +----------------------------------------------------------------------- [FAIL] +ISUTEST - check ISUTEST inside unit test.------------------------------ [OK] + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +RTNANAL - - routine analysis...---------------------------------------- [OK] +COVCOV - - check COVCOV - remove seen lines......---------------------- [OK] +COVRPT...........------------------------------------------------------ [OK] +COVRPTLS - - coverage report returning text in global...........------- [OK] +TRIMDATA - - TRIMDATA in %utcover..------------------------------------ [OK] +LIST - - LIST in %utcover............---------------------------------- [OK] +CACHECOV - - set up routine for analysis in globals..------------------ [OK] +LINEDATA - - convert code line to based on tags and offset, and identify active +code lines............------------------------------------------------- [OK] +TOTAGS - - convert from lines of code by line number to lines ordered by tag, li +ne from tag, and only not covered...........--------------------------- [OK] + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +SETROUS - - generate array with indices of routines to exclude......--- [OK] +CHKCMDLN - check command line processing of %utt5---------------------- [OK] +CHKGUI - check GUI processing of %utt5--------------------------------- [OK] +CKGUISET - check list of tests returned by GUISET---------------------- [OK] +NEWSTYLE - test return of valid new style or @TEST indicators...------- [OK] + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%ut ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%ut1 ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%utcover -------------------....................... +............................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%utt1 ------------------- +T1 - - Make sure Start-up Ran.----------------------------------------- [OK] +T2 - - Make sure Set-up runs.------------------------------------------ [OK] +T3 - - Make sure Teardown runs.---------------------------------------- [OK] +T4 - Entry point using XTMENT.----------------------------------------- [OK] +T5 - Error count check +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +.---------------------------------------------------------------------- [FAIL] +T6 - Succeed Entry Point...-------------------------------------------- [OK] +T7 - Make sure we write to principal even though we are on another device..[OK] +T8 - If IO starts with another device, write to that device as if it's the prici +pal device.------------------------------------------------------------ [OK] +COVRPTGL - coverage report returning global....------------------------ [OK] +T11 - An @TEST Entry point in Another Routine invoked through XTROU offsets.[OK] +T12 - An XTENT offset entry point in Another Routine invoked through XTROU offse +ts.-------------------------------------------------------------------- [OK] +MAIN - - Test coverage calculations +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] +NEWSTYLE - identify new style test indicator functionality.------------ [OK] +OLDSTYLE - identify old style test indicator functionality..---------- [OK] +OLDSTYL1 - identify old style test indicator 2.----------------------- [OK] +BADCHKEQ - CHKEQ should fail on unequal value +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADCHKTF - CHKTF should fail on false value +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADERROR - throws an error on purpose +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q +----------------------------------------------------------------------- [FAIL] +CALLFAIL - called FAIL to test it +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it +----------------------------------------------------------------------- [FAIL] +LEAKSOK - check leaks should be ok------------------------------------- [OK] +LEAKSBAD - check leaks with leak +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X +----------------------------------------------------------------------- [FAIL] +NVLDARG1 - check invalid arg in CHKEQ +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +----------------------------------------------------------------------- [FAIL] +ISUTEST - check ISUTEST inside unit test.------------------------------ [OK] +SETROUS - - generate array with indices of routines to exclude......--- [OK] +CHKCMDLN - check command line processing of %utt5---------------------- [OK] +CHKGUI - check GUI processing of %utt5--------------------------------- [OK] +CKGUISET - check list of tests returned by GUISET---------------------- [OK] +NEWSTYLE - test return of valid new style or @TEST indicators...------- [OK] +RTNANAL - - routine analysis...---------------------------------------- [OK] +COVCOV - - check COVCOV - remove seen lines......---------------------- [OK] +COVRPT...........------------------------------------------------------ [OK] +COVRPTLS - - coverage report returning text in global...........------- [OK] +TRIMDATA - - TRIMDATA in %utcover..------------------------------------ [OK] +LIST - - LIST in %utcover............---------------------------------- [OK] +CACHECOV - - set up routine for analysis in globals..------------------ [OK] +LINEDATA - - convert code line to based on tags and offset, and identify active +code lines............------------------------------------------------- [OK] +TOTAGS - - convert from lines of code by line number to lines ordered by tag, li +ne from tag, and only not covered...........--------------------------- [OK] + +Ran 6 Routines, 37 Entry Tags +Checked 113 tests, with 7 failures and encountered 1 error. + +------------------- RUNNING ^%utt6 ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +............... +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: BADERROR+6^%utt +5 *Q + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------ SUMMARY ------------ +Ran 18 Routines, 112 Entry Tags +Checked 398 tests, with 14 failures and encountered 2 errors. + +Routine %ut (100.00%) 256 out of 256 lines covered + - Detailed Breakdown + Tag %ut^%ut (100.00%) 2 out of 2 lines covered + Tag CHKEQ^%ut (100.00%) 17 out of 17 lines covered + Tag CHKLEAKS^%ut (100.00%) 13 out of 13 lines covered + Tag CHKTF^%ut (100.00%) 14 out of 14 lines covered + Tag COV^%ut (100.00%) 2 out of 2 lines covered + Tag COVERAGE^%ut (100.00%) 2 out of 2 lines covered + Tag DOSET^%ut (100.00%) 6 out of 6 lines covered + Tag EN^%ut (100.00%) 7 out of 7 lines covered + Tag EN1^%ut (100.00%) 44 out of 44 lines covered + Tag ERROR^%ut (100.00%) 9 out of 9 lines covered + Tag ERROR1^%ut (100.00%) 7 out of 7 lines covered + Tag FAIL^%ut (100.00%) 2 out of 2 lines covered + Tag GETLIST^%ut (100.00%) 11 out of 11 lines covered + Tag GETSET^%ut (100.00%) 4 out of 4 lines covered + Tag GETUTVAL^%ut (100.00%) 5 out of 5 lines covered + Tag GUILOAD^%ut (100.00%) 8 out of 8 lines covered + Tag GUINEXT^%ut (100.00%) 43 out of 43 lines covered + Tag GUISET^%ut (100.00%) 8 out of 8 lines covered + Tag ISUTEST^%ut (100.00%) 1 out of 1 lines covered + Tag LOAD^%ut (100.00%) 10 out of 10 lines covered + Tag LSTUTVAL^%ut (100.00%) 4 out of 4 lines covered + Tag MULTAPIS^%ut (100.00%) 2 out of 2 lines covered + Tag PICKSET^%ut (100.00%) 3 out of 3 lines covered + Tag RUNSET^%ut (100.00%) 9 out of 9 lines covered + Tag SETUT^%ut (100.00%) 6 out of 6 lines covered + Tag SUCCEED^%ut (100.00%) 6 out of 6 lines covered + Tag VERBOSE^%ut (100.00%) 7 out of 7 lines covered + Tag VERBOSE1^%ut (100.00%) 4 out of 4 lines covered + + +Routine %ut1 (88.43%) 237 out of 268 lines covered + - Detailed Breakdown + Tag %ut1^%ut1 (100.00%) 2 out of 2 lines covered + Tag ACTLINES^%ut1 (100.00%) 8 out of 8 lines covered + Tag CACHECOV^%ut1 (100.00%) 12 out of 12 lines covered + Tag CHECKTAG^%ut1 (100.00%) 10 out of 10 lines covered + Tag CHEKTEST^%ut1 (100.00%) 9 out of 9 lines covered + Tag COV^%ut1 (52.31%) 34 out of 65 lines covered + the following is a list of the lines **NOT** covered + COV+17 . N %ZR ; GT.M specific + COV+18 . D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R( +RTN)). + COV+19 . N RN S RN="" + COV+20 . W !,"Loading routines to test coverage...",! + COV+21 . F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D + COV+22 . . N L2 S L2=$T(+2^@RN) + COV+23 . . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out + COV+24 . . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine + COV+26 . M RTNS=%ZR + COV+27 . K %ZR + COV+28 . Q + COV+45 . K ^TMP("%utCOVCOHORTSAV",$J) + COV+46 . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) + COV+47 . K ^TMP("%utCOVRESULT",$J) + COV+48 . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 + COV+50 . I (+$SY=47) VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M +START PROFILING + COV+52 . I (+$SY=0) D ; CACHE CODE TO START PROFILING + COV+53 . . S STATUS=##class(%Monitor.System.LineByLine).Start($lb(NMSP),$ +lb("RtnLine"),$lb($j)) + COV+61 . . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" + COV+62 . . USE $PRINCIPAL:(CTRAP=$C(3)) + COV+63 . . Q + COV+79 . . D TOTAGS(COVERSAV,0),TOTAGS(COVER,1) + COV+80 . . D ##class(%Monitor.System.LineByLine).Stop() + COV+81 . . Q + COV+82 . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J +))) ; Venn diagram matching between globals + COV+84 . I VERBOSITY=-1 D + COV+85 . . K ^TMP("%utCOVREPORT",$J) + COV+86 . . D COVRPTGL($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOH +ORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),$NA(^TMP("%utCOVREPORT",$J))) + COV+87 . . Q + COV+88 . E D COVRPT($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHO +RT",$J)),$NA(^TMP("%utCOVRESULT",$J)),VERBOSITY) + COV+89 . Q + Tag COVCOV^%ut1 (100.00%) 9 out of 9 lines covered + Tag COVRPT^%ut1 (100.00%) 5 out of 5 lines covered + Tag COVRPTGL^%ut1 (100.00%) 14 out of 14 lines covered + Tag COVRPTLS^%ut1 (100.00%) 31 out of 31 lines covered + Tag FAIL^%ut1 (100.00%) 12 out of 12 lines covered + Tag GETTREE^%ut1 (100.00%) 7 out of 7 lines covered + Tag GETVALS^%ut1 (100.00%) 11 out of 11 lines covered + Tag ISUTEST^%ut1 (100.00%) 1 out of 1 lines covered + Tag LINEDATA^%ut1 (100.00%) 9 out of 9 lines covered + Tag NEWSTYLE^%ut1 (100.00%) 4 out of 4 lines covered + Tag NVLDARG^%ut1 (100.00%) 11 out of 11 lines covered + Tag RESETIO^%ut1 (100.00%) 2 out of 2 lines covered + Tag RTNANAL^%ut1 (100.00%) 30 out of 30 lines covered + Tag SETIO^%ut1 (100.00%) 2 out of 2 lines covered + Tag TOTAGS^%ut1 (100.00%) 13 out of 13 lines covered + Tag UP^%ut1 (100.00%) 1 out of 1 lines covered + +Routine %utcover (100.00%) 79 out of 79 lines covered + - Detailed Breakdown + Tag %utcover^%utcover (100.00%) 2 out of 2 lines covered + Tag COVENTRY^%utcover (100.00%) 14 out of 14 lines covered + Tag COVERAGE^%utcover (100.00%) 13 out of 13 lines covered + Tag LIST^%utcover (100.00%) 38 out of 38 lines covered + Tag MULTAPIS^%utcover (100.00%) 5 out of 5 lines covered + Tag SETROUS^%utcover (100.00%) 4 out of 4 lines covered + Tag TRIMDATA^%utcover (100.00%) 3 out of 3 lines covered + +Routine %ut (100.00%) 256 out of 256 lines covered + - Summary + Tag %ut^%ut (100.00%) 2 out of 2 lines covered + Tag CHKEQ^%ut (100.00%) 17 out of 17 lines covered + Tag CHKLEAKS^%ut (100.00%) 13 out of 13 lines covered + Tag CHKTF^%ut (100.00%) 14 out of 14 lines covered + Tag COV^%ut (100.00%) 2 out of 2 lines covered + Tag COVERAGE^%ut (100.00%) 2 out of 2 lines covered + Tag DOSET^%ut (100.00%) 6 out of 6 lines covered + Tag EN^%ut (100.00%) 7 out of 7 lines covered + Tag EN1^%ut (100.00%) 44 out of 44 lines covered + Tag ERROR^%ut (100.00%) 9 out of 9 lines covered + Tag ERROR1^%ut (100.00%) 7 out of 7 lines covered + Tag FAIL^%ut (100.00%) 2 out of 2 lines covered + Tag GETLIST^%ut (100.00%) 11 out of 11 lines covered + Tag GETSET^%ut (100.00%) 4 out of 4 lines covered + Tag GETUTVAL^%ut (100.00%) 5 out of 5 lines covered + Tag GUILOAD^%ut (100.00%) 8 out of 8 lines covered + Tag GUINEXT^%ut (100.00%) 43 out of 43 lines covered + Tag GUISET^%ut (100.00%) 8 out of 8 lines covered + Tag ISUTEST^%ut (100.00%) 1 out of 1 lines covered + Tag LOAD^%ut (100.00%) 10 out of 10 lines covered + Tag LSTUTVAL^%ut (100.00%) 4 out of 4 lines covered + Tag MULTAPIS^%ut (100.00%) 2 out of 2 lines covered + Tag PICKSET^%ut (100.00%) 3 out of 3 lines covered + Tag RUNSET^%ut (100.00%) 9 out of 9 lines covered + Tag SETUT^%ut (100.00%) 6 out of 6 lines covered + Tag SUCCEED^%ut (100.00%) 6 out of 6 lines covered + Tag VERBOSE^%ut (100.00%) 7 out of 7 lines covered + Tag VERBOSE1^%ut (100.00%) 4 out of 4 lines covered + +Routine %ut1 (88.43%) 237 out of 268 lines covered + - Summary + Tag %ut1^%ut1 (100.00%) 2 out of 2 lines covered + Tag ACTLINES^%ut1 (100.00%) 8 out of 8 lines covered + Tag CACHECOV^%ut1 (100.00%) 12 out of 12 lines covered + Tag CHECKTAG^%ut1 (100.00%) 10 out of 10 lines covered + Tag CHEKTEST^%ut1 (100.00%) 9 out of 9 lines covered + Tag COV^%ut1 (52.31%) 34 out of 65 lines covered + Tag COVCOV^%ut1 (100.00%) 9 out of 9 lines covered + Tag COVRPT^%ut1 (100.00%) 5 out of 5 lines covered + Tag COVRPTGL^%ut1 (100.00%) 14 out of 14 lines covered + Tag COVRPTLS^%ut1 (100.00%) 31 out of 31 lines covered + Tag FAIL^%ut1 (100.00%) 12 out of 12 lines covered + Tag GETTREE^%ut1 (100.00%) 7 out of 7 lines covered + Tag GETVALS^%ut1 (100.00%) 11 out of 11 lines covered + Tag ISUTEST^%ut1 (100.00%) 1 out of 1 lines covered + Tag LINEDATA^%ut1 (100.00%) 9 out of 9 lines covered + Tag NEWSTYLE^%ut1 (100.00%) 4 out of 4 lines covered + Tag NVLDARG^%ut1 (100.00%) 11 out of 11 lines covered + Tag RESETIO^%ut1 (100.00%) 2 out of 2 lines covered + Tag RTNANAL^%ut1 (100.00%) 30 out of 30 lines covered + Tag SETIO^%ut1 (100.00%) 2 out of 2 lines covered + Tag TOTAGS^%ut1 (100.00%) 13 out of 13 lines covered + Tag UP^%ut1 (100.00%) 1 out of 1 lines covered + +Routine %utcover (100.00%) 79 out of 79 lines covered + - Summary + Tag %utcover^%utcover (100.00%) 2 out of 2 lines covered + Tag COVENTRY^%utcover (100.00%) 14 out of 14 lines covered + Tag COVERAGE^%utcover (100.00%) 13 out of 13 lines covered + Tag LIST^%utcover (100.00%) 38 out of 38 lines covered + Tag MULTAPIS^%utcover (100.00%) 5 out of 5 lines covered + Tag SETROUS^%utcover (100.00%) 4 out of 4 lines covered + Tag TRIMDATA^%utcover (100.00%) 3 out of 3 lines covered + +Routine %ut (100.00%) 256 out of 256 lines covered +Routine %ut1 (88.43%) 237 out of 268 lines covered +Routine %utcover (100.00%) 79 out of 79 lines covered + +Overall Analysis 572 out of 603 lines covered (94% coverage) + +VISTA2A>D H^XUS diff --git a/151210_MUNIT_GT.M_INSTALL_LOG.TXT b/151210_MUNIT_GT.M_INSTALL_LOG.TXT new file mode 100644 index 0000000..52c5a50 --- /dev/null +++ b/151210_MUNIT_GT.M_INSTALL_LOG.TXT @@ -0,0 +1,1657 @@ + + ------------------ START OF ADDED COMMENT ---------------------- + The KIDS file was loaded ionto the tmp directory, it was + then converted to unix line terminators with dos2unix. + The MUMPS instance was then started and + ------------------- END OF ADDED COMMMENT ---------------------- + + +[jiveysoft@jiveysoft-VirtualBox ~]$ cd tmp +[jiveysoft@jiveysoft-VirtualBox tmp]$ dos2unix MASH_0.3_900_152120-7.KID +dos2unix: converting file MASH_0.3_0_151207.KID to Unix format ... +[jiveysoft@jiveysoft-VirtualBox tmp]$ cd .. +[jiveysoft@jiveysoft-VirtualBox ~]$ mumps -dir + +VISTA2A>S DUZ=17 D Q^DI,^%ZIS + + +VA FILEMAN 22.2V2 + + +Select OPTION: +DEVICE: HOME// TELNET + +VISTA2A>D ^XUP + +Setting up programmer environment +This is a TEST account. + +Terminal Type set to: C-VT100 + +Select OPTION NAME: EVE + 1 EVE Systems Manager Menu + 2 EVENT CAPTURE ECX ECS MAINTENANCE Event Capture + 3 EVENT CAPTURE (ECS) EXTRACT AU ECX ECS SOURCE AUDIT Event Capture +(ECS) Extract Audit + 4 EVENT CAPTURE DATA ENTRY ECENTER Event Capture Data Entry + 5 EVENT CAPTURE EXTRACT ECXEC Event Capture Extract +Press to see more, '^' to exit this list, OR +CHOOSE 1-5: 1 EVE Systems Manager Menu + +Select Systems Manager Menu Option: PROGrammer Options +Select Programmer Options Option: KIDS Kernel Installation & Dis +tribution System + + Edits and Distribution ... + Utilities ... + Installation ... + Patch Monitor Main Menu ... + +Select Kernel Installation & Distribution System Option: INSTalla +tion + + 1 Load a Distribution + 2 Verify Checksums in Transport Global + 3 Print Transport Global + 4 Compare Transport Global to Current System + 5 Backup a Transport Global + 6 Install Package(s) + Restart Install of Package(s) + Unload a Distribution + +Select Installation Option: LOAd a Distribution +Enter a Host File: /home/jiveysoft/tmp/MASH_0.3_0_151207.KID + +KIDS Distribution saved on Dec 07, 2015@17:14:06 +Comment: Update with coverage for Cache systems + +This Distribution contains Transport Globals for the following Package(s): + MASH*0.3*0 +Distribution OK! + +Want to Continue with Load? YES// +Loading Distribution... + MASH*0.3*0 +Use INSTALL NAME: MASH*0.3*0 to install this Distribution. + + 1 Load a Distribution + 2 Verify Checksums in Transport Global + 3 Print Transport Global + 4 Compare Transport Global to Current System + 5 Backup a Transport Global + 6 Install Package(s) + Restart Install of Package(s) + Unload a Distribution + +Select Installation Option: INstall Package(s) +Select INSTALL NAME: MASH*0.3*0 Loaded from Distribution 12/10/15@19:0 +1:59 + => Update with coverage for Cache systems ;Created on Dec 07, 2015@17:14 + +This Distribution was loaded on Dec 10, 2015@19:01:59 with header of + Update with coverage for Cache systems ;Created on Dec 07, 2015@17:14:06 + It consisted of the following Install(s): + MASH*0.3*0 +Checking Install for Package MASH*0.3*0 + +Install Questions for MASH*0.3*0 + +Incoming Files: + + 17.9001 M-UNIT TEST GROUP (including data) +Want KIDS to Rebuild Menu Trees Upon Completion of Install? NO// +Want KIDS to INHIBIT LOGONs during the install? NO// +Want to DISABLE Scheduled Options, Menu Options, and Protocols? NO// +Enter the Device you want to print the Install messages. +You can queue the install by enter a 'Q' at the device prompt. +Enter a '^' to abort the install. + +DEVICE: HOME// TELNET + + Install Started for MASH*0.3*0 : + Dec 10, 2015@19:02:29 + +Build Distribution Date: Dec 07, 2015 + + Installing Routines: + + ------------------ START OF ADDED COMMENT ---------------------- + At this point GT.M identifies functions that it does not + recognize - these are functions for Cache and are functional. + Also, similar listings may be seen the first time that the + routines are run - they will not be shown after that. + ------------------- END OF ADDED COMMMENT ---------------------- + + Dec 10, 2015@19:02:29 + + Running Pre-Install Routine: ^ZZUTPRE + + Installing Data Dictionaries: + Dec 10, 2015@19:02:29 + + Installing Data: + Dec 10, 2015@19:02:29 + + Installing PACKAGE COMPONENTS: + + Installing REMOTE PROCEDURE + + Installing OPTION + Dec 10, 2015@19:02:30 + + Running Post-Install Routine: ^ZZUTPOST + + +In the next section, as it tries to copy the ut* routines +to %ut* routines watch for text that indicates the following: + +cp: cannot create regular file `/_ut.m': Permission denied + +If this is seen, respond Yes at the prompt after the attempt: + Press ENTER to continue: + +Routine: ut Loaded, Saved as %ut +Routine: ut1 Loaded, Saved as %ut1 +Routine: utcover Loaded, Saved as %utcover +Routine: utt1 Loaded, Saved as %utt1 +Routine: utt2 Loaded, Saved as %utt2 +Routine: utt3 Loaded, Saved as %utt3 +Routine: utt4 Loaded, Saved as %utt4 +Routine: utt5 Loaded, Saved as %utt5 +Routine: utt6 Loaded, Saved as %utt6 +Routine: uttcovr Loaded, Saved as %uttcovr + + + Your entry on the next line may not echo +If error text was seen enter Y (and RETURN): NO// + + ------------------ START OF ADDED COMMENT ---------------------- + At this point if there were errors renaming the routines, the + following text is displayed. Normally, it will not appear. + ------------------- END OF ADDED COMMMENT ---------------------- + +*** An error occurred during renaming of routines to %ut*. +*** The renaming has been seen to fail on one type of Linux system. +*** In this case, at the Linux command line copy each ut*.m routine +*** (ut.m, ut1.m, utcover.m, utt1.m, utt2.m, utt3.m, utt4.m, utt5.m, utt6.m, +*** and uttcovr.m) to _ut*.m (e.g., 'cp ut.m _ut.m', 'cp ut1.m _ut1.m', +*** 'cp utcover.m _utcover.m', etc., to 'cp uttcovr.m _uttcovr.m'). Then +*** in GT.M use the command 'ZLINK %ut', then 'ZLINK %ut1', etc., these may +*** indicate an undefined local variable error, but continue doing it. +*** When complete, use the M command 'DO ^%utt1' to run the unit tests on +*** the %ut and %ut1 routines to confirm they are working + + Press Enter to continue: + + ----------------- END OF HELP MESSAGE FOR PROBLEM ------------------- + + Updating Routine file... + Updating KIDS files... + MASH*0.3*0 Installed. + Dec 10, 2015@19:03:26 + NO Install Message sent +Install Completed + + 1 Load a Distribution + 2 Verify Checksums in Transport Global + 3 Print Transport Global + 4 Compare Transport Global to Current System + 5 Backup a Transport Global + 6 Install Package(s) + Restart Install of Package(s) + Unload a Distribution + +Select Installation Option: ^PG Programmer mode +%GTM-I-BREAK, Break instruction encountered + At M source location PRGMODE+6^%ZOSV + + ------------------ START OF ADDED COMMENT ---------------------- + ---- RUNNING THE BASIC UNIT TESTS - Note these do throw expected errors ---- + ----- Also, GTM invalid function names messages have been removed ----- + ----- they won't appear in subsequent runs ----- + ------------------- END OF ADDED COMMMENT ---------------------- + +VISTA2A>D ^%utt1 +T1 - - Make sure Start-up Ran.----------------------------------------- [OK] +T2 - - Make sure Set-up runs.------------------------------------------ [OK] +T3 - - Make sure Teardown runs.---------------------------------------- [OK] +T4 - Entry point using XTMENT.----------------------------------------- [OK] +T5 - Error count check +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +.---------------------------------------------------------------------- [FAIL] +T6 - Succeed Entry Point...-------------------------------------------- [OK] +T7 - Make sure we write to principal even though we are on another device..[OK] +T8 - If IO starts with another device, write to that device as if it's the prici +pal device +Loading routines to test coverage... +%utt3 .---------------------------------------------------------------- [OK] +COVRPTGL - coverage report returning global....------------------------ [OK] +T11 - An @TEST Entry point in Another Routine invoked through XTROU offsets.[OK] +T12 - An XTENT offset entry point in Another Routine invoked through XTROU offse +ts.-------------------------------------------------------------------- [OK] +MAIN - - Test coverage calculations +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] +NEWSTYLE - identify new style test indicator functionality.------------ [OK] +OLDSTYLE - identify old style test indicator functionality..---------- [OK] +OLDSTYL1 - identify old style test indicator 2.----------------------- [OK] +BADCHKEQ - CHKEQ should fail on unequal value +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADCHKTF - CHKTF should fail on false value +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADERROR - throws an error on purpose +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found +----------------------------------------------------------------------- [FAIL] +CALLFAIL - called FAIL to test it +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it +----------------------------------------------------------------------- [FAIL] +LEAKSOK - check leaks should be ok------------------------------------- [OK] +LEAKSBAD - check leaks with leak +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X +----------------------------------------------------------------------- [FAIL] +NVLDARG1 - check invalid arg in CHKEQ +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +----------------------------------------------------------------------- [FAIL] +ISUTEST - check ISUTEST inside unit test.------------------------------ [OK] +SETROUS - - generate array with indices of routines to exclude......--- [OK] +CHKCMDLN - check command line processing of %utt5---------------------- [OK] +CHKGUI - check GUI processing of %utt5--------------------------------- [OK] +CKGUISET - check list of tests returned by GUISET---------------------- [OK] +NEWSTYLE - test return of valid new style or @TEST indicators...------- [OK] +RTNANAL - - routine analysis...---------------------------------------- [OK] +COVCOV - - check COVCOV - remove seen lines......---------------------- [OK] +COVRPT...........------------------------------------------------------ [OK] +COVRPTLS - - coverage report returning text in global...........------- [OK] +TRIMDATA - - TRIMDATA in %utcover..------------------------------------ [OK] +LIST - - LIST in %utcover............---------------------------------- [OK] +CACHECOV - - set up routine for analysis in globals..------------------ [OK] +LINEDATA - - convert code line to based on tags and offset, and identify active +code lines............------------------------------------------------- [OK] +TOTAGS - - convert from lines of code by line number to lines ordered by tag, li +ne from tag, and only not covered...........--------------------------- [OK] + +Ran 6 Routines, 37 Entry Tags +Checked 113 tests, with 7 failures and encountered 1 error. + + ------------------ START OF ADDED COMMENT ---------------------- + Running the %utt6 routine from the top runs a number of different + entry points as unit tests + ------------------- END OF ADDED COMMMENT ---------------------- + +VISTA2A>d ^%utt6 + +-- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + + ------------------ START OF ADDED COMMENT ---------------------- + Running %uttcovr from the top of the routine runs coverage by + calling a number of unit tests from different entry points so + that each of them is included in the analysis. Looking at + this shows how to run many different entry points in one + coverage analysis, as well as removing unit tests that may + have the same base namespace from the displayed analysis. + ------------------- END OF ADDED COMMMENT ---------------------- + +VISTA2A>d ^%uttcovr + +Loading routines to test coverage... +%ut %ut1 %utcover %utf2hex %utt1 %utt2 %utt3 %utt4 %utt5 %utt6 %uttcovr + +------------------- RUNNING %utt1 -------------------.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +................. +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 6 Routines, 37 Entry Tags +Checked 109 tests, with 7 failures and encountered 1 error. + +------------------- RUNNING %uttcovr -------------------........................ +.............................................. + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ENTRY^%uttcovr ------------------- +LEAKSBAD TEST - X NOT SPECIFIED VARIABLE LEAK: X +xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at 3 + +Loading routines to test coverage... +%ut1 .... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. +xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at -1 + +Loading routines to test coverage... +%ut1 .... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. +xxxxxxxxxxxxxxxxxxxx GOING TO MULTAPIS for %utt4 and %ut + +------------------- RUNNING ^%ut ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%utt4 ------------------- +MAIN - - Test coverage calculations +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] + +Ran 1 Routine, 1 Entry Tag +Checked 4 tests, with 0 failures and encountered 0 errors. + + +------------ SUMMARY ------------ +Ran 2 Routines, 6 Entry Tags +Checked 13 tests, with 0 failures and encountered 0 errors. +xxxxxxxxxxxxxxxxxxxx GOING TO COVERAGE for %utt4 and %ut at 3 + + + +Loading routines to test coverage... +%ut %ut1 %utcover %utf2hex %utt1 %utt2 %utt3 %utt4 %utt5 %utt6 %uttcovr + +------------------- RUNNING ^%ut ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + + ------------------ START OF ADDED COMMENT ---------------------- + %utt4 contains unit tests to run coverage analysis on the + %utt3 routine from the COV^%ut API, while %uttcovr runs + all of the analyses from the COVERAGE^%utcover API. + ------------------- END OF ADDED COMMMENT ---------------------- + +------------------- RUNNING ^%utt4 ------------------- +MAIN - - Test coverage calculations +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] + +Ran 1 Routine, 1 Entry Tag +Checked 4 tests, with 0 failures and encountered 0 errors. + +------------ SUMMARY ------------ +Ran 2 Routines, 6 Entry Tags +Checked 13 tests, with 0 failures and encountered 0 errors. + +Routine %utt3 (73.68%) 14 out of 19 lines covered + - Detailed Breakdown + Tag INTERNAL^%utt3 (40.00%) 2 out of 5 lines covered + the following is a list of the lines **NOT** covered + INTERNAL+3 S A=2 ; Dead code + INTERNAL+4 S Y=2 ; Dead code + INTERNAL+5 QUIT ; Dead code + Tag SETUP^%utt3 (100.00%) 1 out of 1 lines covered + Tag SHUTDOWN^%utt3 (100.00%) 1 out of 1 lines covered + Tag STARTUP^%utt3 (100.00%) 3 out of 3 lines covered + Tag T1^%utt3 (100.00%) 2 out of 2 lines covered + Tag T2^%utt3 (60.00%) 3 out of 5 lines covered + the following is a list of the lines **NOT** covered + T2+4 S X=1 ; Dead code + T2+5 QUIT ; Dead code + Tag TEARDOWN^%utt3 (100.00%) 2 out of 2 lines covered + Tag XTMUNITV^%utt3 ------ 0 out of 0 lines covered + +Routine %utt3 (73.68%) 14 out of 19 lines covered + - Summary + Tag INTERNAL^%utt3 (40.00%) 2 out of 5 lines covered + Tag SETUP^%utt3 (100.00%) 1 out of 1 lines covered + Tag SHUTDOWN^%utt3 (100.00%) 1 out of 1 lines covered + Tag STARTUP^%utt3 (100.00%) 3 out of 3 lines covered + Tag T1^%utt3 (100.00%) 2 out of 2 lines covered + Tag T2^%utt3 (60.00%) 3 out of 5 lines covered + Tag TEARDOWN^%utt3 (100.00%) 2 out of 2 lines covered + Tag XTMUNITV^%utt3 ------ 0 out of 0 lines covered + +Routine %utt3 (73.68%) 14 out of 19 lines covered + +Overall Analysis 14 out of 19 lines covered (73% coverage) +xxxxxxxxxxxxxxxxxxxx LISTING DATA VIA LIST + +Routine %utt3 (73.68%) 14 out of 19 lines covered + - Detailed Breakdown + Tag INTERNAL^%utt3 (40.00%) 2 out of 5 lines covered + the following is a list of the lines **NOT** covered + INTERNAL+3 S A=2 ; Dead code + INTERNAL+4 S Y=2 ; Dead code + INTERNAL+5 QUIT ; Dead code + Tag SETUP^%utt3 (100.00%) 1 out of 1 lines covered + Tag SHUTDOWN^%utt3 (100.00%) 1 out of 1 lines covered + Tag STARTUP^%utt3 (100.00%) 3 out of 3 lines covered + Tag T1^%utt3 (100.00%) 2 out of 2 lines covered + Tag T2^%utt3 (60.00%) 3 out of 5 lines covered + the following is a list of the lines **NOT** covered + T2+4 S X=1 ; Dead code + T2+5 QUIT ; Dead code + Tag TEARDOWN^%utt3 (100.00%) 2 out of 2 lines covered + Tag XTMUNITV^%utt3 ------ 0 out of 0 lines covered + +Routine %utt3 (73.68%) 14 out of 19 lines covered + - Summary + Tag INTERNAL^%utt3 (40.00%) 2 out of 5 lines covered + Tag SETUP^%utt3 (100.00%) 1 out of 1 lines covered + Tag SHUTDOWN^%utt3 (100.00%) 1 out of 1 lines covered + Tag STARTUP^%utt3 (100.00%) 3 out of 3 lines covered + Tag T1^%utt3 (100.00%) 2 out of 2 lines covered + Tag T2^%utt3 (60.00%) 3 out of 5 lines covered + Tag TEARDOWN^%utt3 (100.00%) 2 out of 2 lines covered + Tag XTMUNITV^%utt3 ------ 0 out of 0 lines covered + +Routine %utt3 (73.68%) 14 out of 19 lines covered + +Overall Analysis 14 out of 19 lines covered (73% coverage) +xxxxxxxxxxxxxxxxxxxx Finished in ENTRY^%uttcovr + +------------------- RUNNING VERBOSE^%utt6 ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut + +T1 - - Make sure Start-up Ran.----------------------------------------- [OK] +T2 - - Make sure Set-up runs.------------------------------------------ [OK] +T3 - - Make sure Teardown runs.---------------------------------------- [OK] +T4 - Entry point using XTMENT.----------------------------------------- [OK] +T5 - Error count check +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +.---------------------------------------------------------------------- [FAIL] +T6 - Succeed Entry Point...-------------------------------------------- [OK] +T7 - Make sure we write to principal even though we are on another device..[OK] +T8 - If IO starts with another device, write to that device as if it's the prici +pal device +Loading routines to test coverage... +%utt3 .---------------------------------------------------------------- [OK] +COVRPTGL - coverage report returning global....------------------------ [OK] +T11 - An @TEST Entry point in Another Routine invoked through XTROU offsets.[OK] +T12 - An XTENT offset entry point in Another Routine invoked through XTROU offse +ts.-------------------------------------------------------------------- [OK] +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] +MAIN - - Test coverage calculations +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] +NEWSTYLE - identify new style test indicator functionality.------------ [OK] +OLDSTYLE - identify old style test indicator functionality..---------- [OK] +OLDSTYL1 - identify old style test indicator 2.----------------------- [OK] +BADCHKEQ - CHKEQ should fail on unequal value +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADCHKTF - CHKTF should fail on false value +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADERROR - throws an error on purpose +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found +----------------------------------------------------------------------- [FAIL] +CALLFAIL - called FAIL to test it +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it +----------------------------------------------------------------------- [FAIL] +LEAKSOK - check leaks should be ok------------------------------------- [OK] +LEAKSBAD - check leaks with leak +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X +----------------------------------------------------------------------- [FAIL] +NVLDARG1 - check invalid arg in CHKEQ +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +----------------------------------------------------------------------- [FAIL] +ISUTEST - check ISUTEST inside unit test.------------------------------ [OK] +SETROUS - - generate array with indices of routines to exclude......--- [OK] +CHKCMDLN - check command line processing of %utt5---------------------- [OK] +CHKGUI - check GUI processing of %utt5--------------------------------- [OK] +CKGUISET - check list of tests returned by GUISET---------------------- [OK] +NEWSTYLE - test return of valid new style or @TEST indicators...------- [OK] +RTNANAL - - routine analysis...---------------------------------------- [OK] +COVCOV - - check COVCOV - remove seen lines......---------------------- [OK] +COVRPT...........------------------------------------------------------ [OK] +COVRPTLS - - coverage report returning text in global...........------- [OK] +TRIMDATA - - TRIMDATA in %utcover..------------------------------------ [OK] +LIST - - LIST in %utcover............---------------------------------- [OK] +CACHECOV - - set up routine for analysis in globals..------------------ [OK] +LINEDATA - - convert code line to based on tags and offset, and identify active +code lines............------------------------------------------------- [OK] +TOTAGS - - convert from lines of code by line number to lines ordered by tag, li +ne from tag, and only not covered...........--------------------------- [OK] + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 + +NEWSTYLE - identify new style test indicator functionality.------------ [OK] +OLDSTYLE - identify old style test indicator functionality..---------- [OK] +OLDSTYL1 - identify old style test indicator 2.----------------------- [OK] +BADCHKEQ - CHKEQ should fail on unequal value +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADCHKTF - CHKTF should fail on false value +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADERROR - throws an error on purpose +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found +----------------------------------------------------------------------- [FAIL] +CALLFAIL - called FAIL to test it +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it +----------------------------------------------------------------------- [FAIL] +LEAKSOK - check leaks should be ok------------------------------------- [OK] +LEAKSBAD - check leaks with leak +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X +----------------------------------------------------------------------- [FAIL] +NVLDARG1 - check invalid arg in CHKEQ +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +----------------------------------------------------------------------- [FAIL] +ISUTEST - check ISUTEST inside unit test.------------------------------ [OK] + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +RTNANAL - - routine analysis...---------------------------------------- [OK] +COVCOV - - check COVCOV - remove seen lines......---------------------- [OK] +COVRPT...........------------------------------------------------------ [OK] +COVRPTLS - - coverage report returning text in global...........------- [OK] +TRIMDATA - - TRIMDATA in %utcover..------------------------------------ [OK] +LIST - - LIST in %utcover............---------------------------------- [OK] +CACHECOV - - set up routine for analysis in globals..------------------ [OK] +LINEDATA - - convert code line to based on tags and offset, and identify active +code lines............------------------------------------------------- [OK] +TOTAGS - - convert from lines of code by line number to lines ordered by tag, li +ne from tag, and only not covered...........--------------------------- [OK] + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +SETROUS - - generate array with indices of routines to exclude......--- [OK] +CHKCMDLN - check command line processing of %utt5---------------------- [OK] +CHKGUI - check GUI processing of %utt5--------------------------------- [OK] +CKGUISET - check list of tests returned by GUISET---------------------- [OK] +NEWSTYLE - test return of valid new style or @TEST indicators...------- [OK] + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%ut ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%ut1 ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%utcover -------------------....................... +............................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +------------------- RUNNING ^%utt1 ------------------- +T1 - - Make sure Start-up Ran.----------------------------------------- [OK] +T2 - - Make sure Set-up runs.------------------------------------------ [OK] +T3 - - Make sure Teardown runs.---------------------------------------- [OK] +T4 - Entry point using XTMENT.----------------------------------------- [OK] +T5 - Error count check +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +.---------------------------------------------------------------------- [FAIL] +T6 - Succeed Entry Point...-------------------------------------------- [OK] +T7 - Make sure we write to principal even though we are on another device..[OK] +T8 - If IO starts with another device, write to that device as if it's the prici +pal device +Loading routines to test coverage... +%utt3 .---------------------------------------------------------------- [OK] +COVRPTGL - coverage report returning global....------------------------ [OK] +T11 - An @TEST Entry point in Another Routine invoked through XTROU offsets.[OK] +T12 - An XTENT offset entry point in Another Routine invoked through XTROU offse +ts.-------------------------------------------------------------------- [OK] +MAIN - - Test coverage calculations +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors.....--------- [OK] +NEWSTYLE - identify new style test indicator functionality.------------ [OK] +OLDSTYLE - identify old style test indicator functionality..---------- [OK] +OLDSTYL1 - identify old style test indicator 2.----------------------- [OK] +BADCHKEQ - CHKEQ should fail on unequal value +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADCHKTF - CHKTF should fail on false value +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL +----------------------------------------------------------------------- [FAIL] +BADERROR - throws an error on purpose +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found +----------------------------------------------------------------------- [FAIL] +CALLFAIL - called FAIL to test it +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it +----------------------------------------------------------------------- [FAIL] +LEAKSOK - check leaks should be ok------------------------------------- [OK] +LEAKSBAD - check leaks with leak +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X +----------------------------------------------------------------------- [FAIL] +NVLDARG1 - check invalid arg in CHKEQ +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +----------------------------------------------------------------------- [FAIL] +ISUTEST - check ISUTEST inside unit test.------------------------------ [OK] +SETROUS - - generate array with indices of routines to exclude......--- [OK] +CHKCMDLN - check command line processing of %utt5---------------------- [OK] +CHKGUI - check GUI processing of %utt5--------------------------------- [OK] +CKGUISET - check list of tests returned by GUISET---------------------- [OK] +NEWSTYLE - test return of valid new style or @TEST indicators...------- [OK] +RTNANAL - - routine analysis...---------------------------------------- [OK] +COVCOV - - check COVCOV - remove seen lines......---------------------- [OK] +COVRPT...........------------------------------------------------------ [OK] +COVRPTLS - - coverage report returning text in global...........------- [OK] +TRIMDATA - - TRIMDATA in %utcover..------------------------------------ [OK] +LIST - - LIST in %utcover............---------------------------------- [OK] +CACHECOV - - set up routine for analysis in globals..------------------ [OK] +LINEDATA - - convert code line to based on tags and offset, and identify active +code lines............------------------------------------------------- [OK] +TOTAGS - - convert from lines of code by line number to lines ordered by tag, li +ne from tag, and only not covered...........--------------------------- [OK] + +Ran 6 Routines, 37 Entry Tags +Checked 113 tests, with 7 failures and encountered 1 error. + +------------------- RUNNING ^%utt6 ------------------- + +RUNNING COMMAND LINE TESTS VIA DOSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +Running command line tests by RUNSET^%ut +.... +T5^%utt1 - Error count check - This is an intentional failure. +. +T5^%utt1 - Error count check - Intentionally throwing a failure +...... +Loading routines to test coverage... +%utt3 ......... +Loading routines to test coverage... +%utt3 +T1 - Test 1.----------------------------------------------------------- [OK] +T2 - Test 2.----------------------------------------------------------- [OK] + +Ran 1 Routine, 2 Entry Tags +Checked 2 tests, with 0 failures and encountered 0 errors......... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +................................................................................ + +Ran 7 Routines, 39 Entry Tags +Checked 115 tests, with 7 failures and encountered 1 error. + +RUNNING COMMAND LINE UNIT TESTS FOR %utt5 +.... +BADCHKEQ^%utt5 - CHKEQ should fail on unequal value - <4> vs <3> - SET UNEQUAL +ON PURPOSE - SHOULD FAIL + +BADCHKTF^%utt5 - CHKTF should fail on false value - SET FALSE (0) ON PURPOSE - +SHOULD FAIL + +BADERROR^%utt5 - throws an error on purpose - Error: 150372778,BADERROR+6^%utt5 +,%GTM-E-EXPR, Expression expected but not found + +CALLFAIL^%utt5 - called FAIL to test it - Called FAIL to test it + +LEAKSBAD^%utt5 - check leaks with leak - LEAKSBAD TEST - X NOT SPECIFIED VARIABL +E LEAK: X + +NVLDARG1^%utt5 - check invalid arg in CHKEQ - NO VALUES INPUT TO CHKEQ^%ut - no +evaluation possible +. + +Ran 1 Routine, 11 Entry Tags +Checked 10 tests, with 5 failures and encountered 1 error. + +RUNNING UNIT TESTS FOR %utt5 VIA GUI CALLS - Silent + +NOW RUNNING UNIT TESTS FOR %uttcovr + +...................................................................... + +Ran 1 Routine, 9 Entry Tags +Checked 70 tests, with 0 failures and encountered 0 errors. + +NOW RUNNING UNIT TESTS FOR %utt6 + +......... + +Ran 1 Routine, 5 Entry Tags +Checked 9 tests, with 0 failures and encountered 0 errors. + +------------ SUMMARY ------------ +Ran 18 Routines, 112 Entry Tags +Checked 398 tests, with 14 failures and encountered 2 errors. + +Routine %ut (100.00%) 256 out of 256 lines covered + - Detailed Breakdown + Tag %ut^%ut (100.00%) 2 out of 2 lines covered + Tag CHKEQ^%ut (100.00%) 17 out of 17 lines covered + Tag CHKLEAKS^%ut (100.00%) 13 out of 13 lines covered + Tag CHKTF^%ut (100.00%) 14 out of 14 lines covered + Tag COV^%ut (100.00%) 2 out of 2 lines covered + Tag COVERAGE^%ut (100.00%) 2 out of 2 lines covered + Tag DOSET^%ut (100.00%) 6 out of 6 lines covered + Tag EN^%ut (100.00%) 7 out of 7 lines covered + Tag EN1^%ut (100.00%) 44 out of 44 lines covered + Tag ERROR^%ut (100.00%) 9 out of 9 lines covered + Tag ERROR1^%ut (100.00%) 7 out of 7 lines covered + Tag FAIL^%ut (100.00%) 2 out of 2 lines covered + Tag GETLIST^%ut (100.00%) 11 out of 11 lines covered + Tag GETSET^%ut (100.00%) 4 out of 4 lines covered + Tag GETUTVAL^%ut (100.00%) 5 out of 5 lines covered + Tag GUILOAD^%ut (100.00%) 8 out of 8 lines covered + Tag GUINEXT^%ut (100.00%) 43 out of 43 lines covered + Tag GUISET^%ut (100.00%) 8 out of 8 lines covered + Tag ISUTEST^%ut (100.00%) 1 out of 1 lines covered + Tag LOAD^%ut (100.00%) 10 out of 10 lines covered + Tag LSTUTVAL^%ut (100.00%) 4 out of 4 lines covered + Tag MULTAPIS^%ut (100.00%) 2 out of 2 lines covered + Tag PICKSET^%ut (100.00%) 3 out of 3 lines covered + Tag RUNSET^%ut (100.00%) 9 out of 9 lines covered + Tag SETUT^%ut (100.00%) 6 out of 6 lines covered + Tag SUCCEED^%ut (100.00%) 6 out of 6 lines covered + Tag VERBOSE^%ut (100.00%) 7 out of 7 lines covered + Tag VERBOSE1^%ut (100.00%) 4 out of 4 lines covered + +Routine %ut1 (84.70%) 227 out of 268 lines covered + - Detailed Breakdown + Tag %ut1^%ut1 (100.00%) 2 out of 2 lines covered + Tag ACTLINES^%ut1 (100.00%) 8 out of 8 lines covered + Tag CACHECOV^%ut1 (100.00%) 12 out of 12 lines covered + Tag CHECKTAG^%ut1 (100.00%) 10 out of 10 lines covered + Tag CHEKTEST^%ut1 (100.00%) 9 out of 9 lines covered + Tag COV^%ut1 (53.85%) 35 out of 65 lines covered + the following is a list of the lines **NOT** covered + COV+31 . S NMSP1=NMSP I NMSP["*" S NMSP1=$P(NMSP,"*") + COV+32 . I $D(^$R(NMSP1)) S RTNS(NMSP1)="" + COV+33 . I NMSP["*" S RTN=NMSP1 F S RTN=$O(^$R(RTN)) Q:RTN'[NMSP1 S RTN +S(RTN)="" + COV+34 . Q + COV+45 . K ^TMP("%utCOVCOHORTSAV",$J) + COV+46 . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) + COV+47 . K ^TMP("%utCOVRESULT",$J) + COV+48 . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 + COV+50 . I (+$SY=47) VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M +START PROFILING + COV+53 . . S STATUS=##class(%Monitor.System.LineByLine).Start($lb(NMSP),$ +lb("RtnLine"),$lb($j)) + COV+54 . . I +STATUS'=1 D DecomposeStatus^%apiOBJ(STATUS,.ERR,"-d") F I=1 +:1:ERR W ERR(I),! + COV+55 . . I +STATUS'=1 K ERR S EXIT=1 + COV+56 . . Q + COV+70 . I (+$SY=0) ; CACHE SPECIFIC + COV+71 . K %utcovxx,^TMP("%utcovrunning",$J) + COV+72 . Q + COV+75 . I (+$SY=0) D ; CACHE SPECIFIC CODE + COV+76 . . S COVERSAV=$NA(^TMP("%utCOVCOHORTSAV",$J)) K @COVERSAV + COV+77 . . S COVER=$NA(^TMP("%utCOVCOHORT",$J)) K @COVER + COV+78 . . D CACHECOV(COVERSAV,COVER) + COV+79 . . D TOTAGS(COVERSAV,0),TOTAGS(COVER,1) + COV+80 . . D ##class(%Monitor.System.LineByLine).Stop() + COV+81 . . Q + COV+82 . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J +))) ; Venn diagram matching between globals + COV+84 . I VERBOSITY=-1 D + COV+85 . . K ^TMP("%utCOVREPORT",$J) + COV+86 . . D COVRPTGL($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOH +ORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),$NA(^TMP("%utCOVREPORT",$J))) + COV+87 . . Q + COV+88 . E D COVRPT($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHO +RT",$J)),$NA(^TMP("%utCOVRESULT",$J)),VERBOSITY) + COV+89 . Q + Tag COVCOV^%ut1 (100.00%) 9 out of 9 lines covered + Tag COVRPT^%ut1 (100.00%) 5 out of 5 lines covered + Tag COVRPTGL^%ut1 (100.00%) 14 out of 14 lines covered + Tag COVRPTLS^%ut1 (100.00%) 31 out of 31 lines covered + Tag FAIL^%ut1 (100.00%) 12 out of 12 lines covered + Tag GETTREE^%ut1 (100.00%) 7 out of 7 lines covered + Tag GETVALS^%ut1 (0.00%) 0 out of 11 lines covered + the following is a list of the lines **NOT** covered + GETVALS+2 N LINE,MORE,ROUNAME,RSET,VAL,X + GETVALS+4 S RSET=##class(%ResultSet).%New("%Monitor.System.LineByLine:Res +ult") + GETVALS+5 S ROUNAME=##class(%Monitor.System.LineByLine).GetRoutineName(RO +UNUM) + GETVALS+6 S LINE=RSET.Execute(ROUNAME) + GETVALS+7 F LINE=1:1 S MORE=RSET.Next() Q:'MORE D + GETVALS+8 . S X=RSET.GetData(1) + GETVALS+9 . S VAL=$LI(X,MTRICNUM) + GETVALS+10 . S @GLOB@(ROUNAME,LINE,"C")=+VAL ; values are 0 if not seen, +otherwises positive number + GETVALS+11 . Q + GETVALS+12 D RSET.Close() + GETVALS+13 Q + Tag ISUTEST^%ut1 (100.00%) 1 out of 1 lines covered + Tag LINEDATA^%ut1 (100.00%) 9 out of 9 lines covered + Tag NEWSTYLE^%ut1 (100.00%) 4 out of 4 lines covered + Tag NVLDARG^%ut1 (100.00%) 11 out of 11 lines covered + Tag RESETIO^%ut1 (100.00%) 2 out of 2 lines covered + Tag RTNANAL^%ut1 (100.00%) 30 out of 30 lines covered + Tag SETIO^%ut1 (100.00%) 2 out of 2 lines covered + Tag TOTAGS^%ut1 (100.00%) 13 out of 13 lines covered + Tag UP^%ut1 (100.00%) 1 out of 1 lines covered + +Routine %utcover (100.00%) 79 out of 79 lines covered + - Detailed Breakdown + Tag %utcover^%utcover (100.00%) 2 out of 2 lines covered + Tag COVENTRY^%utcover (100.00%) 14 out of 14 lines covered + Tag COVERAGE^%utcover (100.00%) 13 out of 13 lines covered + Tag LIST^%utcover (100.00%) 38 out of 38 lines covered + Tag MULTAPIS^%utcover (100.00%) 5 out of 5 lines covered + Tag SETROUS^%utcover (100.00%) 4 out of 4 lines covered + Tag TRIMDATA^%utcover (100.00%) 3 out of 3 lines covered + +Routine %ut (100.00%) 256 out of 256 lines covered + - Summary + Tag %ut^%ut (100.00%) 2 out of 2 lines covered + Tag CHKEQ^%ut (100.00%) 17 out of 17 lines covered + Tag CHKLEAKS^%ut (100.00%) 13 out of 13 lines covered + Tag CHKTF^%ut (100.00%) 14 out of 14 lines covered + Tag COV^%ut (100.00%) 2 out of 2 lines covered + Tag COVERAGE^%ut (100.00%) 2 out of 2 lines covered + Tag DOSET^%ut (100.00%) 6 out of 6 lines covered + Tag EN^%ut (100.00%) 7 out of 7 lines covered + Tag EN1^%ut (100.00%) 44 out of 44 lines covered + Tag ERROR^%ut (100.00%) 9 out of 9 lines covered + Tag ERROR1^%ut (100.00%) 7 out of 7 lines covered + Tag FAIL^%ut (100.00%) 2 out of 2 lines covered + Tag GETLIST^%ut (100.00%) 11 out of 11 lines covered + Tag GETSET^%ut (100.00%) 4 out of 4 lines covered + Tag GETUTVAL^%ut (100.00%) 5 out of 5 lines covered + Tag GUILOAD^%ut (100.00%) 8 out of 8 lines covered + Tag GUINEXT^%ut (100.00%) 43 out of 43 lines covered + Tag GUISET^%ut (100.00%) 8 out of 8 lines covered + Tag ISUTEST^%ut (100.00%) 1 out of 1 lines covered + Tag LOAD^%ut (100.00%) 10 out of 10 lines covered + Tag LSTUTVAL^%ut (100.00%) 4 out of 4 lines covered + Tag MULTAPIS^%ut (100.00%) 2 out of 2 lines covered + Tag PICKSET^%ut (100.00%) 3 out of 3 lines covered + Tag RUNSET^%ut (100.00%) 9 out of 9 lines covered + Tag SETUT^%ut (100.00%) 6 out of 6 lines covered + Tag SUCCEED^%ut (100.00%) 6 out of 6 lines covered + Tag VERBOSE^%ut (100.00%) 7 out of 7 lines covered + Tag VERBOSE1^%ut (100.00%) 4 out of 4 lines covered + +Routine %ut1 (84.70%) 227 out of 268 lines covered + - Summary + Tag %ut1^%ut1 (100.00%) 2 out of 2 lines covered + Tag ACTLINES^%ut1 (100.00%) 8 out of 8 lines covered + Tag CACHECOV^%ut1 (100.00%) 12 out of 12 lines covered + Tag CHECKTAG^%ut1 (100.00%) 10 out of 10 lines covered + Tag CHEKTEST^%ut1 (100.00%) 9 out of 9 lines covered + Tag COV^%ut1 (53.85%) 35 out of 65 lines covered + Tag COVCOV^%ut1 (100.00%) 9 out of 9 lines covered + Tag COVRPT^%ut1 (100.00%) 5 out of 5 lines covered + Tag COVRPTGL^%ut1 (100.00%) 14 out of 14 lines covered + Tag COVRPTLS^%ut1 (100.00%) 31 out of 31 lines covered + Tag FAIL^%ut1 (100.00%) 12 out of 12 lines covered + Tag GETTREE^%ut1 (100.00%) 7 out of 7 lines covered + Tag GETVALS^%ut1 (0.00%) 0 out of 11 lines covered + Tag ISUTEST^%ut1 (100.00%) 1 out of 1 lines covered + Tag LINEDATA^%ut1 (100.00%) 9 out of 9 lines covered + Tag NEWSTYLE^%ut1 (100.00%) 4 out of 4 lines covered + Tag NVLDARG^%ut1 (100.00%) 11 out of 11 lines covered + Tag RESETIO^%ut1 (100.00%) 2 out of 2 lines covered + Tag RTNANAL^%ut1 (100.00%) 30 out of 30 lines covered + Tag SETIO^%ut1 (100.00%) 2 out of 2 lines covered + Tag TOTAGS^%ut1 (100.00%) 13 out of 13 lines covered + Tag UP^%ut1 (100.00%) 1 out of 1 lines covered + +Routine %utcover (100.00%) 79 out of 79 lines covered + - Summary + Tag %utcover^%utcover (100.00%) 2 out of 2 lines covered + Tag COVENTRY^%utcover (100.00%) 14 out of 14 lines covered + Tag COVERAGE^%utcover (100.00%) 13 out of 13 lines covered + Tag LIST^%utcover (100.00%) 38 out of 38 lines covered + Tag MULTAPIS^%utcover (100.00%) 5 out of 5 lines covered + Tag SETROUS^%utcover (100.00%) 4 out of 4 lines covered + Tag TRIMDATA^%utcover (100.00%) 3 out of 3 lines covered + +Routine %ut (100.00%) 256 out of 256 lines covered +Routine %ut1 (84.70%) 227 out of 268 lines covered +Routine %utcover (100.00%) 79 out of 79 lines covered + +Overall Analysis 562 out of 603 lines covered (93% coverage) + +VISTA2A>D H^XUS + +Logged out at Dec 10, 2015 7:04 pm +VISTA2A>D H^XUS diff --git a/M-Unit Test Manual 10Aug2015.pdf b/M-Unit Test Manual 10Aug2015.pdf deleted file mode 100644 index 07367e9..0000000 Binary files a/M-Unit Test Manual 10Aug2015.pdf and /dev/null differ diff --git a/M-Unit Test Manual 14Sep2015.docx b/M-Unit Test Manual 12Dec2015.docx similarity index 95% rename from M-Unit Test Manual 14Sep2015.docx rename to M-Unit Test Manual 12Dec2015.docx index 54c075c..2df2148 100644 Binary files a/M-Unit Test Manual 14Sep2015.docx and b/M-Unit Test Manual 12Dec2015.docx differ diff --git a/M-Unit Test Manual 14Sep2015.pdf b/M-Unit Test Manual 12Dec2015.pdf similarity index 76% rename from M-Unit Test Manual 14Sep2015.pdf rename to M-Unit Test Manual 12Dec2015.pdf index 11bf94e..16ddd2b 100644 Binary files a/M-Unit Test Manual 14Sep2015.pdf and b/M-Unit Test Manual 12Dec2015.pdf differ diff --git a/MASH-0_2-0_M-Unit_Test_151008.KID b/MASH_0.3_0_151207.KID similarity index 82% rename from MASH-0_2-0_M-Unit_Test_151008.KID rename to MASH_0.3_0_151207.KID index ca325b9..37e36cb 100644 --- a/MASH-0_2-0_M-Unit_Test_151008.KID +++ b/MASH_0.3_0_151207.KID @@ -1,267 +1,191 @@ -KIDS Distribution saved on Oct 08, 2015@19:44:14 -M-Unit with updated PRE-INSTALL routine for Cache -**KIDS**:MASH*0.2*0^ +KIDS Distribution saved on Dec 07, 2015@17:14:06 +Update with coverage for Cache systems +**KIDS**:MASH*0.3*0^ **INSTALL NAME** -MASH*0.2*0 -"BLD",9544,0) -MASH*0.2*0^MASH UTILITIES^0^3151008^n -"BLD",9544,1,0) -^^40^40^3150914^^^^ -"BLD",9544,1,1,0) -Changes to functionality include: -"BLD",9544,1,2,0) - -"BLD",9544,1,3,0) -STARTUP and SHUTDOWN will be run in each routine instead of the first -"BLD",9544,1,4,0) -instance of STARTUP and SHUTDOWN encountered being the only ones that -"BLD",9544,1,5,0) -were run. This change was made because of possible suites of tests -"BLD",9544,1,6,0) -which have their own STARTUP and SHUTDOWN that need to be run. Also, -"BLD",9544,1,7,0) -it does not depend on the order in which test routines are run. -"BLD",9544,1,8,0) - -"BLD",9544,1,9,0) -While the coverage functionality can only be run on GT.M systems at -"BLD",9544,1,10,0) -the present time, the routine %utcover has been added to provide -"BLD",9544,1,11,0) -additional ability to run a number of unit tests at one time so that -"BLD",9544,1,12,0) -coverage across all of them can be obtained in one run, this includes -"BLD",9544,1,13,0) -the ability to specify entry at different APIs (e.g., if both verbose -"BLD",9544,1,14,0) -and nonverbose entries are available) as well as run code which is not -"BLD",9544,1,15,0) -part of a unit test to include in the analysis. The routine %uttcovr -"BLD",9544,1,16,0) -uses this functionality to provide a means of doing coverage analysis -"BLD",9544,1,17,0) -on the %ut routines and can be used as an example of its usage. -"BLD",9544,1,18,0) - -"BLD",9544,1,19,0) -A new tag (COV) has been added to the %ut routine (it simply calls -"BLD",9544,1,20,0) -the one in %ut1) so that all user APIs can be accessed within the %ut -"BLD",9544,1,21,0) -routine. -"BLD",9544,1,22,0) - -"BLD",9544,1,23,0) -The tag MULTAPIS^%ut was created to run multiple sets of unit tests -"BLD",9544,1,24,0) -together without doing coverage analysis. -"BLD",9544,1,25,0) - -"BLD",9544,1,26,0) -The tag COVERAGE^%ut can be used in GT.M systems to run coverage -"BLD",9544,1,27,0) -analyses on multiple sets of unit tests together in a manner similar -"BLD",9544,1,28,0) -to that offered by MULTAPIS. -"BLD",9544,1,29,0) - -"BLD",9544,1,30,0) -The tag GETUTVAL^%ut can be called after each unit test set is called -"BLD",9544,1,31,0) -to obtain cumulative totals over a number of tests run together. -"BLD",9544,1,32,0) - -"BLD",9544,1,33,0) -The tag LSTUTVAL^%ut can be called to list the data in the array generated -"BLD",9544,1,34,0) -by GETUTVAL^%ut with a heading of SUMMARY. -"BLD",9544,1,35,0) - -"BLD",9544,1,36,0) -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) +MASH*0.3*0 +"BLD",9545,0) +MASH*0.3*0^MASH UTILITIES^0^3151207^n +"BLD",9545,1,0) +^^2^2^3151207^ +"BLD",9545,1,1,0) +This update adds the ability to perform coverage analysis on Cache +"BLD",9545,1,2,0) +systems as well as GT.M systems. +"BLD",9545,4,0) ^9.64PA^17.9001^1 -"BLD",9544,4,17.9001,0) +"BLD",9545,4,17.9001,0) 17.9001 -"BLD",9544,4,17.9001,222) -y^y^f^^n^^y^o^n -"BLD",9544,4,"B",17.9001,17.9001) +"BLD",9545,4,17.9001,222) +y^y^f^^n^^y^a^n +"BLD",9545,4,"B",17.9001,17.9001) -"BLD",9544,6.3) -13 -"BLD",9544,"ABPKG") -n -"BLD",9544,"INI") +"BLD",9545,6.3) +1 +"BLD",9545,"INI") ZZUTPRE -"BLD",9544,"INID") -^n^n -"BLD",9544,"INIT") +"BLD",9545,"INID") +^y^y +"BLD",9545,"INIT") ZZUTPOST -"BLD",9544,"KRN",0) +"BLD",9545,"KRN",0) ^9.67PA^779.2^20 -"BLD",9544,"KRN",.4,0) +"BLD",9545,"KRN",.4,0) .4 -"BLD",9544,"KRN",.401,0) +"BLD",9545,"KRN",.401,0) .401 -"BLD",9544,"KRN",.402,0) +"BLD",9545,"KRN",.402,0) .402 -"BLD",9544,"KRN",.403,0) +"BLD",9545,"KRN",.403,0) .403 -"BLD",9544,"KRN",.5,0) +"BLD",9545,"KRN",.5,0) .5 -"BLD",9544,"KRN",.84,0) +"BLD",9545,"KRN",.84,0) .84 -"BLD",9544,"KRN",3.6,0) +"BLD",9545,"KRN",3.6,0) 3.6 -"BLD",9544,"KRN",3.8,0) +"BLD",9545,"KRN",3.8,0) 3.8 -"BLD",9544,"KRN",9.2,0) +"BLD",9545,"KRN",9.2,0) 9.2 -"BLD",9544,"KRN",9.8,0) +"BLD",9545,"KRN",9.8,0) 9.8 -"BLD",9544,"KRN",9.8,"NM",0) +"BLD",9545,"KRN",9.8,"NM",0) ^9.68A^10^10 -"BLD",9544,"KRN",9.8,"NM",1,0) -ut^^0^B196383387 -"BLD",9544,"KRN",9.8,"NM",2,0) -ut1^^0^B205168514 -"BLD",9544,"KRN",9.8,"NM",3,0) -utt1^^0^B28788704 -"BLD",9544,"KRN",9.8,"NM",4,0) +"BLD",9545,"KRN",9.8,"NM",1,0) +ut^^0^B229598217 +"BLD",9545,"KRN",9.8,"NM",2,0) +ut1^^0^B226313375 +"BLD",9545,"KRN",9.8,"NM",3,0) +utcover^^0^B52893402 +"BLD",9545,"KRN",9.8,"NM",4,0) +utt1^^0^B39370749 +"BLD",9545,"KRN",9.8,"NM",5,0) utt2^^0^B501728 -"BLD",9544,"KRN",9.8,"NM",5,0) +"BLD",9545,"KRN",9.8,"NM",6,0) utt3^^0^B1628564 -"BLD",9544,"KRN",9.8,"NM",6,0) -utt4^^0^B1522726 -"BLD",9544,"KRN",9.8,"NM",7,0) +"BLD",9545,"KRN",9.8,"NM",7,0) +utt4^^0^B1568129 +"BLD",9545,"KRN",9.8,"NM",8,0) utt5^^0^B23054235 -"BLD",9544,"KRN",9.8,"NM",8,0) -utt6^^0^B30891565 -"BLD",9544,"KRN",9.8,"NM",9,0) -uttcovr^^0^B146530441 -"BLD",9544,"KRN",9.8,"NM",10,0) -utcover^^0^B32934852 -"BLD",9544,"KRN",9.8,"NM","B","ut",1) +"BLD",9545,"KRN",9.8,"NM",9,0) +utt6^^0^B39118749 +"BLD",9545,"KRN",9.8,"NM",10,0) +uttcovr^^0^B186023122 +"BLD",9545,"KRN",9.8,"NM","B","ut",1) -"BLD",9544,"KRN",9.8,"NM","B","ut1",2) +"BLD",9545,"KRN",9.8,"NM","B","ut1",2) -"BLD",9544,"KRN",9.8,"NM","B","utcover",10) +"BLD",9545,"KRN",9.8,"NM","B","utcover",3) -"BLD",9544,"KRN",9.8,"NM","B","utt1",3) +"BLD",9545,"KRN",9.8,"NM","B","utt1",4) -"BLD",9544,"KRN",9.8,"NM","B","utt2",4) +"BLD",9545,"KRN",9.8,"NM","B","utt2",5) -"BLD",9544,"KRN",9.8,"NM","B","utt3",5) +"BLD",9545,"KRN",9.8,"NM","B","utt3",6) -"BLD",9544,"KRN",9.8,"NM","B","utt4",6) +"BLD",9545,"KRN",9.8,"NM","B","utt4",7) -"BLD",9544,"KRN",9.8,"NM","B","utt5",7) +"BLD",9545,"KRN",9.8,"NM","B","utt5",8) -"BLD",9544,"KRN",9.8,"NM","B","utt6",8) +"BLD",9545,"KRN",9.8,"NM","B","utt6",9) -"BLD",9544,"KRN",9.8,"NM","B","uttcovr",9) +"BLD",9545,"KRN",9.8,"NM","B","uttcovr",10) -"BLD",9544,"KRN",19,0) +"BLD",9545,"KRN",19,0) 19 -"BLD",9544,"KRN",19,"NM",0) +"BLD",9545,"KRN",19,"NM",0) ^9.68A^3^3 -"BLD",9544,"KRN",19,"NM",1,0) +"BLD",9545,"KRN",19,"NM",1,0) utMUNIT^^0 -"BLD",9544,"KRN",19,"NM",2,0) +"BLD",9545,"KRN",19,"NM",2,0) utMUNIT GROUP EDIT^^0 -"BLD",9544,"KRN",19,"NM",3,0) +"BLD",9545,"KRN",19,"NM",3,0) utMUNIT GROUP RUN^^0 -"BLD",9544,"KRN",19,"NM","B","utMUNIT",1) +"BLD",9545,"KRN",19,"NM","B","utMUNIT",1) -"BLD",9544,"KRN",19,"NM","B","utMUNIT GROUP EDIT",2) +"BLD",9545,"KRN",19,"NM","B","utMUNIT GROUP EDIT",2) -"BLD",9544,"KRN",19,"NM","B","utMUNIT GROUP RUN",3) +"BLD",9545,"KRN",19,"NM","B","utMUNIT GROUP RUN",3) -"BLD",9544,"KRN",19.1,0) +"BLD",9545,"KRN",19.1,0) 19.1 -"BLD",9544,"KRN",101,0) +"BLD",9545,"KRN",101,0) 101 -"BLD",9544,"KRN",409.61,0) +"BLD",9545,"KRN",409.61,0) 409.61 -"BLD",9544,"KRN",771,0) +"BLD",9545,"KRN",771,0) 771 -"BLD",9544,"KRN",779.2,0) +"BLD",9545,"KRN",779.2,0) 779.2 -"BLD",9544,"KRN",870,0) +"BLD",9545,"KRN",870,0) 870 -"BLD",9544,"KRN",8989.51,0) +"BLD",9545,"KRN",8989.51,0) 8989.51 -"BLD",9544,"KRN",8989.52,0) +"BLD",9545,"KRN",8989.52,0) 8989.52 -"BLD",9544,"KRN",8994,0) +"BLD",9545,"KRN",8994,0) 8994 -"BLD",9544,"KRN",8994,"NM",0) +"BLD",9545,"KRN",8994,"NM",0) ^9.68A^3^3 -"BLD",9544,"KRN",8994,"NM",1,0) +"BLD",9545,"KRN",8994,"NM",1,0) utMUNIT-TEST GROUP LOAD^^0 -"BLD",9544,"KRN",8994,"NM",2,0) +"BLD",9545,"KRN",8994,"NM",2,0) utMUNIT-TEST LOAD^^0 -"BLD",9544,"KRN",8994,"NM",3,0) +"BLD",9545,"KRN",8994,"NM",3,0) utMUNIT-TEST NEXT^^0 -"BLD",9544,"KRN",8994,"NM","B","utMUNIT-TEST GROUP LOAD",1) +"BLD",9545,"KRN",8994,"NM","B","utMUNIT-TEST GROUP LOAD",1) -"BLD",9544,"KRN",8994,"NM","B","utMUNIT-TEST LOAD",2) +"BLD",9545,"KRN",8994,"NM","B","utMUNIT-TEST LOAD",2) -"BLD",9544,"KRN",8994,"NM","B","utMUNIT-TEST NEXT",3) +"BLD",9545,"KRN",8994,"NM","B","utMUNIT-TEST NEXT",3) -"BLD",9544,"KRN","B",.4,.4) +"BLD",9545,"KRN","B",.4,.4) -"BLD",9544,"KRN","B",.401,.401) +"BLD",9545,"KRN","B",.401,.401) -"BLD",9544,"KRN","B",.402,.402) +"BLD",9545,"KRN","B",.402,.402) -"BLD",9544,"KRN","B",.403,.403) +"BLD",9545,"KRN","B",.403,.403) -"BLD",9544,"KRN","B",.5,.5) +"BLD",9545,"KRN","B",.5,.5) -"BLD",9544,"KRN","B",.84,.84) +"BLD",9545,"KRN","B",.84,.84) -"BLD",9544,"KRN","B",3.6,3.6) +"BLD",9545,"KRN","B",3.6,3.6) -"BLD",9544,"KRN","B",3.8,3.8) +"BLD",9545,"KRN","B",3.8,3.8) -"BLD",9544,"KRN","B",9.2,9.2) +"BLD",9545,"KRN","B",9.2,9.2) -"BLD",9544,"KRN","B",9.8,9.8) +"BLD",9545,"KRN","B",9.8,9.8) -"BLD",9544,"KRN","B",19,19) +"BLD",9545,"KRN","B",19,19) -"BLD",9544,"KRN","B",19.1,19.1) +"BLD",9545,"KRN","B",19.1,19.1) -"BLD",9544,"KRN","B",101,101) +"BLD",9545,"KRN","B",101,101) -"BLD",9544,"KRN","B",409.61,409.61) +"BLD",9545,"KRN","B",409.61,409.61) -"BLD",9544,"KRN","B",771,771) +"BLD",9545,"KRN","B",771,771) -"BLD",9544,"KRN","B",779.2,779.2) +"BLD",9545,"KRN","B",779.2,779.2) -"BLD",9544,"KRN","B",870,870) +"BLD",9545,"KRN","B",870,870) -"BLD",9544,"KRN","B",8989.51,8989.51) +"BLD",9545,"KRN","B",8989.51,8989.51) -"BLD",9544,"KRN","B",8989.52,8989.52) +"BLD",9545,"KRN","B",8989.52,8989.52) -"BLD",9544,"KRN","B",8994,8994) +"BLD",9545,"KRN","B",8994,8994) -"BLD",9544,"QDEF") +"BLD",9545,"QDEF") ^^^^NO^^^^NO^^NO -"BLD",9544,"QUES",0) +"BLD",9545,"QUES",0) ^9.62^^ +"BLD",9545,"REQB",0) +^9.611^^ "DATA",17.9001,1,0) TESTS FOR UNIT TEST ROUTINES "DATA",17.9001,1,1,0) @@ -283,7 +207,7 @@ M-UNIT TEST GROUP "FIA",17.9001,0,0) 17.9001 "FIA",17.9001,0,1) -y^y^f^^n^^y^o^n +y^y^f^^n^^y^a^n "FIA",17.9001,0,10) "FIA",17.9001,0,11) @@ -291,7 +215,7 @@ y^y^f^^n^^y^o^n "FIA",17.9001,0,"RLRO") "FIA",17.9001,0,"VR") -0.2^MASH +0.3^MASH "FIA",17.9001,17.9001) 0 "FIA",17.9001,17.90011) @@ -393,91 +317,15 @@ MASH UTILITIES^%u^Utilities associated with the M Advanced Shell "PKG",222,22,0) ^9.49I^1^1 "PKG",222,22,1,0) -0.2 +0.3 "PKG",222,22,1,"PAH",1,0) -0^3151008^17 +0^3151207 "PKG",222,22,1,"PAH",1,1,0) -^^40^40^3151008 +^^2^2^3151207 "PKG",222,22,1,"PAH",1,1,1,0) -Changes to functionality include: +This update adds the ability to perform coverage analysis on Cache "PKG",222,22,1,"PAH",1,1,2,0) - -"PKG",222,22,1,"PAH",1,1,3,0) -STARTUP and SHUTDOWN will be run in each routine instead of the first -"PKG",222,22,1,"PAH",1,1,4,0) -instance of STARTUP and SHUTDOWN encountered being the only ones that -"PKG",222,22,1,"PAH",1,1,5,0) -were run. This change was made because of possible suites of tests -"PKG",222,22,1,"PAH",1,1,6,0) -which have their own STARTUP and SHUTDOWN that need to be run. Also, -"PKG",222,22,1,"PAH",1,1,7,0) -it does not depend on the order in which test routines are run. -"PKG",222,22,1,"PAH",1,1,8,0) - -"PKG",222,22,1,"PAH",1,1,9,0) -While the coverage functionality can only be run on GT.M systems at -"PKG",222,22,1,"PAH",1,1,10,0) -the present time, the routine %utcover has been added to provide -"PKG",222,22,1,"PAH",1,1,11,0) -additional ability to run a number of unit tests at one time so that -"PKG",222,22,1,"PAH",1,1,12,0) -coverage across all of them can be obtained in one run, this includes -"PKG",222,22,1,"PAH",1,1,13,0) -the ability to specify entry at different APIs (e.g., if both verbose -"PKG",222,22,1,"PAH",1,1,14,0) -and nonverbose entries are available) as well as run code which is not -"PKG",222,22,1,"PAH",1,1,15,0) -part of a unit test to include in the analysis. The routine %uttcovr -"PKG",222,22,1,"PAH",1,1,16,0) -uses this functionality to provide a means of doing coverage analysis -"PKG",222,22,1,"PAH",1,1,17,0) -on the %ut routines and can be used as an example of its usage. -"PKG",222,22,1,"PAH",1,1,18,0) - -"PKG",222,22,1,"PAH",1,1,19,0) -A new tag (COV) has been added to the %ut routine (it simply calls -"PKG",222,22,1,"PAH",1,1,20,0) -the one in %ut1) so that all user APIs can be accessed within the %ut -"PKG",222,22,1,"PAH",1,1,21,0) -routine. -"PKG",222,22,1,"PAH",1,1,22,0) - -"PKG",222,22,1,"PAH",1,1,23,0) -The tag MULTAPIS^%ut was created to run multiple sets of unit tests -"PKG",222,22,1,"PAH",1,1,24,0) -together without doing coverage analysis. -"PKG",222,22,1,"PAH",1,1,25,0) - -"PKG",222,22,1,"PAH",1,1,26,0) -The tag COVERAGE^%ut can be used in GT.M systems to run coverage -"PKG",222,22,1,"PAH",1,1,27,0) -analyses on multiple sets of unit tests together in a manner similar -"PKG",222,22,1,"PAH",1,1,28,0) -to that offered by MULTAPIS. -"PKG",222,22,1,"PAH",1,1,29,0) - -"PKG",222,22,1,"PAH",1,1,30,0) -The tag GETUTVAL^%ut can be called after each unit test set is called -"PKG",222,22,1,"PAH",1,1,31,0) -to obtain cumulative totals over a number of tests run together. -"PKG",222,22,1,"PAH",1,1,32,0) - -"PKG",222,22,1,"PAH",1,1,33,0) -The tag LSTUTVAL^%ut can be called to list the data in the array generated -"PKG",222,22,1,"PAH",1,1,34,0) -by GETUTVAL^%ut with a heading of SUMMARY. -"PKG",222,22,1,"PAH",1,1,35,0) - -"PKG",222,22,1,"PAH",1,1,36,0) -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. +systems as well as GT.M systems. "QUES","XPF1",0) Y "QUES","XPF1","??") @@ -555,9 +403,9 @@ D XPZ2^XPDIQ "RTN","ZZUTPOST",1,0) %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 13 + ;;0.3;MASH UTILITIES;;;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ZZUTPOST",4,0) ; Original routine authored by Sam H. Habiel 07/2013-04/2014 "RTN","ZZUTPOST",5,0) @@ -861,9 +709,9 @@ GTMPROB ; come here in case of error trying to run unit tests - checks whether r "RTN","ZZUTPRE",1,0) %utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;10/08/15 19:11 "RTN","ZZUTPRE",2,0) - ;;0.2;MASH UTILITIES;;;Build 13 + ;;0.3;MASH UTILITIES;;;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ZZUTPRE",4,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 "RTN","ZZUTPRE",5,0) @@ -959,13 +807,13 @@ CACHEMAP ; Map %ut* Globals and Routines away from %SYS in Cache "RTN","ZZUTPRE",50,0) QUIT "RTN","ut") -0^1^B196383387 +0^1^B229598217 "RTN","ut",1,0) -%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;09/14/15 09:38 +%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;12/07/15 15:32 "RTN","ut",2,0) - ;;0.2;MASH UTILITIES;;;Build 13 + ;;0.3;MASH UTILITIES;;;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ut",4,0) ; Original routine authored by Joel L. Ivey as XTMUNIT while working for U.S. Department of Veterans Affairs 2003-2012 "RTN","ut",5,0) @@ -1255,553 +1103,617 @@ VERBOSE1(%utETRY,%utI) ; Print out the entry point info "RTN","ut",147,0) CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values "RTN","ut",148,0) - I '$D(XTSTVAL) D NVLDARG^%ut1("CHKTF") Q -"RTN","ut",149,0) - D CHKTF^%ut1(XTSTVAL,$G(XTERMSG)) -"RTN","ut",150,0) - Q -"RTN","ut",151,0) - ; -"RTN","ut",152,0) -CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut",153,0) - I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG^%ut1("CHKEQ") Q -"RTN","ut",154,0) - D CHKEQ^%ut1(XTEXPECT,XTACTUAL,$G(XTERMSG)) -"RTN","ut",155,0) - Q -"RTN","ut",156,0) - ; -"RTN","ut",157,0) -FAIL(XTERMSG) ; Entry point for generating a failure message -"RTN","ut",158,0) - D FAIL^%ut1($G(XTERMSG)) -"RTN","ut",159,0) - Q -"RTN","ut",160,0) - ; -"RTN","ut",161,0) -SUCCEED ; Entry point for forcing a success (Thx David Whitten) -"RTN","ut",162,0) ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut",163,0) +"RTN","ut",149,0) ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut",164,0) - ; Switch IO and write out the dot for activity -"RTN","ut",165,0) +"RTN","ut",150,0) + ; ZEXCEPT: XTGUISEP - newed in GUINEXT +"RTN","ut",151,0) + I '$D(XTSTVAL) D NVLDARG^%ut1("CHKTF") Q +"RTN","ut",152,0) + I $G(XTERMSG)="" S XTERMSG="no failure message provided" +"RTN","ut",153,0) + S %ut("CHK")=$G(%ut("CHK"))+1 +"RTN","ut",154,0) I '$D(%utGUI) D -"RTN","ut",166,0) +"RTN","ut",155,0) . D SETIO^%ut1 -"RTN","ut",167,0) - . W "." -"RTN","ut",168,0) +"RTN","ut",156,0) + . I 'XTSTVAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " D +"RTN","ut",157,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","ut",158,0) + . . I $D(%ut("BREAK")) BREAK ; Break upon failure +"RTN","ut",159,0) + . . Q +"RTN","ut",160,0) + . I XTSTVAL W "." +"RTN","ut",161,0) . D RESETIO^%ut1 +"RTN","ut",162,0) + . Q +"RTN","ut",163,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","ut",164,0) + Q +"RTN","ut",165,0) + ; +"RTN","ut",166,0) +CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL +"RTN","ut",167,0) + N FAILMSG +"RTN","ut",168,0) + ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END "RTN","ut",169,0) - ; + ; ZEXCEPT: %ut -- NEWED IN EN "RTN","ut",170,0) - ; Increment test counter + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut",171,0) - S %ut("CHK")=%ut("CHK")+1 + I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG^%ut1("CHKEQ") Q "RTN","ut",172,0) - QUIT + S XTACTUAL=$G(XTACTUAL),XTEXPECT=$G(XTEXPECT) "RTN","ut",173,0) - ; + I $G(XTERMSG)="" S XTERMSG="no failure message provided" "RTN","ut",174,0) -CHKLEAKS(%utCODE,%utLOC,%utINPT) ; functionality to check for variable leaks on executing a section of code + S %ut("CHK")=%ut("CHK")+1 "RTN","ut",175,0) - ; %utCODE - A string that specifies the code that is to be XECUTED and checked for leaks. + I XTEXPECT'=XTACTUAL S FAILMSG="<"_XTEXPECT_"> vs <"_XTACTUAL_"> - " "RTN","ut",176,0) - ; this should be a complete piece of code (e.g., "S X=$$NOW^XLFDT()" or "D EN^%ut(""ROUNAME"")") + I '$D(%utGUI) D "RTN","ut",177,0) - ; %utLOC - A string that is used to indicate the code tested for variable leaks + . D SETIO^%ut1 "RTN","ut",178,0) - ; %utINPT - An optional variable which may be passed by reference. This may + . I XTEXPECT'=XTACTUAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W FAILMSG,XTERMSG,! D "RTN","ut",179,0) - ; be used to pass any variable values, etc. into the code to be + . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") "RTN","ut",180,0) - ; XECUTED. In this case, set the subscript to the variable name and the + . . I $D(%ut("BREAK")) BREAK ; Break upon failure "RTN","ut",181,0) - ; value of the subscripted variable to the desired value of the subscript. + . . Q "RTN","ut",182,0) - ; e.g., (using NAME as my current namespace) + . E W "." "RTN","ut",183,0) - ; S CODE="S %utINPT=$$ENTRY^ROUTINE(ZZVALUE1,ZZVALUE2)" + . D RESETIO^%ut1 "RTN","ut",184,0) - ; S NAMELOC="ENTRY^ROUTINE leak test" (or simply "ENTRY^ROUTINE") + . Q "RTN","ut",185,0) - ; S NAMEINPT("ZZVALUE1")=ZZVALUE1 + 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","ut",186,0) - ; S NAMEINPT("ZZVALUE2")=ZZVALUE2 + Q "RTN","ut",187,0) - ; D CHKLEAKS^%ut(CODE,NAMELOC,.NAMEINPT) -"RTN","ut",188,0) ; +"RTN","ut",188,0) +FAIL(XTERMSG) ; Entry point for generating a failure message "RTN","ut",189,0) - ; If part of a unit test, any leaked variables in ENTRY^ROUTINE which result + D FAIL^%ut1($G(XTERMSG)) "RTN","ut",190,0) - ; from running the code with the variables indicated will be shown as FAILUREs. + Q "RTN","ut",191,0) ; "RTN","ut",192,0) - ; If called outside of a unit test, any leaked variables will be printed to the +SUCCEED ; Entry point for forcing a success (Thx David Whitten) "RTN","ut",193,0) - ; current device. + ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END "RTN","ut",194,0) - ; + ; ZEXCEPT: %ut - NEWED IN EN "RTN","ut",195,0) - N (%utCODE,%utLOC,%utINPT,DUZ,IO,U,%utERRL,%ut,%utGUI,%utERR,%utI,%utJ,%utK,%utLIST,%utROU,%utSTRT,XTGUISEP) + ; Switch IO and write out the dot for activity "RTN","ut",196,0) - ; ZEXCEPT: %ut - part of exclusive NEW TESTS FOR EXISTENCE ONLY + I '$D(%utGUI) D "RTN","ut",197,0) - ; ZEXCEPT: %utVAR - handled by exclusive NEW + . D SETIO^%ut1 "RTN","ut",198,0) - ; + . W "." "RTN","ut",199,0) - ; ACTIVATE ANY VARIABLES PASSED AS SUBSCRIPTS TO %utINPT TO THEIR VALUES + . D RESETIO^%ut1 "RTN","ut",200,0) - S %utVAR=" " F S %utVAR=$O(%utINPT(%utVAR)) Q:%utVAR="" S (@%utVAR)=%utINPT(%utVAR) + ; "RTN","ut",201,0) - X %utCODE + ; Increment test counter "RTN","ut",202,0) - N ZZUTVAR S ZZUTVAR="%" -"RTN","ut",203,0) - I $G(%ut)=1 D -"RTN","ut",204,0) - . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) -"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) - I '($G(%ut)=1) D -"RTN","ut",208,0) - . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR -"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 -"RTN","ut",212,0) - ; -"RTN","ut",213,0) -ERROR ; record errors -"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: XTGUISEP - newed in GUINEXT -"RTN","ut",217,0) S %ut("CHK")=%ut("CHK")+1 +"RTN","ut",203,0) + QUIT +"RTN","ut",204,0) + ; +"RTN","ut",205,0) +CHKLEAKS(%utCODE,%utLOC,%utINPT) ; functionality to check for variable leaks on executing a section of code +"RTN","ut",206,0) + ; %utCODE - A string that specifies the code that is to be XECUTED and checked for leaks. +"RTN","ut",207,0) + ; this should be a complete piece of code (e.g., "S X=$$NOW^XLFDT()" or "D EN^%ut(""ROUNAME"")") +"RTN","ut",208,0) + ; %utLOC - A string that is used to indicate the code tested for variable leaks +"RTN","ut",209,0) + ; %utINPT - An optional variable which may be passed by reference. This may +"RTN","ut",210,0) + ; be used to pass any variable values, etc. into the code to be +"RTN","ut",211,0) + ; XECUTED. In this case, set the subscript to the variable name and the +"RTN","ut",212,0) + ; value of the subscripted variable to the desired value of the subscript. +"RTN","ut",213,0) + ; e.g., (using NAME as my current namespace) +"RTN","ut",214,0) + ; S CODE="S %utINPT=$$ENTRY^ROUTINE(ZZVALUE1,ZZVALUE2)" +"RTN","ut",215,0) + ; S NAMELOC="ENTRY^ROUTINE leak test" (or simply "ENTRY^ROUTINE") +"RTN","ut",216,0) + ; S NAMEINPT("ZZVALUE1")=ZZVALUE1 +"RTN","ut",217,0) + ; S NAMEINPT("ZZVALUE2")=ZZVALUE2 "RTN","ut",218,0) - I '$D(%utGUI) D ERROR1 + ; D CHKLEAKS^%ut(CODE,NAMELOC,.NAMEINPT) "RTN","ut",219,0) - I $D(%utGUI) D + ; "RTN","ut",220,0) - . S %ut("CNT")=%ut("CNT")+1 + ; If part of a unit test, any leaked variables in ENTRY^ROUTINE which result "RTN","ut",221,0) - . S %utERR=%utERR+1 + ; from running the code with the variables indicated will be shown as FAILUREs. "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 + ; If called outside of a unit test, any leaked variables will be printed to the "RTN","ut",224,0) - S @($S(+$SY=47:"$ZS",1:"$ZE")_"="_""""""),$EC="" + ; current device. "RTN","ut",225,0) - Q + ; "RTN","ut",226,0) - ; + N (%utCODE,%utLOC,%utINPT,DUZ,IO,U,%utERRL,%ut,%utGUI,%utERR,%utI,%utJ,%utK,%utLIST,%utROU,%utSTRT,XTGUISEP) "RTN","ut",227,0) -ERROR1 ; + ; ZEXCEPT: %ut - part of exclusive NEW TESTS FOR EXISTENCE ONLY "RTN","ut",228,0) - I $G(%ut("BREAK")) BREAK ; if we are asked to break upon error, please do so! + ; ZEXCEPT: %utVAR - handled by exclusive NEW "RTN","ut",229,0) - ; ZEXCEPT: %utERRL -CREATED IN SETUP, KILLED IN END + ; "RTN","ut",230,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY + ; ACTIVATE ANY VARIABLES PASSED AS SUBSCRIPTS TO %utINPT TO THEIR VALUES "RTN","ut",231,0) - D SETIO^%ut1 + S %utVAR=" " F S %utVAR=$O(%utINPT(%utVAR)) Q:%utVAR="" S (@%utVAR)=%utINPT(%utVAR) "RTN","ut",232,0) - W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - Error: " W $S(+$SY=47:$ZS,1:$ZE),! D + X %utCODE "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") + N ZZUTVAR S ZZUTVAR="%" "RTN","ut",234,0) - . Q + I $G(%ut)=1 D "RTN","ut",235,0) - D RESETIO^%ut1 + . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) "RTN","ut",236,0) - Q + . 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",237,0) - ; + . Q "RTN","ut",238,0) -ISUTEST() ; .SUPPORTED API TO DETERMINE IF CURRENTLY IN UNIT TEST + I '($G(%ut)=1) D "RTN","ut",239,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY + . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR "RTN","ut",240,0) - Q $G(%ut)=1 + . 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",241,0) - ; + . Q "RTN","ut",242,0) -PICKSET ; .OPT Interactive selection of MUnit Test Group + Q "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 +ERROR ; record errors "RTN","ut",245,0) - ; + ; ZEXCEPT: %utERRL,%utGUI,%utERR -CREATED IN SETUP, KILLED IN END "RTN","ut",246,0) -RUNSET(SETNAME,VERBOSE) ; .SR Run with Specified Selection of MUnit Test Group + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",247,0) - N Y,%utROU,%utLIST,%utVERB + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut",248,0) - Q:$G(SETNAME)="" + S %ut("CHK")=%ut("CHK")+1 "RTN","ut",249,0) - S %utVERB=$G(VERBOSE,0) + I '$D(%utGUI) D ERROR1 "RTN","ut",250,0) - S Y=+$$FIND1^DIC(17.9001,"","X",SETNAME) Q:Y'>0 + I $D(%utGUI) D "RTN","ut",251,0) - D GETSET(Y,.%utROU,.%utLIST) + . S %ut("CNT")=%ut("CNT")+1 "RTN","ut",252,0) - N Y,SETNAME,%ut + . S %utERR=%utERR+1 "RTN","ut",253,0) - D SETUT + . S @%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"ERROR"_XTGUISEP_$S(+$SY=47:$ZS,1:$ZE) "RTN","ut",254,0) - D EN1(.%utROU,%utLIST) + . Q "RTN","ut",255,0) - Q + S @($S(+$SY=47:"$ZS",1:"$ZE")_"="_""""""),$EC="" "RTN","ut",256,0) - ; + Q "RTN","ut",257,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",258,0) -DOSET(IEN,%utVERB) ; 140731 JLI added %utVERB as a second argument -"RTN","ut",259,0) - ; IEN - Internal entry number for selected set of tests in the MUNIT TEST GROUP file (#17.9001) -"RTN","ut",260,0) - ; %utVERB - optional input that indicates verbose output is permitted -"RTN","ut",261,0) ; +"RTN","ut",258,0) +ERROR1 ; +"RTN","ut",259,0) + I $G(%ut("BREAK")) BREAK ; if we are asked to break upon error, please do so! +"RTN","ut",260,0) + ; ZEXCEPT: %utERRL -CREATED IN SETUP, KILLED IN END +"RTN","ut",261,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",262,0) - N %utROU,%utLIST + D SETIO^%ut1 "RTN","ut",263,0) - I '$D(%utVERB) S %utVERB=0 + W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - Error: " W $S(+$SY=47:$ZS,1:$ZE),! D "RTN","ut",264,0) - S %utLIST=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",265,0) - D GETSET($G(IEN),.%utROU,.%utLIST) + . Q "RTN","ut",266,0) - I %utLIST>0 N IEN,%ut D SETUT,EN1(.%utROU,%utLIST) + D RESETIO^%ut1 "RTN","ut",267,0) Q "RTN","ut",268,0) ; "RTN","ut",269,0) -GETSET(IEN,%utROU,%utLIST) ; JLI 140731 - called from PICKSET, RUNSET, DOSET, GUISET +ISUTEST() ; .SUPPORTED API TO DETERMINE IF CURRENTLY IN UNIT TEST "RTN","ut",270,0) - N IENS,%utROOT + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",271,0) - S IENS=IEN_"," D GETS^DIQ(17.9001,IENS,"1*","","%utROOT") + Q $G(%ut)=1 "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 +PICKSET ; .OPT Interactive selection of MUnit Test Group "RTN","ut",274,0) - ; + N DIC,Y,%utROU,%utLIST,DIR "RTN","ut",275,0) -COV(NMSP,COVCODE,VERBOSITY) ; simply make it callable from %ut1 as well (along with other APIs) JLI 150101 + I '$$ISUTEST^%ut() 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",276,0) - D COV^%ut1(NMSP,COVCODE,+$G(VERBOSITY)) ; see COV^%ut1 for description of arguments + Q "RTN","ut",277,0) - Q + ; "RTN","ut",278,0) - ; +RUNSET(SETNAME,VERBOSE) ; .SR Run with Specified Selection of MUnit Test Group "RTN","ut",279,0) -MULTAPIS(TESTROUS) ; .SR - RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS + N Y,%utROU,%utLIST,%utVERB "RTN","ut",280,0) - ; input - TESTROUS - passed by reference + Q:$G(SETNAME)="" "RTN","ut",281,0) - ; see TESTONLY in routine %utcover for full description of TESTROUS argument + S %utVERB=$G(VERBOSE,0) "RTN","ut",282,0) - D MULTAPIS^%utcover(.TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS + S Y=+$$FIND1^DIC(17.9001,"","X",SETNAME) Q:Y'>0 "RTN","ut",283,0) - Q + D GETSET(Y,.%utROU,.%utLIST) "RTN","ut",284,0) - ; + N Y,SETNAME,%ut "RTN","ut",285,0) -COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ;.SR - run coverage analysis for multiple routines and entry points + D SETUT "RTN","ut",286,0) - ; input ROUNMSP + D EN1(.%utROU,%utLIST) "RTN","ut",287,0) - ; input TESTROUS - passed by reference -"RTN","ut",288,0) - ; input XCLDROUS - passed by reference -"RTN","ut",289,0) - ; input RESLTLVL -"RTN","ut",290,0) - ; see COVERAGE in routine %utcover for full description of arguments -"RTN","ut",291,0) - D COVERAGE^%utcover(ROUNMSP,.TESTROUS,.XCLDROUS,+$G(RESLTLVL)) -"RTN","ut",292,0) Q +"RTN","ut",288,0) + ; +"RTN","ut",289,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",290,0) +DOSET(IEN,%utVERB) ; 140731 JLI added %utVERB as a second argument +"RTN","ut",291,0) + ; IEN - Internal entry number for selected set of tests in the MUNIT TEST GROUP file (#17.9001) +"RTN","ut",292,0) + ; %utVERB - optional input that indicates verbose output is permitted "RTN","ut",293,0) ; "RTN","ut",294,0) -GETUTVAL(UTDATA) ; .SR - returns totals for current unit test data in cumulative totals + N %utROU,%utLIST "RTN","ut",295,0) - ; usage D GETUTVAL^%ut(.UTDATA) + I '$D(%utVERB) S %utVERB=0 "RTN","ut",296,0) - ; input - UTDATA - passed by reference + S %utLIST=0 "RTN","ut",297,0) - ; + D GETSET($G(IEN),.%utROU,.%utLIST) "RTN","ut",298,0) - ; subscripted values returned: + I %utLIST>0 N IEN,%ut D SETUT,EN1(.%utROU,%utLIST) "RTN","ut",299,0) - ; 1) cumulative number of routines run; 2) cumulative number of entry tags; + Q "RTN","ut",300,0) - ; 3) cumulative number of tests; 4) cummulative number of failures; + ; "RTN","ut",301,0) - ; 5) cumulative number of errors +GETSET(IEN,%utROU,%utLIST) ; JLI 140731 - called from PICKSET, RUNSET, DOSET, GUISET "RTN","ut",302,0) - N VALS,I,VAL + N IENS,%utROOT "RTN","ut",303,0) - S VALS=$G(^TMP("%ut",$J,"UTVALS")) I VALS="" Q + S IENS=IEN_"," D GETS^DIQ(17.9001,IENS,"1*","","%utROOT") "RTN","ut",304,0) - F I=1:1 S VAL=$P(VALS,U,I) Q:VAL="" S UTDATA(I)=$G(UTDATA(I))+VAL + 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",305,0) - K ^TMP("%ut",$J,"UTVALS") + Q "RTN","ut",306,0) - Q + ; "RTN","ut",307,0) - ; +COV(NMSP,COVCODE,VERBOSITY) ; simply make it callable from %ut1 as well (along with other APIs) JLI 150101 "RTN","ut",308,0) -LSTUTVAL(UTDATA) ; .SR - lists cumulative totals in UTDATA array + D COV^%ut1(NMSP,COVCODE,+$G(VERBOSITY)) ; see COV^%ut1 for description of arguments "RTN","ut",309,0) - ; usage D LSTUTVAL^%ut(.UTDATA) -"RTN","ut",310,0) - ; input - UTDATA - passed by reference -"RTN","ut",311,0) - W !!!,"------------ SUMMARY ------------" -"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",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",314,0) Q -"RTN","ut",315,0) +"RTN","ut",310,0) ; +"RTN","ut",311,0) +MULTAPIS(TESTROUS) ; .SR - RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS +"RTN","ut",312,0) + ; input - TESTROUS - passed by reference +"RTN","ut",313,0) + ; see TESTONLY in routine %utcover for full description of TESTROUS argument +"RTN","ut",314,0) + D MULTAPIS^%utcover(.TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS +"RTN","ut",315,0) + Q "RTN","ut",316,0) ; "RTN","ut",317,0) -GUISET(%utRSLT,XTSET) ; Entry point for GUI start with selected Test Set IEN - called by %ut-TEST GROUP LOAD rpc +COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ;.SR - run coverage analysis for multiple routines and entry points "RTN","ut",318,0) - N %utROU,%utLIST,%ut + ; input ROUNMSP "RTN","ut",319,0) - D SETUT + ; input TESTROUS - passed by reference "RTN","ut",320,0) - S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") + ; input XCLDROUS - passed by reference "RTN","ut",321,0) - D GETSET(XTSET,.%utROU,.%utLIST) + ; input RESLTLVL "RTN","ut",322,0) - D GETLIST(.%utROU,%utLIST,%ut("RSLT")) + ; see COVERAGE in routine %utcover for full description of arguments "RTN","ut",323,0) - S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version + D COVERAGE^%utcover(ROUNMSP,.TESTROUS,.XCLDROUS,+$G(RESLTLVL)) "RTN","ut",324,0) - S %utRSLT=%ut("RSLT") + Q "RTN","ut",325,0) - Q + ; "RTN","ut",326,0) - ; +GETUTVAL(UTDATA) ; .SR - returns totals for current unit test data in cumulative totals "RTN","ut",327,0) -GUILOAD(%utRSLT,%utROUN) ; Entry point for GUI start with %utROUN containing primary routine name - called by %ut-TEST LOAD rpc + ; usage D GETUTVAL^%ut(.UTDATA) "RTN","ut",328,0) - N %utROU,%ut + ; input - UTDATA - passed by reference "RTN","ut",329,0) - D SETUT + ; "RTN","ut",330,0) - S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") + ; subscripted values returned: "RTN","ut",331,0) - S %utROU(1)=%utROUN + ; 1) cumulative number of routines run; 2) cumulative number of entry tags; "RTN","ut",332,0) - D GETLIST(.%utROU,1,%ut("RSLT")) + ; 3) cumulative number of tests; 4) cummulative number of failures; "RTN","ut",333,0) - S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version + ; 5) cumulative number of errors "RTN","ut",334,0) - S %utRSLT=%ut("RSLT") + N VALS,I,VAL "RTN","ut",335,0) - Q + S VALS=$G(^TMP("%ut",$J,"UTVALS")) I VALS="" Q "RTN","ut",336,0) - ; + F I=1:1 S VAL=$P(VALS,U,I) Q:VAL="" S UTDATA(I)=$G(UTDATA(I))+VAL "RTN","ut",337,0) -GETLIST(%utROU,%utLIST,%utRSLT) ; called from GUISET, GUILOAD -"RTN","ut",338,0) - N I,%utROUL,%utROUN,%ut,XTCOMNT,XTVALUE,%utCNT -"RTN","ut",339,0) - S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) K @XTVALUE -"RTN","ut",340,0) - S %utCNT=0,XTCOMNT="" -"RTN","ut",341,0) - D GETTREE^%ut1(.%utROU,%utLIST) -"RTN","ut",342,0) - F I=1:1 Q:'$D(%utROU(I)) S %utROUL(%utROU(I))="" -"RTN","ut",343,0) - S %utROUN="" F S %utROUN=$O(%utROUL(%utROUN)) Q:%utROUN="" D LOAD(%utROUN,.%utCNT,XTVALUE,XTCOMNT,.%utROUL) -"RTN","ut",344,0) - M @%utRSLT=@XTVALUE -"RTN","ut",345,0) - K @%utRSLT@("SHUTDOWN") -"RTN","ut",346,0) - K @%utRSLT@("STARTUP") -"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) - ; -"RTN","ut",350,0) - ; generate list of unit test routines, entry points and comments on test for entry point -"RTN","ut",351,0) -LOAD(%utROUN,%utNCNT,XTVALUE,XTCOMNT,%utROUL) ; called from GETLIST, and recursively from LOAD -"RTN","ut",352,0) - I $T(@("^"_%utROUN))="" S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_"^^*** ERROR - ROUTINE NAME NOT FOUND" Q -"RTN","ut",353,0) - S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_U_XTCOMNT -"RTN","ut",354,0) - ;N %utI,XTX1,XTX2,LINE -"RTN","ut",355,0) - N %utI,XTX1,XTX2,LINE,LIST,I -"RTN","ut",356,0) - ; 100622 JLI added code to identify STARTUP and TEARDOWN -"RTN","ut",357,0) - I $T(@("STARTUP^"_%utROUN))'="",'$D(@XTVALUE@("STARTUP")) S @XTVALUE@("STARTUP")="STARTUP^"_%utROUN -"RTN","ut",358,0) - I $T(@("SHUTDOWN^"_%utROUN))'="",'$D(@XTVALUE@("SHUTDOWN")) S @XTVALUE@("SHUTDOWN")="SHUTDOWN^"_%utROUN -"RTN","ut",359,0) - ; JLI 140731 handle @TEST identified test tags -"RTN","ut",360,0) - D NEWSTYLE^%ut1(.LIST,%utROUN) -"RTN","ut",361,0) - F I=1:1:LIST S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_LIST(I) -"RTN","ut",362,0) - ; JLI 140731 end of @TEST addition -"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",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",365,0) - Q -"RTN","ut",366,0) - ; -"RTN","ut",367,0) -GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - called by %ut-TEST NEXT rpc -"RTN","ut",368,0) - ; XTGUISEP - added 110719 to provide for changing separator for GUI -"RTN","ut",369,0) - ; return from ^ to another value ~~^~~ so that data returned -"RTN","ut",370,0) - ; is not affected by ^ values in the data - if not present -"RTN","ut",371,0) - ; sets value to default ^ -"RTN","ut",372,0) - N %utETRY,%utROUT,XTOLROU,XTVALUE,%utERR,%utGUI -"RTN","ut",373,0) - N %ut -"RTN","ut",374,0) - I $G(XTGUISEP)="" S XTGUISEP="^" -"RTN","ut",375,0) - D SETUT -"RTN","ut",376,0) - S %ut("LOC")=%utLOC -"RTN","ut",377,0) - S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 -"RTN","ut",378,0) - S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) -"RTN","ut",379,0) - S %ut("RSLT")=$NA(^TMP("GUINEXT",$J)) K @%ut("RSLT") -"RTN","ut",380,0) - S %utRSLT=%ut("RSLT") -"RTN","ut",381,0) - S %utETRY=$P(%utLOC,U),%utROUT=$P(%utLOC,U,2),XTOLROU=$G(@XTVALUE@("LASTROU")) -"RTN","ut",382,0) - S %utGUI=1 -"RTN","ut",383,0) - S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 -"RTN","ut",384,0) - ; I %utROUT'=XTOLROU D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ;140731 JLI - commented out -"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",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",387,0) - . I XTOLROU="",$D(@XTVALUE@("STARTUP")) D -"RTN","ut",388,0) - . . S %ut("LOC")=@XTVALUE@("STARTUP") -"RTN","ut",389,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",390,0) - . . D @(@XTVALUE@("STARTUP")) -"RTN","ut",391,0) - . . Q -"RTN","ut",392,0) - . S @XTVALUE@("LASTROU")=%utROUT I %utROUT'="",$T(@("SETUP^"_%utROUT))'="" D -"RTN","ut",393,0) - . . S %ut("LOC")="SETUP^"_%utROUT -"RTN","ut",394,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",395,0) - . . D @("SETUP^"_%utROUT) -"RTN","ut",396,0) - . . Q -"RTN","ut",397,0) - . I %utROUT="",$D(@XTVALUE@("SHUTDOWN")) D -"RTN","ut",398,0) - . . S %ut("LOC")=@XTVALUE@("SHUTDOWN") -"RTN","ut",399,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",400,0) - . . D @(@XTVALUE@("SHUTDOWN")) -"RTN","ut",401,0) - . . Q -"RTN","ut",402,0) - . Q -"RTN","ut",403,0) - S %ut("LOC")=%utLOC -"RTN","ut",404,0) - S %ut("CHK")=0,%ut("CNT")=1,%utERR=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) - . D @%ut("LOC") -"RTN","ut",408,0) - . Q -"RTN","ut",409,0) - I $T(@("TEARDOWN^"_%utROUT))'="" D -"RTN","ut",410,0) - . S %ut("LOC")="TEARDOWN^"_%utROUT -"RTN","ut",411,0) - . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",412,0) - . D @("TEARDOWN^"_%utROUT) -"RTN","ut",413,0) - . Q -"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) +"RTN","ut",338,0) Q +"RTN","ut",339,0) + ; +"RTN","ut",340,0) +LSTUTVAL(UTDATA) ; .SR - lists cumulative totals in UTDATA array +"RTN","ut",341,0) + ; usage D LSTUTVAL^%ut(.UTDATA) +"RTN","ut",342,0) + ; input - UTDATA - passed by reference +"RTN","ut",343,0) + W !!!,"------------ SUMMARY ------------" +"RTN","ut",344,0) + W !,"Ran ",UTDATA(1)," Routine",$S(UTDATA(1)>1:"s",1:""),", ",UTDATA(2)," Entry Tag",$S(UTDATA(2)>1:"s",1:"") +"RTN","ut",345,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",346,0) + Q +"RTN","ut",347,0) + ; +"RTN","ut",348,0) + ; +"RTN","ut",349,0) +GUISET(%utRSLT,XTSET) ; Entry point for GUI start with selected Test Set IEN - called by %ut-TEST GROUP LOAD rpc +"RTN","ut",350,0) + N %utROU,%utLIST,%ut +"RTN","ut",351,0) + D SETUT +"RTN","ut",352,0) + S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") +"RTN","ut",353,0) + D GETSET(XTSET,.%utROU,.%utLIST) +"RTN","ut",354,0) + D GETLIST(.%utROU,%utLIST,%ut("RSLT")) +"RTN","ut",355,0) + S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version +"RTN","ut",356,0) + S %utRSLT=%ut("RSLT") +"RTN","ut",357,0) + Q +"RTN","ut",358,0) + ; +"RTN","ut",359,0) +GUILOAD(%utRSLT,%utROUN) ; Entry point for GUI start with %utROUN containing primary routine name - called by %ut-TEST LOAD rpc +"RTN","ut",360,0) + N %utROU,%ut +"RTN","ut",361,0) + D SETUT +"RTN","ut",362,0) + S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") +"RTN","ut",363,0) + S %utROU(1)=%utROUN +"RTN","ut",364,0) + D GETLIST(.%utROU,1,%ut("RSLT")) +"RTN","ut",365,0) + S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version +"RTN","ut",366,0) + S %utRSLT=%ut("RSLT") +"RTN","ut",367,0) + Q +"RTN","ut",368,0) + ; +"RTN","ut",369,0) +GETLIST(%utROU,%utLIST,%utRSLT) ; called from GUISET, GUILOAD +"RTN","ut",370,0) + N I,%utROUL,%utROUN,%ut,XTCOMNT,XTVALUE,%utCNT +"RTN","ut",371,0) + S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) K @XTVALUE +"RTN","ut",372,0) + S %utCNT=0,XTCOMNT="" +"RTN","ut",373,0) + D GETTREE^%ut1(.%utROU,%utLIST) +"RTN","ut",374,0) + F I=1:1 Q:'$D(%utROU(I)) S %utROUL(%utROU(I))="" +"RTN","ut",375,0) + S %utROUN="" F S %utROUN=$O(%utROUL(%utROUN)) Q:%utROUN="" D LOAD(%utROUN,.%utCNT,XTVALUE,XTCOMNT,.%utROUL) +"RTN","ut",376,0) + M @%utRSLT=@XTVALUE +"RTN","ut",377,0) + K @%utRSLT@("SHUTDOWN") +"RTN","ut",378,0) + K @%utRSLT@("STARTUP") +"RTN","ut",379,0) + S @XTVALUE@("LASTROU")="" ; Use this to keep track of place in routines +"RTN","ut",380,0) + Q +"RTN","ut",381,0) + ; +"RTN","ut",382,0) + ; generate list of unit test routines, entry points and comments on test for entry point +"RTN","ut",383,0) +LOAD(%utROUN,%utNCNT,XTVALUE,XTCOMNT,%utROUL) ; called from GETLIST, and recursively from LOAD +"RTN","ut",384,0) + I $T(@("^"_%utROUN))="" S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_"^^*** ERROR - ROUTINE NAME NOT FOUND" Q +"RTN","ut",385,0) + S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_U_XTCOMNT +"RTN","ut",386,0) + ;N %utI,XTX1,XTX2,LINE +"RTN","ut",387,0) + N %utI,XTX1,XTX2,LINE,LIST,I +"RTN","ut",388,0) + ; 100622 JLI added code to identify STARTUP and TEARDOWN +"RTN","ut",389,0) + I $T(@("STARTUP^"_%utROUN))'="",'$D(@XTVALUE@("STARTUP")) S @XTVALUE@("STARTUP")="STARTUP^"_%utROUN +"RTN","ut",390,0) + I $T(@("SHUTDOWN^"_%utROUN))'="",'$D(@XTVALUE@("SHUTDOWN")) S @XTVALUE@("SHUTDOWN")="SHUTDOWN^"_%utROUN +"RTN","ut",391,0) + ; JLI 140731 handle @TEST identified test tags +"RTN","ut",392,0) + D NEWSTYLE^%ut1(.LIST,%utROUN) +"RTN","ut",393,0) + F I=1:1:LIST S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_LIST(I) +"RTN","ut",394,0) + ; JLI 140731 end of @TEST addition +"RTN","ut",395,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",396,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",397,0) + Q +"RTN","ut",398,0) + ; +"RTN","ut",399,0) +GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - called by %ut-TEST NEXT rpc +"RTN","ut",400,0) + ; XTGUISEP - added 110719 to provide for changing separator for GUI +"RTN","ut",401,0) + ; return from ^ to another value ~~^~~ so that data returned +"RTN","ut",402,0) + ; is not affected by ^ values in the data - if not present +"RTN","ut",403,0) + ; sets value to default ^ +"RTN","ut",404,0) + N %utETRY,%utROUT,XTOLROU,XTVALUE,%utERR,%utGUI +"RTN","ut",405,0) + N %ut +"RTN","ut",406,0) + I $G(XTGUISEP)="" S XTGUISEP="^" +"RTN","ut",407,0) + D SETUT +"RTN","ut",408,0) + S %ut("LOC")=%utLOC +"RTN","ut",409,0) + S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 +"RTN","ut",410,0) + S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) +"RTN","ut",411,0) + S %ut("RSLT")=$NA(^TMP("GUINEXT",$J)) K @%ut("RSLT") +"RTN","ut",412,0) + S %utRSLT=%ut("RSLT") +"RTN","ut",413,0) + S %utETRY=$P(%utLOC,U),%utROUT=$P(%utLOC,U,2),XTOLROU=$G(@XTVALUE@("LASTROU")) +"RTN","ut",414,0) + S %utGUI=1 +"RTN","ut",415,0) + S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 +"RTN","ut",416,0) + ; I %utROUT'=XTOLROU D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ;140731 JLI - commented out "RTN","ut",417,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",418,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",419,0) + . I XTOLROU="",$D(@XTVALUE@("STARTUP")) D +"RTN","ut",420,0) + . . S %ut("LOC")=@XTVALUE@("STARTUP") +"RTN","ut",421,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",422,0) + . . D @(@XTVALUE@("STARTUP")) +"RTN","ut",423,0) + . . Q +"RTN","ut",424,0) + . S @XTVALUE@("LASTROU")=%utROUT I %utROUT'="",$T(@("SETUP^"_%utROUT))'="" D +"RTN","ut",425,0) + . . S %ut("LOC")="SETUP^"_%utROUT +"RTN","ut",426,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",427,0) + . . D @("SETUP^"_%utROUT) +"RTN","ut",428,0) + . . Q +"RTN","ut",429,0) + . I %utROUT="",$D(@XTVALUE@("SHUTDOWN")) D +"RTN","ut",430,0) + . . S %ut("LOC")=@XTVALUE@("SHUTDOWN") +"RTN","ut",431,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",432,0) + . . D @(@XTVALUE@("SHUTDOWN")) +"RTN","ut",433,0) + . . Q +"RTN","ut",434,0) + . Q +"RTN","ut",435,0) + S %ut("LOC")=%utLOC +"RTN","ut",436,0) + S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 +"RTN","ut",437,0) + D ; to limit range of error trap so we continue through other tests +"RTN","ut",438,0) + . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",439,0) + . D @%ut("LOC") +"RTN","ut",440,0) + . Q +"RTN","ut",441,0) + I $T(@("TEARDOWN^"_%utROUT))'="" D +"RTN","ut",442,0) + . S %ut("LOC")="TEARDOWN^"_%utROUT +"RTN","ut",443,0) + . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",444,0) + . D @("TEARDOWN^"_%utROUT) +"RTN","ut",445,0) + . Q +"RTN","ut",446,0) + S @%ut("RSLT")@(1)=%ut("CHK")_XTGUISEP_(%ut("CNT")-1-%utERR)_XTGUISEP_%utERR +"RTN","ut",447,0) + K ^TMP("%ut",$J,"UTVALS") +"RTN","ut",448,0) + Q +"RTN","ut",449,0) ; "RTN","ut1") -0^2^B205168514 +0^2^B226313375 "RTN","ut1",1,0) -%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;09/14/15 09:37 +%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;12/07/15 15:34 "RTN","ut1",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 13 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ut1",4,0) ; Original routine authored by Joel L. Ivey as XTMUNIT1 while working for U.S. Department of Veterans Affairs 2003-2012 "RTN","ut1",5,0) @@ -1833,1109 +1745,1245 @@ GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - calle "RTN","ut1",18,0) ; "RTN","ut1",19,0) - ; Changes: + ; "RTN","ut1",20,0) - ; 130726 SMH - Moved test collection logic from %utUNIT to here (multiple places) +CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list. "RTN","ut1",21,0) - ; 131218 SMH - dependence on XLFSTR removed + ; %utROU - input - Name of routine to check for tags with @TEST attribute "RTN","ut1",22,0) - ; 131218 SMH - CHEKTEST refactored to use $TEXT instead of ^%ZOSF("LOAD") + ; %ut - input/output - passed by reference "RTN","ut1",23,0) - ; 131218 SMH - CATCHERR now nulls out $ZS if on GT.M + ; %utUETRY - input/output - passed by reference "RTN","ut1",24,0) ; "RTN","ut1",25,0) - ; ------- COMMENTS moved from %ut due to space requirements -"RTN","ut1",26,0) - ; -"RTN","ut1",27,0) - ; 100622 JLI - corrected typo in comments where %utINPT was listed as %utINP -"RTN","ut1",28,0) - ; 100622 JLI - removed a comment which indicated data could potentially be returned from the called routine -"RTN","ut1",29,0) - ; in the %utINPT array. -"RTN","ut1",30,0) - ; 100622 JLI - added code to handle STARTUP and SHUTDOWN from GUI app -"RTN","ut1",31,0) - ; 110719 JLI - modified separators in GUI handling from ^ to ~~^~~ -"RTN","ut1",32,0) - ; in the variable XTGUISEP if using a newer version of the -"RTN","ut1",33,0) - ; GUI app (otherwise, it is simply set to ^) since results -"RTN","ut1",34,0) - ; with a series of ^ embedded disturbed the output reported -"RTN","ut1",35,0) - ; 130726 SMH - Fixed SETUP and TEARDOWN so that they run before/after each -"RTN","ut1",36,0) - ; test rather than once. General refactoring. -"RTN","ut1",37,0) - ; 130726 SMH - SETUT initialized IO in case it's not there to $P. Inits vars -"RTN","ut1",38,0) - ; using DT^DICRW. -"RTN","ut1",39,0) - ; 131217 SMH - Change call in SETUP to S U="^" instead of DT^DICRW -"RTN","ut1",40,0) - ; 131218 SMH - Any checks to $ZE will also check $ZS for GT.M. -"RTN","ut1",41,0) - ; 131218 SMH - Remove calls to %ZISUTL to manage devices to prevent dependence on VISTA. -"RTN","ut1",42,0) - ; Use %utNIT("DEV","OLD") for old devices -"RTN","ut1",43,0) - ; 140109 SMH - Add parameter %utBREAK - Break upon error -"RTN","ut1",44,0) - ; 1402 SMH - Break will cause the break to happen even on failed tests. -"RTN","ut1",45,0) - ; 140401 SMH - Added Succeed entry point for take it into your hands tester. -"RTN","ut1",46,0) - ; 140401 SMH - Reformatted the output of M-Unit so that the test's name -"RTN","ut1",47,0) - ; will print BEFORE the execution of the test. This has been -"RTN","ut1",48,0) - ; really confusing for beginning users of M-Unit, so this was -"RTN","ut1",49,0) - ; necessary. -"RTN","ut1",50,0) - ; 140401 SMH - OK message gets printed at the end of --- as [OK]. -"RTN","ut1",51,0) - ; 140401 SMH - FAIL message now prints. Previously, OK failed to be printed. -"RTN","ut1",52,0) - ; Unfortunately, that's rather passive aggressive. Now it -"RTN","ut1",53,0) - ; explicitly says that a test failed. -"RTN","ut1",54,0) - ; 140503 SMH - Fixed IO issues all over the routine. Much simpler now. -"RTN","ut1",55,0) - ; 140731 JLI - Combined routine changes between JLI and SMH -"RTN","ut1",56,0) - ; Moved routines from %utNIT and %utNIT1 to %ut and %ut1 -"RTN","ut1",57,0) - ; Updated unit test routines (%utt1 to %utt6) -"RTN","ut1",58,0) - ; Created M-UNIT TEST GROUP file at 17.9001 based on the 17.9001 file -"RTN","ut1",59,0) - ; 141030 JLI - Removed tag TESTCOVR and code under it, not necessary -"RTN","ut1",60,0) - ; since %uttcovr can handle all of the calling needed -"RTN","ut1",61,0) - ; Added call to run routine %utt6 if run from the top, -"RTN","ut1",62,0) - ; since this will run the full range of unit tests -"RTN","ut1",63,0) - ; Modified STARTUP and SHUTDOWN commands to handle in -"RTN","ut1",64,0) - ; each routine where they are available, since only -"RTN","ut1",65,0) - ; running one STARTUP and SHUTDOWN (the first seen by -"RTN","ut1",66,0) - ; the program) restricted their use in suites of multiple -"RTN","ut1",67,0) - ; tests. -"RTN","ut1",68,0) - ; 150101 JLI - Added COV entry to %ut (in addition to current in %ut1) so it is easier -"RTN","ut1",69,0) - ; to remember how to use it. -"RTN","ut1",70,0) - ; 150621 JLI - Added a global location to pick up summary data for a unit test call, so -"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) -CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list. -"RTN","ut1",75,0) - ; %utROU - input - Name of routine to check for tags with @TEST attribute -"RTN","ut1",76,0) - ; %ut - input/output - passed by reference -"RTN","ut1",77,0) - ; %utUETRY - input/output - passed by reference -"RTN","ut1",78,0) - ; -"RTN","ut1",79,0) ; Test list collected in two ways: -"RTN","ut1",80,0) +"RTN","ut1",26,0) ; - @TEST on labellines -"RTN","ut1",81,0) +"RTN","ut1",27,0) ; - Offsets of XTENT +"RTN","ut1",28,0) + ; +"RTN","ut1",29,0) + S %ut("ENTN")=0 ; Number of test, sub to %utUETRY. +"RTN","ut1",30,0) + ; +"RTN","ut1",31,0) + ; This stanza and everything below is for collecting @TEST. +"RTN","ut1",32,0) + ; VEN/SMH - block refactored to use $TEXT instead of ^%ZOSF("LOAD") +"RTN","ut1",33,0) + N I,LIST +"RTN","ut1",34,0) + S I=$L($T(@(U_%utROU))) I I<0 Q "-1^Invalid Routine Name" +"RTN","ut1",35,0) + D NEWSTYLE(.LIST,%utROU) +"RTN","ut1",36,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",37,0) + ; +"RTN","ut1",38,0) + ; This Stanza is to collect XTENT offsets +"RTN","ut1",39,0) + N %utUI F %utUI=1:1 S %ut("ELIN")=$T(@("XTENT+"_%utUI_"^"_%utROU)) Q:$P(%ut("ELIN"),";",3)="" D +"RTN","ut1",40,0) + . S %ut("ENTN")=%ut("ENTN")+1,%utUETRY(%ut("ENTN"))=$P(%ut("ELIN"),";",3),%utUETRY(%ut("ENTN"),"NAME")=$P(%ut("ELIN"),";",4) +"RTN","ut1",41,0) + . Q +"RTN","ut1",42,0) + ; +"RTN","ut1",43,0) + QUIT +"RTN","ut1",44,0) + ; +"RTN","ut1",45,0) + ; VEN/SMH 26JUL2013 - Moved GETTREE here. +"RTN","ut1",46,0) +GETTREE(%utROU,%utULIST) ; +"RTN","ut1",47,0) + ; first get any other routines this one references for running subsequently +"RTN","ut1",48,0) + ; then any that they refer to as well +"RTN","ut1",49,0) + ; this builds a tree of all routines referred to by any routine including each only once +"RTN","ut1",50,0) + N %utUK,%utUI,%utUJ,%utURNAM,%utURLIN +"RTN","ut1",51,0) + F %utUK=1:1 Q:'$D(%utROU(%utUK)) D +"RTN","ut1",52,0) + . F %utUI=1:1 S %utURLIN=$T(@("XTROU+"_%utUI_"^"_%utROU(%utUK))) S %utURNAM=$P(%utURLIN,";",3) Q:%utURNAM="" D +"RTN","ut1",53,0) + . . F %utUJ=1:1:%utULIST I %utROU(%utUJ)=%utURNAM S %utURNAM="" Q +"RTN","ut1",54,0) + . . I %utURNAM'="",$T(@("+1^"_%utURNAM))="" W:'$D(XWBOS) "Referenced routine ",%utURNAM," not found.",! Q +"RTN","ut1",55,0) + . . S:%utURNAM'="" %utULIST=%utULIST+1,%utROU(%utULIST)=%utURNAM +"RTN","ut1",56,0) + QUIT +"RTN","ut1",57,0) + ; +"RTN","ut1",58,0) +NEWSTYLE(LIST,ROUNAME) ; JLI 140726 identify and return list of newstyle tags or entries for this routine +"RTN","ut1",59,0) + ; LIST - input, passed by reference - returns containing array with list of tags identified as tests +"RTN","ut1",60,0) + ; LIST indicates number of tags identified, LIST(n)=tag^test_info where tag is entry point for test +"RTN","ut1",61,0) + ; ROUNAME - input - routine name in which tests should be identified +"RTN","ut1",62,0) + ; +"RTN","ut1",63,0) + N I,VALUE,LINE +"RTN","ut1",64,0) + K LIST S LIST=0 +"RTN","ut1",65,0) + ; search routine by line for a tag and @TEST declaration +"RTN","ut1",66,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",67,0) + Q +"RTN","ut1",68,0) + ; +"RTN","ut1",69,0) +CHECKTAG(LINE) ; JLI 140726 check line to determine @test TAG +"RTN","ut1",70,0) + ; LINE - input - Line of code to be checked +"RTN","ut1",71,0) + ; returns null line if not @TEST line, otherwise TAG^NOTE +"RTN","ut1",72,0) + N TAG,NOTE,CHAR +"RTN","ut1",73,0) + I $E(LINE)=" " Q "" ; test entry must have a tag +"RTN","ut1",74,0) + I $$UP(LINE)'["@TEST" Q "" ; must have @TEST declaration +"RTN","ut1",75,0) + I $P($$UP(LINE),"@TEST")["(" Q "" ; can't have an argument +"RTN","ut1",76,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",77,0) + F Q:NOTE="" S CHAR=$E(NOTE),NOTE=$E(NOTE,2,$L(NOTE)) I " ;"'[CHAR Q ; +"RTN","ut1",78,0) + I $L(NOTE)'=0 Q "" ; @TEST must be first text on line +"RTN","ut1",79,0) + F Q:$E(LINE)'=" " S LINE=$E(LINE,2,$L(LINE)) ; remove leading spaces from test info +"RTN","ut1",80,0) + S TAG=TAG_U_LINE +"RTN","ut1",81,0) + Q TAG "RTN","ut1",82,0) ; "RTN","ut1",83,0) - S %ut("ENTN")=0 ; Number of test, sub to %utUETRY. -"RTN","ut1",84,0) - ; -"RTN","ut1",85,0) - ; This stanza and everything below is for collecting @TEST. -"RTN","ut1",86,0) - ; VEN/SMH - block refactored to use $TEXT instead of ^%ZOSF("LOAD") -"RTN","ut1",87,0) - N I,LIST -"RTN","ut1",88,0) - S I=$L($T(@(U_%utROU))) I I<0 Q "-1^Invalid Routine Name" -"RTN","ut1",89,0) - D NEWSTYLE(.LIST,%utROU) -"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) - ; This Stanza is to collect XTENT offsets -"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",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) - ; -"RTN","ut1",97,0) - QUIT -"RTN","ut1",98,0) - ; -"RTN","ut1",99,0) - ; VEN/SMH 26JUL2013 - Moved GETTREE here. -"RTN","ut1",100,0) -GETTREE(%utROU,%utULIST) ; -"RTN","ut1",101,0) - ; first get any other routines this one references for running subsequently -"RTN","ut1",102,0) - ; then any that they refer to as well -"RTN","ut1",103,0) - ; this builds a tree of all routines referred to by any routine including each only once -"RTN","ut1",104,0) - N %utUK,%utUI,%utUJ,%utURNAM,%utURLIN -"RTN","ut1",105,0) - F %utUK=1:1 Q:'$D(%utROU(%utUK)) D -"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",107,0) - . . F %utUJ=1:1:%utULIST I %utROU(%utUJ)=%utURNAM S %utURNAM="" Q -"RTN","ut1",108,0) - . . I %utURNAM'="",$T(@("+1^"_%utURNAM))="" W:'$D(XWBOS) "Referenced routine ",%utURNAM," not found.",! Q -"RTN","ut1",109,0) - . . S:%utURNAM'="" %utULIST=%utULIST+1,%utROU(%utULIST)=%utURNAM -"RTN","ut1",110,0) - QUIT -"RTN","ut1",111,0) - ; -"RTN","ut1",112,0) -NEWSTYLE(LIST,ROUNAME) ; JLI 140726 identify and return list of newstyle tags or entries for this routine -"RTN","ut1",113,0) - ; LIST - input, passed by reference - returns containing array with list of tags identified as tests -"RTN","ut1",114,0) - ; LIST indicates number of tags identified, LIST(n)=tag^test_info where tag is entry point for test -"RTN","ut1",115,0) - ; ROUNAME - input - routine name in which tests should be identified -"RTN","ut1",116,0) - ; -"RTN","ut1",117,0) - N I,VALUE,LINE -"RTN","ut1",118,0) - K LIST S LIST=0 -"RTN","ut1",119,0) - ; search routine by line for a tag and @TEST declaration -"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) - ; -"RTN","ut1",123,0) -CHECKTAG(LINE) ; JLI 140726 check line to determine @test TAG -"RTN","ut1",124,0) - ; LINE - input - Line of code to be checked -"RTN","ut1",125,0) - ; returns null line if not @TEST line, otherwise TAG^NOTE -"RTN","ut1",126,0) - N TAG,NOTE,CHAR -"RTN","ut1",127,0) - I $E(LINE)=" " Q "" ; test entry must have a tag -"RTN","ut1",128,0) - I $$UP(LINE)'["@TEST" Q "" ; must have @TEST declaration -"RTN","ut1",129,0) - I $P($$UP(LINE),"@TEST")["(" Q "" ; can't have an argument -"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",131,0) - F Q:NOTE="" S CHAR=$E(NOTE),NOTE=$E(NOTE,2,$L(NOTE)) I " ;"'[CHAR Q ; -"RTN","ut1",132,0) - I $L(NOTE)'=0 Q "" ; @TEST must be first text on line -"RTN","ut1",133,0) - F Q:$E(LINE)'=" " S LINE=$E(LINE,2,$L(LINE)) ; remove leading spaces from test info -"RTN","ut1",134,0) - S TAG=TAG_U_LINE -"RTN","ut1",135,0) - Q TAG -"RTN","ut1",136,0) - ; -"RTN","ut1",137,0) -CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values -"RTN","ut1",138,0) - ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut1",139,0) - ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut1",140,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",141,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) - S %ut("CHK")=$G(%ut("CHK"))+1 -"RTN","ut1",144,0) - I '$D(%utGUI) D -"RTN","ut1",145,0) - . D SETIO -"RTN","ut1",146,0) - . I 'XTSTVAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " D -"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) - . . Q -"RTN","ut1",150,0) - . I XTSTVAL W "." -"RTN","ut1",151,0) - . D RESETIO -"RTN","ut1",152,0) - . Q -"RTN","ut1",153,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) - ; -"RTN","ut1",156,0) -CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut1",157,0) - N FAILMSG -"RTN","ut1",158,0) - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",159,0) - ; ZEXCEPT: %ut -- NEWED IN EN -"RTN","ut1",160,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",161,0) - I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG("CHKEQ") Q -"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) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut1",165,0) - I XTEXPECT'=XTACTUAL S FAILMSG="<"_XTEXPECT_"> vs <"_XTACTUAL_"> - " -"RTN","ut1",166,0) - I '$D(%utGUI) D -"RTN","ut1",167,0) - . D SETIO -"RTN","ut1",168,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) - . . I $D(%ut("BREAK")) BREAK ; Break upon failure -"RTN","ut1",171,0) - . . Q -"RTN","ut1",172,0) - . E W "." -"RTN","ut1",173,0) - . D RESETIO -"RTN","ut1",174,0) - . Q -"RTN","ut1",175,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) - ; -"RTN","ut1",178,0) FAIL(XTERMSG) ; Entry point for generating a failure message -"RTN","ut1",179,0) +"RTN","ut1",84,0) ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",180,0) +"RTN","ut1",85,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",181,0) +"RTN","ut1",86,0) ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",182,0) +"RTN","ut1",87,0) I $G(XTERMSG)="" S XTERMSG="no failure message provided" -"RTN","ut1",183,0) +"RTN","ut1",88,0) S %ut("CHK")=%ut("CHK")+1 -"RTN","ut1",184,0) +"RTN","ut1",89,0) I '$D(%utGUI) D -"RTN","ut1",185,0) +"RTN","ut1",90,0) . D SETIO -"RTN","ut1",186,0) +"RTN","ut1",91,0) . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D -"RTN","ut1",187,0) +"RTN","ut1",92,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",188,0) +"RTN","ut1",93,0) . . I $D(%ut("BREAK")) BREAK ; Break upon failure -"RTN","ut1",189,0) +"RTN","ut1",94,0) . . Q -"RTN","ut1",190,0) +"RTN","ut1",95,0) . D RESETIO -"RTN","ut1",191,0) +"RTN","ut1",96,0) . Q -"RTN","ut1",192,0) +"RTN","ut1",97,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",193,0) +"RTN","ut1",98,0) Q -"RTN","ut1",194,0) +"RTN","ut1",99,0) ; -"RTN","ut1",195,0) +"RTN","ut1",100,0) NVLDARG(API) ; generate message for invalid arguments to test -"RTN","ut1",196,0) +"RTN","ut1",101,0) N XTERMSG -"RTN","ut1",197,0) +"RTN","ut1",102,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",198,0) +"RTN","ut1",103,0) ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",199,0) +"RTN","ut1",104,0) ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",200,0) +"RTN","ut1",105,0) S XTERMSG="NO VALUES INPUT TO "_API_"^%ut - no evaluation possible" -"RTN","ut1",201,0) +"RTN","ut1",106,0) I '$D(%utGUI) D -"RTN","ut1",202,0) +"RTN","ut1",107,0) . D SETIO -"RTN","ut1",203,0) +"RTN","ut1",108,0) . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D -"RTN","ut1",204,0) +"RTN","ut1",109,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) +"RTN","ut1",110,0) . . Q -"RTN","ut1",206,0) +"RTN","ut1",111,0) . D RESETIO -"RTN","ut1",207,0) +"RTN","ut1",112,0) . Q -"RTN","ut1",208,0) +"RTN","ut1",113,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) +"RTN","ut1",114,0) Q -"RTN","ut1",210,0) +"RTN","ut1",115,0) ; -"RTN","ut1",211,0) +"RTN","ut1",116,0) SETIO ; Set M-Unit Device to write the results to... -"RTN","ut1",212,0) +"RTN","ut1",117,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",213,0) +"RTN","ut1",118,0) I $IO'=%ut("IO") S (IO(0),%ut("DEV","OLD"))=$IO USE %ut("IO") SET IO=$IO -"RTN","ut1",214,0) +"RTN","ut1",119,0) QUIT -"RTN","ut1",215,0) +"RTN","ut1",120,0) ; -"RTN","ut1",216,0) +"RTN","ut1",121,0) RESETIO ; Reset $IO back to the original device if we changed it. -"RTN","ut1",217,0) +"RTN","ut1",122,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",218,0) +"RTN","ut1",123,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) +"RTN","ut1",124,0) QUIT -"RTN","ut1",220,0) +"RTN","ut1",125,0) ; -"RTN","ut1",221,0) +"RTN","ut1",126,0) ; VEN/SMH 17DEC2013 - Remove dependence on VISTA - Uppercase here instead of XLFSTR. -"RTN","ut1",222,0) +"RTN","ut1",127,0) UP(X) ; -"RTN","ut1",223,0) +"RTN","ut1",128,0) Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") -"RTN","ut1",224,0) +"RTN","ut1",129,0) ; -"RTN","ut1",225,0) +"RTN","ut1",130,0) COV(NMSP,COVCODE,VERBOSITY) ; VEN/SMH - PUBLIC ENTRY POINT; Coverage calculations -"RTN","ut1",226,0) +"RTN","ut1",131,0) ; NMSP: Namespace of the routines to analyze. End with * to include all routines. -"RTN","ut1",227,0) +"RTN","ut1",132,0) ; Not using * will only include the routine with NMSP name. -"RTN","ut1",228,0) +"RTN","ut1",133,0) ; e.g. PSOM* will include all routines starting with PSOM -"RTN","ut1",229,0) +"RTN","ut1",134,0) ; PSOM will only include PSOM. -"RTN","ut1",230,0) +"RTN","ut1",135,0) ; COVCODE: Mumps code to run over which coverage will be calculated. Typically Unit Tests. -"RTN","ut1",231,0) +"RTN","ut1",136,0) ; VERBOSITY (optional): Scalar from -1 to 3. -"RTN","ut1",232,0) +"RTN","ut1",137,0) ; - -1 = Global output in ^TMP("%utCOVREPORT",$J) -"RTN","ut1",233,0) +"RTN","ut1",138,0) ; - 0 = Print only total coverage -"RTN","ut1",234,0) +"RTN","ut1",139,0) ; - 1 = Break down by routine -"RTN","ut1",235,0) +"RTN","ut1",140,0) ; - 2 = Break down by routine and tag -"RTN","ut1",236,0) +"RTN","ut1",141,0) ; - 3 = Break down by routine and tag, and print lines that didn't execute for each tag. +"RTN","ut1",142,0) + ; +"RTN","ut1",143,0) + ; ZEXCEPT: %utcovxx - SET and KILLED in this code at top level +"RTN","ut1",144,0) + ; ZEXCEPT: %Monitor,%apiOBJ,DecomposeStatus,LineByLine,Start,Stop,System,class - not variables parts of classes +"RTN","ut1",145,0) + N COVER,COVERSAV,I,NMSP1,RTN,RTNS,ERR,STATUS +"RTN","ut1",146,0) + I (+$SY=47) D ; GT.M only! +"RTN","ut1",147,0) + . N %ZR ; GT.M specific +"RTN","ut1",148,0) + . D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R(RTN)). +"RTN","ut1",149,0) + . N RN S RN="" +"RTN","ut1",150,0) + . W !,"Loading routines to test coverage...",! +"RTN","ut1",151,0) + . F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D +"RTN","ut1",152,0) + . . N L2 S L2=$T(+2^@RN) +"RTN","ut1",153,0) + . . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out +"RTN","ut1",154,0) + . . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine +"RTN","ut1",155,0) + . ; +"RTN","ut1",156,0) + . M RTNS=%ZR +"RTN","ut1",157,0) + . K %ZR +"RTN","ut1",158,0) + . Q +"RTN","ut1",159,0) + ; +"RTN","ut1",160,0) + I (+$SY=0) D ; CACHE SPECIFIC +"RTN","ut1",161,0) + . S NMSP1=NMSP I NMSP["*" S NMSP1=$P(NMSP,"*") +"RTN","ut1",162,0) + . I $D(^$R(NMSP1)) S RTNS(NMSP1)="" +"RTN","ut1",163,0) + . I NMSP["*" S RTN=NMSP1 F S RTN=$O(^$R(RTN)) Q:RTN'[NMSP1 S RTNS(RTN)="" +"RTN","ut1",164,0) + . Q +"RTN","ut1",165,0) + ; +"RTN","ut1",166,0) + ; ZEXCEPT: CTRAP - not really a variable +"RTN","ut1",167,0) + S VERBOSITY=+$G(VERBOSITY) ; Get 0 if not passed. +"RTN","ut1",168,0) + ; +"RTN","ut1",169,0) + ; +"RTN","ut1",170,0) + N GL +"RTN","ut1",171,0) + S GL=$NA(^TMP("%utCOVCOHORT",$J)) +"RTN","ut1",172,0) + I '$D(^TMP("%utcovrunning",$J)) K @GL +"RTN","ut1",173,0) + D RTNANAL(.RTNS,GL) ; save off any current coverage data +"RTN","ut1",174,0) + I '$D(^TMP("%utcovrunning",$J)) N EXIT S EXIT=0 D Q:EXIT +"RTN","ut1",175,0) + . K ^TMP("%utCOVCOHORTSAV",$J) +"RTN","ut1",176,0) + . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) +"RTN","ut1",177,0) + . K ^TMP("%utCOVRESULT",$J) +"RTN","ut1",178,0) + . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 +"RTN","ut1",179,0) + . ; +"RTN","ut1",180,0) + . I (+$SY=47) VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M START PROFILING +"RTN","ut1",181,0) + . ; +"RTN","ut1",182,0) + . I (+$SY=0) D ; CACHE CODE TO START PROFILING +"RTN","ut1",183,0) + . . S STATUS=##class(%Monitor.System.LineByLine).Start($lb(NMSP),$lb("RtnLine"),$lb($j)) +"RTN","ut1",184,0) + . . I +STATUS'=1 D DecomposeStatus^%apiOBJ(STATUS,.ERR,"-d") F I=1:1:ERR W ERR(I),! +"RTN","ut1",185,0) + . . I +STATUS'=1 K ERR S EXIT=1 +"RTN","ut1",186,0) + . . Q +"RTN","ut1",187,0) + . Q +"RTN","ut1",188,0) + DO ; Run the code, but keep our variables to ourselves. +"RTN","ut1",189,0) + . NEW $ETRAP,$ESTACK +"RTN","ut1",190,0) + . I (+$SY=47) D ; GT.M SPECIFIC +"RTN","ut1",191,0) + . . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" +"RTN","ut1",192,0) + . . USE $PRINCIPAL:(CTRAP=$C(3)) +"RTN","ut1",193,0) + . . Q +"RTN","ut1",194,0) + . NEW (DUZ,IO,COVCODE,U,DILOCKTM,DISYS,DT,DTIME,IOBS,IOF,IOM,ION,IOS,IOSL,IOST,IOT,IOXY) +"RTN","ut1",195,0) + . XECUTE COVCODE +"RTN","ut1",196,0) + . Q +"RTN","ut1",197,0) + ; GT.M STOP PROFILING if this is the original level that started it +"RTN","ut1",198,0) + I $D(^TMP("%utcovrunning",$J)),$D(%utcovxx) D +"RTN","ut1",199,0) + . I (+$SY=47) VIEW "TRACE":0:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M SPECIFIC +"RTN","ut1",200,0) + . I (+$SY=0) ; CACHE SPECIFIC +"RTN","ut1",201,0) + . K %utcovxx,^TMP("%utcovrunning",$J) +"RTN","ut1",202,0) + . Q +"RTN","ut1",203,0) + ; +"RTN","ut1",204,0) + I '$D(^TMP("%utcovrunning",$J)) D +"RTN","ut1",205,0) + . I (+$SY=0) D ; CACHE SPECIFIC CODE +"RTN","ut1",206,0) + . . S COVERSAV=$NA(^TMP("%utCOVCOHORTSAV",$J)) K @COVERSAV +"RTN","ut1",207,0) + . . S COVER=$NA(^TMP("%utCOVCOHORT",$J)) K @COVER +"RTN","ut1",208,0) + . . D CACHECOV(COVERSAV,COVER) +"RTN","ut1",209,0) + . . D TOTAGS(COVERSAV,0),TOTAGS(COVER,1) +"RTN","ut1",210,0) + . . D ##class(%Monitor.System.LineByLine).Stop() +"RTN","ut1",211,0) + . . Q +"RTN","ut1",212,0) + . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J))) ; Venn diagram matching between globals +"RTN","ut1",213,0) + . ; Report +"RTN","ut1",214,0) + . I VERBOSITY=-1 D +"RTN","ut1",215,0) + . . K ^TMP("%utCOVREPORT",$J) +"RTN","ut1",216,0) + . . D COVRPTGL($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),$NA(^TMP("%utCOVREPORT",$J))) +"RTN","ut1",217,0) + . . Q +"RTN","ut1",218,0) + . E D COVRPT($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),VERBOSITY) +"RTN","ut1",219,0) + . Q +"RTN","ut1",220,0) + QUIT +"RTN","ut1",221,0) + ; +"RTN","ut1",222,0) +CACHECOV(GLOBSAV,GLOB) ; +"RTN","ut1",223,0) + ; ZEXCEPT: %Monitor,GetMetrics,GetRoutineCount,GetRoutineName,LineByLine,System,class - not variable names, part of classes +"RTN","ut1",224,0) + N DIF,I,METRIC,METRICNT,METRICS,MTRICNUM,ROUNAME,ROUNUM,X,XCNP,XXX +"RTN","ut1",225,0) + I $$ISUTEST(),'$D(^TMP("%utt4val",$J)) S ROUNUM=1,METRICS="RtnLine",METRICNT=1,ROUNAME="%ut" +"RTN","ut1",226,0) + I $D(^TMP("%utt4val",$J))!'$$ISUTEST() S ROUNUM=##class(%Monitor.System.LineByLine).GetRoutineCount(),METRICS=##class(%Monitor.System.LineByLine).GetMetrics(),METRICNT=$l(METRICS,",") +"RTN","ut1",227,0) + ; if only running to do coverage, should be 1 +"RTN","ut1",228,0) + S MTRICNUM=0 F I=1:1:METRICNT S METRIC=$P(METRICS,",",I) I METRIC="RtnLine" S MTRICNUM=I Q +"RTN","ut1",229,0) + ; +"RTN","ut1",230,0) + F I=1:1:ROUNUM D +"RTN","ut1",231,0) + . I $D(^TMP("%utt4val",$J))!'$$ISUTEST() S ROUNAME=##class(%Monitor.System.LineByLine).GetRoutineName(I) +"RTN","ut1",232,0) + . ; get routine loaded into location +"RTN","ut1",233,0) + . S DIF=$NA(@GLOBSAV@(ROUNAME)),DIF=$E(DIF,1,$L(DIF)-1)_",",XCNP=0,X=ROUNAME +"RTN","ut1",234,0) + . X ^%ZOSF("LOAD") +"RTN","ut1",235,0) + . M @GLOB@(ROUNAME)=@GLOBSAV@(ROUNAME) +"RTN","ut1",236,0) + . Q "RTN","ut1",237,0) ; "RTN","ut1",238,0) - ; ZEXCEPT: %utcovxx - SET and KILLED in this code at top level + I $D(^TMP("%utt4val",$J))!'$$ISUTEST() F XXX=1:1:ROUNUM D GETVALS(XXX,GLOB,MTRICNUM) "RTN","ut1",239,0) - Q:'(+$SY=47) ; GT.M only! + Q "RTN","ut1",240,0) ; "RTN","ut1",241,0) - ; ZEXCEPT: CTRAP - not really a variable +GETVALS(ROUNUM,GLOB,MTRICNUM) ; get data on number of times a line seen (set into VAL) "RTN","ut1",242,0) - S VERBOSITY=+$G(VERBOSITY) ; Get 0 if not passed. + ; ZEXCEPT: %Monitor,%New,%ResultSet,Execute,GetData,GetRoutineName,LineByLine,Next,System,class - not variables parts of Cache classes "RTN","ut1",243,0) - N %ZR ; GT.M specific + N LINE,MORE,ROUNAME,RSET,VAL,X "RTN","ut1",244,0) - D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R(RTN)). + ; "RTN","ut1",245,0) - ; + S RSET=##class(%ResultSet).%New("%Monitor.System.LineByLine:Result") "RTN","ut1",246,0) - N RN S RN="" + S ROUNAME=##class(%Monitor.System.LineByLine).GetRoutineName(ROUNUM) "RTN","ut1",247,0) - W !,"Loading routines to test coverage...",! + S LINE=RSET.Execute(ROUNAME) "RTN","ut1",248,0) - F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D + F LINE=1:1 S MORE=RSET.Next() Q:'MORE D "RTN","ut1",249,0) - . N L2 S L2=$T(+2^@RN) + . S X=RSET.GetData(1) "RTN","ut1",250,0) - . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out + . S VAL=$LI(X,MTRICNUM) "RTN","ut1",251,0) - . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine + . S @GLOB@(ROUNAME,LINE,"C")=+VAL ; values are 0 if not seen, otherwises positive number "RTN","ut1",252,0) - ; + . Q "RTN","ut1",253,0) - N RTNS M RTNS=%ZR + D RSET.Close() "RTN","ut1",254,0) - K %ZR + Q "RTN","ut1",255,0) ; "RTN","ut1",256,0) - N GL +TOTAGS(GLOBAL,ACTIVE) ; convert to lines from tags and set value only if not seen "RTN","ut1",257,0) - S GL=$NA(^TMP("%utCOVCOHORT",$J)) + N ACTIVCOD,LINE,LINENUM,ROU,ROUCODE "RTN","ut1",258,0) - I '$D(^TMP("%utcovrunning",$J)) K @GL + S ROU="" F S ROU=$O(@GLOBAL@(ROU)) Q:ROU="" D "RTN","ut1",259,0) - D RTNANAL(.RTNS,GL) + . M ROUCODE(ROU)=@GLOBAL@(ROU) K @GLOBAL@(ROU) "RTN","ut1",260,0) - I '$D(^TMP("%utcovrunning",$J)) D + . N TAG,OFFSET,OLDTAG S TAG="",OFFSET=0,OLDTAG="" "RTN","ut1",261,0) - . K ^TMP("%utCOVCOHORTSAV",$J) + . F LINENUM=1:1 Q:'$D(ROUCODE(ROU,LINENUM,0)) D "RTN","ut1",262,0) - . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) + . . S LINE=ROUCODE(ROU,LINENUM,0) "RTN","ut1",263,0) - . K ^TMP("%utCOVRESULT",$J) + . . S ACTIVCOD=$$LINEDATA(LINE,.TAG,.OFFSET) "RTN","ut1",264,0) - . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 + . . I TAG'=OLDTAG S @GLOBAL@(ROU,TAG)=TAG "RTN","ut1",265,0) - . VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M START PROFILING + . . I ACTIVE,ACTIVCOD,(+$G(ROUCODE(ROU,LINENUM,"C"))'>0) S @GLOBAL@(ROU,TAG,OFFSET)=LINE "RTN","ut1",266,0) - . Q + . . I 'ACTIVE,ACTIVCOD S @GLOBAL@(ROU,TAG,OFFSET)=LINE "RTN","ut1",267,0) - DO ; Run the code, but keep our variables to ourselves. + . . Q "RTN","ut1",268,0) - . NEW $ETRAP,$ESTACK + . Q "RTN","ut1",269,0) - . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" -"RTN","ut1",270,0) - . USE $PRINCIPAL:(CTRAP=$C(3)) -"RTN","ut1",271,0) - . NEW (DUZ,IO,COVCODE,U,DILOCKTM,DISYS,DT,DTIME,IOBS,IOF,IOM,ION,IOS,IOSL,IOST,IOT,IOXY) -"RTN","ut1",272,0) - . XECUTE COVCODE -"RTN","ut1",273,0) - . Q -"RTN","ut1",274,0) - ; GT.M STOP PROFILING if this is the original level that started it -"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) - I '$D(^TMP("%utcovrunning",$J)) D -"RTN","ut1",278,0) - . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J))) ; Venn diagram matching between globals -"RTN","ut1",279,0) - . ; Report -"RTN","ut1",280,0) - . I VERBOSITY=-1 D -"RTN","ut1",281,0) - . . K ^TMP("%utCOVREPORT",$J) -"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) - . 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) - QUIT -"RTN","ut1",287,0) - ; -"RTN","ut1",288,0) -RTNANAL(RTNS,GL) ; [Private] - Routine Analysis -"RTN","ut1",289,0) - ; Create a global similar to the trace global produced by GT.M in GL -"RTN","ut1",290,0) - ; Only non-comment lines are stored. -"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",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) - F S RTN=$O(RTNS(RTN)) Q:RTN="" D ; for each routine -"RTN","ut1",296,0) - . N TAG -"RTN","ut1",297,0) - . S TAG=RTN ; start the tags at the first -"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",299,0) - . . I $E(LN)?1A D QUIT ; formal line -"RTN","ut1",300,0) - . . . N T ; Terminator -"RTN","ut1",301,0) - . . . N J F J=1:1:$L(LN) S T=$E(LN,J) Q:T'?1AN ; Loop to... -"RTN","ut1",302,0) - . . . S TAG=$E(LN,1,J-1) ; Get tag -"RTN","ut1",303,0) - . . . S @GL@(RTN,TAG)=TAG ; store line -"RTN","ut1",304,0) - . . . ;I T="(" S @GL@(RTN,TAG,0)=LN ; formal list -"RTN","ut1",305,0) - . . . I T="(" D ; formal list -"RTN","ut1",306,0) - . . . . N PCNT,STR,CHR S PCNT=0,STR=$E(LN,J+1,$L(LN)) -"RTN","ut1",307,0) - . . . . F S CHR=$E(STR),STR=$E(STR,2,$L(STR)) Q:(PCNT=0)&(CHR=")") D -"RTN","ut1",308,0) - . . . . . I CHR="(" S PCNT=PCNT+1 -"RTN","ut1",309,0) - . . . . . I CHR=")" S PCNT=PCNT-1 -"RTN","ut1",310,0) - . . . . . Q -"RTN","ut1",311,0) - . . . . S STR=$TR(STR,$C(9,32)) -"RTN","ut1",312,0) - . . . . I $E(STR)=";" QUIT -"RTN","ut1",313,0) - . . . . S @GL@(RTN,TAG,0)=LN -"RTN","ut1",314,0) - . . . . Q -"RTN","ut1",315,0) - . . . E D ; No formal list -"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",317,0) - . . . . I $E(LNTR)=";" QUIT ; Comment -"RTN","ut1",318,0) - . . . . S @GL@(RTN,TAG,0)=LN ; Otherwise, store for testing -"RTN","ut1",319,0) - . . . S I=0 ; Start offsets from zero (first one at the for will be 1) -"RTN","ut1",320,0) - . . I $C(32,9)[$E(LN) D QUIT ; Regular line -"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",322,0) - . . . I $E(LNTR)=";" QUIT ; Comment line -- don't want. -"RTN","ut1",323,0) - . . . S @GL@(RTN,TAG,I)=LN ; Record line -"RTN","ut1",324,0) - QUIT -"RTN","ut1",325,0) - ; -"RTN","ut1",326,0) -ACTLINES(GL) ; [Private] $$ ; Count active lines -"RTN","ut1",327,0) - ; -"RTN","ut1",328,0) - N CNT S CNT=0 -"RTN","ut1",329,0) - N REF S REF=GL -"RTN","ut1",330,0) - N GLQL S GLQL=$QL(GL) -"RTN","ut1",331,0) - F S REF=$Q(@REF) Q:REF="" Q:(GL'=$NA(@REF,GLQL)) D -"RTN","ut1",332,0) - . N REFQL S REFQL=$QL(REF) -"RTN","ut1",333,0) - . N LASTSUB S LASTSUB=$QS(REF,REFQL) -"RTN","ut1",334,0) - . I LASTSUB?1.N S CNT=CNT+1 -"RTN","ut1",335,0) - QUIT CNT -"RTN","ut1",336,0) - ; -"RTN","ut1",337,0) -COVCOV(C,R) ; [Private] - Analyze coverage Cohort vs Result -"RTN","ut1",338,0) - N RTN S RTN="" -"RTN","ut1",339,0) - F S RTN=$O(@C@(RTN)) Q:RTN="" D ; For each routine in cohort set -"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) - . 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) - . . 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",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) - ; -"RTN","ut1",348,0) -COVRPT(C,S,R,V) ; [Private] - Coverage Report -"RTN","ut1",349,0) - ; C = COHORT - Global name -"RTN","ut1",350,0) - ; S = SURVIVORS - Global name -"RTN","ut1",351,0) - ; R = RESULT - Global name -"RTN","ut1",352,0) - ; V = Verbosity - Scalar from -1 to 3 -"RTN","ut1",353,0) - ; JLI 150702 - modified to be able to do unit tests on setting up the text via COVRPTLS -"RTN","ut1",354,0) - N X,I -"RTN","ut1",355,0) - S X=$NA(^TMP("%ut1-covrpt",$J)) K @X -"RTN","ut1",356,0) - D COVRPTLS(C,S,R,V,X) -"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",358,0) Q -"RTN","ut1",359,0) +"RTN","ut1",270,0) ; -"RTN","ut1",360,0) -COVRPTLS(C,S,R,V,X) ; -"RTN","ut1",361,0) +"RTN","ut1",271,0) +LINEDATA(LINE,TAG,OFFSET) ; +"RTN","ut1",272,0) + ; LINE - input - the line of code +"RTN","ut1",273,0) + ; TAG - passed by reference - +"RTN","ut1",274,0) + ; OFFSET - passed by reference +"RTN","ut1",275,0) + N CODE,NEWTAG +"RTN","ut1",276,0) + S NEWTAG="" +"RTN","ut1",277,0) + S OFFSET=$G(OFFSET)+1 +"RTN","ut1",278,0) + F Q:$E(LINE,1)=" " Q:$E(LINE,1)=$C(9) Q:LINE="" S NEWTAG=NEWTAG_$E(LINE,1),LINE=$E(LINE,2,$L(LINE)) +"RTN","ut1",279,0) + S NEWTAG=$P(NEWTAG,"(") +"RTN","ut1",280,0) + I NEWTAG'="" S TAG=NEWTAG,OFFSET=0 +"RTN","ut1",281,0) + S CODE=1 +"RTN","ut1",282,0) + F S:(LINE="")!($E(LINE)=";") CODE=0 Q:'CODE Q:(" ."'[$E(LINE)) S LINE=$E(LINE,2,$L(LINE)) +"RTN","ut1",283,0) + Q CODE +"RTN","ut1",284,0) ; -"RTN","ut1",362,0) - N LINNUM S LINNUM=0 -"RTN","ut1",363,0) - N ORIGLINES S ORIGLINES=$$ACTLINES(C) -"RTN","ut1",364,0) - N LEFTLINES S LEFTLINES=$$ACTLINES(S) -"RTN","ut1",365,0) - ;W !! -"RTN","ut1",366,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",367,0) - ;W "ORIG: "_ORIGLINES,! -"RTN","ut1",368,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="ORIG: "_ORIGLINES -"RTN","ut1",369,0) - ;W "LEFT: "_LEFTLINES,! -"RTN","ut1",370,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="LEFT: "_LEFTLINES -"RTN","ut1",371,0) - ;W "COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00),! -"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",373,0) - ;W !! -"RTN","ut1",374,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",375,0) - ;W "BY ROUTINE:",! -"RTN","ut1",376,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="BY ROUTINE:" -"RTN","ut1",377,0) - I V=0 QUIT ; No verbosity. Don't print routine detail -"RTN","ut1",378,0) +"RTN","ut1",285,0) +RTNANAL(RTNS,GL) ; [Private] - Routine Analysis +"RTN","ut1",286,0) + ; Create a global similar to the trace global produced by GT.M in GL +"RTN","ut1",287,0) + ; Only non-comment lines are stored. +"RTN","ut1",288,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",289,0) + ; tags by themselves don't count toward the total. +"RTN","ut1",290,0) + ; +"RTN","ut1",291,0) N RTN S RTN="" -"RTN","ut1",379,0) - F S RTN=$O(@C@(RTN)) Q:RTN="" D -"RTN","ut1",380,0) - . N O S O=$$ACTLINES($NA(@C@(RTN))) -"RTN","ut1",381,0) - . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",382,0) - . ;W ?3,RTN,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",383,0) - . N XX S XX=" "_RTN_" ",XX=$E(XX,1,20) -"RTN","ut1",384,0) - . S LINNUM=LINNUM+1,@X@(LINNUM)=XX+$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",385,0) - . I V=1 QUIT ; Just print the routine coverage for V=1 -"RTN","ut1",386,0) +"RTN","ut1",292,0) + F S RTN=$O(RTNS(RTN)) Q:RTN="" D ; for each routine +"RTN","ut1",293,0) + . N TAG +"RTN","ut1",294,0) + . S TAG=RTN ; start the tags at the first +"RTN","ut1",295,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",296,0) + . . I $E(LN)?1A D QUIT ; formal line +"RTN","ut1",297,0) + . . . N T ; Terminator +"RTN","ut1",298,0) + . . . N J F J=1:1:$L(LN) S T=$E(LN,J) Q:T'?1AN ; Loop to... +"RTN","ut1",299,0) + . . . S TAG=$E(LN,1,J-1) ; Get tag +"RTN","ut1",300,0) + . . . S @GL@(RTN,TAG)=TAG ; store line +"RTN","ut1",301,0) + . . . ;I T="(" S @GL@(RTN,TAG,0)=LN ; formal list +"RTN","ut1",302,0) + . . . I T="(" D ; formal list +"RTN","ut1",303,0) + . . . . N PCNT,STR,CHR S PCNT=0,STR=$E(LN,J+1,$L(LN)) +"RTN","ut1",304,0) + . . . . F S CHR=$E(STR),STR=$E(STR,2,$L(STR)) Q:(PCNT=0)&(CHR=")") D +"RTN","ut1",305,0) + . . . . . I CHR="(" S PCNT=PCNT+1 +"RTN","ut1",306,0) + . . . . . I CHR=")" S PCNT=PCNT-1 +"RTN","ut1",307,0) + . . . . . Q +"RTN","ut1",308,0) + . . . . S STR=$TR(STR,$C(9,32)) +"RTN","ut1",309,0) + . . . . I $E(STR)=";" QUIT +"RTN","ut1",310,0) + . . . . S @GL@(RTN,TAG,0)=LN +"RTN","ut1",311,0) + . . . . Q +"RTN","ut1",312,0) + . . . E D ; No formal list +"RTN","ut1",313,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",314,0) + . . . . I $E(LNTR)=";" QUIT ; Comment +"RTN","ut1",315,0) + . . . . S @GL@(RTN,TAG,0)=LN ; Otherwise, store for testing +"RTN","ut1",316,0) + . . . S I=0 ; Start offsets from zero (first one at the for will be 1) +"RTN","ut1",317,0) + . . I $C(32,9)[$E(LN) D QUIT ; Regular line +"RTN","ut1",318,0) + . . . N LNTR S LNTR=$TR(LN,$C(32,9,46)) ; Remove all spaces and tabs - JLI 150202 remove periods as well +"RTN","ut1",319,0) + . . . I $E(LNTR)=";" QUIT ; Comment line -- don't want. +"RTN","ut1",320,0) + . . . S @GL@(RTN,TAG,I)=LN ; Record line +"RTN","ut1",321,0) + QUIT +"RTN","ut1",322,0) + ; +"RTN","ut1",323,0) +ACTLINES(GL) ; [Private] $$ ; Count active lines +"RTN","ut1",324,0) + ; +"RTN","ut1",325,0) + N CNT S CNT=0 +"RTN","ut1",326,0) + N REF S REF=GL +"RTN","ut1",327,0) + N GLQL S GLQL=$QL(GL) +"RTN","ut1",328,0) + F S REF=$Q(@REF) Q:REF="" Q:(GL'=$NA(@REF,GLQL)) D +"RTN","ut1",329,0) + . N REFQL S REFQL=$QL(REF) +"RTN","ut1",330,0) + . N LASTSUB S LASTSUB=$QS(REF,REFQL) +"RTN","ut1",331,0) + . I LASTSUB?1.N S CNT=CNT+1 +"RTN","ut1",332,0) + QUIT CNT +"RTN","ut1",333,0) + ; +"RTN","ut1",334,0) +COVCOV(C,R) ; [Private] - Analyze coverage Cohort vs Result +"RTN","ut1",335,0) + N RTN S RTN="" +"RTN","ut1",336,0) + F S RTN=$O(@C@(RTN)) Q:RTN="" D ; For each routine in cohort set +"RTN","ut1",337,0) + . I '$D(@R@(RTN)) QUIT ; Not present in result set +"RTN","ut1",338,0) . N TAG S TAG="" -"RTN","ut1",387,0) - . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D -"RTN","ut1",388,0) - . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) -"RTN","ut1",389,0) - . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",390,0) - . . ;W ?5,TAG,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",391,0) - . . S XX=" "_TAG_" ",XX=$E(XX,1,20) -"RTN","ut1",392,0) - . . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",393,0) - . . I V=2 QUIT ; Just print routine/tags coverage for V=2; V=3 print uncovered lines -"RTN","ut1",394,0) +"RTN","ut1",339,0) + . F S TAG=$O(@R@(RTN,TAG)) Q:TAG="" D ; For each tag in the routine in the result set +"RTN","ut1",340,0) . . N LN S LN="" -"RTN","ut1",395,0) - . . ;F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" W TAG_"+"_LN_": "_^(LN),! -"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",397,0) - . . Q -"RTN","ut1",398,0) - . Q -"RTN","ut1",399,0) +"RTN","ut1",341,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",342,0) + . . . I $D(@C@(RTN,TAG,LN)) K ^(LN) ; if present in cohort, kill off +"RTN","ut1",343,0) QUIT -"RTN","ut1",400,0) +"RTN","ut1",344,0) ; -"RTN","ut1",401,0) -COVRPTGL(C,S,R,OUT) ; [Private] - Coverage Global for silent invokers -"RTN","ut1",402,0) +"RTN","ut1",345,0) +COVRPT(C,S,R,V) ; [Private] - Coverage Report +"RTN","ut1",346,0) ; C = COHORT - Global name -"RTN","ut1",403,0) +"RTN","ut1",347,0) ; S = SURVIVORS - Global name -"RTN","ut1",404,0) +"RTN","ut1",348,0) ; R = RESULT - Global name -"RTN","ut1",405,0) - ; OUT = OUTPUT - Global name -"RTN","ut1",406,0) +"RTN","ut1",349,0) + ; V = Verbosity - Scalar from -1 to 3 +"RTN","ut1",350,0) + ; JLI 150702 - modified to be able to do unit tests on setting up the text via COVRPTLS +"RTN","ut1",351,0) + N X,I +"RTN","ut1",352,0) + S X=$NA(^TMP("%ut1-covrpt",$J)) K @X +"RTN","ut1",353,0) + D COVRPTLS(C,S,R,V,X) +"RTN","ut1",354,0) + I '$$ISUTEST^%ut() F I=1:1 W:$D(@X@(I)) !,@X@(I) I '$D(@X@(I)) K @X Q +"RTN","ut1",355,0) + Q +"RTN","ut1",356,0) ; -"RTN","ut1",407,0) - N O S O=$$ACTLINES(C) -"RTN","ut1",408,0) - N L S L=$$ACTLINES(S) -"RTN","ut1",409,0) - S @OUT=(O-L)_"/"_O -"RTN","ut1",410,0) - N RTN,TAG,LN S (RTN,TAG,LN)="" -"RTN","ut1",411,0) +"RTN","ut1",357,0) +COVRPTLS(C,S,R,V,X) ; +"RTN","ut1",358,0) + ; +"RTN","ut1",359,0) + N LINNUM S LINNUM=0 +"RTN","ut1",360,0) + N ORIGLINES S ORIGLINES=$$ACTLINES(C) +"RTN","ut1",361,0) + N LEFTLINES S LEFTLINES=$$ACTLINES(S) +"RTN","ut1",362,0) + ;W !! +"RTN","ut1",363,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" +"RTN","ut1",364,0) + ;W "ORIG: "_ORIGLINES,! +"RTN","ut1",365,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="ORIG: "_ORIGLINES +"RTN","ut1",366,0) + ;W "LEFT: "_LEFTLINES,! +"RTN","ut1",367,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="LEFT: "_LEFTLINES +"RTN","ut1",368,0) + ;W "COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00),! +"RTN","ut1",369,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J((ORIGLINES-LEFTLINES)/ORIGLINES*100,"",2),1:100.00) +"RTN","ut1",370,0) + ;W !! +"RTN","ut1",371,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" +"RTN","ut1",372,0) + ;W "BY ROUTINE:",! +"RTN","ut1",373,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="BY ROUTINE:" +"RTN","ut1",374,0) + I V=0 QUIT ; No verbosity. Don't print routine detail +"RTN","ut1",375,0) + N RTN S RTN="" +"RTN","ut1",376,0) F S RTN=$O(@C@(RTN)) Q:RTN="" D -"RTN","ut1",412,0) +"RTN","ut1",377,0) . N O S O=$$ACTLINES($NA(@C@(RTN))) -"RTN","ut1",413,0) +"RTN","ut1",378,0) . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",414,0) - . S @OUT@(RTN)=(O-L)_"/"_O -"RTN","ut1",415,0) +"RTN","ut1",379,0) + . ;W ?3,RTN,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! +"RTN","ut1",380,0) + . N XX,XY S XX=" "_RTN_" ",XX=$E(XX,1,12) +"RTN","ut1",381,0) + . S XY=" "_$S(O:$J((O-L)/O*100,"",2)_"%",1:"------"),XY=$E(XY,$L(XY)-11,$L(XY)) +"RTN","ut1",382,0) + . ;S LINNUM=LINNUM+1,@X@(LINNUM)=XX_$S(O:$J((O-L)/O*100,"",2)_"%",1:"------")_" "_(O-L)_" out of "_O +"RTN","ut1",383,0) + . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_XY_" "_(O-L)_" out of "_O +"RTN","ut1",384,0) + . I V=1 QUIT ; Just print the routine coverage for V=1 +"RTN","ut1",385,0) + . N TAG S TAG="" +"RTN","ut1",386,0) . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D -"RTN","ut1",416,0) +"RTN","ut1",387,0) . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) -"RTN","ut1",417,0) +"RTN","ut1",388,0) . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",418,0) - . . S @OUT@(RTN,TAG)=(O-L)_"/"_O -"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",420,0) +"RTN","ut1",389,0) + . . ;W ?5,TAG,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! +"RTN","ut1",390,0) + . . S XX=" "_TAG_" ",XX=$E(XX,1,20) +"RTN","ut1",391,0) + . . ;S XY=" ("_(O-L)_"/"_O_")",XY=$E(XY,$L(XY)-11,$L(XY)),XX=XX_XY +"RTN","ut1",392,0) + . . S XY=" "_$S(O:$J((O-L)/O*100,"",2)_"%",1:"------"),XY=$E(XY,$L(XY)-7,$L(XY)) +"RTN","ut1",393,0) + . . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_XY_" "_(O-L)_" out of "_O +"RTN","ut1",394,0) + . . I V=2 QUIT ; Just print routine/tags coverage for V=2; V=3 print uncovered lines +"RTN","ut1",395,0) + . . N LN S LN="" +"RTN","ut1",396,0) + . . ;F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" W TAG_"+"_LN_": "_^(LN),! +"RTN","ut1",397,0) + . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S LINNUM=LINNUM+1,@X@(LINNUM)=TAG_"+"_LN_": "_^(LN) +"RTN","ut1",398,0) + . . Q +"RTN","ut1",399,0) + . Q +"RTN","ut1",400,0) QUIT -"RTN","ut1",421,0) +"RTN","ut1",401,0) ; +"RTN","ut1",402,0) +COVRPTGL(C,S,R,OUT) ; [Private] - Coverage Global for silent invokers +"RTN","ut1",403,0) + ; C = COHORT - Global name +"RTN","ut1",404,0) + ; S = SURVIVORS - Global name +"RTN","ut1",405,0) + ; R = RESULT - Global name +"RTN","ut1",406,0) + ; OUT = OUTPUT - Global name +"RTN","ut1",407,0) + ; +"RTN","ut1",408,0) + N O S O=$$ACTLINES(C) +"RTN","ut1",409,0) + N L S L=$$ACTLINES(S) +"RTN","ut1",410,0) + S @OUT=(O-L)_"/"_O +"RTN","ut1",411,0) + N RTN,TAG,LN S (RTN,TAG,LN)="" +"RTN","ut1",412,0) + F S RTN=$O(@C@(RTN)) Q:RTN="" D +"RTN","ut1",413,0) + . N O S O=$$ACTLINES($NA(@C@(RTN))) +"RTN","ut1",414,0) + . N L S L=$$ACTLINES($NA(@S@(RTN))) +"RTN","ut1",415,0) + . S @OUT@(RTN)=(O-L)_"/"_O +"RTN","ut1",416,0) + . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D +"RTN","ut1",417,0) + . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) +"RTN","ut1",418,0) + . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) +"RTN","ut1",419,0) + . . S @OUT@(RTN,TAG)=(O-L)_"/"_O +"RTN","ut1",420,0) + . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S @OUT@(RTN,TAG,LN)=@S@(RTN,TAG,LN) +"RTN","ut1",421,0) + QUIT +"RTN","ut1",422,0) + ; +"RTN","ut1",423,0) +ISUTEST() ; +"RTN","ut1",424,0) + Q $$ISUTEST^%ut() "RTN","utcover") -0^10^B32934852 +0^3^B52893402 "RTN","utcover",1,0) -%utcover ;JLI - generic coverage and unit test runner ;09/14/15 09:37 +%utcover ;JLI - generic coverage and unit test runner ;12/07/15 16:36 "RTN","utcover",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 13 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utcover",4,0) ; Original routine authored by Joel L. Ivey "RTN","utcover",5,0) ; "RTN","utcover",6,0) - D EN^%ut("%uttcovr") ; unit tests + ; Changes: (Moved from %ut and %ut1) "RTN","utcover",7,0) - Q + ; 130726 SMH - Moved test collection logic from %utUNIT to here (multiple places) "RTN","utcover",8,0) - ; + ; 131218 SMH - dependence on XLFSTR removed "RTN","utcover",9,0) -MULTAPIS(TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS + ; 131218 SMH - CHEKTEST refactored to use $TEXT instead of ^%ZOSF("LOAD") "RTN","utcover",10,0) - ; can be run from %ut using D MULTAPIS^%ut(.TESTROUS) + ; 131218 SMH - CATCHERR now nulls out $ZS if on GT.M "RTN","utcover",11,0) - ; input TESTROUS - passed by reference - array of routine names to run tests for + ; "RTN","utcover",12,0) - ; specify those to be called directly by including ^ as part of + ; ------- COMMENTS moved from %ut due to space requirements "RTN","utcover",13,0) - ; TAG^ROUTINE or ^ROUTINE. + ; "RTN","utcover",14,0) - ; ROUTINE names without a ^ will be called as EN^%ut("ROUTINE") + ; 100622 JLI - corrected typo in comments where %utINPT was listed as %utINP "RTN","utcover",15,0) - ; Sometimes to get complete coverage, different entry points may + ; 100622 JLI - removed a comment which indicated data could potentially be returned from the called routine "RTN","utcover",16,0) - ; need to be called (e.g., at top and for VERBOSE), these should each + ; in the %utINPT array. "RTN","utcover",17,0) - ; be included. + ; 100622 JLI - added code to handle STARTUP and SHUTDOWN from GUI app "RTN","utcover",18,0) - ; If the subscript is a number, it will take the list of comma separated + ; 110719 JLI - modified separators in GUI handling from ^ to ~~^~~ "RTN","utcover",19,0) - ; values as the routines. If the the subscript is not a number, it will + ; in the variable XTGUISEP if using a newer version of the "RTN","utcover",20,0) - ; take it as a routine to be added to the list, then if the value of the + ; GUI app (otherwise, it is simply set to ^) since results "RTN","utcover",21,0) - ; contains a comma separated list of routines, they will be added as well. + ; with a series of ^ embedded disturbed the output reported "RTN","utcover",22,0) - ; Thus a value of + ; 130726 SMH - Fixed SETUP and TEARDOWN so that they run before/after each "RTN","utcover",23,0) - ; TESTROUS(1)="A^ROU1,^ROU1,^ROU2,ROU3" + ; test rather than once. General refactoring. "RTN","utcover",24,0) - ; or a value of + ; 130726 SMH - SETUT initialized IO in case it's not there to $P. Inits vars "RTN","utcover",25,0) - ; TESTROUS("A^ROU1")="^ROU1,^ROU2,ROU3" + ; using DT^DICRW. "RTN","utcover",26,0) - ; will both result in tests for + ; 131217 SMH - Change call in SETUP to S U="^" instead of DT^DICRW "RTN","utcover",27,0) - ; D A^ROU1,^ROU1,^ROU2,EN^%ut("ROU3") + ; 131218 SMH - Any checks to $ZE will also check $ZS for GT.M. "RTN","utcover",28,0) - K ^TMP("%utcover",$J,"TESTROUS") + ; 131218 SMH - Remove calls to %ZISUTL to manage devices to prevent dependence on VISTA. "RTN","utcover",29,0) - M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS + ; Use %utNIT("DEV","OLD") for old devices "RTN","utcover",30,0) - D COVENTRY + ; 140109 SMH - Add parameter %utBREAK - Break upon error "RTN","utcover",31,0) - K ^TMP("%utcover",$J,"TESTROUS") + ; 1402 SMH - Break will cause the break to happen even on failed tests. "RTN","utcover",32,0) - Q + ; 140401 SMH - Added Succeed entry point for take it into your hands tester. "RTN","utcover",33,0) - ; + ; 140401 SMH - Reformatted the output of M-Unit so that the test's name "RTN","utcover",34,0) -COVENTRY ; setup of COVERAGE NEWs most variables, so TESTROUS passed by global + ; will print BEFORE the execution of the test. This has been "RTN","utcover",35,0) - ; + ; really confusing for beginning users of M-Unit, so this was "RTN","utcover",36,0) - N I,ROU,VAL,VALS,UTDATA,TESTS,TESTROUS + ; necessary. "RTN","utcover",37,0) - M TESTROUS=^TMP("%utcover",$J,"TESTROUS") + ; 140401 SMH - OK message gets printed at the end of --- as [OK]. "RTN","utcover",38,0) - S ROU="" F S ROU=$O(TESTROUS(ROU)) Q:ROU="" D + ; 140401 SMH - FAIL message now prints. Previously, OK failed to be printed. "RTN","utcover",39,0) - . I ROU'=+ROU S TESTS(ROU)="" + ; Unfortunately, that's rather passive aggressive. Now it "RTN","utcover",40,0) - . F I=1:1 S VAL=$P(TESTROUS(ROU),",",I) Q:VAL="" S TESTS(VAL)="" + ; explicitly says that a test failed. "RTN","utcover",41,0) - . Q + ; 140503 SMH - Fixed IO issues all over the routine. Much simpler now. "RTN","utcover",42,0) - S ROU="" F S ROU=$O(TESTS(ROU)) Q:ROU="" D + ; 140731 JLI - Combined routine changes between JLI and SMH "RTN","utcover",43,0) - . W !!,"------------------- RUNNING ",ROU," -------------------" + ; Moved routines from %utNIT and %utNIT1 to %ut and %ut1 "RTN","utcover",44,0) - . I ROU[U D @ROU + ; Updated unit test routines (%utt1 to %utt6) "RTN","utcover",45,0) - . I ROU'[U D @("EN^%ut("""_ROU_""")") + ; Created M-UNIT TEST GROUP file at 17.9001 based on the 17.9001 file "RTN","utcover",46,0) - . D GETUTVAL^%ut(.UTDATA) + ; 141030 JLI - Removed tag TESTCOVR and code under it, not necessary "RTN","utcover",47,0) - . Q + ; since %uttcovr can handle all of the calling needed "RTN","utcover",48,0) - I $D(UTDATA) D LSTUTVAL^%ut(.UTDATA) + ; Added call to run routine %utt6 if run from the top, "RTN","utcover",49,0) - Q + ; since this will run the full range of unit tests "RTN","utcover",50,0) - ; + ; Modified STARTUP and SHUTDOWN commands to handle in "RTN","utcover",51,0) -COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ; run coverage analysis for multiple routines and entry points + ; each routine where they are available, since only "RTN","utcover",52,0) - ; can be run from %ut using D COVERAGE^%ut(ROUNMSP,.TESTROUS,.XCLDROUS,RESLTLVL) + ; running one STARTUP and SHUTDOWN (the first seen by "RTN","utcover",53,0) - ; input ROUNMSP - Namespace for routine(s) to be analyzed + ; the program) restricted their use in suites of multiple "RTN","utcover",54,0) - ; ROUNAME will result in only the routine ROUNAME being analyzed + ; tests. "RTN","utcover",55,0) - ; ROUN* will result in all routines beginning with ROUN being analyzed + ; 150101 JLI - Added COV entry to %ut (in addition to current in %ut1) so it is easier "RTN","utcover",56,0) - ; input TESTROUS - passed by reference - see TESTROUS description for JUSTTEST + ; to remember how to use it. "RTN","utcover",57,0) - ; input XCLDROUS - passed by reference - routines passed in a manner similar to TESTROUS, + ; 150621 JLI - Added a global location to pick up summary data for a unit test call, so "RTN","utcover",58,0) - ; but only the routine names, whether as arguments or a comma separated + ; programs running multiple calls can generate a summary if desired. "RTN","utcover",59,0) - ; list of routines, will be excluded from the analysis of coverage. These + ; "RTN","utcover",60,0) - ; would normally be names of routines which are only for unit tests, or + ; "RTN","utcover",61,0) - ; others which should not be included in the analysis for some reason. + D EN^%ut("%uttcovr") ; unit tests "RTN","utcover",62,0) - ; input RESLTLVL - This value determines the amount of information to be generated for the -"RTN","utcover",63,0) - ; analysis. A missing or null value will be considered to be level 1 -"RTN","utcover",64,0) - ; 1 - Listing of analysis only for routine overall -"RTN","utcover",65,0) - ; 2 - Listing of analysis for routine overall and for each TAG -"RTN","utcover",66,0) - ; 3 - Full analysis for each tag, and lists out those lines which were -"RTN","utcover",67,0) - ; not executed during the analysis -"RTN","utcover",68,0) - ; -"RTN","utcover",69,0) - N I,ROU,TYPE,VAL,XCLUDE -"RTN","utcover",70,0) - S RESLTLVL=$G(RESLTLVL,1) -"RTN","utcover",71,0) - I (RESLTLVL<1) S RESLTLVL=1 -"RTN","utcover",72,0) - I (RESLTLVL>3) S RESLTLVL=3 -"RTN","utcover",73,0) - M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS ; -"RTN","utcover",74,0) - D COV^%ut1(ROUNMSP,"D COVENTRY^%utcover",-1) -"RTN","utcover",75,0) - K ^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",76,0) - S ROU="" F S ROU=$O(XCLDROUS(ROU)) Q:ROU="" D -"RTN","utcover",77,0) - . I ROU'=+ROU S XCLUDE(ROU)="" -"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) - N TEXTGLOB S TEXTGLOB=$NA(^TMP("%utcover-text",$J)) K @TEXTGLOB -"RTN","utcover",81,0) - D LIST(.XCLUDE,RESLTLVL,TEXTGLOB) -"RTN","utcover",82,0) - F I=1:1 Q:'$D(@TEXTGLOB@(I)) W !,@TEXTGLOB@(I) -"RTN","utcover",83,0) - K @TEXTGLOB -"RTN","utcover",84,0) Q +"RTN","utcover",63,0) + ; +"RTN","utcover",64,0) +MULTAPIS(TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS +"RTN","utcover",65,0) + ; can be run from %ut using D MULTAPIS^%ut(.TESTROUS) +"RTN","utcover",66,0) + ; input TESTROUS - passed by reference - array of routine names to run tests for +"RTN","utcover",67,0) + ; specify those to be called directly by including ^ as part of +"RTN","utcover",68,0) + ; TAG^ROUTINE or ^ROUTINE. +"RTN","utcover",69,0) + ; ROUTINE names without a ^ will be called as EN^%ut("ROUTINE") +"RTN","utcover",70,0) + ; Sometimes to get complete coverage, different entry points may +"RTN","utcover",71,0) + ; need to be called (e.g., at top and for VERBOSE), these should each +"RTN","utcover",72,0) + ; be included. +"RTN","utcover",73,0) + ; If the subscript is a number, it will take the list of comma separated +"RTN","utcover",74,0) + ; values as the routines. If the the subscript is not a number, it will +"RTN","utcover",75,0) + ; take it as a routine to be added to the list, then if the value of the +"RTN","utcover",76,0) + ; contains a comma separated list of routines, they will be added as well. +"RTN","utcover",77,0) + ; Thus a value of +"RTN","utcover",78,0) + ; TESTROUS(1)="A^ROU1,^ROU1,^ROU2,ROU3" +"RTN","utcover",79,0) + ; or a value of +"RTN","utcover",80,0) + ; TESTROUS("A^ROU1")="^ROU1,^ROU2,ROU3" +"RTN","utcover",81,0) + ; will both result in tests for +"RTN","utcover",82,0) + ; D A^ROU1,^ROU1,^ROU2,EN^%ut("ROU3") +"RTN","utcover",83,0) + K ^TMP("%utcover",$J,"TESTROUS") +"RTN","utcover",84,0) + M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS "RTN","utcover",85,0) - ; + D COVENTRY "RTN","utcover",86,0) -LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; + K ^TMP("%utcover",$J,"TESTROUS") "RTN","utcover",87,0) - ; ZEXCEPT: TYPE1 - NEWed and set below for recursion + Q "RTN","utcover",88,0) - ; input - ROULIST - a comma separated list of routine names that will + ; "RTN","utcover",89,0) - ; be used to identify desired routines. Any name +COVENTRY ; setup of COVERAGE NEWs most variables, so TESTROUS passed by global "RTN","utcover",90,0) - ; that begins with one of the specified values will + ; "RTN","utcover",91,0) - ; be included + N I,ROU,VAL,VALS,UTDATA,TESTS,TESTROUS "RTN","utcover",92,0) - ; input - TYPE - value indicating amount of detail desired + M TESTROUS=^TMP("%utcover",$J,"TESTROUS") "RTN","utcover",93,0) - ; 3=full with listing of untouched lines + S ROU="" F S ROU=$O(TESTROUS(ROU)) Q:ROU="" D "RTN","utcover",94,0) - ; 2=moderated with listing by tags + . I ROU'=+ROU S TESTS(ROU)="" "RTN","utcover",95,0) - ; 1=summary with listing by routine + . F I=1:1 S VAL=$P(TESTROUS(ROU),",",I) Q:VAL="" S TESTS(VAL)="" "RTN","utcover",96,0) - ; input - TEXTGLOB - closed global location in which text is returned + . Q "RTN","utcover",97,0) - ; input - GLOB - used for unit tests - specifies global to work with + S ROU="" F S ROU=$O(TESTS(ROU)) Q:ROU="" D "RTN","utcover",98,0) - ; so that coverage data is not impacted + . W !!,"------------------- RUNNING ",ROU," -------------------" "RTN","utcover",99,0) - ; + . I ROU[U D @ROU "RTN","utcover",100,0) - N CURRCOV,CURRLIN,LINCOV,LINE,LINTOT,ROULIST,ROUNAME,TAG,TOTCOV,TOTLIN,XVAL + . I ROU'[U D @("EN^%ut("""_ROU_""")") "RTN","utcover",101,0) - ; + . D GETUTVAL^%ut(.UTDATA) "RTN","utcover",102,0) - I '$D(LINNUM) S LINNUM=0 ; initialize on first entry + . Q "RTN","utcover",103,0) - I '$D(GLOB) N GLOB S GLOB=$NA(^TMP("%utCOVREPORT",$J)) + I $D(UTDATA) D LSTUTVAL^%ut(.UTDATA) "RTN","utcover",104,0) - D TRIMDATA(.XCLDROUS,GLOB) ; remove undesired routines from data + Q "RTN","utcover",105,0) ; "RTN","utcover",106,0) - N JOB,NAME,BASE +COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ; run coverage analysis for multiple routines and entry points "RTN","utcover",107,0) - S TOTCOV=0,TOTLIN=0 + ; can be run from %ut using D COVERAGE^%ut(ROUNMSP,.TESTROUS,.XCLDROUS,RESLTLVL) "RTN","utcover",108,0) - ; F NAME="%utCOVREPORT","%utCOVRESULT","%utCOVCOHORT","%utCOVCOHORTSAV" D + ; input ROUNMSP - Namespace for routine(s) to be analyzed "RTN","utcover",109,0) - I TYPE>1 S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D + ; ROUNAME will result in only the routine ROUNAME being analyzed "RTN","utcover",110,0) - . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) + ; ROUN* will result in all routines beginning with ROUN being analyzed "RTN","utcover",111,0) - . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" + ; input TESTROUS - passed by reference - see TESTROUS description for JUSTTEST "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:"") + ; input XCLDROUS - passed by reference - routines passed in a manner similar to TESTROUS, "RTN","utcover",113,0) - . I TYPE>1 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" - "_$S(TYPE=2:"Summary",1:"Detailed Breakdown") + ; but only the routine names, whether as arguments or a comma separated "RTN","utcover",114,0) - . S TAG="" F S TAG=$O(@GLOB@(ROUNAME,TAG)) Q:TAG="" S XVAL=^(TAG) D + ; list of routines, will be excluded from the analysis of coverage. These "RTN","utcover",115,0) - . . S LINCOV=$P(XVAL,"/"),LINTOT=$P(XVAL,"/",2) + ; would normally be names of routines which are only for unit tests, or "RTN","utcover",116,0) - . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" Tag "_TAG_"^"_ROUNAME_" "_LINCOV_" out of "_LINTOT_" lines covered" + ; others which should not be included in the analysis for some reason. "RTN","utcover",117,0) - . . I TYPE=2 Q + ; input RESLTLVL - This value determines the amount of information to be generated for the "RTN","utcover",118,0) - . . I LINCOV=LINTOT Q + ; analysis. A missing or null value will be considered to be level 1 "RTN","utcover",119,0) - . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" the following is a list of the lines **NOT** covered" + ; 1 - Listing of analysis only for routine overall "RTN","utcover",120,0) - . . S LINE="" F S LINE=$O(@GLOB@(ROUNAME,TAG,LINE)) Q:LINE="" D + ; 2 - Listing of analysis for routine overall and for each TAG "RTN","utcover",121,0) - . . . I LINE=0 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_" "_@GLOB@(ROUNAME,TAG,LINE) Q + ; 3 - Full analysis for each tag, and lists out those lines which were "RTN","utcover",122,0) - . . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_"+"_LINE_" "_@GLOB@(ROUNAME,TAG,LINE) + ; not executed during the analysis "RTN","utcover",123,0) - . . . Q -"RTN","utcover",124,0) - . . Q -"RTN","utcover",125,0) - . Q -"RTN","utcover",126,0) - ; for type=3 generate a summary at bottom after detail -"RTN","utcover",127,0) - I TYPE=3 N TYPE1 S TYPE1=2 D LIST(.XCLDROUS,2,TEXTGLOB,GLOB,.LINNUM) K TYPE1 -"RTN","utcover",128,0) - I TYPE=2,$G(TYPE1) Q ; CAME IN FROM ABOVE LINE -"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 ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D -"RTN","utcover",132,0) - . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) -"RTN","utcover",133,0) - . S TOTCOV=TOTCOV+CURRCOV,TOTLIN=TOTLIN+CURRLIN -"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",135,0) - . Q -"RTN","utcover",136,0) - S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" -"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) ; -"RTN","utcover",140,0) -TRIMDATA(ROULIST,GLOB) ; -"RTN","utcover",141,0) - N ROUNAME -"RTN","utcover",142,0) - S ROUNAME="" F S ROUNAME=$O(ROULIST(ROUNAME)) Q:ROUNAME="" K @GLOB@(ROUNAME) -"RTN","utcover",143,0) +"RTN","utcover",124,0) + N I,ROU,TYPE,XCLUDE +"RTN","utcover",125,0) + S RESLTLVL=$G(RESLTLVL,1) +"RTN","utcover",126,0) + I (RESLTLVL<1) S RESLTLVL=1 +"RTN","utcover",127,0) + I (RESLTLVL>3) S RESLTLVL=3 +"RTN","utcover",128,0) + M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS ; +"RTN","utcover",129,0) + D COV^%ut1(ROUNMSP,"D COVENTRY^%utcover",-1) +"RTN","utcover",130,0) + K ^TMP("%utcover",$J,"TESTROUS") +"RTN","utcover",131,0) + S ROU="" F S ROU=$O(XCLDROUS(ROU)) Q:ROU="" D SETROUS(.XCLUDE,.XCLDROUS,ROU) +"RTN","utcover",132,0) + N TEXTGLOB S TEXTGLOB=$NA(^TMP("%utcover-text",$J)) K @TEXTGLOB +"RTN","utcover",133,0) + D LIST(.XCLUDE,RESLTLVL,TEXTGLOB) +"RTN","utcover",134,0) + F I=1:1 Q:'$D(@TEXTGLOB@(I)) W !,@TEXTGLOB@(I) +"RTN","utcover",135,0) + K @TEXTGLOB +"RTN","utcover",136,0) Q +"RTN","utcover",137,0) + ; +"RTN","utcover",138,0) +SETROUS(XCLUDE,XCLDROUS,ROU) ; +"RTN","utcover",139,0) + ; XCLUDE - passed by reference - on return contains array with indices as routines to exclude from analysis +"RTN","utcover",140,0) + ; XCLDROUS - passed by referenc - array may contain a comma-delimited list of routines to exclude from analysis +"RTN","utcover",141,0) + ; ROU - input - if non-numberic is name of routine to exclude from analysis +"RTN","utcover",142,0) + N I,VAL +"RTN","utcover",143,0) + I ROU'=+ROU S XCLUDE(ROU)="" "RTN","utcover",144,0) + F I=1:1 S VAL=$P(XCLDROUS(ROU),",",I) Q:VAL="" S XCLUDE(VAL)="" +"RTN","utcover",145,0) + Q +"RTN","utcover",146,0) + ; +"RTN","utcover",147,0) +LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; +"RTN","utcover",148,0) + ; ZEXCEPT: TYPE1 - NEWed and set below for recursion +"RTN","utcover",149,0) + ; input - ROULIST - a comma separated list of routine names that will +"RTN","utcover",150,0) + ; be used to identify desired routines. Any name +"RTN","utcover",151,0) + ; that begins with one of the specified values will +"RTN","utcover",152,0) + ; be included +"RTN","utcover",153,0) + ; input - TYPE - value indicating amount of detail desired +"RTN","utcover",154,0) + ; 3=full with listing of untouched lines +"RTN","utcover",155,0) + ; 2=moderated with listing by tags +"RTN","utcover",156,0) + ; 1=summary with listing by routine +"RTN","utcover",157,0) + ; input - TEXTGLOB - closed global location in which text is returned +"RTN","utcover",158,0) + ; input - GLOB - used for unit tests - specifies global to work with +"RTN","utcover",159,0) + ; so that coverage data is not impacted +"RTN","utcover",160,0) + ; +"RTN","utcover",161,0) + N CURRCOV,CURRLIN,LINCOV,LINE,LINTOT,ROULIST,ROUNAME,TAG,TOTCOV,TOTLIN,XVAL +"RTN","utcover",162,0) + ; +"RTN","utcover",163,0) + I '$D(LINNUM) S LINNUM=0 ; initialize on first entry +"RTN","utcover",164,0) + I '$D(GLOB) N GLOB S GLOB=$NA(^TMP("%utCOVREPORT",$J)) +"RTN","utcover",165,0) + D TRIMDATA(.XCLDROUS,GLOB) ; remove undesired routines from data +"RTN","utcover",166,0) + ; +"RTN","utcover",167,0) + N JOB,NAME,BASE,TEXT,VAL +"RTN","utcover",168,0) + S TOTCOV=0,TOTLIN=0 +"RTN","utcover",169,0) + ; F NAME="%utCOVREPORT","%utCOVRESULT","%utCOVCOHORT","%utCOVCOHORTSAV" D +"RTN","utcover",170,0) + I TYPE>1 S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D +"RTN","utcover",171,0) + . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) +"RTN","utcover",172,0) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" +"RTN","utcover",173,0) + . S TEXT="Routine "_ROUNAME_" ",TEXT=$E(TEXT,1,20) +"RTN","utcover",174,0) + . I CURRLIN>0 S VAL=" ("_$J((100*CURRCOV)/CURRLIN,"",2),VAL=$E(VAL,$L(VAL)-6,$L(VAL)) +"RTN","utcover",175,0) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=TEXT_" "_$S(CURRLIN>0:VAL_"%)",1:" ------ ")_" "_CURRCOV_" out of "_CURRLIN_" lines covered" +"RTN","utcover",176,0) + . I TYPE>1 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" - "_$S(TYPE=2:"Summary",1:"Detailed Breakdown") +"RTN","utcover",177,0) + . S TAG="" F S TAG=$O(@GLOB@(ROUNAME,TAG)) Q:TAG="" S XVAL=^(TAG) D +"RTN","utcover",178,0) + . . S LINCOV=$P(XVAL,"/"),LINTOT=$P(XVAL,"/",2) +"RTN","utcover",179,0) + . . S TEXT=" Tag "_TAG_"^"_ROUNAME_" ",TEXT=$E(TEXT,1,26) +"RTN","utcover",180,0) + . . I LINTOT>0 S VAL=" ("_$J((100*LINCOV)/LINTOT,"",2),VAL=$E(VAL,$L(VAL)-6,$L(VAL)) +"RTN","utcover",181,0) + . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=TEXT_$S(LINTOT>0:VAL_"%)",1:" ------ ")_" "_LINCOV_" out of "_LINTOT_" lines covered" +"RTN","utcover",182,0) + . . I TYPE=2 Q +"RTN","utcover",183,0) + . . I LINCOV=LINTOT Q +"RTN","utcover",184,0) + . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" the following is a list of the lines **NOT** covered" +"RTN","utcover",185,0) + . . S LINE="" F S LINE=$O(@GLOB@(ROUNAME,TAG,LINE)) Q:LINE="" D +"RTN","utcover",186,0) + . . . I LINE=0 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_" "_@GLOB@(ROUNAME,TAG,LINE) Q +"RTN","utcover",187,0) + . . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_"+"_LINE_" "_@GLOB@(ROUNAME,TAG,LINE) +"RTN","utcover",188,0) + . . . Q +"RTN","utcover",189,0) + . . Q +"RTN","utcover",190,0) + . Q +"RTN","utcover",191,0) + ; for type=3 generate a summary at bottom after detail +"RTN","utcover",192,0) + I TYPE=3 N TYPE1 S TYPE1=2 D LIST(.XCLDROUS,2,TEXTGLOB,GLOB,.LINNUM) K TYPE1 +"RTN","utcover",193,0) + I TYPE=2,$G(TYPE1) Q ; CAME IN FROM ABOVE LINE +"RTN","utcover",194,0) + ; summarize by just routine name +"RTN","utcover",195,0) + S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" +"RTN","utcover",196,0) + S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D +"RTN","utcover",197,0) + . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) +"RTN","utcover",198,0) + . S TOTCOV=TOTCOV+CURRCOV,TOTLIN=TOTLIN+CURRLIN +"RTN","utcover",199,0) + . I CURRLIN>0 S VAL=" ("_$J((100*CURRCOV)/CURRLIN,"",2),VAL=$E(VAL,$L(VAL)-6,$L(VAL)) +"RTN","utcover",200,0) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_$S(CURRLIN>0:VAL_"%)",1:" ------ ")_" "_CURRCOV_" out of "_CURRLIN_" lines covered" +"RTN","utcover",201,0) + S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" +"RTN","utcover",202,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",203,0) + Q +"RTN","utcover",204,0) + ; +"RTN","utcover",205,0) +TRIMDATA(ROULIST,GLOB) ; +"RTN","utcover",206,0) + N ROUNAME +"RTN","utcover",207,0) + S ROUNAME="" F S ROUNAME=$O(ROULIST(ROUNAME)) Q:ROUNAME="" K @GLOB@(ROUNAME) +"RTN","utcover",208,0) + Q +"RTN","utcover",209,0) ; "RTN","utt1") -0^3^B28788704 +0^4^B39370749 "RTN","utt1",1,0) -%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;09/14/15 09:38 +%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;12/07/15 17:00 "RTN","utt1",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 13 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt1",4,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 "RTN","utt1",5,0) @@ -3213,7 +3261,7 @@ T8 ; If IO starts with another device, write to that device as if it's the prici "RTN","utt1",141,0) ;D CHKTF(Y["MAIN") ; JLI 140829 commented out, gui doesn't run verbose "RTN","utt1",142,0) - D CHKTF((Y["MAIN")!(Z["Ran 1 Routine"),"Write to system during test didn't work") + D CHKTF((Y["MAIN")!(Z["T2 - Test 2"),"Write to system during test didn't work") "RTN","utt1",143,0) S IO=$P "RTN","utt1",144,0) @@ -3221,59 +3269,91 @@ T8 ; If IO starts with another device, write to that device as if it's the prici "RTN","utt1",145,0) ; "RTN","utt1",146,0) -LO(X) Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") +COVRPTGL ; "RTN","utt1",147,0) - ; Shortcut methods for M-Unit + N GL1,GL2,GL3,GL4 "RTN","utt1",148,0) -CHKTF(X,Y) ; + S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 "RTN","utt1",149,0) - D CHKTF^%ut(X,$G(Y)) + S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 "RTN","utt1",150,0) - QUIT + S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 "RTN","utt1",151,0) - ; + S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 "RTN","utt1",152,0) -CHKEQ(A,B,M) ; + D SETGLOBS^%uttcovr(GL1,GL2) "RTN","utt1",153,0) - D CHKEQ^%ut(A,B,$G(M)) + D COVRPTGL^%ut1(GL1,GL2,GL3,GL4) "RTN","utt1",154,0) - QUIT + D CHKEQ($G(@GL4@("%ut1","ACTLINES")),"0/9","Wrong number of lines covered f>>or ACTLINES") "RTN","utt1",155,0) - ; + D CHKEQ($G(@GL4@("%ut1","ACTLINES",9))," QUIT CNT","Wrong result for last l>>ine not covered for ACTLINES") "RTN","utt1",156,0) -XTENT ; Entry points + D CHKEQ($G(@GL4@("%ut1","CHEKTEST")),"8/10","Wrong number of lines covered >>for CHEKTEST") "RTN","utt1",157,0) - ;;T4;Entry point using XTMENT + D CHKEQ($G(@GL4@("%ut1","CHEKTEST",39))," . Q","Wrong result for last line >>not covered for CHEKTEST") "RTN","utt1",158,0) - ;;T5;Error count check + K @GL1,@GL2,@GL3,@GL4 "RTN","utt1",159,0) - ;;T6;Succeed Entry Point + Q "RTN","utt1",160,0) - ;;T7;Make sure we write to principal even though we are on another device -"RTN","utt1",161,0) - ;;T8;If IO starts with another device, write to that device as if it's the pricipal device -"RTN","utt1",162,0) ; +"RTN","utt1",161,0) +LO(X) Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") +"RTN","utt1",162,0) + ; Shortcut methods for M-Unit "RTN","utt1",163,0) -XTROU ; Routines containing additional tests +CHKTF(X,Y) ; "RTN","utt1",164,0) - ;;%utt2; old %utNITU + D CHKTF^%ut(X,$G(Y)) "RTN","utt1",165,0) - ;;%utt4; old %utNITW + QUIT "RTN","utt1",166,0) - ;;%utt5; + ; "RTN","utt1",167,0) - ;;%utt6; +CHKEQ(A,B,M) ; "RTN","utt1",168,0) + D CHKEQ^%ut(A,B,$G(M)) +"RTN","utt1",169,0) + QUIT +"RTN","utt1",170,0) + ; +"RTN","utt1",171,0) +XTENT ; Entry points +"RTN","utt1",172,0) + ;;T4;Entry point using XTMENT +"RTN","utt1",173,0) + ;;T5;Error count check +"RTN","utt1",174,0) + ;;T6;Succeed Entry Point +"RTN","utt1",175,0) + ;;T7;Make sure we write to principal even though we are on another device +"RTN","utt1",176,0) + ;;T8;If IO starts with another device, write to that device as if it's the pricipal device +"RTN","utt1",177,0) + ;;COVRPTGL;coverage report returning global +"RTN","utt1",178,0) + ; +"RTN","utt1",179,0) +XTROU ; Routines containing additional tests +"RTN","utt1",180,0) + ;;%utt2; old %utNITU +"RTN","utt1",181,0) + ;;%utt4; old %utNITW +"RTN","utt1",182,0) + ;;%utt5; +"RTN","utt1",183,0) + ;;%utt6; +"RTN","utt1",184,0) ;;%uttcovr;coverage related tests "RTN","utt2") -0^4^B501728 +0^5^B501728 "RTN","utt2",1,0) %utt2 ; VEN/SMH - Bad Ass Continuation of Unit Tests;09/14/15 09:38 "RTN","utt2",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 13 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt2",4,0) ; Original routine authored by Sam H. Habiel "RTN","utt2",5,0) @@ -3299,13 +3379,13 @@ XTENT ; "RTN","utt2",15,0) ;;T12;An XTENT offset entry point in Another Routine invoked through XTROU offsets "RTN","utt3") -0^5^B1628564 +0^6^B1628564 "RTN","utt3",1,0) %utt3 ; VEN/SMH-JLI - Unit Tests Coverage Tests;09/14/15 09:38 "RTN","utt3",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 13 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt3",4,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 "RTN","utt3",5,0) @@ -3395,13 +3475,13 @@ INTERNAL(A) ; Counts "RTN","utt3",47,0) QUIT ; Dead code "RTN","utt4") -0^6^B1522726 +0^7^B1568129 "RTN","utt4",1,0) -%utt4 ; VEN/SMH/JLI - Coverage Test Runner;09/14/15 09:38 +%utt4 ; VEN/SMH/JLI - Coverage Test Runner;12/06/15 19:05 "RTN","utt4",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 13 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt4",4,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 "RTN","utt4",5,0) @@ -3425,9 +3505,9 @@ MAIN ; @TEST - Test coverage calculations "RTN","utt4",14,0) Q:$D(^TMP("%uttcovr",$J)) ; already running coverage analysis from %uttcovr "RTN","utt4",15,0) - Q:'(+$SY=47) ; GT.M ONLY + S ^TMP("%utt4val",$J)=1 "RTN","utt4",16,0) - D COV^%ut1("%utt3","D EN^%ut(""%utt3"",1)",-1) ; Only produce output global. + D COV^%ut("%utt3","D EN^%ut(""%utt3"",1)",-1) ; Only produce output global. "RTN","utt4",17,0) D CHKEQ^%ut("14/19",^TMP("%utCOVREPORT",$J)) "RTN","utt4",18,0) @@ -3437,15 +3517,17 @@ MAIN ; @TEST - Test coverage calculations "RTN","utt4",20,0) D CHKEQ^%ut("1/1",^TMP("%utCOVREPORT",$J,"%utt3","SETUP")) "RTN","utt4",21,0) + K ^TMP("%utt4val",$J) +"RTN","utt4",22,0) QUIT "RTN","utt5") -0^7^B23054235 +0^8^B23054235 "RTN","utt5",1,0) %utt5 ;JLI - test for aspects of MUnit functionality ;09/14/15 09:38 "RTN","utt5",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 13 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt5",4,0) ; Original routine authored by Joel L. Ivey "RTN","utt5",5,0) @@ -3717,13 +3799,13 @@ XTENT ; "RTN","utt5",138,0) ;;ISUTEST;check ISUTEST inside unit test "RTN","utt6") -0^8^B30891565 +0^9^B39118749 "RTN","utt6",1,0) -%utt6 ;JLI - Unit tests for MUnit functionality ;09/14/15 09:38 +%utt6 ;JLI - Unit tests for MUnit functionality ;12/07/15 16:40 "RTN","utt6",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 13 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt6",4,0) ; Original routine authored by Joel L. Ivey 05/2014-08/2015 "RTN","utt6",5,0) @@ -3877,91 +3959,131 @@ VERBOSE ; "RTN","utt6",79,0) ; "RTN","utt6",80,0) -NEWSTYLE ; tests return of valid new style or @TEST indicators +SETROUS ; @TEST - generate array with indices of routines to exclude "RTN","utt6",81,0) - N LIST + N ROU,XCLDROUS,ROULIST "RTN","utt6",82,0) - D NEWSTYLE^%ut1(.LIST,"%utt5") + S XCLDROUS(1)="ROU1NAME,ROU2NAME" "RTN","utt6",83,0) - D CHKEQ^%ut(LIST,1,"Returned an incorrect number ("_LIST_") of New Style indicators - should be one") + S XCLDROUS("ROUNAME3")="ROUNAME4,ROUNAME5" "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)) + D SETROUS^%utcover(.ROULIST,.XCLDROUS,1) "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)") + D CHKTF('$D(ROULIST(1)),"SETROUS returned number for routine") "RTN","utt6",86,0) - Q + D CHKTF($D(ROULIST("ROU1NAME")),"Didn't get first name on numeric subscript") "RTN","utt6",87,0) - ; + D CHKTF($D(ROULIST("ROU2NAME")),"Didn't get second name on numeric subscript") "RTN","utt6",88,0) -CKGUISET ; + D SETROUS^%utcover(.ROULIST,.XCLDROUS,"ROUNAME3") "RTN","utt6",89,0) - ; ZEXCEPT: %utt6var - if present, is NEWed and created in code following VERBOSE + D CHKTF($D(ROULIST("ROUNAME3")),"Didn't get name for routine argument") "RTN","utt6",90,0) - I '$D(%utt6var) Q + D CHKTF($D(ROULIST("ROUNAME4")),"Didn't get first name on routine subscript") "RTN","utt6",91,0) - N MAX + D CHKTF($D(ROULIST("ROUNAME5")),"Didn't get second name on routine subscript") "RTN","utt6",92,0) - S MAX=$O(^TMP("%utt6_GUISET",$J,""),-1) + Q "RTN","utt6",93,0) - D CHKTF^%ut(^TMP("%utt6_GUISET",$J,MAX)["%utt6^NEWSTYLE","GUISET returned incorrect list") + ; "RTN","utt6",94,0) - Q +NEWSTYLE ; tests return of valid new style or @TEST indicators "RTN","utt6",95,0) - ; + N LIST "RTN","utt6",96,0) -CHKCMDLN ; check command line processing of %utt5 + D NEWSTYLE^%ut1(.LIST,"%utt5") "RTN","utt6",97,0) - ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag + D CHKEQ^%ut(LIST,1,"Returned an incorrect number ("_LIST_") of New Style indicators - should be one") "RTN","utt6",98,0) - I '$D(%utt6var) Q + I LIST>0 D CHKEQ^%ut(LIST(1),"NEWSTYLE^identify new style test indicator functionality","Returned incorrect TAG^reason "_LIST(1)) "RTN","utt6",99,0) - D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) + 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",100,0) - D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) + ; the following is basically just for coverage "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'") + D PICKSET^%ut "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'") + Q "RTN","utt6",103,0) - Q + ; "RTN","utt6",104,0) - ; +CKGUISET ; "RTN","utt6",105,0) -CHKGUI ; check GUI processing of %utt5 + ; ZEXCEPT: %utt6var - if present, is NEWed and created in code following VERBOSE "RTN","utt6",106,0) - ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag -"RTN","utt6",107,0) I '$D(%utt6var) Q +"RTN","utt6",107,0) + N MAX "RTN","utt6",108,0) - D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) + S MAX=$O(^TMP("%utt6_GUISET",$J,""),-1) "RTN","utt6",109,0) - D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) + D CHKTF(^TMP("%utt6_GUISET",$J,MAX)["%utt6^NEWSTYLE","GUISET returned incorrect list") "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",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",112,0) Q -"RTN","utt6",113,0) +"RTN","utt6",111,0) ; +"RTN","utt6",112,0) +CHKCMDLN ; check command line processing of %utt5 +"RTN","utt6",113,0) + ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag "RTN","utt6",114,0) -XTENT ; + I '$D(%utt6var) Q "RTN","utt6",115,0) - ;;CHKCMDLN;check command line processing of %utt5 + D CHKTF($D(^TMP("%utt5_C",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) "RTN","utt6",116,0) - ;;CHKGUI;check GUI processing of %utt5 + D CHKTF($D(^TMP("%utt5_C",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) "RTN","utt6",117,0) - ;;CKGUISET;check list of tests returned by GUISET + D CHKTF($O(^TMP("%utt5_C",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5_C",$J,1,""))_"' should be 'STARTUP'") "RTN","utt6",118,0) + D CHKTF($O(^TMP("%utt5_C",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_C",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") +"RTN","utt6",119,0) + Q +"RTN","utt6",120,0) + ; +"RTN","utt6",121,0) +CHKGUI ; check GUI processing of %utt5 +"RTN","utt6",122,0) + ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag +"RTN","utt6",123,0) + I '$D(%utt6var) Q +"RTN","utt6",124,0) + D CHKTF($D(^TMP("%utt5_G",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) +"RTN","utt6",125,0) + D CHKTF($D(^TMP("%utt5_G",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) +"RTN","utt6",126,0) + D CHKTF($O(^TMP("%utt5_G",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5Z_G",1,""))_"' should be 'STARTUP'") +"RTN","utt6",127,0) + D CHKTF($O(^TMP("%utt5_G",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_G",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") +"RTN","utt6",128,0) + Q +"RTN","utt6",129,0) + ; +"RTN","utt6",130,0) +CHKTF(VALUE,MESSAGE) ; +"RTN","utt6",131,0) + D CHKTF^%ut($G(VALUE),$G(MESSAGE)) +"RTN","utt6",132,0) + Q +"RTN","utt6",133,0) + ; +"RTN","utt6",134,0) +XTENT ; +"RTN","utt6",135,0) + ;;CHKCMDLN;check command line processing of %utt5 +"RTN","utt6",136,0) + ;;CHKGUI;check GUI processing of %utt5 +"RTN","utt6",137,0) + ;;CKGUISET;check list of tests returned by GUISET +"RTN","utt6",138,0) ;;NEWSTYLE;test return of valid new style or @TEST indicators "RTN","uttcovr") -0^9^B146530441 +0^10^B186023122 "RTN","uttcovr",1,0) -%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;09/14/15 09:35 +%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;12/07/15 16:46 "RTN","uttcovr",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 13 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","uttcovr",4,0) ; Original routine authored by Joel L. Ivey "RTN","uttcovr",5,0) @@ -3981,511 +4103,625 @@ XTENT ; "RTN","uttcovr",12,0) S RUNCODE("ENTRY^%uttcovr")="" "RTN","uttcovr",13,0) - I '(+$SY=47) D Q ; GT.M only! -"RTN","uttcovr",14,0) - . W !,"This coverage analysis is currently only available in GT.M" -"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",16,0) - . I "Yy"[$E(VAL) D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",17,0) - . Q -"RTN","uttcovr",18,0) ; Have the analysis EXCLUDE the following routines from coverage - unit test routines -"RTN","uttcovr",19,0) +"RTN","uttcovr",14,0) S XCLUDE(1)="%utt1,%utt2,%utt3,%utt4,%utt5,%utt6,%uttcovr" -"RTN","uttcovr",20,0) +"RTN","uttcovr",15,0) S XCLUDE(2)="%utf2hex" ; a GT.M system file, although it wasn't showing up anyway -"RTN","uttcovr",21,0) +"RTN","uttcovr",16,0) M ^TMP("%uttcovr",$J,"XCLUDE")=XCLUDE -"RTN","uttcovr",22,0) +"RTN","uttcovr",17,0) D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) -"RTN","uttcovr",23,0) +"RTN","uttcovr",18,0) Q -"RTN","uttcovr",24,0) +"RTN","uttcovr",19,0) ; -"RTN","uttcovr",25,0) +"RTN","uttcovr",20,0) ENTRY ; -"RTN","uttcovr",26,0) +"RTN","uttcovr",21,0) K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",27,0) +"RTN","uttcovr",22,0) M ^TMP("ENTRY^%uttcovr",$J,"VALS")=^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",28,0) +"RTN","uttcovr",23,0) K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",29,0) +"RTN","uttcovr",24,0) ; these tests run outside of unit tests to handle CHKLEAKS calls not in unit tests -"RTN","uttcovr",30,0) +"RTN","uttcovr",25,0) ; they need data set, so they are called in here -"RTN","uttcovr",31,0) +"RTN","uttcovr",26,0) ; LEAKSOK ; -"RTN","uttcovr",32,0) +"RTN","uttcovr",27,0) N CODE,LOCATN,MYVALS,X,I -"RTN","uttcovr",33,0) +"RTN","uttcovr",28,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSOK TEST",MYVALS("X")="" -"RTN","uttcovr",34,0) +"RTN","uttcovr",29,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find no leaks -"RTN","uttcovr",35,0) +"RTN","uttcovr",30,0) ; LEAKSBAD ; -"RTN","uttcovr",36,0) +"RTN","uttcovr",31,0) N CODE,LOCATN,MYVALS,X -"RTN","uttcovr",37,0) +"RTN","uttcovr",32,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSBAD TEST - X NOT SPECIFIED" -"RTN","uttcovr",38,0) +"RTN","uttcovr",33,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find X since it isn't indicated -"RTN","uttcovr",39,0) +"RTN","uttcovr",34,0) ; try to run coverage -"RTN","uttcovr",40,0) +"RTN","uttcovr",35,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at 3",!!! -"RTN","uttcovr",41,0) +"RTN","uttcovr",36,0) D COV^%ut("%ut1","D EN^%ut(""%utt5"")",3) -"RTN","uttcovr",42,0) +"RTN","uttcovr",37,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at -1",!!! -"RTN","uttcovr",43,0) +"RTN","uttcovr",38,0) D COV^%ut("%ut1","D EN^%ut(""%utt5"")",-1) -"RTN","uttcovr",44,0) +"RTN","uttcovr",39,0) N RUNCODE S RUNCODE(1)="^%utt4,^%ut" -"RTN","uttcovr",45,0) +"RTN","uttcovr",40,0) N XCLUDE M XCLUDE=^TMP("%uttcovr",$J,"XCLUDE") -"RTN","uttcovr",46,0) +"RTN","uttcovr",41,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO MULTAPIS for %utt4 and %ut",!!! -"RTN","uttcovr",47,0) +"RTN","uttcovr",42,0) D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",48,0) +"RTN","uttcovr",43,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COVERAGE for %utt4 and %ut at 3",!!! -"RTN","uttcovr",49,0) +"RTN","uttcovr",44,0) D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) -"RTN","uttcovr",50,0) +"RTN","uttcovr",45,0) N GLT S GLT=$NA(^TMP("%uttcovr-text",$J)) K @GLT -"RTN","uttcovr",51,0) +"RTN","uttcovr",46,0) W !,"xxxxxxxxxxxxxxxxxxxx LISTING DATA VIA LIST",!!! -"RTN","uttcovr",52,0) +"RTN","uttcovr",47,0) D LIST^%utcover(.XCLUDE,3,GLT) ; get coverage for listing and trimdata in %utcover -"RTN","uttcovr",53,0) +"RTN","uttcovr",48,0) F I=1:1 Q:'$D(@GLT@(I)) W !,@GLT@(I) -"RTN","uttcovr",54,0) +"RTN","uttcovr",49,0) K @GLT -"RTN","uttcovr",55,0) +"RTN","uttcovr",50,0) ; restore unit test totals from before entry -"RTN","uttcovr",56,0) +"RTN","uttcovr",51,0) K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",57,0) +"RTN","uttcovr",52,0) M ^TMP("%ut",$J,"UTVALS")=^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",58,0) +"RTN","uttcovr",53,0) K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",59,0) +"RTN","uttcovr",54,0) W !,"xxxxxxxxxxxxxxxxxxxx Finished in ENTRY^%uttcovr",!!! -"RTN","uttcovr",60,0) +"RTN","uttcovr",55,0) Q -"RTN","uttcovr",61,0) +"RTN","uttcovr",56,0) ; -"RTN","uttcovr",62,0) +"RTN","uttcovr",57,0) RTNANAL ; @TEST - routine analysis -"RTN","uttcovr",63,0) +"RTN","uttcovr",58,0) N ROUS,GLB -"RTN","uttcovr",64,0) +"RTN","uttcovr",59,0) S ROUS("%utt4")="" -"RTN","uttcovr",65,0) +"RTN","uttcovr",60,0) S GLB=$NA(^TMP("%uttcovr-rtnanal",$J)) K @GLB -"RTN","uttcovr",66,0) +"RTN","uttcovr",61,0) D RTNANAL^%ut1(.ROUS,GLB) -"RTN","uttcovr",67,0) - D CHKTF^%ut($D(@GLB@("%utt4","MAIN"))>1,"Not enough 'MAIN' nodes found") -"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",69,0) - D CHKTF^%ut($G(@GLB@("%utt4","MAIN",8))=" QUIT","Final QUIT not on expected line") -"RTN","uttcovr",70,0) +"RTN","uttcovr",62,0) + D CHKTF($D(@GLB@("%utt4","MAIN"))>1,"Not enough 'MAIN' nodes found") +"RTN","uttcovr",63,0) + D CHKTF($G(@GLB@("%utt4","MAIN",3))["D COV^%ut(""%utt3"",""D EN^%ut(""""%utt3"""",1)"",-1)","Incorrect data for line 2 in MAIN") +"RTN","uttcovr",64,0) + D CHKTF($G(@GLB@("%utt4","MAIN",9))=" QUIT","Final QUIT not on expected line") +"RTN","uttcovr",65,0) K @GLB -"RTN","uttcovr",71,0) +"RTN","uttcovr",66,0) Q -"RTN","uttcovr",72,0) +"RTN","uttcovr",67,0) ; -"RTN","uttcovr",73,0) +"RTN","uttcovr",68,0) COVCOV ; @TEST - check COVCOV - remove seen lines -"RTN","uttcovr",74,0) +"RTN","uttcovr",69,0) N C,R -"RTN","uttcovr",75,0) +"RTN","uttcovr",70,0) S C=$NA(^TMP("%uttcovr_C",$J)) -"RTN","uttcovr",76,0) +"RTN","uttcovr",71,0) S R=$NA(^TMP("%uttcovr_R",$J)) -"RTN","uttcovr",77,0) +"RTN","uttcovr",72,0) S @C@("ROU1")="" -"RTN","uttcovr",78,0) +"RTN","uttcovr",73,0) S @C@("ROU2")="",@R@("ROU2")="" -"RTN","uttcovr",79,0) +"RTN","uttcovr",74,0) S @C@("ROU2","TAG1")="",@R@("ROU2","TAG1")="" -"RTN","uttcovr",80,0) +"RTN","uttcovr",75,0) S @C@("ROU2","TAG1",1)="AAA" -"RTN","uttcovr",81,0) +"RTN","uttcovr",76,0) S @C@("ROU2","TAG1",2)="AAA",@R@("ROU2","TAG1",2)="AAA" -"RTN","uttcovr",82,0) +"RTN","uttcovr",77,0) S @C@("ROU2","TAG1",3)="ABB",@R@("ROU2","TAG1",3)="ABB" -"RTN","uttcovr",83,0) +"RTN","uttcovr",78,0) S @C@("ROU2","TAG2",6)="ACC" -"RTN","uttcovr",84,0) +"RTN","uttcovr",79,0) S @C@("ROU2","TAG2",7)="ADD",@R@("ROU2","TAG2",7)="ADD" -"RTN","uttcovr",85,0) +"RTN","uttcovr",80,0) S @C@("ROU3","TAG1",2)="BAA",@R@("ROU3","TAG1",2)="BAA" -"RTN","uttcovr",86,0) +"RTN","uttcovr",81,0) S @C@("ROU3","TAG1",3)="CAA" -"RTN","uttcovr",87,0) +"RTN","uttcovr",82,0) S @C@("ROU3","TAG1",4)="DAA" -"RTN","uttcovr",88,0) +"RTN","uttcovr",83,0) S @C@("ROU3","TAG1",5)="EAA",@R@("ROU3","TAG1",5)="EAA" -"RTN","uttcovr",89,0) +"RTN","uttcovr",84,0) S @C@("ROU3","TAG1",6)="FAA",@R@("ROU3","TAG1",6)="FAA" -"RTN","uttcovr",90,0) +"RTN","uttcovr",85,0) D COVCOV^%ut1(C,R) +"RTN","uttcovr",86,0) + D CHKTF($D(@C@("ROU2","TAG1",1)),"Invalid value for ""ROU2"",""TAG1"",1") +"RTN","uttcovr",87,0) + D CHKTF('$D(@C@("ROU2","TAG1",2)),"Unexpected value for ""ROU2"",""TAG1"",1") +"RTN","uttcovr",88,0) + D CHKTF($D(@C@("ROU2","TAG2",6)),"Invalid value for ""ROU2"",""TAG1"",1") +"RTN","uttcovr",89,0) + D CHKTF('$D(@C@("ROU2","TAG2",7)),"Unexpected value for ""ROU2"",""TAG1"",1") +"RTN","uttcovr",90,0) + D CHKTF($D(@C@("ROU3","TAG1",4)),"Invalid value for ""ROU2"",""TAG1"",1") "RTN","uttcovr",91,0) - D CHKTF^%ut($D(@C@("ROU2","TAG1",1)),"Invalid value for ""ROU2"",""TAG1"",1") + D CHKTF('$D(@C@("ROU3","TAG1",5)),"Unexpected value for ""ROU2"",""TAG1"",1") "RTN","uttcovr",92,0) - D CHKTF^%ut('$D(@C@("ROU2","TAG1",2)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",93,0) - D CHKTF^%ut($D(@C@("ROU2","TAG2",6)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",94,0) - D CHKTF^%ut('$D(@C@("ROU2","TAG2",7)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",95,0) - D CHKTF^%ut($D(@C@("ROU3","TAG1",4)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",96,0) - D CHKTF^%ut('$D(@C@("ROU3","TAG1",5)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",97,0) K @C,@R -"RTN","uttcovr",98,0) +"RTN","uttcovr",93,0) Q -"RTN","uttcovr",99,0) +"RTN","uttcovr",94,0) ; -"RTN","uttcovr",100,0) -COVRPTGL ; @TEST - coverage report returning global -"RTN","uttcovr",101,0) - N GL1,GL2,GL3,GL4 -"RTN","uttcovr",102,0) +"RTN","uttcovr",95,0) +COVRPT ; @TEST +"RTN","uttcovr",96,0) + N GL1,GL2,GL3,GL4,VRBOSITY,GL5 +"RTN","uttcovr",97,0) S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 -"RTN","uttcovr",103,0) +"RTN","uttcovr",98,0) S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",104,0) +"RTN","uttcovr",99,0) S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",105,0) +"RTN","uttcovr",100,0) S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",106,0) +"RTN","uttcovr",101,0) + S GL5=$NA(^TMP("%ut1-covrpt",$J)) K @GL5 +"RTN","uttcovr",102,0) D SETGLOBS(GL1,GL2) +"RTN","uttcovr",103,0) + S VRBOSITY=1 +"RTN","uttcovr",104,0) + D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) +"RTN","uttcovr",105,0) + D CHKEQ("COVERAGE PERCENTAGE: 42.11",$G(@GL5@(5)),"Verbosity 1 - not expected percentage value") +"RTN","uttcovr",106,0) + D CHKEQ(" %ut1 42.11% 8 out of 19",$G(@GL5@(9)),"Verbosity 1 - not expected value for line 9") "RTN","uttcovr",107,0) - D COVRPTGL^%ut1(GL1,GL2,GL3,GL4) + D CHKTF('$D(@GL5@(10)),"Verbosity 1 - unexpected data in 10th line") "RTN","uttcovr",108,0) - D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES")),"0/9","Wrong number of lines covered f>>or ACTLINES") + ; "RTN","uttcovr",109,0) - D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES",9))," QUIT CNT","Wrong result for last l>>ine not covered for ACTLINES") + S VRBOSITY=2 "RTN","uttcovr",110,0) - D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST")),"8/10","Wrong number of lines covered >>for CHEKTEST") + D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) "RTN","uttcovr",111,0) - D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST",39))," . Q","Wrong result for last line >>not covered for CHEKTEST") + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL5@(10)),"Verbosity 2 - not expected value for 10th line") "RTN","uttcovr",112,0) - K @GL1,@GL2,@GL3,@GL4 + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL5@(11)),"Verbosity 2 - not expected value for 11th line") "RTN","uttcovr",113,0) - Q + D CHKTF('$D(@GL5@(12)),"Verbosity 2 - unexpected data for 12th line") "RTN","uttcovr",114,0) ; "RTN","uttcovr",115,0) -COVRPT ; @TEST -"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 GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",119,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",120,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",121,0) - S GL5=$NA(^TMP("%ut1-covrpt",$J)) K @GL5 -"RTN","uttcovr",122,0) - D SETGLOBS(GL1,GL2) -"RTN","uttcovr",123,0) - S VRBOSITY=1 -"RTN","uttcovr",124,0) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",125,0) - D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL5@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",126,0) - D CHKEQ^%ut("42.11",$G(@GL5@(9)),"Verbosity 1 - not expected value for line 9") -"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) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",131,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",132,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(11)),"Verbosity 2 - not expected value for 11th line") -"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) +"RTN","uttcovr",116,0) D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",137,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",138,0) - D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL5@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",139,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",140,0) - D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL5@(22)),"Verbosity 3 - unexpected value for line 22") -"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",117,0) + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL5@(10)),"Verbosity 3 - unexpected value for line 10") +"RTN","uttcovr",118,0) + D CHKEQ("ACTLINES+9: QUIT CNT",$G(@GL5@(19)),"Verbosity 3 - unexpected value for line 19") +"RTN","uttcovr",119,0) + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL5@(20)),"Verbosity 3 - unexpected value for line 20") +"RTN","uttcovr",120,0) + D CHKEQ("CHEKTEST+39: . Q",$G(@GL5@(22)),"Verbosity 3 - unexpected value for line 22") +"RTN","uttcovr",121,0) + D CHKTF('$D(@GL5@(23)),"Verbosity 3 - unexpected line 23") +"RTN","uttcovr",122,0) K @GL1,@GL2,@GL3,@GL4,@GL5 -"RTN","uttcovr",144,0) +"RTN","uttcovr",123,0) Q +"RTN","uttcovr",124,0) + ; +"RTN","uttcovr",125,0) +COVRPTLS ; @TEST - coverage report returning text in global +"RTN","uttcovr",126,0) + N GL1,GL2,GL3,GL4,VRBOSITY +"RTN","uttcovr",127,0) + S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 +"RTN","uttcovr",128,0) + S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 +"RTN","uttcovr",129,0) + S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 +"RTN","uttcovr",130,0) + S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 +"RTN","uttcovr",131,0) + D SETGLOBS(GL1,GL2) +"RTN","uttcovr",132,0) + S VRBOSITY=1 +"RTN","uttcovr",133,0) + D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) +"RTN","uttcovr",134,0) + D CHKEQ("COVERAGE PERCENTAGE: 42.11",$G(@GL4@(5)),"Verbosity 1 - not expected percentage value") +"RTN","uttcovr",135,0) + D CHKEQ(" %ut1 42.11% 8 out of 19",$G(@GL4@(9)),"Verbosity 1 - not expected value for line 9") +"RTN","uttcovr",136,0) + D CHKTF('$D(@GL4@(10)),"Verbosity 1 - unexpected data in 10th line") +"RTN","uttcovr",137,0) + K @GL4 +"RTN","uttcovr",138,0) + ; +"RTN","uttcovr",139,0) + S VRBOSITY=2 +"RTN","uttcovr",140,0) + D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) +"RTN","uttcovr",141,0) + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL4@(10)),"Verbosity 2 - not expected value for 10th line") +"RTN","uttcovr",142,0) + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL4@(11)),"Verbosity 2 - not expected value for 11th line") +"RTN","uttcovr",143,0) + D CHKTF('$D(@GL4@(12)),"Verbosity 2 - unexpected data for 12th line") +"RTN","uttcovr",144,0) + K @GL4 "RTN","uttcovr",145,0) ; "RTN","uttcovr",146,0) -COVRPTLS ; @TEST - coverage report returning text in global -"RTN","uttcovr",147,0) - N GL1,GL2,GL3,GL4,VRBOSITY -"RTN","uttcovr",148,0) - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 -"RTN","uttcovr",149,0) - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",150,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",151,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",152,0) - D SETGLOBS(GL1,GL2) -"RTN","uttcovr",153,0) - S VRBOSITY=1 -"RTN","uttcovr",154,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",155,0) - D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL4@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",156,0) - D CHKEQ^%ut("42.11",$G(@GL4@(9)),"Verbosity 1 - not expected value for line 9") -"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) - ; -"RTN","uttcovr",160,0) - S VRBOSITY=2 -"RTN","uttcovr",161,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",162,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",163,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(11)),"Verbosity 2 - not expected value for 11th line") -"RTN","uttcovr",164,0) - D CHKTF^%ut('$D(@GL4@(12)),"Verbosity 2 - unexpected data for 12th line") -"RTN","uttcovr",165,0) - K @GL4 -"RTN","uttcovr",166,0) - ; -"RTN","uttcovr",167,0) S VRBOSITY=3 -"RTN","uttcovr",168,0) +"RTN","uttcovr",147,0) D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",169,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",170,0) - D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL4@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",171,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",172,0) - D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL4@(22)),"Verbosity 3 - unexpected value for line 22") -"RTN","uttcovr",173,0) - D CHKTF^%ut('$D(@GL4@(23)),"Verbosity 3 - unexpected line 23") -"RTN","uttcovr",174,0) +"RTN","uttcovr",148,0) + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL4@(10)),"Verbosity 3 - unexpected value for line 10") +"RTN","uttcovr",149,0) + D CHKEQ("ACTLINES+9: QUIT CNT",$G(@GL4@(19)),"Verbosity 3 - unexpected value for line 19") +"RTN","uttcovr",150,0) + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL4@(20)),"Verbosity 3 - unexpected value for line 20") +"RTN","uttcovr",151,0) + D CHKEQ("CHEKTEST+39: . Q",$G(@GL4@(22)),"Verbosity 3 - unexpected value for line 22") +"RTN","uttcovr",152,0) + D CHKTF('$D(@GL4@(23)),"Verbosity 3 - unexpected line 23") +"RTN","uttcovr",153,0) ; -"RTN","uttcovr",175,0) +"RTN","uttcovr",154,0) K @GL1,@GL2,@GL3,@GL4 -"RTN","uttcovr",176,0) +"RTN","uttcovr",155,0) Q -"RTN","uttcovr",177,0) +"RTN","uttcovr",156,0) ; -"RTN","uttcovr",178,0) +"RTN","uttcovr",157,0) TRIMDATA ; @TEST - TRIMDATA in %utcover -"RTN","uttcovr",179,0) +"RTN","uttcovr",158,0) N GL1,XCLUD -"RTN","uttcovr",180,0) +"RTN","uttcovr",159,0) S GL1=$NA(^TMP("%uttcovr-trimdata",$J)) K @GL1 -"RTN","uttcovr",181,0) +"RTN","uttcovr",160,0) S @GL1@("GOOD",1)="1" -"RTN","uttcovr",182,0) +"RTN","uttcovr",161,0) S @GL1@("BAD",1)="1" -"RTN","uttcovr",183,0) +"RTN","uttcovr",162,0) S XCLUD("BAD")="" -"RTN","uttcovr",184,0) +"RTN","uttcovr",163,0) D TRIMDATA^%utcover(.XCLUD,GL1) -"RTN","uttcovr",185,0) - D CHKTF^%ut($D(@GL1@("GOOD")),"GOOD ENTRY WAS REMOVED") -"RTN","uttcovr",186,0) - D CHKTF^%ut('$D(@GL1@("BAD")),"ENTRY WAS NOT TRIMMED") -"RTN","uttcovr",187,0) +"RTN","uttcovr",164,0) + D CHKTF($D(@GL1@("GOOD")),"GOOD ENTRY WAS REMOVED") +"RTN","uttcovr",165,0) + D CHKTF('$D(@GL1@("BAD")),"ENTRY WAS NOT TRIMMED") +"RTN","uttcovr",166,0) K @GL1,XCLUD -"RTN","uttcovr",188,0) +"RTN","uttcovr",167,0) Q -"RTN","uttcovr",189,0) +"RTN","uttcovr",168,0) ; -"RTN","uttcovr",190,0) +"RTN","uttcovr",169,0) LIST ; @TEST - LIST in %utcover -"RTN","uttcovr",191,0) +"RTN","uttcovr",170,0) N GL1,GLT S GL1=$NA(^TMP("%uttcovr-list",$J)),GLT=$NA(^TMP("%uttcovr-text",$J)) -"RTN","uttcovr",192,0) +"RTN","uttcovr",171,0) S @GL1@("%ut1")="89/160" -"RTN","uttcovr",193,0) +"RTN","uttcovr",172,0) S @GL1@("%ut1","%ut1")="2/2" -"RTN","uttcovr",194,0) +"RTN","uttcovr",173,0) S @GL1@("%ut1","ACTLINES")="0/8" -"RTN","uttcovr",195,0) +"RTN","uttcovr",174,0) S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",196,0) +"RTN","uttcovr",175,0) S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",197,0) +"RTN","uttcovr",176,0) S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",198,0) +"RTN","uttcovr",177,0) S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",199,0) +"RTN","uttcovr",178,0) S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",200,0) +"RTN","uttcovr",179,0) S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",201,0) +"RTN","uttcovr",180,0) S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",202,0) +"RTN","uttcovr",181,0) S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",203,0) +"RTN","uttcovr",182,0) S @GL1@("%ut1","CHECKTAG")="11/11" -"RTN","uttcovr",204,0) +"RTN","uttcovr",183,0) S @GL1@("%ut1","CHEKTEST")="10/10" -"RTN","uttcovr",205,0) +"RTN","uttcovr",184,0) N XCLUD S XCLUD("%utt1")="" -"RTN","uttcovr",206,0) +"RTN","uttcovr",185,0) D LIST^%utcover(.XCLUD,1,GLT,GL1) -"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",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",209,0) - D CHKTF^%ut('$D(@GLT@(7)),"Verbosity 1 - Unexpected line 7 present") -"RTN","uttcovr",210,0) +"RTN","uttcovr",186,0) + D CHKEQ("Routine %ut1 (55.63%) 89 out of 160 lines covered",$G(@GLT@(3)),"Verbosity 1 - Unexpected text for line 3") +"RTN","uttcovr",187,0) + D CHKEQ("Overall Analysis 89 out of 160 lines covered (55% coverage)",$G(@GLT@(6)),"Verbosity 1 - unexpected text for line 6") +"RTN","uttcovr",188,0) + D CHKTF('$D(@GLT@(7)),"Verbosity 1 - Unexpected line 7 present") +"RTN","uttcovr",189,0) K @GLT -"RTN","uttcovr",211,0) +"RTN","uttcovr",190,0) ; -"RTN","uttcovr",212,0) +"RTN","uttcovr",191,0) D LIST^%utcover(.XCLUD,2,GLT,GL1) -"RTN","uttcovr",213,0) - D CHKEQ^%ut(" - Summary",$G(@GLT@(4)),"Verbosity 2 - unexpected text at line 4") -"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",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",216,0) - D CHKTF^%ut($D(@GLT@(14)),"Verbosity 2 - expected line at line 14") -"RTN","uttcovr",217,0) - D CHKTF^%ut('$D(@GLT@(15)),"Verbosity 2 - unexpected line at line 15") -"RTN","uttcovr",218,0) +"RTN","uttcovr",192,0) + D CHKEQ(" - Summary",$G(@GLT@(4)),"Verbosity 2 - unexpected text at line 4") +"RTN","uttcovr",193,0) + D CHKEQ(" Tag ACTLINES^%ut1 (0.00%) 0 out of 8 lines covered",$G(@GLT@(6)),"Verbosity 2 - unexpected text at line 6") +"RTN","uttcovr",194,0) + D CHKEQ(" Tag CHEKTEST^%ut1 (100.00%) 10 out of 10 lines covered",$G(@GLT@(8)),"Verbosity 2 - unexpected text at line 8") +"RTN","uttcovr",195,0) + D CHKTF($D(@GLT@(14)),"Verbosity 2 - expected line at line 14") +"RTN","uttcovr",196,0) + D CHKTF('$D(@GLT@(15)),"Verbosity 2 - unexpected line at line 15") +"RTN","uttcovr",197,0) K @GLT -"RTN","uttcovr",219,0) +"RTN","uttcovr",198,0) ; -"RTN","uttcovr",220,0) +"RTN","uttcovr",199,0) D LIST^%utcover(.XCLUD,3,GLT,GL1) -"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",222,0) - D CHKEQ^%ut(" ACTLINES+9 QUIT CNT",$G(@GLT@(15)),"Verbosity 3 - incorrect line 15") -"RTN","uttcovr",223,0) - D CHKTF^%ut($D(@GLT@(31)),"Verbosity 3 - expected data in line 31") -"RTN","uttcovr",224,0) - D CHKTF^%ut('$D(@GLT@(32)),"Verbosity 3 - did not expect a line 32") -"RTN","uttcovr",225,0) +"RTN","uttcovr",200,0) + D CHKEQ(" Tag %ut1^%ut1 (100.00%) 2 out of 2 lines covered",$G(@GLT@(5)),"Verbosity 3 - Incorrect text at line 5") +"RTN","uttcovr",201,0) + D CHKEQ(" ACTLINES+9 QUIT CNT",$G(@GLT@(15)),"Verbosity 3 - incorrect line 15") +"RTN","uttcovr",202,0) + D CHKTF($D(@GLT@(31)),"Verbosity 3 - expected data in line 31") +"RTN","uttcovr",203,0) + D CHKTF('$D(@GLT@(32)),"Verbosity 3 - did not expect a line 32") +"RTN","uttcovr",204,0) ; -"RTN","uttcovr",226,0) +"RTN","uttcovr",205,0) K @GL1,@GLT -"RTN","uttcovr",227,0) +"RTN","uttcovr",206,0) Q -"RTN","uttcovr",228,0) +"RTN","uttcovr",207,0) ; -"RTN","uttcovr",229,0) +"RTN","uttcovr",208,0) SETGLOBS(GL1,GL2) ; -"RTN","uttcovr",230,0) +"RTN","uttcovr",209,0) S @GL1@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",231,0) +"RTN","uttcovr",210,0) S @GL1@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",232,0) +"RTN","uttcovr",211,0) S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",233,0) +"RTN","uttcovr",212,0) S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",234,0) +"RTN","uttcovr",213,0) S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",235,0) +"RTN","uttcovr",214,0) S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",236,0) +"RTN","uttcovr",215,0) S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",237,0) +"RTN","uttcovr",216,0) S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",238,0) +"RTN","uttcovr",217,0) S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",239,0) +"RTN","uttcovr",218,0) S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",240,0) +"RTN","uttcovr",219,0) S @GL1@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",241,0) +"RTN","uttcovr",220,0) S @GL1@("%ut1","CHEKTEST",0)="CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list." -"RTN","uttcovr",242,0) +"RTN","uttcovr",221,0) S @GL1@("%ut1","CHEKTEST",13)=" N I,LIST" -"RTN","uttcovr",243,0) +"RTN","uttcovr",222,0) S @GL1@("%ut1","CHEKTEST",14)=" S I=$L($T(@(U_%utROU))) I I<0 Q ""-1^Invalid Routine Name""" -"RTN","uttcovr",244,0) +"RTN","uttcovr",223,0) S @GL1@("%ut1","CHEKTEST",31)=" D NEWSTYLE(.LIST,%utROU)" -"RTN","uttcovr",245,0) +"RTN","uttcovr",224,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",246,0) +"RTN","uttcovr",225,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",247,0) +"RTN","uttcovr",226,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",248,0) +"RTN","uttcovr",227,0) S @GL1@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",249,0) +"RTN","uttcovr",228,0) S @GL1@("%ut1","CHEKTEST",41)=" QUIT" -"RTN","uttcovr",250,0) +"RTN","uttcovr",229,0) S @GL1@("%ut1","CHEKTEST",9)=" S %ut(""ENTN"")=0 ; Number of test, sub to %utUETRY." -"RTN","uttcovr",251,0) +"RTN","uttcovr",230,0) S @GL2@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",252,0) +"RTN","uttcovr",231,0) S @GL2@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",253,0) +"RTN","uttcovr",232,0) S @GL2@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",254,0) +"RTN","uttcovr",233,0) S @GL2@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",255,0) +"RTN","uttcovr",234,0) S @GL2@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",256,0) +"RTN","uttcovr",235,0) S @GL2@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",257,0) +"RTN","uttcovr",236,0) S @GL2@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",258,0) +"RTN","uttcovr",237,0) S @GL2@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",259,0) +"RTN","uttcovr",238,0) S @GL2@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",260,0) +"RTN","uttcovr",239,0) S @GL2@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",261,0) +"RTN","uttcovr",240,0) S @GL2@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",262,0) +"RTN","uttcovr",241,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",263,0) +"RTN","uttcovr",242,0) S @GL2@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",264,0) +"RTN","uttcovr",243,0) Q +"RTN","uttcovr",244,0) + ; +"RTN","uttcovr",245,0) + ; +"RTN","uttcovr",246,0) +CACHECOV ;@TEST - set up routine for analysis in globals +"RTN","uttcovr",247,0) + N GLOB,GLOBT +"RTN","uttcovr",248,0) + S GLOB=$NA(^TMP("%uttcovr1",$J)),GLOBT=$NA(@GLOB@("uttcovr2",$J)) K @GLOB,@GLOBT +"RTN","uttcovr",249,0) + D CACHECOV^%ut1(GLOB,GLOBT) +"RTN","uttcovr",250,0) + D CHKEQ($T(+1^%ut),@GLOB@("%ut",1,0),"BAD FIRST LINE LOADED FOR %ut") +"RTN","uttcovr",251,0) + D CHKEQ($T(+14^%ut),@GLOBT@("%ut",14,0),"Bad 14th line loaded for %ut") +"RTN","uttcovr",252,0) + K @GLOB,@GLOBT +"RTN","uttcovr",253,0) + Q +"RTN","uttcovr",254,0) + ; +"RTN","uttcovr",255,0) +GETVALS ; no test - primarily calls to Cache classes +"RTN","uttcovr",256,0) + Q +"RTN","uttcovr",257,0) + ; +"RTN","uttcovr",258,0) +LINEDATA ; @TEST - convert code line to based on tags and offset, and identify active code lines +"RTN","uttcovr",259,0) + N CODE,LINE,OFFSET,TAG +"RTN","uttcovr",260,0) + S LINE="TEST1 ; COMMENT ON TAG",TAG="",OFFSET=0 +"RTN","uttcovr",261,0) + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; +"RTN","uttcovr",262,0) + D CHKEQ(0,CODE,"Tag with comment identified as active code") +"RTN","uttcovr",263,0) + D CHKEQ("TEST1",TAG,"Bad tag returned for TEST1") +"RTN","uttcovr",264,0) + D CHKEQ(0,OFFSET,"Bad OFFSET returned for TEST1") "RTN","uttcovr",265,0) ; +"RTN","uttcovr",266,0) + S LINE=" ; COMMENT ONLY" +"RTN","uttcovr",267,0) + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; +"RTN","uttcovr",268,0) + D CHKEQ(0,CODE,"Comment line identified as active code") +"RTN","uttcovr",269,0) + D CHKEQ("TEST1",TAG,"Bad tag returned for TEST1+1") +"RTN","uttcovr",270,0) + D CHKEQ(1,OFFSET,"Bad OFFSET returned for TEST1+1") +"RTN","uttcovr",271,0) + ; +"RTN","uttcovr",272,0) + S LINE=" S X=VALUE" +"RTN","uttcovr",273,0) + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; +"RTN","uttcovr",274,0) + D CHKEQ(1,CODE,"Code line NOT identified as active code") +"RTN","uttcovr",275,0) + D CHKEQ("TEST1",TAG,"Bad tag returned for TEST1+2") +"RTN","uttcovr",276,0) + D CHKEQ(2,OFFSET,"Bad OFFSET returned for TEST1+2") +"RTN","uttcovr",277,0) + ; +"RTN","uttcovr",278,0) + S LINE="TEST2 S X=VALUE" +"RTN","uttcovr",279,0) + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; +"RTN","uttcovr",280,0) + D CHKEQ(1,CODE,"Tag line with code NOT identified as active code") +"RTN","uttcovr",281,0) + D CHKEQ("TEST2",TAG,"Bad tag returned for TEST2") +"RTN","uttcovr",282,0) + D CHKEQ(0,OFFSET,"Bad OFFSET returned for TEST2") +"RTN","uttcovr",283,0) + ; +"RTN","uttcovr",284,0) + Q +"RTN","uttcovr",285,0) + ; +"RTN","uttcovr",286,0) +TOTAGS ;@TEST - convert from lines of code by line number to lines ordered by tag, line from tag, and only not covered +"RTN","uttcovr",287,0) + N ACTIVE,GLOB,GLOBT,X1,X0 +"RTN","uttcovr",288,0) + S GLOB=$NA(^TMP("%uttcovr",$J)),GLOBT=$NA(@GLOB@("TEST1")) K @GLOB +"RTN","uttcovr",289,0) + S @GLOBT@(1,0)="LINE1 ; CODE1 LINE1+0 NOT ACTIVE" +"RTN","uttcovr",290,0) + S @GLOBT@(2,0)=" CODE2 LINE+1 SEEN" +"RTN","uttcovr",291,0) + S @GLOBT@(2,"C")=2 +"RTN","uttcovr",292,0) + S @GLOBT@(3,0)=" CODE3 LINE1+2 NOT SEEN" +"RTN","uttcovr",293,0) + S @GLOBT@(4,0)="LINE4 CODE4 LINE4+0 SEEN" +"RTN","uttcovr",294,0) + S @GLOBT@(4,"C")=5 +"RTN","uttcovr",295,0) + S @GLOBT@(5,0)=" ; CODE5 LINE4+1 NOT ACTIVE" +"RTN","uttcovr",296,0) + S @GLOBT@(6,0)=" CODE6 LINE4+2 COVERED" +"RTN","uttcovr",297,0) + S @GLOBT@(6,"C")=2 +"RTN","uttcovr",298,0) + S @GLOBT@(7,0)="LINE7 CODE7 LINE7+0 NOT COVERED" +"RTN","uttcovr",299,0) + S @GLOBT@(8,0)=" CODE8 LINE7+1 NOT COVERED" +"RTN","uttcovr",300,0) + S ACTIVE=1 +"RTN","uttcovr",301,0) + D TOTAGS^%ut1(GLOB,ACTIVE) +"RTN","uttcovr",302,0) + D CHKEQ(1,($D(@GLOBT@("LINE1"))#2),"LINE1 TAG NOT IDENTIFIED") +"RTN","uttcovr",303,0) + D CHKEQ(1,($D(@GLOBT@("LINE4"))#2),"LINE4 TAG NOT IDENTIFIED") +"RTN","uttcovr",304,0) + D CHKEQ(1,($D(@GLOBT@("LINE7"))#2),"LINE7 TAG NOT IDENTIFIED") +"RTN","uttcovr",305,0) + D CHKEQ(0,$D(@GLOBT@("LINE1",0)),"LINE1+0 SHOULD NOT BE INCLUDED - IT IS A COMMENT") +"RTN","uttcovr",306,0) + D CHKEQ(0,$D(@GLOBT@("LINE1",1)),"LINE1+1 SHOULD NOT BE INCLUDED - IT WAS COVERED") +"RTN","uttcovr",307,0) + D CHKEQ(1,$D(@GLOBT@("LINE1",2)),"LINE1+2 SHOULD BE INCLUDED - IT WAS NOT COVERED") +"RTN","uttcovr",308,0) + D CHKEQ(0,$D(@GLOBT@("LINE4",0)),"LINE4+0 SHOULD NOT BE INCLUDED - IT WAS COVERED") +"RTN","uttcovr",309,0) + D CHKEQ(0,$D(@GLOBT@("LINE4",1)),"LINE4+1 SHOULD NOT BE INCLUDED - IT IS A COMMENT") +"RTN","uttcovr",310,0) + D CHKEQ(0,$D(@GLOBT@("LINE4",2)),"LINE4+2 SHOULD NOT BE INCLUDED - IT WAS COVERED") +"RTN","uttcovr",311,0) + D CHKEQ(1,$D(@GLOBT@("LINE7",0)),"LINE7+0 SHOULD BE INCLUDED - IT IS NOT COVERED") +"RTN","uttcovr",312,0) + D CHKEQ(1,$D(@GLOBT@("LINE7",1)),"LINE7+1 SHOULD BE INCLUDED - IT IS NOT COVERED") +"RTN","uttcovr",313,0) + K @GLOB,@GLOBT +"RTN","uttcovr",314,0) + Q +"RTN","uttcovr",315,0) + ; +"RTN","uttcovr",316,0) +CHKEQ(EXPECTED,SEEN,COMMENT) ; +"RTN","uttcovr",317,0) + D CHKEQ^%ut(EXPECTED,SEEN,$G(COMMENT)) +"RTN","uttcovr",318,0) + Q +"RTN","uttcovr",319,0) + ; +"RTN","uttcovr",320,0) +CHKTF(VALUE,COMMENT) ; +"RTN","uttcovr",321,0) + D CHKTF^%ut(VALUE,$G(COMMENT)) +"RTN","uttcovr",322,0) + Q "SEC","^DIC",17.9001,17.9001,0,"AUDIT") @ "SEC","^DIC",17.9001,17.9001,0,"DD") diff --git a/MUnit Technical Article - 150810 JLI.docx b/MUnit Technical Article - 150810 JLI.docx deleted file mode 100644 index 39faa46..0000000 Binary files a/MUnit Technical Article - 150810 JLI.docx and /dev/null differ diff --git a/MUnit Technical Article - 150810 JLI.pdf b/MUnit Technical Article - 150810 JLI.pdf deleted file mode 100644 index 272f2e0..0000000 Binary files a/MUnit Technical Article - 150810 JLI.pdf and /dev/null differ diff --git a/MUnit Technical Article - 151212 JLI.docx b/MUnit Technical Article - 151212 JLI.docx new file mode 100644 index 0000000..24c2376 Binary files /dev/null and b/MUnit Technical Article - 151212 JLI.docx differ diff --git a/MUnit Technical Article - 151212 JLI.pdf b/MUnit Technical Article - 151212 JLI.pdf new file mode 100644 index 0000000..797e4f6 Binary files /dev/null and b/MUnit Technical Article - 151212 JLI.pdf differ diff --git a/Packman Message MASH_0.2_0_M_Unit_Test.txt b/Packman Message MASH_0.3_0_M_Unit_Test.txt similarity index 82% rename from Packman Message MASH_0.2_0_M_Unit_Test.txt rename to Packman Message MASH_0.3_0_M_Unit_Test.txt index e0bdc3d..6b440b7 100644 --- a/Packman Message MASH_0.2_0_M_Unit_Test.txt +++ b/Packman Message MASH_0.3_0_M_Unit_Test.txt @@ -1,269 +1,156 @@ -$TXT Created by IVEY,JOEL L at JIVEY3.JIVEYSOFT.COM (KIDS) on Thursday, 10/08/15 at 19:49 +$TXT Created by IVEY,JOEL at JIVEY3.JIVEYSOFT.COM (KIDS) on Monday, 12/07/15 at 17:15 -Updated M-Unit Functionality with revised PRE-INSTALL routine for Cache +Update for coverage with Cache systems $END TXT -$KID MASH*0.2*0 +$KID MASH*0.3*0 **INSTALL NAME** -MASH*0.2*0 -"BLD",9544,0) -MASH*0.2*0^MASH UTILITIES^0^3151008^n -"BLD",9544,1,0) -^^40^40^3150914^^^^ -"BLD",9544,1,1,0) -Changes to functionality include: -"BLD",9544,1,2,0) - -"BLD",9544,1,3,0) -STARTUP and SHUTDOWN will be run in each routine instead of the first -"BLD",9544,1,4,0) -instance of STARTUP and SHUTDOWN encountered being the only ones that -"BLD",9544,1,5,0) -were run. This change was made because of possible suites of tests -"BLD",9544,1,6,0) -which have their own STARTUP and SHUTDOWN that need to be run. Also, -"BLD",9544,1,7,0) -it does not depend on the order in which test routines are run. -"BLD",9544,1,8,0) - -"BLD",9544,1,9,0) -While the coverage functionality can only be run on GT.M systems at -"BLD",9544,1,10,0) -the present time, the routine %utcover has been added to provide -"BLD",9544,1,11,0) -additional ability to run a number of unit tests at one time so that -"BLD",9544,1,12,0) -coverage across all of them can be obtained in one run, this includes -"BLD",9544,1,13,0) -the ability to specify entry at different APIs (e.g., if both verbose -"BLD",9544,1,14,0) -and nonverbose entries are available) as well as run code which is not -"BLD",9544,1,15,0) -part of a unit test to include in the analysis. The routine %uttcovr -"BLD",9544,1,16,0) -uses this functionality to provide a means of doing coverage analysis -"BLD",9544,1,17,0) -on the %ut routines and can be used as an example of its usage. -"BLD",9544,1,18,0) - -"BLD",9544,1,19,0) -A new tag (COV) has been added to the %ut routine (it simply calls -"BLD",9544,1,20,0) -the one in %ut1) so that all user APIs can be accessed within the %ut -"BLD",9544,1,21,0) -routine. -"BLD",9544,1,22,0) - -"BLD",9544,1,23,0) -The tag MULTAPIS^%ut was created to run multiple sets of unit tests -"BLD",9544,1,24,0) -together without doing coverage analysis. -"BLD",9544,1,25,0) - -"BLD",9544,1,26,0) -The tag COVERAGE^%ut can be used in GT.M systems to run coverage -"BLD",9544,1,27,0) -analyses on multiple sets of unit tests together in a manner similar -"BLD",9544,1,28,0) -to that offered by MULTAPIS. -"BLD",9544,1,29,0) - -"BLD",9544,1,30,0) -The tag GETUTVAL^%ut can be called after each unit test set is called -"BLD",9544,1,31,0) -to obtain cumulative totals over a number of tests run together. -"BLD",9544,1,32,0) - -"BLD",9544,1,33,0) -The tag LSTUTVAL^%ut can be called to list the data in the array generated -"BLD",9544,1,34,0) -by GETUTVAL^%ut with a heading of SUMMARY. -"BLD",9544,1,35,0) - -"BLD",9544,1,36,0) -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) +MASH*0.3*0 +"BLD",9545,0) +MASH*0.3*0^MASH UTILITIES^0^3151207^n +"BLD",9545,1,0) +^^2^2^3151207^ +"BLD",9545,1,1,0) +This update adds the ability to perform coverage analysis on Cache +"BLD",9545,1,2,0) +systems as well as GT.M systems. +"BLD",9545,4,0) ^9.64PA^17.9001^1 -"BLD",9544,4,17.9001,0) +"BLD",9545,4,17.9001,0) 17.9001 -"BLD",9544,4,17.9001,222) -y^y^f^^n^^y^o^n -"BLD",9544,4,"B",17.9001,17.9001) - -"BLD",9544,6.3) -15 -"BLD",9544,"ABPKG") -n -"BLD",9544,"INI") +"BLD",9545,4,17.9001,222) +y^y^f^^n^^y^a^n +"BLD",9545,4,"B",17.9001,17.9001) +"BLD",9545,6.3) +2 +"BLD",9545,"INI") ZZUTPRE -"BLD",9544,"INID") -^n^n -"BLD",9544,"INIT") +"BLD",9545,"INID") +^y^y +"BLD",9545,"INIT") ZZUTPOST -"BLD",9544,"KRN",0) +"BLD",9545,"KRN",0) ^9.67PA^779.2^20 -"BLD",9544,"KRN",.4,0) +"BLD",9545,"KRN",.4,0) .4 -"BLD",9544,"KRN",.401,0) +"BLD",9545,"KRN",.401,0) .401 -"BLD",9544,"KRN",.402,0) +"BLD",9545,"KRN",.402,0) .402 -"BLD",9544,"KRN",.403,0) +"BLD",9545,"KRN",.403,0) .403 -"BLD",9544,"KRN",.5,0) +"BLD",9545,"KRN",.5,0) .5 -"BLD",9544,"KRN",.84,0) +"BLD",9545,"KRN",.84,0) .84 -"BLD",9544,"KRN",3.6,0) +"BLD",9545,"KRN",3.6,0) 3.6 -"BLD",9544,"KRN",3.8,0) +"BLD",9545,"KRN",3.8,0) 3.8 -"BLD",9544,"KRN",9.2,0) +"BLD",9545,"KRN",9.2,0) 9.2 -"BLD",9544,"KRN",9.8,0) +"BLD",9545,"KRN",9.8,0) 9.8 -"BLD",9544,"KRN",9.8,"NM",0) +"BLD",9545,"KRN",9.8,"NM",0) ^9.68A^10^10 -"BLD",9544,"KRN",9.8,"NM",1,0) -ut^^0^B196383387 -"BLD",9544,"KRN",9.8,"NM",2,0) -ut1^^0^B205168514 -"BLD",9544,"KRN",9.8,"NM",3,0) -utt1^^0^B28788704 -"BLD",9544,"KRN",9.8,"NM",4,0) +"BLD",9545,"KRN",9.8,"NM",1,0) +ut^^0^B229598217 +"BLD",9545,"KRN",9.8,"NM",2,0) +ut1^^0^B226313375 +"BLD",9545,"KRN",9.8,"NM",3,0) +utcover^^0^B52893402 +"BLD",9545,"KRN",9.8,"NM",4,0) +utt1^^0^B39370749 +"BLD",9545,"KRN",9.8,"NM",5,0) utt2^^0^B501728 -"BLD",9544,"KRN",9.8,"NM",5,0) +"BLD",9545,"KRN",9.8,"NM",6,0) utt3^^0^B1628564 -"BLD",9544,"KRN",9.8,"NM",6,0) -utt4^^0^B1522726 -"BLD",9544,"KRN",9.8,"NM",7,0) +"BLD",9545,"KRN",9.8,"NM",7,0) +utt4^^0^B1568129 +"BLD",9545,"KRN",9.8,"NM",8,0) utt5^^0^B23054235 -"BLD",9544,"KRN",9.8,"NM",8,0) -utt6^^0^B30891565 -"BLD",9544,"KRN",9.8,"NM",9,0) -uttcovr^^0^B146530441 -"BLD",9544,"KRN",9.8,"NM",10,0) -utcover^^0^B32934852 -"BLD",9544,"KRN",9.8,"NM","B","ut",1) - -"BLD",9544,"KRN",9.8,"NM","B","ut1",2) - -"BLD",9544,"KRN",9.8,"NM","B","utcover",10) - -"BLD",9544,"KRN",9.8,"NM","B","utt1",3) - -"BLD",9544,"KRN",9.8,"NM","B","utt2",4) - -"BLD",9544,"KRN",9.8,"NM","B","utt3",5) - -"BLD",9544,"KRN",9.8,"NM","B","utt4",6) - -"BLD",9544,"KRN",9.8,"NM","B","utt5",7) - -"BLD",9544,"KRN",9.8,"NM","B","utt6",8) - -"BLD",9544,"KRN",9.8,"NM","B","uttcovr",9) - -"BLD",9544,"KRN",19,0) +"BLD",9545,"KRN",9.8,"NM",9,0) +utt6^^0^B39118749 +"BLD",9545,"KRN",9.8,"NM",10,0) +uttcovr^^0^B186023122 +"BLD",9545,"KRN",9.8,"NM","B","ut",1) +"BLD",9545,"KRN",9.8,"NM","B","ut1",2) +"BLD",9545,"KRN",9.8,"NM","B","utcover",3) +"BLD",9545,"KRN",9.8,"NM","B","utt1",4) +"BLD",9545,"KRN",9.8,"NM","B","utt2",5) +"BLD",9545,"KRN",9.8,"NM","B","utt3",6) +"BLD",9545,"KRN",9.8,"NM","B","utt4",7) +"BLD",9545,"KRN",9.8,"NM","B","utt5",8) +"BLD",9545,"KRN",9.8,"NM","B","utt6",9) +"BLD",9545,"KRN",9.8,"NM","B","uttcovr",10) +"BLD",9545,"KRN",19,0) 19 -"BLD",9544,"KRN",19,"NM",0) +"BLD",9545,"KRN",19,"NM",0) ^9.68A^3^3 -"BLD",9544,"KRN",19,"NM",1,0) +"BLD",9545,"KRN",19,"NM",1,0) utMUNIT^^0 -"BLD",9544,"KRN",19,"NM",2,0) +"BLD",9545,"KRN",19,"NM",2,0) utMUNIT GROUP EDIT^^0 -"BLD",9544,"KRN",19,"NM",3,0) +"BLD",9545,"KRN",19,"NM",3,0) utMUNIT GROUP RUN^^0 -"BLD",9544,"KRN",19,"NM","B","utMUNIT",1) - -"BLD",9544,"KRN",19,"NM","B","utMUNIT GROUP EDIT",2) - -"BLD",9544,"KRN",19,"NM","B","utMUNIT GROUP RUN",3) - -"BLD",9544,"KRN",19.1,0) +"BLD",9545,"KRN",19,"NM","B","utMUNIT",1) +"BLD",9545,"KRN",19,"NM","B","utMUNIT GROUP EDIT",2) +"BLD",9545,"KRN",19,"NM","B","utMUNIT GROUP RUN",3) +"BLD",9545,"KRN",19.1,0) 19.1 -"BLD",9544,"KRN",101,0) +"BLD",9545,"KRN",101,0) 101 -"BLD",9544,"KRN",409.61,0) +"BLD",9545,"KRN",409.61,0) 409.61 -"BLD",9544,"KRN",771,0) +"BLD",9545,"KRN",771,0) 771 -"BLD",9544,"KRN",779.2,0) +"BLD",9545,"KRN",779.2,0) 779.2 -"BLD",9544,"KRN",870,0) +"BLD",9545,"KRN",870,0) 870 -"BLD",9544,"KRN",8989.51,0) +"BLD",9545,"KRN",8989.51,0) 8989.51 -"BLD",9544,"KRN",8989.52,0) +"BLD",9545,"KRN",8989.52,0) 8989.52 -"BLD",9544,"KRN",8994,0) +"BLD",9545,"KRN",8994,0) 8994 -"BLD",9544,"KRN",8994,"NM",0) +"BLD",9545,"KRN",8994,"NM",0) ^9.68A^3^3 -"BLD",9544,"KRN",8994,"NM",1,0) +"BLD",9545,"KRN",8994,"NM",1,0) utMUNIT-TEST GROUP LOAD^^0 -"BLD",9544,"KRN",8994,"NM",2,0) +"BLD",9545,"KRN",8994,"NM",2,0) utMUNIT-TEST LOAD^^0 -"BLD",9544,"KRN",8994,"NM",3,0) +"BLD",9545,"KRN",8994,"NM",3,0) utMUNIT-TEST NEXT^^0 -"BLD",9544,"KRN",8994,"NM","B","utMUNIT-TEST GROUP LOAD",1) - -"BLD",9544,"KRN",8994,"NM","B","utMUNIT-TEST LOAD",2) - -"BLD",9544,"KRN",8994,"NM","B","utMUNIT-TEST NEXT",3) - -"BLD",9544,"KRN","B",.4,.4) - -"BLD",9544,"KRN","B",.401,.401) - -"BLD",9544,"KRN","B",.402,.402) - -"BLD",9544,"KRN","B",.403,.403) - -"BLD",9544,"KRN","B",.5,.5) - -"BLD",9544,"KRN","B",.84,.84) - -"BLD",9544,"KRN","B",3.6,3.6) - -"BLD",9544,"KRN","B",3.8,3.8) - -"BLD",9544,"KRN","B",9.2,9.2) - -"BLD",9544,"KRN","B",9.8,9.8) - -"BLD",9544,"KRN","B",19,19) - -"BLD",9544,"KRN","B",19.1,19.1) - -"BLD",9544,"KRN","B",101,101) - -"BLD",9544,"KRN","B",409.61,409.61) - -"BLD",9544,"KRN","B",771,771) - -"BLD",9544,"KRN","B",779.2,779.2) - -"BLD",9544,"KRN","B",870,870) - -"BLD",9544,"KRN","B",8989.51,8989.51) - -"BLD",9544,"KRN","B",8989.52,8989.52) - -"BLD",9544,"KRN","B",8994,8994) - -"BLD",9544,"QDEF") +"BLD",9545,"KRN",8994,"NM","B","utMUNIT-TEST GROUP LOAD",1) +"BLD",9545,"KRN",8994,"NM","B","utMUNIT-TEST LOAD",2) +"BLD",9545,"KRN",8994,"NM","B","utMUNIT-TEST NEXT",3) +"BLD",9545,"KRN","B",.4,.4) +"BLD",9545,"KRN","B",.401,.401) +"BLD",9545,"KRN","B",.402,.402) +"BLD",9545,"KRN","B",.403,.403) +"BLD",9545,"KRN","B",.5,.5) +"BLD",9545,"KRN","B",.84,.84) +"BLD",9545,"KRN","B",3.6,3.6) +"BLD",9545,"KRN","B",3.8,3.8) +"BLD",9545,"KRN","B",9.2,9.2) +"BLD",9545,"KRN","B",9.8,9.8) +"BLD",9545,"KRN","B",19,19) +"BLD",9545,"KRN","B",19.1,19.1) +"BLD",9545,"KRN","B",101,101) +"BLD",9545,"KRN","B",409.61,409.61) +"BLD",9545,"KRN","B",771,771) +"BLD",9545,"KRN","B",779.2,779.2) +"BLD",9545,"KRN","B",870,870) +"BLD",9545,"KRN","B",8989.51,8989.51) +"BLD",9545,"KRN","B",8989.52,8989.52) +"BLD",9545,"KRN","B",8994,8994) +"BLD",9545,"QDEF") ^^^^NO^^^^NO^^NO -"BLD",9544,"QUES",0) +"BLD",9545,"QUES",0) ^9.62^^ +"BLD",9545,"REQB",0) +^9.611^^ "DATA",17.9001,1,0) TESTS FOR UNIT TEST ROUTINES "DATA",17.9001,1,1,0) @@ -285,15 +172,12 @@ M-UNIT TEST GROUP "FIA",17.9001,0,0) 17.9001 "FIA",17.9001,0,1) -y^y^f^^n^^y^o^n +y^y^f^^n^^y^a^n "FIA",17.9001,0,10) - "FIA",17.9001,0,11) - "FIA",17.9001,0,"RLRO") - "FIA",17.9001,0,"VR") -0.2^MASH +0.3^MASH "FIA",17.9001,17.9001) 0 "FIA",17.9001,17.90011) @@ -395,91 +279,15 @@ MASH UTILITIES^%u^Utilities associated with the M Advanced Shell "PKG",222,22,0) ^9.49I^1^1 "PKG",222,22,1,0) -0.2 +0.3 "PKG",222,22,1,"PAH",1,0) -0^3151008^17 +0^3151207 "PKG",222,22,1,"PAH",1,1,0) -^^40^40^3151008 +^^2^2^3151207 "PKG",222,22,1,"PAH",1,1,1,0) -Changes to functionality include: +This update adds the ability to perform coverage analysis on Cache "PKG",222,22,1,"PAH",1,1,2,0) - -"PKG",222,22,1,"PAH",1,1,3,0) -STARTUP and SHUTDOWN will be run in each routine instead of the first -"PKG",222,22,1,"PAH",1,1,4,0) -instance of STARTUP and SHUTDOWN encountered being the only ones that -"PKG",222,22,1,"PAH",1,1,5,0) -were run. This change was made because of possible suites of tests -"PKG",222,22,1,"PAH",1,1,6,0) -which have their own STARTUP and SHUTDOWN that need to be run. Also, -"PKG",222,22,1,"PAH",1,1,7,0) -it does not depend on the order in which test routines are run. -"PKG",222,22,1,"PAH",1,1,8,0) - -"PKG",222,22,1,"PAH",1,1,9,0) -While the coverage functionality can only be run on GT.M systems at -"PKG",222,22,1,"PAH",1,1,10,0) -the present time, the routine %utcover has been added to provide -"PKG",222,22,1,"PAH",1,1,11,0) -additional ability to run a number of unit tests at one time so that -"PKG",222,22,1,"PAH",1,1,12,0) -coverage across all of them can be obtained in one run, this includes -"PKG",222,22,1,"PAH",1,1,13,0) -the ability to specify entry at different APIs (e.g., if both verbose -"PKG",222,22,1,"PAH",1,1,14,0) -and nonverbose entries are available) as well as run code which is not -"PKG",222,22,1,"PAH",1,1,15,0) -part of a unit test to include in the analysis. The routine %uttcovr -"PKG",222,22,1,"PAH",1,1,16,0) -uses this functionality to provide a means of doing coverage analysis -"PKG",222,22,1,"PAH",1,1,17,0) -on the %ut routines and can be used as an example of its usage. -"PKG",222,22,1,"PAH",1,1,18,0) - -"PKG",222,22,1,"PAH",1,1,19,0) -A new tag (COV) has been added to the %ut routine (it simply calls -"PKG",222,22,1,"PAH",1,1,20,0) -the one in %ut1) so that all user APIs can be accessed within the %ut -"PKG",222,22,1,"PAH",1,1,21,0) -routine. -"PKG",222,22,1,"PAH",1,1,22,0) - -"PKG",222,22,1,"PAH",1,1,23,0) -The tag MULTAPIS^%ut was created to run multiple sets of unit tests -"PKG",222,22,1,"PAH",1,1,24,0) -together without doing coverage analysis. -"PKG",222,22,1,"PAH",1,1,25,0) - -"PKG",222,22,1,"PAH",1,1,26,0) -The tag COVERAGE^%ut can be used in GT.M systems to run coverage -"PKG",222,22,1,"PAH",1,1,27,0) -analyses on multiple sets of unit tests together in a manner similar -"PKG",222,22,1,"PAH",1,1,28,0) -to that offered by MULTAPIS. -"PKG",222,22,1,"PAH",1,1,29,0) - -"PKG",222,22,1,"PAH",1,1,30,0) -The tag GETUTVAL^%ut can be called after each unit test set is called -"PKG",222,22,1,"PAH",1,1,31,0) -to obtain cumulative totals over a number of tests run together. -"PKG",222,22,1,"PAH",1,1,32,0) - -"PKG",222,22,1,"PAH",1,1,33,0) -The tag LSTUTVAL^%ut can be called to list the data in the array generated -"PKG",222,22,1,"PAH",1,1,34,0) -by GETUTVAL^%ut with a heading of SUMMARY. -"PKG",222,22,1,"PAH",1,1,35,0) - -"PKG",222,22,1,"PAH",1,1,36,0) -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. +systems as well as GT.M systems. "QUES","XPF1",0) Y "QUES","XPF1","??") @@ -517,7 +325,6 @@ PO^VA(200,:EM "QUES","XPM1","A") Enter the Coordinator for Mail Group '|FLAG|' "QUES","XPM1","B") - "QUES","XPM1","M") D XPM1^XPDIQ "QUES","XPO1",0) @@ -557,9 +364,9 @@ D XPZ2^XPDIQ "RTN","ZZUTPOST",1,0) %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 15 + ;;0.3;MASH UTILITIES;;;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ZZUTPOST",4,0) ; Original routine authored by Sam H. Habiel 07/2013-04/2014 "RTN","ZZUTPOST",5,0) @@ -863,9 +670,9 @@ GTMPROB ; come here in case of error trying to run unit tests - checks whether r "RTN","ZZUTPRE",1,0) %utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;10/08/15 19:11 "RTN","ZZUTPRE",2,0) - ;;0.2;MASH UTILITIES;;;Build 15 + ;;0.3;MASH UTILITIES;;;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ZZUTPRE",4,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 "RTN","ZZUTPRE",5,0) @@ -961,13 +768,13 @@ CACHEMAP ; Map %ut* Globals and Routines away from %SYS in Cache "RTN","ZZUTPRE",50,0) QUIT "RTN","ut") -0^1^B196383387 +0^1^B229598217 "RTN","ut",1,0) -%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;09/14/15 09:38 +%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;12/07/15 15:32 "RTN","ut",2,0) - ;;0.2;MASH UTILITIES;;;Build 15 + ;;0.3;MASH UTILITIES;;;Build 1 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ut",4,0) ; Original routine authored by Joel L. Ivey as XTMUNIT while working for U.S. Department of Veterans Affairs 2003-2012 "RTN","ut",5,0) @@ -1257,553 +1064,617 @@ VERBOSE1(%utETRY,%utI) ; Print out the entry point info "RTN","ut",147,0) CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values "RTN","ut",148,0) - I '$D(XTSTVAL) D NVLDARG^%ut1("CHKTF") Q -"RTN","ut",149,0) - D CHKTF^%ut1(XTSTVAL,$G(XTERMSG)) -"RTN","ut",150,0) - Q -"RTN","ut",151,0) - ; -"RTN","ut",152,0) -CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut",153,0) - I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG^%ut1("CHKEQ") Q -"RTN","ut",154,0) - D CHKEQ^%ut1(XTEXPECT,XTACTUAL,$G(XTERMSG)) -"RTN","ut",155,0) - Q -"RTN","ut",156,0) - ; -"RTN","ut",157,0) -FAIL(XTERMSG) ; Entry point for generating a failure message -"RTN","ut",158,0) - D FAIL^%ut1($G(XTERMSG)) -"RTN","ut",159,0) - Q -"RTN","ut",160,0) - ; -"RTN","ut",161,0) -SUCCEED ; Entry point for forcing a success (Thx David Whitten) -"RTN","ut",162,0) ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut",163,0) +"RTN","ut",149,0) ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut",164,0) - ; Switch IO and write out the dot for activity -"RTN","ut",165,0) +"RTN","ut",150,0) + ; ZEXCEPT: XTGUISEP - newed in GUINEXT +"RTN","ut",151,0) + I '$D(XTSTVAL) D NVLDARG^%ut1("CHKTF") Q +"RTN","ut",152,0) + I $G(XTERMSG)="" S XTERMSG="no failure message provided" +"RTN","ut",153,0) + S %ut("CHK")=$G(%ut("CHK"))+1 +"RTN","ut",154,0) I '$D(%utGUI) D -"RTN","ut",166,0) +"RTN","ut",155,0) . D SETIO^%ut1 -"RTN","ut",167,0) - . W "." -"RTN","ut",168,0) +"RTN","ut",156,0) + . I 'XTSTVAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " D +"RTN","ut",157,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","ut",158,0) + . . I $D(%ut("BREAK")) BREAK ; Break upon failure +"RTN","ut",159,0) + . . Q +"RTN","ut",160,0) + . I XTSTVAL W "." +"RTN","ut",161,0) . D RESETIO^%ut1 +"RTN","ut",162,0) + . Q +"RTN","ut",163,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","ut",164,0) + Q +"RTN","ut",165,0) + ; +"RTN","ut",166,0) +CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL +"RTN","ut",167,0) + N FAILMSG +"RTN","ut",168,0) + ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END "RTN","ut",169,0) - ; + ; ZEXCEPT: %ut -- NEWED IN EN "RTN","ut",170,0) - ; Increment test counter + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut",171,0) - S %ut("CHK")=%ut("CHK")+1 + I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG^%ut1("CHKEQ") Q "RTN","ut",172,0) - QUIT + S XTACTUAL=$G(XTACTUAL),XTEXPECT=$G(XTEXPECT) "RTN","ut",173,0) - ; + I $G(XTERMSG)="" S XTERMSG="no failure message provided" "RTN","ut",174,0) -CHKLEAKS(%utCODE,%utLOC,%utINPT) ; functionality to check for variable leaks on executing a section of code + S %ut("CHK")=%ut("CHK")+1 "RTN","ut",175,0) - ; %utCODE - A string that specifies the code that is to be XECUTED and checked for leaks. + I XTEXPECT'=XTACTUAL S FAILMSG="<"_XTEXPECT_"> vs <"_XTACTUAL_"> - " "RTN","ut",176,0) - ; this should be a complete piece of code (e.g., "S X=$$NOW^XLFDT()" or "D EN^%ut(""ROUNAME"")") + I '$D(%utGUI) D "RTN","ut",177,0) - ; %utLOC - A string that is used to indicate the code tested for variable leaks + . D SETIO^%ut1 "RTN","ut",178,0) - ; %utINPT - An optional variable which may be passed by reference. This may + . I XTEXPECT'=XTACTUAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W FAILMSG,XTERMSG,! D "RTN","ut",179,0) - ; be used to pass any variable values, etc. into the code to be + . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") "RTN","ut",180,0) - ; XECUTED. In this case, set the subscript to the variable name and the + . . I $D(%ut("BREAK")) BREAK ; Break upon failure "RTN","ut",181,0) - ; value of the subscripted variable to the desired value of the subscript. + . . Q "RTN","ut",182,0) - ; e.g., (using NAME as my current namespace) + . E W "." "RTN","ut",183,0) - ; S CODE="S %utINPT=$$ENTRY^ROUTINE(ZZVALUE1,ZZVALUE2)" + . D RESETIO^%ut1 "RTN","ut",184,0) - ; S NAMELOC="ENTRY^ROUTINE leak test" (or simply "ENTRY^ROUTINE") + . Q "RTN","ut",185,0) - ; S NAMEINPT("ZZVALUE1")=ZZVALUE1 + 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","ut",186,0) - ; S NAMEINPT("ZZVALUE2")=ZZVALUE2 + Q "RTN","ut",187,0) - ; D CHKLEAKS^%ut(CODE,NAMELOC,.NAMEINPT) -"RTN","ut",188,0) ; +"RTN","ut",188,0) +FAIL(XTERMSG) ; Entry point for generating a failure message "RTN","ut",189,0) - ; If part of a unit test, any leaked variables in ENTRY^ROUTINE which result + D FAIL^%ut1($G(XTERMSG)) "RTN","ut",190,0) - ; from running the code with the variables indicated will be shown as FAILUREs. + Q "RTN","ut",191,0) ; "RTN","ut",192,0) - ; If called outside of a unit test, any leaked variables will be printed to the +SUCCEED ; Entry point for forcing a success (Thx David Whitten) "RTN","ut",193,0) - ; current device. + ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END "RTN","ut",194,0) - ; + ; ZEXCEPT: %ut - NEWED IN EN "RTN","ut",195,0) - N (%utCODE,%utLOC,%utINPT,DUZ,IO,U,%utERRL,%ut,%utGUI,%utERR,%utI,%utJ,%utK,%utLIST,%utROU,%utSTRT,XTGUISEP) + ; Switch IO and write out the dot for activity "RTN","ut",196,0) - ; ZEXCEPT: %ut - part of exclusive NEW TESTS FOR EXISTENCE ONLY + I '$D(%utGUI) D "RTN","ut",197,0) - ; ZEXCEPT: %utVAR - handled by exclusive NEW + . D SETIO^%ut1 "RTN","ut",198,0) - ; + . W "." "RTN","ut",199,0) - ; ACTIVATE ANY VARIABLES PASSED AS SUBSCRIPTS TO %utINPT TO THEIR VALUES + . D RESETIO^%ut1 "RTN","ut",200,0) - S %utVAR=" " F S %utVAR=$O(%utINPT(%utVAR)) Q:%utVAR="" S (@%utVAR)=%utINPT(%utVAR) + ; "RTN","ut",201,0) - X %utCODE + ; Increment test counter "RTN","ut",202,0) - N ZZUTVAR S ZZUTVAR="%" -"RTN","ut",203,0) - I $G(%ut)=1 D -"RTN","ut",204,0) - . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) -"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) - I '($G(%ut)=1) D -"RTN","ut",208,0) - . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR -"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 -"RTN","ut",212,0) - ; -"RTN","ut",213,0) -ERROR ; record errors -"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: XTGUISEP - newed in GUINEXT -"RTN","ut",217,0) S %ut("CHK")=%ut("CHK")+1 +"RTN","ut",203,0) + QUIT +"RTN","ut",204,0) + ; +"RTN","ut",205,0) +CHKLEAKS(%utCODE,%utLOC,%utINPT) ; functionality to check for variable leaks on executing a section of code +"RTN","ut",206,0) + ; %utCODE - A string that specifies the code that is to be XECUTED and checked for leaks. +"RTN","ut",207,0) + ; this should be a complete piece of code (e.g., "S X=$$NOW^XLFDT()" or "D EN^%ut(""ROUNAME"")") +"RTN","ut",208,0) + ; %utLOC - A string that is used to indicate the code tested for variable leaks +"RTN","ut",209,0) + ; %utINPT - An optional variable which may be passed by reference. This may +"RTN","ut",210,0) + ; be used to pass any variable values, etc. into the code to be +"RTN","ut",211,0) + ; XECUTED. In this case, set the subscript to the variable name and the +"RTN","ut",212,0) + ; value of the subscripted variable to the desired value of the subscript. +"RTN","ut",213,0) + ; e.g., (using NAME as my current namespace) +"RTN","ut",214,0) + ; S CODE="S %utINPT=$$ENTRY^ROUTINE(ZZVALUE1,ZZVALUE2)" +"RTN","ut",215,0) + ; S NAMELOC="ENTRY^ROUTINE leak test" (or simply "ENTRY^ROUTINE") +"RTN","ut",216,0) + ; S NAMEINPT("ZZVALUE1")=ZZVALUE1 +"RTN","ut",217,0) + ; S NAMEINPT("ZZVALUE2")=ZZVALUE2 "RTN","ut",218,0) - I '$D(%utGUI) D ERROR1 + ; D CHKLEAKS^%ut(CODE,NAMELOC,.NAMEINPT) "RTN","ut",219,0) - I $D(%utGUI) D + ; "RTN","ut",220,0) - . S %ut("CNT")=%ut("CNT")+1 + ; If part of a unit test, any leaked variables in ENTRY^ROUTINE which result "RTN","ut",221,0) - . S %utERR=%utERR+1 + ; from running the code with the variables indicated will be shown as FAILUREs. "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 + ; If called outside of a unit test, any leaked variables will be printed to the "RTN","ut",224,0) - S @($S(+$SY=47:"$ZS",1:"$ZE")_"="_""""""),$EC="" + ; current device. "RTN","ut",225,0) - Q + ; "RTN","ut",226,0) - ; + N (%utCODE,%utLOC,%utINPT,DUZ,IO,U,%utERRL,%ut,%utGUI,%utERR,%utI,%utJ,%utK,%utLIST,%utROU,%utSTRT,XTGUISEP) "RTN","ut",227,0) -ERROR1 ; + ; ZEXCEPT: %ut - part of exclusive NEW TESTS FOR EXISTENCE ONLY "RTN","ut",228,0) - I $G(%ut("BREAK")) BREAK ; if we are asked to break upon error, please do so! + ; ZEXCEPT: %utVAR - handled by exclusive NEW "RTN","ut",229,0) - ; ZEXCEPT: %utERRL -CREATED IN SETUP, KILLED IN END + ; "RTN","ut",230,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY + ; ACTIVATE ANY VARIABLES PASSED AS SUBSCRIPTS TO %utINPT TO THEIR VALUES "RTN","ut",231,0) - D SETIO^%ut1 + S %utVAR=" " F S %utVAR=$O(%utINPT(%utVAR)) Q:%utVAR="" S (@%utVAR)=%utINPT(%utVAR) "RTN","ut",232,0) - W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - Error: " W $S(+$SY=47:$ZS,1:$ZE),! D + X %utCODE "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") + N ZZUTVAR S ZZUTVAR="%" "RTN","ut",234,0) - . Q + I $G(%ut)=1 D "RTN","ut",235,0) - D RESETIO^%ut1 + . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) D FAIL^%ut(%utLOC_" VARIABLE LEAK: "_ZZUTVAR) "RTN","ut",236,0) - Q + . 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",237,0) - ; + . Q "RTN","ut",238,0) -ISUTEST() ; .SUPPORTED API TO DETERMINE IF CURRENTLY IN UNIT TEST + I '($G(%ut)=1) D "RTN","ut",239,0) - ; ZEXCEPT: %ut -- NEWED ON ENTRY + . I $D(@ZZUTVAR),'$D(%utINPT(ZZUTVAR)) W !,%utLOC_" VARIABLE LEAK: "_ZZUTVAR "RTN","ut",240,0) - Q $G(%ut)=1 + . 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",241,0) - ; + . Q "RTN","ut",242,0) -PICKSET ; .OPT Interactive selection of MUnit Test Group + Q "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 +ERROR ; record errors "RTN","ut",245,0) - ; + ; ZEXCEPT: %utERRL,%utGUI,%utERR -CREATED IN SETUP, KILLED IN END "RTN","ut",246,0) -RUNSET(SETNAME,VERBOSE) ; .SR Run with Specified Selection of MUnit Test Group + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",247,0) - N Y,%utROU,%utLIST,%utVERB + ; ZEXCEPT: XTGUISEP - newed in GUINEXT "RTN","ut",248,0) - Q:$G(SETNAME)="" + S %ut("CHK")=%ut("CHK")+1 "RTN","ut",249,0) - S %utVERB=$G(VERBOSE,0) + I '$D(%utGUI) D ERROR1 "RTN","ut",250,0) - S Y=+$$FIND1^DIC(17.9001,"","X",SETNAME) Q:Y'>0 + I $D(%utGUI) D "RTN","ut",251,0) - D GETSET(Y,.%utROU,.%utLIST) + . S %ut("CNT")=%ut("CNT")+1 "RTN","ut",252,0) - N Y,SETNAME,%ut + . S %utERR=%utERR+1 "RTN","ut",253,0) - D SETUT + . S @%ut("RSLT")@(%ut("CNT"))=%ut("LOC")_XTGUISEP_"ERROR"_XTGUISEP_$S(+$SY=47:$ZS,1:$ZE) "RTN","ut",254,0) - D EN1(.%utROU,%utLIST) + . Q "RTN","ut",255,0) - Q + S @($S(+$SY=47:"$ZS",1:"$ZE")_"="_""""""),$EC="" "RTN","ut",256,0) - ; + Q "RTN","ut",257,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",258,0) -DOSET(IEN,%utVERB) ; 140731 JLI added %utVERB as a second argument -"RTN","ut",259,0) - ; IEN - Internal entry number for selected set of tests in the MUNIT TEST GROUP file (#17.9001) -"RTN","ut",260,0) - ; %utVERB - optional input that indicates verbose output is permitted -"RTN","ut",261,0) ; +"RTN","ut",258,0) +ERROR1 ; +"RTN","ut",259,0) + I $G(%ut("BREAK")) BREAK ; if we are asked to break upon error, please do so! +"RTN","ut",260,0) + ; ZEXCEPT: %utERRL -CREATED IN SETUP, KILLED IN END +"RTN","ut",261,0) + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",262,0) - N %utROU,%utLIST + D SETIO^%ut1 "RTN","ut",263,0) - I '$D(%utVERB) S %utVERB=0 + W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - Error: " W $S(+$SY=47:$ZS,1:$ZE),! D "RTN","ut",264,0) - S %utLIST=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",265,0) - D GETSET($G(IEN),.%utROU,.%utLIST) + . Q "RTN","ut",266,0) - I %utLIST>0 N IEN,%ut D SETUT,EN1(.%utROU,%utLIST) + D RESETIO^%ut1 "RTN","ut",267,0) Q "RTN","ut",268,0) ; "RTN","ut",269,0) -GETSET(IEN,%utROU,%utLIST) ; JLI 140731 - called from PICKSET, RUNSET, DOSET, GUISET +ISUTEST() ; .SUPPORTED API TO DETERMINE IF CURRENTLY IN UNIT TEST "RTN","ut",270,0) - N IENS,%utROOT + ; ZEXCEPT: %ut -- NEWED ON ENTRY "RTN","ut",271,0) - S IENS=IEN_"," D GETS^DIQ(17.9001,IENS,"1*","","%utROOT") + Q $G(%ut)=1 "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 +PICKSET ; .OPT Interactive selection of MUnit Test Group "RTN","ut",274,0) - ; + N DIC,Y,%utROU,%utLIST,DIR "RTN","ut",275,0) -COV(NMSP,COVCODE,VERBOSITY) ; simply make it callable from %ut1 as well (along with other APIs) JLI 150101 + I '$$ISUTEST^%ut() 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",276,0) - D COV^%ut1(NMSP,COVCODE,+$G(VERBOSITY)) ; see COV^%ut1 for description of arguments + Q "RTN","ut",277,0) - Q + ; "RTN","ut",278,0) - ; +RUNSET(SETNAME,VERBOSE) ; .SR Run with Specified Selection of MUnit Test Group "RTN","ut",279,0) -MULTAPIS(TESTROUS) ; .SR - RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS + N Y,%utROU,%utLIST,%utVERB "RTN","ut",280,0) - ; input - TESTROUS - passed by reference + Q:$G(SETNAME)="" "RTN","ut",281,0) - ; see TESTONLY in routine %utcover for full description of TESTROUS argument + S %utVERB=$G(VERBOSE,0) "RTN","ut",282,0) - D MULTAPIS^%utcover(.TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS + S Y=+$$FIND1^DIC(17.9001,"","X",SETNAME) Q:Y'>0 "RTN","ut",283,0) - Q + D GETSET(Y,.%utROU,.%utLIST) "RTN","ut",284,0) - ; + N Y,SETNAME,%ut "RTN","ut",285,0) -COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ;.SR - run coverage analysis for multiple routines and entry points + D SETUT "RTN","ut",286,0) - ; input ROUNMSP + D EN1(.%utROU,%utLIST) "RTN","ut",287,0) - ; input TESTROUS - passed by reference -"RTN","ut",288,0) - ; input XCLDROUS - passed by reference -"RTN","ut",289,0) - ; input RESLTLVL -"RTN","ut",290,0) - ; see COVERAGE in routine %utcover for full description of arguments -"RTN","ut",291,0) - D COVERAGE^%utcover(ROUNMSP,.TESTROUS,.XCLDROUS,+$G(RESLTLVL)) -"RTN","ut",292,0) Q +"RTN","ut",288,0) + ; +"RTN","ut",289,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",290,0) +DOSET(IEN,%utVERB) ; 140731 JLI added %utVERB as a second argument +"RTN","ut",291,0) + ; IEN - Internal entry number for selected set of tests in the MUNIT TEST GROUP file (#17.9001) +"RTN","ut",292,0) + ; %utVERB - optional input that indicates verbose output is permitted "RTN","ut",293,0) ; "RTN","ut",294,0) -GETUTVAL(UTDATA) ; .SR - returns totals for current unit test data in cumulative totals + N %utROU,%utLIST "RTN","ut",295,0) - ; usage D GETUTVAL^%ut(.UTDATA) + I '$D(%utVERB) S %utVERB=0 "RTN","ut",296,0) - ; input - UTDATA - passed by reference + S %utLIST=0 "RTN","ut",297,0) - ; + D GETSET($G(IEN),.%utROU,.%utLIST) "RTN","ut",298,0) - ; subscripted values returned: + I %utLIST>0 N IEN,%ut D SETUT,EN1(.%utROU,%utLIST) "RTN","ut",299,0) - ; 1) cumulative number of routines run; 2) cumulative number of entry tags; + Q "RTN","ut",300,0) - ; 3) cumulative number of tests; 4) cummulative number of failures; + ; "RTN","ut",301,0) - ; 5) cumulative number of errors +GETSET(IEN,%utROU,%utLIST) ; JLI 140731 - called from PICKSET, RUNSET, DOSET, GUISET "RTN","ut",302,0) - N VALS,I,VAL + N IENS,%utROOT "RTN","ut",303,0) - S VALS=$G(^TMP("%ut",$J,"UTVALS")) I VALS="" Q + S IENS=IEN_"," D GETS^DIQ(17.9001,IENS,"1*","","%utROOT") "RTN","ut",304,0) - F I=1:1 S VAL=$P(VALS,U,I) Q:VAL="" S UTDATA(I)=$G(UTDATA(I))+VAL + 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",305,0) - K ^TMP("%ut",$J,"UTVALS") + Q "RTN","ut",306,0) - Q + ; "RTN","ut",307,0) - ; +COV(NMSP,COVCODE,VERBOSITY) ; simply make it callable from %ut1 as well (along with other APIs) JLI 150101 "RTN","ut",308,0) -LSTUTVAL(UTDATA) ; .SR - lists cumulative totals in UTDATA array + D COV^%ut1(NMSP,COVCODE,+$G(VERBOSITY)) ; see COV^%ut1 for description of arguments "RTN","ut",309,0) - ; usage D LSTUTVAL^%ut(.UTDATA) -"RTN","ut",310,0) - ; input - UTDATA - passed by reference -"RTN","ut",311,0) - W !!!,"------------ SUMMARY ------------" -"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",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",314,0) Q -"RTN","ut",315,0) +"RTN","ut",310,0) ; +"RTN","ut",311,0) +MULTAPIS(TESTROUS) ; .SR - RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS +"RTN","ut",312,0) + ; input - TESTROUS - passed by reference +"RTN","ut",313,0) + ; see TESTONLY in routine %utcover for full description of TESTROUS argument +"RTN","ut",314,0) + D MULTAPIS^%utcover(.TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS +"RTN","ut",315,0) + Q "RTN","ut",316,0) ; "RTN","ut",317,0) -GUISET(%utRSLT,XTSET) ; Entry point for GUI start with selected Test Set IEN - called by %ut-TEST GROUP LOAD rpc +COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ;.SR - run coverage analysis for multiple routines and entry points "RTN","ut",318,0) - N %utROU,%utLIST,%ut + ; input ROUNMSP "RTN","ut",319,0) - D SETUT + ; input TESTROUS - passed by reference "RTN","ut",320,0) - S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") + ; input XCLDROUS - passed by reference "RTN","ut",321,0) - D GETSET(XTSET,.%utROU,.%utLIST) + ; input RESLTLVL "RTN","ut",322,0) - D GETLIST(.%utROU,%utLIST,%ut("RSLT")) + ; see COVERAGE in routine %utcover for full description of arguments "RTN","ut",323,0) - S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version + D COVERAGE^%utcover(ROUNMSP,.TESTROUS,.XCLDROUS,+$G(RESLTLVL)) "RTN","ut",324,0) - S %utRSLT=%ut("RSLT") + Q "RTN","ut",325,0) - Q + ; "RTN","ut",326,0) - ; +GETUTVAL(UTDATA) ; .SR - returns totals for current unit test data in cumulative totals "RTN","ut",327,0) -GUILOAD(%utRSLT,%utROUN) ; Entry point for GUI start with %utROUN containing primary routine name - called by %ut-TEST LOAD rpc + ; usage D GETUTVAL^%ut(.UTDATA) "RTN","ut",328,0) - N %utROU,%ut + ; input - UTDATA - passed by reference "RTN","ut",329,0) - D SETUT + ; "RTN","ut",330,0) - S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") + ; subscripted values returned: "RTN","ut",331,0) - S %utROU(1)=%utROUN + ; 1) cumulative number of routines run; 2) cumulative number of entry tags; "RTN","ut",332,0) - D GETLIST(.%utROU,1,%ut("RSLT")) + ; 3) cumulative number of tests; 4) cummulative number of failures; "RTN","ut",333,0) - S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version + ; 5) cumulative number of errors "RTN","ut",334,0) - S %utRSLT=%ut("RSLT") + N VALS,I,VAL "RTN","ut",335,0) - Q + S VALS=$G(^TMP("%ut",$J,"UTVALS")) I VALS="" Q "RTN","ut",336,0) - ; + F I=1:1 S VAL=$P(VALS,U,I) Q:VAL="" S UTDATA(I)=$G(UTDATA(I))+VAL "RTN","ut",337,0) -GETLIST(%utROU,%utLIST,%utRSLT) ; called from GUISET, GUILOAD -"RTN","ut",338,0) - N I,%utROUL,%utROUN,%ut,XTCOMNT,XTVALUE,%utCNT -"RTN","ut",339,0) - S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) K @XTVALUE -"RTN","ut",340,0) - S %utCNT=0,XTCOMNT="" -"RTN","ut",341,0) - D GETTREE^%ut1(.%utROU,%utLIST) -"RTN","ut",342,0) - F I=1:1 Q:'$D(%utROU(I)) S %utROUL(%utROU(I))="" -"RTN","ut",343,0) - S %utROUN="" F S %utROUN=$O(%utROUL(%utROUN)) Q:%utROUN="" D LOAD(%utROUN,.%utCNT,XTVALUE,XTCOMNT,.%utROUL) -"RTN","ut",344,0) - M @%utRSLT=@XTVALUE -"RTN","ut",345,0) - K @%utRSLT@("SHUTDOWN") -"RTN","ut",346,0) - K @%utRSLT@("STARTUP") -"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) - ; -"RTN","ut",350,0) - ; generate list of unit test routines, entry points and comments on test for entry point -"RTN","ut",351,0) -LOAD(%utROUN,%utNCNT,XTVALUE,XTCOMNT,%utROUL) ; called from GETLIST, and recursively from LOAD -"RTN","ut",352,0) - I $T(@("^"_%utROUN))="" S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_"^^*** ERROR - ROUTINE NAME NOT FOUND" Q -"RTN","ut",353,0) - S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_U_XTCOMNT -"RTN","ut",354,0) - ;N %utI,XTX1,XTX2,LINE -"RTN","ut",355,0) - N %utI,XTX1,XTX2,LINE,LIST,I -"RTN","ut",356,0) - ; 100622 JLI added code to identify STARTUP and TEARDOWN -"RTN","ut",357,0) - I $T(@("STARTUP^"_%utROUN))'="",'$D(@XTVALUE@("STARTUP")) S @XTVALUE@("STARTUP")="STARTUP^"_%utROUN -"RTN","ut",358,0) - I $T(@("SHUTDOWN^"_%utROUN))'="",'$D(@XTVALUE@("SHUTDOWN")) S @XTVALUE@("SHUTDOWN")="SHUTDOWN^"_%utROUN -"RTN","ut",359,0) - ; JLI 140731 handle @TEST identified test tags -"RTN","ut",360,0) - D NEWSTYLE^%ut1(.LIST,%utROUN) -"RTN","ut",361,0) - F I=1:1:LIST S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_LIST(I) -"RTN","ut",362,0) - ; JLI 140731 end of @TEST addition -"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",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",365,0) - Q -"RTN","ut",366,0) - ; -"RTN","ut",367,0) -GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - called by %ut-TEST NEXT rpc -"RTN","ut",368,0) - ; XTGUISEP - added 110719 to provide for changing separator for GUI -"RTN","ut",369,0) - ; return from ^ to another value ~~^~~ so that data returned -"RTN","ut",370,0) - ; is not affected by ^ values in the data - if not present -"RTN","ut",371,0) - ; sets value to default ^ -"RTN","ut",372,0) - N %utETRY,%utROUT,XTOLROU,XTVALUE,%utERR,%utGUI -"RTN","ut",373,0) - N %ut -"RTN","ut",374,0) - I $G(XTGUISEP)="" S XTGUISEP="^" -"RTN","ut",375,0) - D SETUT -"RTN","ut",376,0) - S %ut("LOC")=%utLOC -"RTN","ut",377,0) - S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 -"RTN","ut",378,0) - S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) -"RTN","ut",379,0) - S %ut("RSLT")=$NA(^TMP("GUINEXT",$J)) K @%ut("RSLT") -"RTN","ut",380,0) - S %utRSLT=%ut("RSLT") -"RTN","ut",381,0) - S %utETRY=$P(%utLOC,U),%utROUT=$P(%utLOC,U,2),XTOLROU=$G(@XTVALUE@("LASTROU")) -"RTN","ut",382,0) - S %utGUI=1 -"RTN","ut",383,0) - S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 -"RTN","ut",384,0) - ; I %utROUT'=XTOLROU D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ;140731 JLI - commented out -"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",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",387,0) - . I XTOLROU="",$D(@XTVALUE@("STARTUP")) D -"RTN","ut",388,0) - . . S %ut("LOC")=@XTVALUE@("STARTUP") -"RTN","ut",389,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",390,0) - . . D @(@XTVALUE@("STARTUP")) -"RTN","ut",391,0) - . . Q -"RTN","ut",392,0) - . S @XTVALUE@("LASTROU")=%utROUT I %utROUT'="",$T(@("SETUP^"_%utROUT))'="" D -"RTN","ut",393,0) - . . S %ut("LOC")="SETUP^"_%utROUT -"RTN","ut",394,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",395,0) - . . D @("SETUP^"_%utROUT) -"RTN","ut",396,0) - . . Q -"RTN","ut",397,0) - . I %utROUT="",$D(@XTVALUE@("SHUTDOWN")) D -"RTN","ut",398,0) - . . S %ut("LOC")=@XTVALUE@("SHUTDOWN") -"RTN","ut",399,0) - . . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",400,0) - . . D @(@XTVALUE@("SHUTDOWN")) -"RTN","ut",401,0) - . . Q -"RTN","ut",402,0) - . Q -"RTN","ut",403,0) - S %ut("LOC")=%utLOC -"RTN","ut",404,0) - S %ut("CHK")=0,%ut("CNT")=1,%utERR=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) - . D @%ut("LOC") -"RTN","ut",408,0) - . Q -"RTN","ut",409,0) - I $T(@("TEARDOWN^"_%utROUT))'="" D -"RTN","ut",410,0) - . S %ut("LOC")="TEARDOWN^"_%utROUT -"RTN","ut",411,0) - . N $ETRAP S $ETRAP="D ERROR^%ut" -"RTN","ut",412,0) - . D @("TEARDOWN^"_%utROUT) -"RTN","ut",413,0) - . Q -"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) +"RTN","ut",338,0) Q +"RTN","ut",339,0) + ; +"RTN","ut",340,0) +LSTUTVAL(UTDATA) ; .SR - lists cumulative totals in UTDATA array +"RTN","ut",341,0) + ; usage D LSTUTVAL^%ut(.UTDATA) +"RTN","ut",342,0) + ; input - UTDATA - passed by reference +"RTN","ut",343,0) + W !!!,"------------ SUMMARY ------------" +"RTN","ut",344,0) + W !,"Ran ",UTDATA(1)," Routine",$S(UTDATA(1)>1:"s",1:""),", ",UTDATA(2)," Entry Tag",$S(UTDATA(2)>1:"s",1:"") +"RTN","ut",345,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",346,0) + Q +"RTN","ut",347,0) + ; +"RTN","ut",348,0) + ; +"RTN","ut",349,0) +GUISET(%utRSLT,XTSET) ; Entry point for GUI start with selected Test Set IEN - called by %ut-TEST GROUP LOAD rpc +"RTN","ut",350,0) + N %utROU,%utLIST,%ut +"RTN","ut",351,0) + D SETUT +"RTN","ut",352,0) + S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") +"RTN","ut",353,0) + D GETSET(XTSET,.%utROU,.%utLIST) +"RTN","ut",354,0) + D GETLIST(.%utROU,%utLIST,%ut("RSLT")) +"RTN","ut",355,0) + S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version +"RTN","ut",356,0) + S %utRSLT=%ut("RSLT") +"RTN","ut",357,0) + Q +"RTN","ut",358,0) + ; +"RTN","ut",359,0) +GUILOAD(%utRSLT,%utROUN) ; Entry point for GUI start with %utROUN containing primary routine name - called by %ut-TEST LOAD rpc +"RTN","ut",360,0) + N %utROU,%ut +"RTN","ut",361,0) + D SETUT +"RTN","ut",362,0) + S %ut("RSLT")=$NA(^TMP("MUNIT-%utRSLT",$J)) K @%ut("RSLT") +"RTN","ut",363,0) + S %utROU(1)=%utROUN +"RTN","ut",364,0) + D GETLIST(.%utROU,1,%ut("RSLT")) +"RTN","ut",365,0) + S @%ut("RSLT")@(1)=(@%ut("RSLT")@(1))_"^1" ; 110719 mark as new version +"RTN","ut",366,0) + S %utRSLT=%ut("RSLT") +"RTN","ut",367,0) + Q +"RTN","ut",368,0) + ; +"RTN","ut",369,0) +GETLIST(%utROU,%utLIST,%utRSLT) ; called from GUISET, GUILOAD +"RTN","ut",370,0) + N I,%utROUL,%utROUN,%ut,XTCOMNT,XTVALUE,%utCNT +"RTN","ut",371,0) + S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) K @XTVALUE +"RTN","ut",372,0) + S %utCNT=0,XTCOMNT="" +"RTN","ut",373,0) + D GETTREE^%ut1(.%utROU,%utLIST) +"RTN","ut",374,0) + F I=1:1 Q:'$D(%utROU(I)) S %utROUL(%utROU(I))="" +"RTN","ut",375,0) + S %utROUN="" F S %utROUN=$O(%utROUL(%utROUN)) Q:%utROUN="" D LOAD(%utROUN,.%utCNT,XTVALUE,XTCOMNT,.%utROUL) +"RTN","ut",376,0) + M @%utRSLT=@XTVALUE +"RTN","ut",377,0) + K @%utRSLT@("SHUTDOWN") +"RTN","ut",378,0) + K @%utRSLT@("STARTUP") +"RTN","ut",379,0) + S @XTVALUE@("LASTROU")="" ; Use this to keep track of place in routines +"RTN","ut",380,0) + Q +"RTN","ut",381,0) + ; +"RTN","ut",382,0) + ; generate list of unit test routines, entry points and comments on test for entry point +"RTN","ut",383,0) +LOAD(%utROUN,%utNCNT,XTVALUE,XTCOMNT,%utROUL) ; called from GETLIST, and recursively from LOAD +"RTN","ut",384,0) + I $T(@("^"_%utROUN))="" S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_"^^*** ERROR - ROUTINE NAME NOT FOUND" Q +"RTN","ut",385,0) + S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_U_XTCOMNT +"RTN","ut",386,0) + ;N %utI,XTX1,XTX2,LINE +"RTN","ut",387,0) + N %utI,XTX1,XTX2,LINE,LIST,I +"RTN","ut",388,0) + ; 100622 JLI added code to identify STARTUP and TEARDOWN +"RTN","ut",389,0) + I $T(@("STARTUP^"_%utROUN))'="",'$D(@XTVALUE@("STARTUP")) S @XTVALUE@("STARTUP")="STARTUP^"_%utROUN +"RTN","ut",390,0) + I $T(@("SHUTDOWN^"_%utROUN))'="",'$D(@XTVALUE@("SHUTDOWN")) S @XTVALUE@("SHUTDOWN")="SHUTDOWN^"_%utROUN +"RTN","ut",391,0) + ; JLI 140731 handle @TEST identified test tags +"RTN","ut",392,0) + D NEWSTYLE^%ut1(.LIST,%utROUN) +"RTN","ut",393,0) + F I=1:1:LIST S %utNCNT=%utNCNT+1,@XTVALUE@(%utNCNT)=%utROUN_U_LIST(I) +"RTN","ut",394,0) + ; JLI 140731 end of @TEST addition +"RTN","ut",395,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",396,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",397,0) + Q +"RTN","ut",398,0) + ; +"RTN","ut",399,0) +GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - called by %ut-TEST NEXT rpc +"RTN","ut",400,0) + ; XTGUISEP - added 110719 to provide for changing separator for GUI +"RTN","ut",401,0) + ; return from ^ to another value ~~^~~ so that data returned +"RTN","ut",402,0) + ; is not affected by ^ values in the data - if not present +"RTN","ut",403,0) + ; sets value to default ^ +"RTN","ut",404,0) + N %utETRY,%utROUT,XTOLROU,XTVALUE,%utERR,%utGUI +"RTN","ut",405,0) + N %ut +"RTN","ut",406,0) + I $G(XTGUISEP)="" S XTGUISEP="^" +"RTN","ut",407,0) + D SETUT +"RTN","ut",408,0) + S %ut("LOC")=%utLOC +"RTN","ut",409,0) + S %ut("CURR")=0,%ut("ECNT")=0,%ut("FAIL")=0,%ut("CHK")=0,%ut("NENT")=0,%ut("ERRN")=0 +"RTN","ut",410,0) + S XTVALUE=$NA(^TMP("GUI-MUNIT",$J)) +"RTN","ut",411,0) + S %ut("RSLT")=$NA(^TMP("GUINEXT",$J)) K @%ut("RSLT") +"RTN","ut",412,0) + S %utRSLT=%ut("RSLT") +"RTN","ut",413,0) + S %utETRY=$P(%utLOC,U),%utROUT=$P(%utLOC,U,2),XTOLROU=$G(@XTVALUE@("LASTROU")) +"RTN","ut",414,0) + S %utGUI=1 +"RTN","ut",415,0) + S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 +"RTN","ut",416,0) + ; I %utROUT'=XTOLROU D I %utROUT="" S @%utRSLT@(1)="" K @XTVALUE Q ;140731 JLI - commented out "RTN","ut",417,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",418,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",419,0) + . I XTOLROU="",$D(@XTVALUE@("STARTUP")) D +"RTN","ut",420,0) + . . S %ut("LOC")=@XTVALUE@("STARTUP") +"RTN","ut",421,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",422,0) + . . D @(@XTVALUE@("STARTUP")) +"RTN","ut",423,0) + . . Q +"RTN","ut",424,0) + . S @XTVALUE@("LASTROU")=%utROUT I %utROUT'="",$T(@("SETUP^"_%utROUT))'="" D +"RTN","ut",425,0) + . . S %ut("LOC")="SETUP^"_%utROUT +"RTN","ut",426,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",427,0) + . . D @("SETUP^"_%utROUT) +"RTN","ut",428,0) + . . Q +"RTN","ut",429,0) + . I %utROUT="",$D(@XTVALUE@("SHUTDOWN")) D +"RTN","ut",430,0) + . . S %ut("LOC")=@XTVALUE@("SHUTDOWN") +"RTN","ut",431,0) + . . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",432,0) + . . D @(@XTVALUE@("SHUTDOWN")) +"RTN","ut",433,0) + . . Q +"RTN","ut",434,0) + . Q +"RTN","ut",435,0) + S %ut("LOC")=%utLOC +"RTN","ut",436,0) + S %ut("CHK")=0,%ut("CNT")=1,%utERR=0 +"RTN","ut",437,0) + D ; to limit range of error trap so we continue through other tests +"RTN","ut",438,0) + . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",439,0) + . D @%ut("LOC") +"RTN","ut",440,0) + . Q +"RTN","ut",441,0) + I $T(@("TEARDOWN^"_%utROUT))'="" D +"RTN","ut",442,0) + . S %ut("LOC")="TEARDOWN^"_%utROUT +"RTN","ut",443,0) + . N $ETRAP S $ETRAP="D ERROR^%ut" +"RTN","ut",444,0) + . D @("TEARDOWN^"_%utROUT) +"RTN","ut",445,0) + . Q +"RTN","ut",446,0) + S @%ut("RSLT")@(1)=%ut("CHK")_XTGUISEP_(%ut("CNT")-1-%utERR)_XTGUISEP_%utERR +"RTN","ut",447,0) + K ^TMP("%ut",$J,"UTVALS") +"RTN","ut",448,0) + Q +"RTN","ut",449,0) ; "RTN","ut1") -0^2^B205168514 +0^2^B226313375 "RTN","ut1",1,0) -%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;09/14/15 09:37 +%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;12/07/15 15:34 "RTN","ut1",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 15 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 2 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","ut1",4,0) ; Original routine authored by Joel L. Ivey as XTMUNIT1 while working for U.S. Department of Veterans Affairs 2003-2012 "RTN","ut1",5,0) @@ -1835,1109 +1706,1245 @@ GUINEXT(%utRSLT,%utLOC,XTGUISEP) ; Entry point for GUI execute next test - calle "RTN","ut1",18,0) ; "RTN","ut1",19,0) - ; Changes: + ; "RTN","ut1",20,0) - ; 130726 SMH - Moved test collection logic from %utUNIT to here (multiple places) +CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list. "RTN","ut1",21,0) - ; 131218 SMH - dependence on XLFSTR removed + ; %utROU - input - Name of routine to check for tags with @TEST attribute "RTN","ut1",22,0) - ; 131218 SMH - CHEKTEST refactored to use $TEXT instead of ^%ZOSF("LOAD") + ; %ut - input/output - passed by reference "RTN","ut1",23,0) - ; 131218 SMH - CATCHERR now nulls out $ZS if on GT.M + ; %utUETRY - input/output - passed by reference "RTN","ut1",24,0) ; "RTN","ut1",25,0) - ; ------- COMMENTS moved from %ut due to space requirements -"RTN","ut1",26,0) - ; -"RTN","ut1",27,0) - ; 100622 JLI - corrected typo in comments where %utINPT was listed as %utINP -"RTN","ut1",28,0) - ; 100622 JLI - removed a comment which indicated data could potentially be returned from the called routine -"RTN","ut1",29,0) - ; in the %utINPT array. -"RTN","ut1",30,0) - ; 100622 JLI - added code to handle STARTUP and SHUTDOWN from GUI app -"RTN","ut1",31,0) - ; 110719 JLI - modified separators in GUI handling from ^ to ~~^~~ -"RTN","ut1",32,0) - ; in the variable XTGUISEP if using a newer version of the -"RTN","ut1",33,0) - ; GUI app (otherwise, it is simply set to ^) since results -"RTN","ut1",34,0) - ; with a series of ^ embedded disturbed the output reported -"RTN","ut1",35,0) - ; 130726 SMH - Fixed SETUP and TEARDOWN so that they run before/after each -"RTN","ut1",36,0) - ; test rather than once. General refactoring. -"RTN","ut1",37,0) - ; 130726 SMH - SETUT initialized IO in case it's not there to $P. Inits vars -"RTN","ut1",38,0) - ; using DT^DICRW. -"RTN","ut1",39,0) - ; 131217 SMH - Change call in SETUP to S U="^" instead of DT^DICRW -"RTN","ut1",40,0) - ; 131218 SMH - Any checks to $ZE will also check $ZS for GT.M. -"RTN","ut1",41,0) - ; 131218 SMH - Remove calls to %ZISUTL to manage devices to prevent dependence on VISTA. -"RTN","ut1",42,0) - ; Use %utNIT("DEV","OLD") for old devices -"RTN","ut1",43,0) - ; 140109 SMH - Add parameter %utBREAK - Break upon error -"RTN","ut1",44,0) - ; 1402 SMH - Break will cause the break to happen even on failed tests. -"RTN","ut1",45,0) - ; 140401 SMH - Added Succeed entry point for take it into your hands tester. -"RTN","ut1",46,0) - ; 140401 SMH - Reformatted the output of M-Unit so that the test's name -"RTN","ut1",47,0) - ; will print BEFORE the execution of the test. This has been -"RTN","ut1",48,0) - ; really confusing for beginning users of M-Unit, so this was -"RTN","ut1",49,0) - ; necessary. -"RTN","ut1",50,0) - ; 140401 SMH - OK message gets printed at the end of --- as [OK]. -"RTN","ut1",51,0) - ; 140401 SMH - FAIL message now prints. Previously, OK failed to be printed. -"RTN","ut1",52,0) - ; Unfortunately, that's rather passive aggressive. Now it -"RTN","ut1",53,0) - ; explicitly says that a test failed. -"RTN","ut1",54,0) - ; 140503 SMH - Fixed IO issues all over the routine. Much simpler now. -"RTN","ut1",55,0) - ; 140731 JLI - Combined routine changes between JLI and SMH -"RTN","ut1",56,0) - ; Moved routines from %utNIT and %utNIT1 to %ut and %ut1 -"RTN","ut1",57,0) - ; Updated unit test routines (%utt1 to %utt6) -"RTN","ut1",58,0) - ; Created M-UNIT TEST GROUP file at 17.9001 based on the 17.9001 file -"RTN","ut1",59,0) - ; 141030 JLI - Removed tag TESTCOVR and code under it, not necessary -"RTN","ut1",60,0) - ; since %uttcovr can handle all of the calling needed -"RTN","ut1",61,0) - ; Added call to run routine %utt6 if run from the top, -"RTN","ut1",62,0) - ; since this will run the full range of unit tests -"RTN","ut1",63,0) - ; Modified STARTUP and SHUTDOWN commands to handle in -"RTN","ut1",64,0) - ; each routine where they are available, since only -"RTN","ut1",65,0) - ; running one STARTUP and SHUTDOWN (the first seen by -"RTN","ut1",66,0) - ; the program) restricted their use in suites of multiple -"RTN","ut1",67,0) - ; tests. -"RTN","ut1",68,0) - ; 150101 JLI - Added COV entry to %ut (in addition to current in %ut1) so it is easier -"RTN","ut1",69,0) - ; to remember how to use it. -"RTN","ut1",70,0) - ; 150621 JLI - Added a global location to pick up summary data for a unit test call, so -"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) -CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list. -"RTN","ut1",75,0) - ; %utROU - input - Name of routine to check for tags with @TEST attribute -"RTN","ut1",76,0) - ; %ut - input/output - passed by reference -"RTN","ut1",77,0) - ; %utUETRY - input/output - passed by reference -"RTN","ut1",78,0) - ; -"RTN","ut1",79,0) ; Test list collected in two ways: -"RTN","ut1",80,0) +"RTN","ut1",26,0) ; - @TEST on labellines -"RTN","ut1",81,0) +"RTN","ut1",27,0) ; - Offsets of XTENT +"RTN","ut1",28,0) + ; +"RTN","ut1",29,0) + S %ut("ENTN")=0 ; Number of test, sub to %utUETRY. +"RTN","ut1",30,0) + ; +"RTN","ut1",31,0) + ; This stanza and everything below is for collecting @TEST. +"RTN","ut1",32,0) + ; VEN/SMH - block refactored to use $TEXT instead of ^%ZOSF("LOAD") +"RTN","ut1",33,0) + N I,LIST +"RTN","ut1",34,0) + S I=$L($T(@(U_%utROU))) I I<0 Q "-1^Invalid Routine Name" +"RTN","ut1",35,0) + D NEWSTYLE(.LIST,%utROU) +"RTN","ut1",36,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",37,0) + ; +"RTN","ut1",38,0) + ; This Stanza is to collect XTENT offsets +"RTN","ut1",39,0) + N %utUI F %utUI=1:1 S %ut("ELIN")=$T(@("XTENT+"_%utUI_"^"_%utROU)) Q:$P(%ut("ELIN"),";",3)="" D +"RTN","ut1",40,0) + . S %ut("ENTN")=%ut("ENTN")+1,%utUETRY(%ut("ENTN"))=$P(%ut("ELIN"),";",3),%utUETRY(%ut("ENTN"),"NAME")=$P(%ut("ELIN"),";",4) +"RTN","ut1",41,0) + . Q +"RTN","ut1",42,0) + ; +"RTN","ut1",43,0) + QUIT +"RTN","ut1",44,0) + ; +"RTN","ut1",45,0) + ; VEN/SMH 26JUL2013 - Moved GETTREE here. +"RTN","ut1",46,0) +GETTREE(%utROU,%utULIST) ; +"RTN","ut1",47,0) + ; first get any other routines this one references for running subsequently +"RTN","ut1",48,0) + ; then any that they refer to as well +"RTN","ut1",49,0) + ; this builds a tree of all routines referred to by any routine including each only once +"RTN","ut1",50,0) + N %utUK,%utUI,%utUJ,%utURNAM,%utURLIN +"RTN","ut1",51,0) + F %utUK=1:1 Q:'$D(%utROU(%utUK)) D +"RTN","ut1",52,0) + . F %utUI=1:1 S %utURLIN=$T(@("XTROU+"_%utUI_"^"_%utROU(%utUK))) S %utURNAM=$P(%utURLIN,";",3) Q:%utURNAM="" D +"RTN","ut1",53,0) + . . F %utUJ=1:1:%utULIST I %utROU(%utUJ)=%utURNAM S %utURNAM="" Q +"RTN","ut1",54,0) + . . I %utURNAM'="",$T(@("+1^"_%utURNAM))="" W:'$D(XWBOS) "Referenced routine ",%utURNAM," not found.",! Q +"RTN","ut1",55,0) + . . S:%utURNAM'="" %utULIST=%utULIST+1,%utROU(%utULIST)=%utURNAM +"RTN","ut1",56,0) + QUIT +"RTN","ut1",57,0) + ; +"RTN","ut1",58,0) +NEWSTYLE(LIST,ROUNAME) ; JLI 140726 identify and return list of newstyle tags or entries for this routine +"RTN","ut1",59,0) + ; LIST - input, passed by reference - returns containing array with list of tags identified as tests +"RTN","ut1",60,0) + ; LIST indicates number of tags identified, LIST(n)=tag^test_info where tag is entry point for test +"RTN","ut1",61,0) + ; ROUNAME - input - routine name in which tests should be identified +"RTN","ut1",62,0) + ; +"RTN","ut1",63,0) + N I,VALUE,LINE +"RTN","ut1",64,0) + K LIST S LIST=0 +"RTN","ut1",65,0) + ; search routine by line for a tag and @TEST declaration +"RTN","ut1",66,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",67,0) + Q +"RTN","ut1",68,0) + ; +"RTN","ut1",69,0) +CHECKTAG(LINE) ; JLI 140726 check line to determine @test TAG +"RTN","ut1",70,0) + ; LINE - input - Line of code to be checked +"RTN","ut1",71,0) + ; returns null line if not @TEST line, otherwise TAG^NOTE +"RTN","ut1",72,0) + N TAG,NOTE,CHAR +"RTN","ut1",73,0) + I $E(LINE)=" " Q "" ; test entry must have a tag +"RTN","ut1",74,0) + I $$UP(LINE)'["@TEST" Q "" ; must have @TEST declaration +"RTN","ut1",75,0) + I $P($$UP(LINE),"@TEST")["(" Q "" ; can't have an argument +"RTN","ut1",76,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",77,0) + F Q:NOTE="" S CHAR=$E(NOTE),NOTE=$E(NOTE,2,$L(NOTE)) I " ;"'[CHAR Q ; +"RTN","ut1",78,0) + I $L(NOTE)'=0 Q "" ; @TEST must be first text on line +"RTN","ut1",79,0) + F Q:$E(LINE)'=" " S LINE=$E(LINE,2,$L(LINE)) ; remove leading spaces from test info +"RTN","ut1",80,0) + S TAG=TAG_U_LINE +"RTN","ut1",81,0) + Q TAG "RTN","ut1",82,0) ; "RTN","ut1",83,0) - S %ut("ENTN")=0 ; Number of test, sub to %utUETRY. -"RTN","ut1",84,0) - ; -"RTN","ut1",85,0) - ; This stanza and everything below is for collecting @TEST. -"RTN","ut1",86,0) - ; VEN/SMH - block refactored to use $TEXT instead of ^%ZOSF("LOAD") -"RTN","ut1",87,0) - N I,LIST -"RTN","ut1",88,0) - S I=$L($T(@(U_%utROU))) I I<0 Q "-1^Invalid Routine Name" -"RTN","ut1",89,0) - D NEWSTYLE(.LIST,%utROU) -"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) - ; This Stanza is to collect XTENT offsets -"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",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) - ; -"RTN","ut1",97,0) - QUIT -"RTN","ut1",98,0) - ; -"RTN","ut1",99,0) - ; VEN/SMH 26JUL2013 - Moved GETTREE here. -"RTN","ut1",100,0) -GETTREE(%utROU,%utULIST) ; -"RTN","ut1",101,0) - ; first get any other routines this one references for running subsequently -"RTN","ut1",102,0) - ; then any that they refer to as well -"RTN","ut1",103,0) - ; this builds a tree of all routines referred to by any routine including each only once -"RTN","ut1",104,0) - N %utUK,%utUI,%utUJ,%utURNAM,%utURLIN -"RTN","ut1",105,0) - F %utUK=1:1 Q:'$D(%utROU(%utUK)) D -"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",107,0) - . . F %utUJ=1:1:%utULIST I %utROU(%utUJ)=%utURNAM S %utURNAM="" Q -"RTN","ut1",108,0) - . . I %utURNAM'="",$T(@("+1^"_%utURNAM))="" W:'$D(XWBOS) "Referenced routine ",%utURNAM," not found.",! Q -"RTN","ut1",109,0) - . . S:%utURNAM'="" %utULIST=%utULIST+1,%utROU(%utULIST)=%utURNAM -"RTN","ut1",110,0) - QUIT -"RTN","ut1",111,0) - ; -"RTN","ut1",112,0) -NEWSTYLE(LIST,ROUNAME) ; JLI 140726 identify and return list of newstyle tags or entries for this routine -"RTN","ut1",113,0) - ; LIST - input, passed by reference - returns containing array with list of tags identified as tests -"RTN","ut1",114,0) - ; LIST indicates number of tags identified, LIST(n)=tag^test_info where tag is entry point for test -"RTN","ut1",115,0) - ; ROUNAME - input - routine name in which tests should be identified -"RTN","ut1",116,0) - ; -"RTN","ut1",117,0) - N I,VALUE,LINE -"RTN","ut1",118,0) - K LIST S LIST=0 -"RTN","ut1",119,0) - ; search routine by line for a tag and @TEST declaration -"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) - ; -"RTN","ut1",123,0) -CHECKTAG(LINE) ; JLI 140726 check line to determine @test TAG -"RTN","ut1",124,0) - ; LINE - input - Line of code to be checked -"RTN","ut1",125,0) - ; returns null line if not @TEST line, otherwise TAG^NOTE -"RTN","ut1",126,0) - N TAG,NOTE,CHAR -"RTN","ut1",127,0) - I $E(LINE)=" " Q "" ; test entry must have a tag -"RTN","ut1",128,0) - I $$UP(LINE)'["@TEST" Q "" ; must have @TEST declaration -"RTN","ut1",129,0) - I $P($$UP(LINE),"@TEST")["(" Q "" ; can't have an argument -"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",131,0) - F Q:NOTE="" S CHAR=$E(NOTE),NOTE=$E(NOTE,2,$L(NOTE)) I " ;"'[CHAR Q ; -"RTN","ut1",132,0) - I $L(NOTE)'=0 Q "" ; @TEST must be first text on line -"RTN","ut1",133,0) - F Q:$E(LINE)'=" " S LINE=$E(LINE,2,$L(LINE)) ; remove leading spaces from test info -"RTN","ut1",134,0) - S TAG=TAG_U_LINE -"RTN","ut1",135,0) - Q TAG -"RTN","ut1",136,0) - ; -"RTN","ut1",137,0) -CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values -"RTN","ut1",138,0) - ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END -"RTN","ut1",139,0) - ; ZEXCEPT: %ut - NEWED IN EN -"RTN","ut1",140,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",141,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) - S %ut("CHK")=$G(%ut("CHK"))+1 -"RTN","ut1",144,0) - I '$D(%utGUI) D -"RTN","ut1",145,0) - . D SETIO -"RTN","ut1",146,0) - . I 'XTSTVAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " D -"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) - . . Q -"RTN","ut1",150,0) - . I XTSTVAL W "." -"RTN","ut1",151,0) - . D RESETIO -"RTN","ut1",152,0) - . Q -"RTN","ut1",153,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) - ; -"RTN","ut1",156,0) -CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL -"RTN","ut1",157,0) - N FAILMSG -"RTN","ut1",158,0) - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",159,0) - ; ZEXCEPT: %ut -- NEWED IN EN -"RTN","ut1",160,0) - ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",161,0) - I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG("CHKEQ") Q -"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) - S %ut("CHK")=%ut("CHK")+1 -"RTN","ut1",165,0) - I XTEXPECT'=XTACTUAL S FAILMSG="<"_XTEXPECT_"> vs <"_XTACTUAL_"> - " -"RTN","ut1",166,0) - I '$D(%utGUI) D -"RTN","ut1",167,0) - . D SETIO -"RTN","ut1",168,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) - . . I $D(%ut("BREAK")) BREAK ; Break upon failure -"RTN","ut1",171,0) - . . Q -"RTN","ut1",172,0) - . E W "." -"RTN","ut1",173,0) - . D RESETIO -"RTN","ut1",174,0) - . Q -"RTN","ut1",175,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) - ; -"RTN","ut1",178,0) FAIL(XTERMSG) ; Entry point for generating a failure message -"RTN","ut1",179,0) +"RTN","ut1",84,0) ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",180,0) +"RTN","ut1",85,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",181,0) +"RTN","ut1",86,0) ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",182,0) +"RTN","ut1",87,0) I $G(XTERMSG)="" S XTERMSG="no failure message provided" -"RTN","ut1",183,0) +"RTN","ut1",88,0) S %ut("CHK")=%ut("CHK")+1 -"RTN","ut1",184,0) +"RTN","ut1",89,0) I '$D(%utGUI) D -"RTN","ut1",185,0) +"RTN","ut1",90,0) . D SETIO -"RTN","ut1",186,0) +"RTN","ut1",91,0) . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D -"RTN","ut1",187,0) +"RTN","ut1",92,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",188,0) +"RTN","ut1",93,0) . . I $D(%ut("BREAK")) BREAK ; Break upon failure -"RTN","ut1",189,0) +"RTN","ut1",94,0) . . Q -"RTN","ut1",190,0) +"RTN","ut1",95,0) . D RESETIO -"RTN","ut1",191,0) +"RTN","ut1",96,0) . Q -"RTN","ut1",192,0) +"RTN","ut1",97,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",193,0) +"RTN","ut1",98,0) Q -"RTN","ut1",194,0) +"RTN","ut1",99,0) ; -"RTN","ut1",195,0) +"RTN","ut1",100,0) NVLDARG(API) ; generate message for invalid arguments to test -"RTN","ut1",196,0) +"RTN","ut1",101,0) N XTERMSG -"RTN","ut1",197,0) +"RTN","ut1",102,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",198,0) +"RTN","ut1",103,0) ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END -"RTN","ut1",199,0) +"RTN","ut1",104,0) ; ZEXCEPT: XTGUISEP - newed in GUINEXT -"RTN","ut1",200,0) +"RTN","ut1",105,0) S XTERMSG="NO VALUES INPUT TO "_API_"^%ut - no evaluation possible" -"RTN","ut1",201,0) +"RTN","ut1",106,0) I '$D(%utGUI) D -"RTN","ut1",202,0) +"RTN","ut1",107,0) . D SETIO -"RTN","ut1",203,0) +"RTN","ut1",108,0) . W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W XTERMSG,! D -"RTN","ut1",204,0) +"RTN","ut1",109,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) +"RTN","ut1",110,0) . . Q -"RTN","ut1",206,0) +"RTN","ut1",111,0) . D RESETIO -"RTN","ut1",207,0) +"RTN","ut1",112,0) . Q -"RTN","ut1",208,0) +"RTN","ut1",113,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) +"RTN","ut1",114,0) Q -"RTN","ut1",210,0) +"RTN","ut1",115,0) ; -"RTN","ut1",211,0) +"RTN","ut1",116,0) SETIO ; Set M-Unit Device to write the results to... -"RTN","ut1",212,0) +"RTN","ut1",117,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",213,0) +"RTN","ut1",118,0) I $IO'=%ut("IO") S (IO(0),%ut("DEV","OLD"))=$IO USE %ut("IO") SET IO=$IO -"RTN","ut1",214,0) +"RTN","ut1",119,0) QUIT -"RTN","ut1",215,0) +"RTN","ut1",120,0) ; -"RTN","ut1",216,0) +"RTN","ut1",121,0) RESETIO ; Reset $IO back to the original device if we changed it. -"RTN","ut1",217,0) +"RTN","ut1",122,0) ; ZEXCEPT: %ut -- NEWED ON ENTRY -"RTN","ut1",218,0) +"RTN","ut1",123,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) +"RTN","ut1",124,0) QUIT -"RTN","ut1",220,0) +"RTN","ut1",125,0) ; -"RTN","ut1",221,0) +"RTN","ut1",126,0) ; VEN/SMH 17DEC2013 - Remove dependence on VISTA - Uppercase here instead of XLFSTR. -"RTN","ut1",222,0) +"RTN","ut1",127,0) UP(X) ; -"RTN","ut1",223,0) +"RTN","ut1",128,0) Q $TR(X,"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ") -"RTN","ut1",224,0) +"RTN","ut1",129,0) ; -"RTN","ut1",225,0) +"RTN","ut1",130,0) COV(NMSP,COVCODE,VERBOSITY) ; VEN/SMH - PUBLIC ENTRY POINT; Coverage calculations -"RTN","ut1",226,0) +"RTN","ut1",131,0) ; NMSP: Namespace of the routines to analyze. End with * to include all routines. -"RTN","ut1",227,0) +"RTN","ut1",132,0) ; Not using * will only include the routine with NMSP name. -"RTN","ut1",228,0) +"RTN","ut1",133,0) ; e.g. PSOM* will include all routines starting with PSOM -"RTN","ut1",229,0) +"RTN","ut1",134,0) ; PSOM will only include PSOM. -"RTN","ut1",230,0) +"RTN","ut1",135,0) ; COVCODE: Mumps code to run over which coverage will be calculated. Typically Unit Tests. -"RTN","ut1",231,0) +"RTN","ut1",136,0) ; VERBOSITY (optional): Scalar from -1 to 3. -"RTN","ut1",232,0) +"RTN","ut1",137,0) ; - -1 = Global output in ^TMP("%utCOVREPORT",$J) -"RTN","ut1",233,0) +"RTN","ut1",138,0) ; - 0 = Print only total coverage -"RTN","ut1",234,0) +"RTN","ut1",139,0) ; - 1 = Break down by routine -"RTN","ut1",235,0) +"RTN","ut1",140,0) ; - 2 = Break down by routine and tag -"RTN","ut1",236,0) +"RTN","ut1",141,0) ; - 3 = Break down by routine and tag, and print lines that didn't execute for each tag. +"RTN","ut1",142,0) + ; +"RTN","ut1",143,0) + ; ZEXCEPT: %utcovxx - SET and KILLED in this code at top level +"RTN","ut1",144,0) + ; ZEXCEPT: %Monitor,%apiOBJ,DecomposeStatus,LineByLine,Start,Stop,System,class - not variables parts of classes +"RTN","ut1",145,0) + N COVER,COVERSAV,I,NMSP1,RTN,RTNS,ERR,STATUS +"RTN","ut1",146,0) + I (+$SY=47) D ; GT.M only! +"RTN","ut1",147,0) + . N %ZR ; GT.M specific +"RTN","ut1",148,0) + . D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R(RTN)). +"RTN","ut1",149,0) + . N RN S RN="" +"RTN","ut1",150,0) + . W !,"Loading routines to test coverage...",! +"RTN","ut1",151,0) + . F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D +"RTN","ut1",152,0) + . . N L2 S L2=$T(+2^@RN) +"RTN","ut1",153,0) + . . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out +"RTN","ut1",154,0) + . . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine +"RTN","ut1",155,0) + . ; +"RTN","ut1",156,0) + . M RTNS=%ZR +"RTN","ut1",157,0) + . K %ZR +"RTN","ut1",158,0) + . Q +"RTN","ut1",159,0) + ; +"RTN","ut1",160,0) + I (+$SY=0) D ; CACHE SPECIFIC +"RTN","ut1",161,0) + . S NMSP1=NMSP I NMSP["*" S NMSP1=$P(NMSP,"*") +"RTN","ut1",162,0) + . I $D(^$R(NMSP1)) S RTNS(NMSP1)="" +"RTN","ut1",163,0) + . I NMSP["*" S RTN=NMSP1 F S RTN=$O(^$R(RTN)) Q:RTN'[NMSP1 S RTNS(RTN)="" +"RTN","ut1",164,0) + . Q +"RTN","ut1",165,0) + ; +"RTN","ut1",166,0) + ; ZEXCEPT: CTRAP - not really a variable +"RTN","ut1",167,0) + S VERBOSITY=+$G(VERBOSITY) ; Get 0 if not passed. +"RTN","ut1",168,0) + ; +"RTN","ut1",169,0) + ; +"RTN","ut1",170,0) + N GL +"RTN","ut1",171,0) + S GL=$NA(^TMP("%utCOVCOHORT",$J)) +"RTN","ut1",172,0) + I '$D(^TMP("%utcovrunning",$J)) K @GL +"RTN","ut1",173,0) + D RTNANAL(.RTNS,GL) ; save off any current coverage data +"RTN","ut1",174,0) + I '$D(^TMP("%utcovrunning",$J)) N EXIT S EXIT=0 D Q:EXIT +"RTN","ut1",175,0) + . K ^TMP("%utCOVCOHORTSAV",$J) +"RTN","ut1",176,0) + . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) +"RTN","ut1",177,0) + . K ^TMP("%utCOVRESULT",$J) +"RTN","ut1",178,0) + . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 +"RTN","ut1",179,0) + . ; +"RTN","ut1",180,0) + . I (+$SY=47) VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M START PROFILING +"RTN","ut1",181,0) + . ; +"RTN","ut1",182,0) + . I (+$SY=0) D ; CACHE CODE TO START PROFILING +"RTN","ut1",183,0) + . . S STATUS=##class(%Monitor.System.LineByLine).Start($lb(NMSP),$lb("RtnLine"),$lb($j)) +"RTN","ut1",184,0) + . . I +STATUS'=1 D DecomposeStatus^%apiOBJ(STATUS,.ERR,"-d") F I=1:1:ERR W ERR(I),! +"RTN","ut1",185,0) + . . I +STATUS'=1 K ERR S EXIT=1 +"RTN","ut1",186,0) + . . Q +"RTN","ut1",187,0) + . Q +"RTN","ut1",188,0) + DO ; Run the code, but keep our variables to ourselves. +"RTN","ut1",189,0) + . NEW $ETRAP,$ESTACK +"RTN","ut1",190,0) + . I (+$SY=47) D ; GT.M SPECIFIC +"RTN","ut1",191,0) + . . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" +"RTN","ut1",192,0) + . . USE $PRINCIPAL:(CTRAP=$C(3)) +"RTN","ut1",193,0) + . . Q +"RTN","ut1",194,0) + . NEW (DUZ,IO,COVCODE,U,DILOCKTM,DISYS,DT,DTIME,IOBS,IOF,IOM,ION,IOS,IOSL,IOST,IOT,IOXY) +"RTN","ut1",195,0) + . XECUTE COVCODE +"RTN","ut1",196,0) + . Q +"RTN","ut1",197,0) + ; GT.M STOP PROFILING if this is the original level that started it +"RTN","ut1",198,0) + I $D(^TMP("%utcovrunning",$J)),$D(%utcovxx) D +"RTN","ut1",199,0) + . I (+$SY=47) VIEW "TRACE":0:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M SPECIFIC +"RTN","ut1",200,0) + . I (+$SY=0) ; CACHE SPECIFIC +"RTN","ut1",201,0) + . K %utcovxx,^TMP("%utcovrunning",$J) +"RTN","ut1",202,0) + . Q +"RTN","ut1",203,0) + ; +"RTN","ut1",204,0) + I '$D(^TMP("%utcovrunning",$J)) D +"RTN","ut1",205,0) + . I (+$SY=0) D ; CACHE SPECIFIC CODE +"RTN","ut1",206,0) + . . S COVERSAV=$NA(^TMP("%utCOVCOHORTSAV",$J)) K @COVERSAV +"RTN","ut1",207,0) + . . S COVER=$NA(^TMP("%utCOVCOHORT",$J)) K @COVER +"RTN","ut1",208,0) + . . D CACHECOV(COVERSAV,COVER) +"RTN","ut1",209,0) + . . D TOTAGS(COVERSAV,0),TOTAGS(COVER,1) +"RTN","ut1",210,0) + . . D ##class(%Monitor.System.LineByLine).Stop() +"RTN","ut1",211,0) + . . Q +"RTN","ut1",212,0) + . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J))) ; Venn diagram matching between globals +"RTN","ut1",213,0) + . ; Report +"RTN","ut1",214,0) + . I VERBOSITY=-1 D +"RTN","ut1",215,0) + . . K ^TMP("%utCOVREPORT",$J) +"RTN","ut1",216,0) + . . D COVRPTGL($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),$NA(^TMP("%utCOVREPORT",$J))) +"RTN","ut1",217,0) + . . Q +"RTN","ut1",218,0) + . E D COVRPT($NA(^TMP("%utCOVCOHORTSAV",$J)),$NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J)),VERBOSITY) +"RTN","ut1",219,0) + . Q +"RTN","ut1",220,0) + QUIT +"RTN","ut1",221,0) + ; +"RTN","ut1",222,0) +CACHECOV(GLOBSAV,GLOB) ; +"RTN","ut1",223,0) + ; ZEXCEPT: %Monitor,GetMetrics,GetRoutineCount,GetRoutineName,LineByLine,System,class - not variable names, part of classes +"RTN","ut1",224,0) + N DIF,I,METRIC,METRICNT,METRICS,MTRICNUM,ROUNAME,ROUNUM,X,XCNP,XXX +"RTN","ut1",225,0) + I $$ISUTEST(),'$D(^TMP("%utt4val",$J)) S ROUNUM=1,METRICS="RtnLine",METRICNT=1,ROUNAME="%ut" +"RTN","ut1",226,0) + I $D(^TMP("%utt4val",$J))!'$$ISUTEST() S ROUNUM=##class(%Monitor.System.LineByLine).GetRoutineCount(),METRICS=##class(%Monitor.System.LineByLine).GetMetrics(),METRICNT=$l(METRICS,",") +"RTN","ut1",227,0) + ; if only running to do coverage, should be 1 +"RTN","ut1",228,0) + S MTRICNUM=0 F I=1:1:METRICNT S METRIC=$P(METRICS,",",I) I METRIC="RtnLine" S MTRICNUM=I Q +"RTN","ut1",229,0) + ; +"RTN","ut1",230,0) + F I=1:1:ROUNUM D +"RTN","ut1",231,0) + . I $D(^TMP("%utt4val",$J))!'$$ISUTEST() S ROUNAME=##class(%Monitor.System.LineByLine).GetRoutineName(I) +"RTN","ut1",232,0) + . ; get routine loaded into location +"RTN","ut1",233,0) + . S DIF=$NA(@GLOBSAV@(ROUNAME)),DIF=$E(DIF,1,$L(DIF)-1)_",",XCNP=0,X=ROUNAME +"RTN","ut1",234,0) + . X ^%ZOSF("LOAD") +"RTN","ut1",235,0) + . M @GLOB@(ROUNAME)=@GLOBSAV@(ROUNAME) +"RTN","ut1",236,0) + . Q "RTN","ut1",237,0) ; "RTN","ut1",238,0) - ; ZEXCEPT: %utcovxx - SET and KILLED in this code at top level + I $D(^TMP("%utt4val",$J))!'$$ISUTEST() F XXX=1:1:ROUNUM D GETVALS(XXX,GLOB,MTRICNUM) "RTN","ut1",239,0) - Q:'(+$SY=47) ; GT.M only! + Q "RTN","ut1",240,0) ; "RTN","ut1",241,0) - ; ZEXCEPT: CTRAP - not really a variable +GETVALS(ROUNUM,GLOB,MTRICNUM) ; get data on number of times a line seen (set into VAL) "RTN","ut1",242,0) - S VERBOSITY=+$G(VERBOSITY) ; Get 0 if not passed. + ; ZEXCEPT: %Monitor,%New,%ResultSet,Execute,GetData,GetRoutineName,LineByLine,Next,System,class - not variables parts of Cache classes "RTN","ut1",243,0) - N %ZR ; GT.M specific + N LINE,MORE,ROUNAME,RSET,VAL,X "RTN","ut1",244,0) - D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R(RTN)). + ; "RTN","ut1",245,0) - ; + S RSET=##class(%ResultSet).%New("%Monitor.System.LineByLine:Result") "RTN","ut1",246,0) - N RN S RN="" + S ROUNAME=##class(%Monitor.System.LineByLine).GetRoutineName(ROUNUM) "RTN","ut1",247,0) - W !,"Loading routines to test coverage...",! + S LINE=RSET.Execute(ROUNAME) "RTN","ut1",248,0) - F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D + F LINE=1:1 S MORE=RSET.Next() Q:'MORE D "RTN","ut1",249,0) - . N L2 S L2=$T(+2^@RN) + . S X=RSET.GetData(1) "RTN","ut1",250,0) - . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out + . S VAL=$LI(X,MTRICNUM) "RTN","ut1",251,0) - . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine + . S @GLOB@(ROUNAME,LINE,"C")=+VAL ; values are 0 if not seen, otherwises positive number "RTN","ut1",252,0) - ; + . Q "RTN","ut1",253,0) - N RTNS M RTNS=%ZR + D RSET.Close() "RTN","ut1",254,0) - K %ZR + Q "RTN","ut1",255,0) ; "RTN","ut1",256,0) - N GL +TOTAGS(GLOBAL,ACTIVE) ; convert to lines from tags and set value only if not seen "RTN","ut1",257,0) - S GL=$NA(^TMP("%utCOVCOHORT",$J)) + N ACTIVCOD,LINE,LINENUM,ROU,ROUCODE "RTN","ut1",258,0) - I '$D(^TMP("%utcovrunning",$J)) K @GL + S ROU="" F S ROU=$O(@GLOBAL@(ROU)) Q:ROU="" D "RTN","ut1",259,0) - D RTNANAL(.RTNS,GL) + . M ROUCODE(ROU)=@GLOBAL@(ROU) K @GLOBAL@(ROU) "RTN","ut1",260,0) - I '$D(^TMP("%utcovrunning",$J)) D + . N TAG,OFFSET,OLDTAG S TAG="",OFFSET=0,OLDTAG="" "RTN","ut1",261,0) - . K ^TMP("%utCOVCOHORTSAV",$J) + . F LINENUM=1:1 Q:'$D(ROUCODE(ROU,LINENUM,0)) D "RTN","ut1",262,0) - . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) + . . S LINE=ROUCODE(ROU,LINENUM,0) "RTN","ut1",263,0) - . K ^TMP("%utCOVRESULT",$J) + . . S ACTIVCOD=$$LINEDATA(LINE,.TAG,.OFFSET) "RTN","ut1",264,0) - . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 + . . I TAG'=OLDTAG S @GLOBAL@(ROU,TAG)=TAG "RTN","ut1",265,0) - . VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M START PROFILING + . . I ACTIVE,ACTIVCOD,(+$G(ROUCODE(ROU,LINENUM,"C"))'>0) S @GLOBAL@(ROU,TAG,OFFSET)=LINE "RTN","ut1",266,0) - . Q + . . I 'ACTIVE,ACTIVCOD S @GLOBAL@(ROU,TAG,OFFSET)=LINE "RTN","ut1",267,0) - DO ; Run the code, but keep our variables to ourselves. + . . Q "RTN","ut1",268,0) - . NEW $ETRAP,$ESTACK + . Q "RTN","ut1",269,0) - . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" -"RTN","ut1",270,0) - . USE $PRINCIPAL:(CTRAP=$C(3)) -"RTN","ut1",271,0) - . NEW (DUZ,IO,COVCODE,U,DILOCKTM,DISYS,DT,DTIME,IOBS,IOF,IOM,ION,IOS,IOSL,IOST,IOT,IOXY) -"RTN","ut1",272,0) - . XECUTE COVCODE -"RTN","ut1",273,0) - . Q -"RTN","ut1",274,0) - ; GT.M STOP PROFILING if this is the original level that started it -"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) - I '$D(^TMP("%utcovrunning",$J)) D -"RTN","ut1",278,0) - . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J))) ; Venn diagram matching between globals -"RTN","ut1",279,0) - . ; Report -"RTN","ut1",280,0) - . I VERBOSITY=-1 D -"RTN","ut1",281,0) - . . K ^TMP("%utCOVREPORT",$J) -"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) - . 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) - QUIT -"RTN","ut1",287,0) - ; -"RTN","ut1",288,0) -RTNANAL(RTNS,GL) ; [Private] - Routine Analysis -"RTN","ut1",289,0) - ; Create a global similar to the trace global produced by GT.M in GL -"RTN","ut1",290,0) - ; Only non-comment lines are stored. -"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",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) - F S RTN=$O(RTNS(RTN)) Q:RTN="" D ; for each routine -"RTN","ut1",296,0) - . N TAG -"RTN","ut1",297,0) - . S TAG=RTN ; start the tags at the first -"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",299,0) - . . I $E(LN)?1A D QUIT ; formal line -"RTN","ut1",300,0) - . . . N T ; Terminator -"RTN","ut1",301,0) - . . . N J F J=1:1:$L(LN) S T=$E(LN,J) Q:T'?1AN ; Loop to... -"RTN","ut1",302,0) - . . . S TAG=$E(LN,1,J-1) ; Get tag -"RTN","ut1",303,0) - . . . S @GL@(RTN,TAG)=TAG ; store line -"RTN","ut1",304,0) - . . . ;I T="(" S @GL@(RTN,TAG,0)=LN ; formal list -"RTN","ut1",305,0) - . . . I T="(" D ; formal list -"RTN","ut1",306,0) - . . . . N PCNT,STR,CHR S PCNT=0,STR=$E(LN,J+1,$L(LN)) -"RTN","ut1",307,0) - . . . . F S CHR=$E(STR),STR=$E(STR,2,$L(STR)) Q:(PCNT=0)&(CHR=")") D -"RTN","ut1",308,0) - . . . . . I CHR="(" S PCNT=PCNT+1 -"RTN","ut1",309,0) - . . . . . I CHR=")" S PCNT=PCNT-1 -"RTN","ut1",310,0) - . . . . . Q -"RTN","ut1",311,0) - . . . . S STR=$TR(STR,$C(9,32)) -"RTN","ut1",312,0) - . . . . I $E(STR)=";" QUIT -"RTN","ut1",313,0) - . . . . S @GL@(RTN,TAG,0)=LN -"RTN","ut1",314,0) - . . . . Q -"RTN","ut1",315,0) - . . . E D ; No formal list -"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",317,0) - . . . . I $E(LNTR)=";" QUIT ; Comment -"RTN","ut1",318,0) - . . . . S @GL@(RTN,TAG,0)=LN ; Otherwise, store for testing -"RTN","ut1",319,0) - . . . S I=0 ; Start offsets from zero (first one at the for will be 1) -"RTN","ut1",320,0) - . . I $C(32,9)[$E(LN) D QUIT ; Regular line -"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",322,0) - . . . I $E(LNTR)=";" QUIT ; Comment line -- don't want. -"RTN","ut1",323,0) - . . . S @GL@(RTN,TAG,I)=LN ; Record line -"RTN","ut1",324,0) - QUIT -"RTN","ut1",325,0) - ; -"RTN","ut1",326,0) -ACTLINES(GL) ; [Private] $$ ; Count active lines -"RTN","ut1",327,0) - ; -"RTN","ut1",328,0) - N CNT S CNT=0 -"RTN","ut1",329,0) - N REF S REF=GL -"RTN","ut1",330,0) - N GLQL S GLQL=$QL(GL) -"RTN","ut1",331,0) - F S REF=$Q(@REF) Q:REF="" Q:(GL'=$NA(@REF,GLQL)) D -"RTN","ut1",332,0) - . N REFQL S REFQL=$QL(REF) -"RTN","ut1",333,0) - . N LASTSUB S LASTSUB=$QS(REF,REFQL) -"RTN","ut1",334,0) - . I LASTSUB?1.N S CNT=CNT+1 -"RTN","ut1",335,0) - QUIT CNT -"RTN","ut1",336,0) - ; -"RTN","ut1",337,0) -COVCOV(C,R) ; [Private] - Analyze coverage Cohort vs Result -"RTN","ut1",338,0) - N RTN S RTN="" -"RTN","ut1",339,0) - F S RTN=$O(@C@(RTN)) Q:RTN="" D ; For each routine in cohort set -"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) - . 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) - . . 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",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) - ; -"RTN","ut1",348,0) -COVRPT(C,S,R,V) ; [Private] - Coverage Report -"RTN","ut1",349,0) - ; C = COHORT - Global name -"RTN","ut1",350,0) - ; S = SURVIVORS - Global name -"RTN","ut1",351,0) - ; R = RESULT - Global name -"RTN","ut1",352,0) - ; V = Verbosity - Scalar from -1 to 3 -"RTN","ut1",353,0) - ; JLI 150702 - modified to be able to do unit tests on setting up the text via COVRPTLS -"RTN","ut1",354,0) - N X,I -"RTN","ut1",355,0) - S X=$NA(^TMP("%ut1-covrpt",$J)) K @X -"RTN","ut1",356,0) - D COVRPTLS(C,S,R,V,X) -"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",358,0) Q -"RTN","ut1",359,0) +"RTN","ut1",270,0) ; -"RTN","ut1",360,0) -COVRPTLS(C,S,R,V,X) ; -"RTN","ut1",361,0) +"RTN","ut1",271,0) +LINEDATA(LINE,TAG,OFFSET) ; +"RTN","ut1",272,0) + ; LINE - input - the line of code +"RTN","ut1",273,0) + ; TAG - passed by reference - +"RTN","ut1",274,0) + ; OFFSET - passed by reference +"RTN","ut1",275,0) + N CODE,NEWTAG +"RTN","ut1",276,0) + S NEWTAG="" +"RTN","ut1",277,0) + S OFFSET=$G(OFFSET)+1 +"RTN","ut1",278,0) + F Q:$E(LINE,1)=" " Q:$E(LINE,1)=$C(9) Q:LINE="" S NEWTAG=NEWTAG_$E(LINE,1),LINE=$E(LINE,2,$L(LINE)) +"RTN","ut1",279,0) + S NEWTAG=$P(NEWTAG,"(") +"RTN","ut1",280,0) + I NEWTAG'="" S TAG=NEWTAG,OFFSET=0 +"RTN","ut1",281,0) + S CODE=1 +"RTN","ut1",282,0) + F S:(LINE="")!($E(LINE)=";") CODE=0 Q:'CODE Q:(" ."'[$E(LINE)) S LINE=$E(LINE,2,$L(LINE)) +"RTN","ut1",283,0) + Q CODE +"RTN","ut1",284,0) ; -"RTN","ut1",362,0) - N LINNUM S LINNUM=0 -"RTN","ut1",363,0) - N ORIGLINES S ORIGLINES=$$ACTLINES(C) -"RTN","ut1",364,0) - N LEFTLINES S LEFTLINES=$$ACTLINES(S) -"RTN","ut1",365,0) - ;W !! -"RTN","ut1",366,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",367,0) - ;W "ORIG: "_ORIGLINES,! -"RTN","ut1",368,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="ORIG: "_ORIGLINES -"RTN","ut1",369,0) - ;W "LEFT: "_LEFTLINES,! -"RTN","ut1",370,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="LEFT: "_LEFTLINES -"RTN","ut1",371,0) - ;W "COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00),! -"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",373,0) - ;W !! -"RTN","ut1",374,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" -"RTN","ut1",375,0) - ;W "BY ROUTINE:",! -"RTN","ut1",376,0) - S LINNUM=LINNUM+1,@X@(LINNUM)="BY ROUTINE:" -"RTN","ut1",377,0) - I V=0 QUIT ; No verbosity. Don't print routine detail -"RTN","ut1",378,0) +"RTN","ut1",285,0) +RTNANAL(RTNS,GL) ; [Private] - Routine Analysis +"RTN","ut1",286,0) + ; Create a global similar to the trace global produced by GT.M in GL +"RTN","ut1",287,0) + ; Only non-comment lines are stored. +"RTN","ut1",288,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",289,0) + ; tags by themselves don't count toward the total. +"RTN","ut1",290,0) + ; +"RTN","ut1",291,0) N RTN S RTN="" -"RTN","ut1",379,0) - F S RTN=$O(@C@(RTN)) Q:RTN="" D -"RTN","ut1",380,0) - . N O S O=$$ACTLINES($NA(@C@(RTN))) -"RTN","ut1",381,0) - . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",382,0) - . ;W ?3,RTN,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",383,0) - . N XX S XX=" "_RTN_" ",XX=$E(XX,1,20) -"RTN","ut1",384,0) - . S LINNUM=LINNUM+1,@X@(LINNUM)=XX+$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",385,0) - . I V=1 QUIT ; Just print the routine coverage for V=1 -"RTN","ut1",386,0) +"RTN","ut1",292,0) + F S RTN=$O(RTNS(RTN)) Q:RTN="" D ; for each routine +"RTN","ut1",293,0) + . N TAG +"RTN","ut1",294,0) + . S TAG=RTN ; start the tags at the first +"RTN","ut1",295,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",296,0) + . . I $E(LN)?1A D QUIT ; formal line +"RTN","ut1",297,0) + . . . N T ; Terminator +"RTN","ut1",298,0) + . . . N J F J=1:1:$L(LN) S T=$E(LN,J) Q:T'?1AN ; Loop to... +"RTN","ut1",299,0) + . . . S TAG=$E(LN,1,J-1) ; Get tag +"RTN","ut1",300,0) + . . . S @GL@(RTN,TAG)=TAG ; store line +"RTN","ut1",301,0) + . . . ;I T="(" S @GL@(RTN,TAG,0)=LN ; formal list +"RTN","ut1",302,0) + . . . I T="(" D ; formal list +"RTN","ut1",303,0) + . . . . N PCNT,STR,CHR S PCNT=0,STR=$E(LN,J+1,$L(LN)) +"RTN","ut1",304,0) + . . . . F S CHR=$E(STR),STR=$E(STR,2,$L(STR)) Q:(PCNT=0)&(CHR=")") D +"RTN","ut1",305,0) + . . . . . I CHR="(" S PCNT=PCNT+1 +"RTN","ut1",306,0) + . . . . . I CHR=")" S PCNT=PCNT-1 +"RTN","ut1",307,0) + . . . . . Q +"RTN","ut1",308,0) + . . . . S STR=$TR(STR,$C(9,32)) +"RTN","ut1",309,0) + . . . . I $E(STR)=";" QUIT +"RTN","ut1",310,0) + . . . . S @GL@(RTN,TAG,0)=LN +"RTN","ut1",311,0) + . . . . Q +"RTN","ut1",312,0) + . . . E D ; No formal list +"RTN","ut1",313,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",314,0) + . . . . I $E(LNTR)=";" QUIT ; Comment +"RTN","ut1",315,0) + . . . . S @GL@(RTN,TAG,0)=LN ; Otherwise, store for testing +"RTN","ut1",316,0) + . . . S I=0 ; Start offsets from zero (first one at the for will be 1) +"RTN","ut1",317,0) + . . I $C(32,9)[$E(LN) D QUIT ; Regular line +"RTN","ut1",318,0) + . . . N LNTR S LNTR=$TR(LN,$C(32,9,46)) ; Remove all spaces and tabs - JLI 150202 remove periods as well +"RTN","ut1",319,0) + . . . I $E(LNTR)=";" QUIT ; Comment line -- don't want. +"RTN","ut1",320,0) + . . . S @GL@(RTN,TAG,I)=LN ; Record line +"RTN","ut1",321,0) + QUIT +"RTN","ut1",322,0) + ; +"RTN","ut1",323,0) +ACTLINES(GL) ; [Private] $$ ; Count active lines +"RTN","ut1",324,0) + ; +"RTN","ut1",325,0) + N CNT S CNT=0 +"RTN","ut1",326,0) + N REF S REF=GL +"RTN","ut1",327,0) + N GLQL S GLQL=$QL(GL) +"RTN","ut1",328,0) + F S REF=$Q(@REF) Q:REF="" Q:(GL'=$NA(@REF,GLQL)) D +"RTN","ut1",329,0) + . N REFQL S REFQL=$QL(REF) +"RTN","ut1",330,0) + . N LASTSUB S LASTSUB=$QS(REF,REFQL) +"RTN","ut1",331,0) + . I LASTSUB?1.N S CNT=CNT+1 +"RTN","ut1",332,0) + QUIT CNT +"RTN","ut1",333,0) + ; +"RTN","ut1",334,0) +COVCOV(C,R) ; [Private] - Analyze coverage Cohort vs Result +"RTN","ut1",335,0) + N RTN S RTN="" +"RTN","ut1",336,0) + F S RTN=$O(@C@(RTN)) Q:RTN="" D ; For each routine in cohort set +"RTN","ut1",337,0) + . I '$D(@R@(RTN)) QUIT ; Not present in result set +"RTN","ut1",338,0) . N TAG S TAG="" -"RTN","ut1",387,0) - . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D -"RTN","ut1",388,0) - . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) -"RTN","ut1",389,0) - . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",390,0) - . . ;W ?5,TAG,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! -"RTN","ut1",391,0) - . . S XX=" "_TAG_" ",XX=$E(XX,1,20) -"RTN","ut1",392,0) - . . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_$S(O:$J(O-L/O*100,"",2),1:"100.00") -"RTN","ut1",393,0) - . . I V=2 QUIT ; Just print routine/tags coverage for V=2; V=3 print uncovered lines -"RTN","ut1",394,0) +"RTN","ut1",339,0) + . F S TAG=$O(@R@(RTN,TAG)) Q:TAG="" D ; For each tag in the routine in the result set +"RTN","ut1",340,0) . . N LN S LN="" -"RTN","ut1",395,0) - . . ;F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" W TAG_"+"_LN_": "_^(LN),! -"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",397,0) - . . Q -"RTN","ut1",398,0) - . Q -"RTN","ut1",399,0) +"RTN","ut1",341,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",342,0) + . . . I $D(@C@(RTN,TAG,LN)) K ^(LN) ; if present in cohort, kill off +"RTN","ut1",343,0) QUIT -"RTN","ut1",400,0) +"RTN","ut1",344,0) ; -"RTN","ut1",401,0) -COVRPTGL(C,S,R,OUT) ; [Private] - Coverage Global for silent invokers -"RTN","ut1",402,0) +"RTN","ut1",345,0) +COVRPT(C,S,R,V) ; [Private] - Coverage Report +"RTN","ut1",346,0) ; C = COHORT - Global name -"RTN","ut1",403,0) +"RTN","ut1",347,0) ; S = SURVIVORS - Global name -"RTN","ut1",404,0) +"RTN","ut1",348,0) ; R = RESULT - Global name -"RTN","ut1",405,0) - ; OUT = OUTPUT - Global name -"RTN","ut1",406,0) +"RTN","ut1",349,0) + ; V = Verbosity - Scalar from -1 to 3 +"RTN","ut1",350,0) + ; JLI 150702 - modified to be able to do unit tests on setting up the text via COVRPTLS +"RTN","ut1",351,0) + N X,I +"RTN","ut1",352,0) + S X=$NA(^TMP("%ut1-covrpt",$J)) K @X +"RTN","ut1",353,0) + D COVRPTLS(C,S,R,V,X) +"RTN","ut1",354,0) + I '$$ISUTEST^%ut() F I=1:1 W:$D(@X@(I)) !,@X@(I) I '$D(@X@(I)) K @X Q +"RTN","ut1",355,0) + Q +"RTN","ut1",356,0) ; -"RTN","ut1",407,0) - N O S O=$$ACTLINES(C) -"RTN","ut1",408,0) - N L S L=$$ACTLINES(S) -"RTN","ut1",409,0) - S @OUT=(O-L)_"/"_O -"RTN","ut1",410,0) - N RTN,TAG,LN S (RTN,TAG,LN)="" -"RTN","ut1",411,0) +"RTN","ut1",357,0) +COVRPTLS(C,S,R,V,X) ; +"RTN","ut1",358,0) + ; +"RTN","ut1",359,0) + N LINNUM S LINNUM=0 +"RTN","ut1",360,0) + N ORIGLINES S ORIGLINES=$$ACTLINES(C) +"RTN","ut1",361,0) + N LEFTLINES S LEFTLINES=$$ACTLINES(S) +"RTN","ut1",362,0) + ;W !! +"RTN","ut1",363,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" +"RTN","ut1",364,0) + ;W "ORIG: "_ORIGLINES,! +"RTN","ut1",365,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="ORIG: "_ORIGLINES +"RTN","ut1",366,0) + ;W "LEFT: "_LEFTLINES,! +"RTN","ut1",367,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="LEFT: "_LEFTLINES +"RTN","ut1",368,0) + ;W "COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00),! +"RTN","ut1",369,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J((ORIGLINES-LEFTLINES)/ORIGLINES*100,"",2),1:100.00) +"RTN","ut1",370,0) + ;W !! +"RTN","ut1",371,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" +"RTN","ut1",372,0) + ;W "BY ROUTINE:",! +"RTN","ut1",373,0) + S LINNUM=LINNUM+1,@X@(LINNUM)="BY ROUTINE:" +"RTN","ut1",374,0) + I V=0 QUIT ; No verbosity. Don't print routine detail +"RTN","ut1",375,0) + N RTN S RTN="" +"RTN","ut1",376,0) F S RTN=$O(@C@(RTN)) Q:RTN="" D -"RTN","ut1",412,0) +"RTN","ut1",377,0) . N O S O=$$ACTLINES($NA(@C@(RTN))) -"RTN","ut1",413,0) +"RTN","ut1",378,0) . N L S L=$$ACTLINES($NA(@S@(RTN))) -"RTN","ut1",414,0) - . S @OUT@(RTN)=(O-L)_"/"_O -"RTN","ut1",415,0) +"RTN","ut1",379,0) + . ;W ?3,RTN,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! +"RTN","ut1",380,0) + . N XX,XY S XX=" "_RTN_" ",XX=$E(XX,1,12) +"RTN","ut1",381,0) + . S XY=" "_$S(O:$J((O-L)/O*100,"",2)_"%",1:"------"),XY=$E(XY,$L(XY)-11,$L(XY)) +"RTN","ut1",382,0) + . ;S LINNUM=LINNUM+1,@X@(LINNUM)=XX_$S(O:$J((O-L)/O*100,"",2)_"%",1:"------")_" "_(O-L)_" out of "_O +"RTN","ut1",383,0) + . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_XY_" "_(O-L)_" out of "_O +"RTN","ut1",384,0) + . I V=1 QUIT ; Just print the routine coverage for V=1 +"RTN","ut1",385,0) + . N TAG S TAG="" +"RTN","ut1",386,0) . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D -"RTN","ut1",416,0) +"RTN","ut1",387,0) . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) -"RTN","ut1",417,0) +"RTN","ut1",388,0) . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) -"RTN","ut1",418,0) - . . S @OUT@(RTN,TAG)=(O-L)_"/"_O -"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",420,0) +"RTN","ut1",389,0) + . . ;W ?5,TAG,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! +"RTN","ut1",390,0) + . . S XX=" "_TAG_" ",XX=$E(XX,1,20) +"RTN","ut1",391,0) + . . ;S XY=" ("_(O-L)_"/"_O_")",XY=$E(XY,$L(XY)-11,$L(XY)),XX=XX_XY +"RTN","ut1",392,0) + . . S XY=" "_$S(O:$J((O-L)/O*100,"",2)_"%",1:"------"),XY=$E(XY,$L(XY)-7,$L(XY)) +"RTN","ut1",393,0) + . . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_XY_" "_(O-L)_" out of "_O +"RTN","ut1",394,0) + . . I V=2 QUIT ; Just print routine/tags coverage for V=2; V=3 print uncovered lines +"RTN","ut1",395,0) + . . N LN S LN="" +"RTN","ut1",396,0) + . . ;F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" W TAG_"+"_LN_": "_^(LN),! +"RTN","ut1",397,0) + . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S LINNUM=LINNUM+1,@X@(LINNUM)=TAG_"+"_LN_": "_^(LN) +"RTN","ut1",398,0) + . . Q +"RTN","ut1",399,0) + . Q +"RTN","ut1",400,0) QUIT -"RTN","ut1",421,0) +"RTN","ut1",401,0) ; +"RTN","ut1",402,0) +COVRPTGL(C,S,R,OUT) ; [Private] - Coverage Global for silent invokers +"RTN","ut1",403,0) + ; C = COHORT - Global name +"RTN","ut1",404,0) + ; S = SURVIVORS - Global name +"RTN","ut1",405,0) + ; R = RESULT - Global name +"RTN","ut1",406,0) + ; OUT = OUTPUT - Global name +"RTN","ut1",407,0) + ; +"RTN","ut1",408,0) + N O S O=$$ACTLINES(C) +"RTN","ut1",409,0) + N L S L=$$ACTLINES(S) +"RTN","ut1",410,0) + S @OUT=(O-L)_"/"_O +"RTN","ut1",411,0) + N RTN,TAG,LN S (RTN,TAG,LN)="" +"RTN","ut1",412,0) + F S RTN=$O(@C@(RTN)) Q:RTN="" D +"RTN","ut1",413,0) + . N O S O=$$ACTLINES($NA(@C@(RTN))) +"RTN","ut1",414,0) + . N L S L=$$ACTLINES($NA(@S@(RTN))) +"RTN","ut1",415,0) + . S @OUT@(RTN)=(O-L)_"/"_O +"RTN","ut1",416,0) + . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D +"RTN","ut1",417,0) + . . N O S O=$$ACTLINES($NA(@C@(RTN,TAG))) +"RTN","ut1",418,0) + . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) +"RTN","ut1",419,0) + . . S @OUT@(RTN,TAG)=(O-L)_"/"_O +"RTN","ut1",420,0) + . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S @OUT@(RTN,TAG,LN)=@S@(RTN,TAG,LN) +"RTN","ut1",421,0) + QUIT +"RTN","ut1",422,0) + ; +"RTN","ut1",423,0) +ISUTEST() ; +"RTN","ut1",424,0) + Q $$ISUTEST^%ut() "RTN","utcover") -0^10^B32934852 +0^3^B52893402 "RTN","utcover",1,0) -%utcover ;JLI - generic coverage and unit test runner ;09/14/15 09:37 +%utcover ;JLI - generic coverage and unit test runner ;12/07/15 16:36 "RTN","utcover",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 15 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 2 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utcover",4,0) ; Original routine authored by Joel L. Ivey "RTN","utcover",5,0) ; "RTN","utcover",6,0) - D EN^%ut("%uttcovr") ; unit tests + ; Changes: (Moved from %ut and %ut1) "RTN","utcover",7,0) - Q + ; 130726 SMH - Moved test collection logic from %utUNIT to here (multiple places) "RTN","utcover",8,0) - ; + ; 131218 SMH - dependence on XLFSTR removed "RTN","utcover",9,0) -MULTAPIS(TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS + ; 131218 SMH - CHEKTEST refactored to use $TEXT instead of ^%ZOSF("LOAD") "RTN","utcover",10,0) - ; can be run from %ut using D MULTAPIS^%ut(.TESTROUS) + ; 131218 SMH - CATCHERR now nulls out $ZS if on GT.M "RTN","utcover",11,0) - ; input TESTROUS - passed by reference - array of routine names to run tests for + ; "RTN","utcover",12,0) - ; specify those to be called directly by including ^ as part of + ; ------- COMMENTS moved from %ut due to space requirements "RTN","utcover",13,0) - ; TAG^ROUTINE or ^ROUTINE. + ; "RTN","utcover",14,0) - ; ROUTINE names without a ^ will be called as EN^%ut("ROUTINE") + ; 100622 JLI - corrected typo in comments where %utINPT was listed as %utINP "RTN","utcover",15,0) - ; Sometimes to get complete coverage, different entry points may + ; 100622 JLI - removed a comment which indicated data could potentially be returned from the called routine "RTN","utcover",16,0) - ; need to be called (e.g., at top and for VERBOSE), these should each + ; in the %utINPT array. "RTN","utcover",17,0) - ; be included. + ; 100622 JLI - added code to handle STARTUP and SHUTDOWN from GUI app "RTN","utcover",18,0) - ; If the subscript is a number, it will take the list of comma separated + ; 110719 JLI - modified separators in GUI handling from ^ to ~~^~~ "RTN","utcover",19,0) - ; values as the routines. If the the subscript is not a number, it will + ; in the variable XTGUISEP if using a newer version of the "RTN","utcover",20,0) - ; take it as a routine to be added to the list, then if the value of the + ; GUI app (otherwise, it is simply set to ^) since results "RTN","utcover",21,0) - ; contains a comma separated list of routines, they will be added as well. + ; with a series of ^ embedded disturbed the output reported "RTN","utcover",22,0) - ; Thus a value of + ; 130726 SMH - Fixed SETUP and TEARDOWN so that they run before/after each "RTN","utcover",23,0) - ; TESTROUS(1)="A^ROU1,^ROU1,^ROU2,ROU3" + ; test rather than once. General refactoring. "RTN","utcover",24,0) - ; or a value of + ; 130726 SMH - SETUT initialized IO in case it's not there to $P. Inits vars "RTN","utcover",25,0) - ; TESTROUS("A^ROU1")="^ROU1,^ROU2,ROU3" + ; using DT^DICRW. "RTN","utcover",26,0) - ; will both result in tests for + ; 131217 SMH - Change call in SETUP to S U="^" instead of DT^DICRW "RTN","utcover",27,0) - ; D A^ROU1,^ROU1,^ROU2,EN^%ut("ROU3") + ; 131218 SMH - Any checks to $ZE will also check $ZS for GT.M. "RTN","utcover",28,0) - K ^TMP("%utcover",$J,"TESTROUS") + ; 131218 SMH - Remove calls to %ZISUTL to manage devices to prevent dependence on VISTA. "RTN","utcover",29,0) - M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS + ; Use %utNIT("DEV","OLD") for old devices "RTN","utcover",30,0) - D COVENTRY + ; 140109 SMH - Add parameter %utBREAK - Break upon error "RTN","utcover",31,0) - K ^TMP("%utcover",$J,"TESTROUS") + ; 1402 SMH - Break will cause the break to happen even on failed tests. "RTN","utcover",32,0) - Q + ; 140401 SMH - Added Succeed entry point for take it into your hands tester. "RTN","utcover",33,0) - ; + ; 140401 SMH - Reformatted the output of M-Unit so that the test's name "RTN","utcover",34,0) -COVENTRY ; setup of COVERAGE NEWs most variables, so TESTROUS passed by global + ; will print BEFORE the execution of the test. This has been "RTN","utcover",35,0) - ; + ; really confusing for beginning users of M-Unit, so this was "RTN","utcover",36,0) - N I,ROU,VAL,VALS,UTDATA,TESTS,TESTROUS + ; necessary. "RTN","utcover",37,0) - M TESTROUS=^TMP("%utcover",$J,"TESTROUS") + ; 140401 SMH - OK message gets printed at the end of --- as [OK]. "RTN","utcover",38,0) - S ROU="" F S ROU=$O(TESTROUS(ROU)) Q:ROU="" D + ; 140401 SMH - FAIL message now prints. Previously, OK failed to be printed. "RTN","utcover",39,0) - . I ROU'=+ROU S TESTS(ROU)="" + ; Unfortunately, that's rather passive aggressive. Now it "RTN","utcover",40,0) - . F I=1:1 S VAL=$P(TESTROUS(ROU),",",I) Q:VAL="" S TESTS(VAL)="" + ; explicitly says that a test failed. "RTN","utcover",41,0) - . Q + ; 140503 SMH - Fixed IO issues all over the routine. Much simpler now. "RTN","utcover",42,0) - S ROU="" F S ROU=$O(TESTS(ROU)) Q:ROU="" D + ; 140731 JLI - Combined routine changes between JLI and SMH "RTN","utcover",43,0) - . W !!,"------------------- RUNNING ",ROU," -------------------" + ; Moved routines from %utNIT and %utNIT1 to %ut and %ut1 "RTN","utcover",44,0) - . I ROU[U D @ROU + ; Updated unit test routines (%utt1 to %utt6) "RTN","utcover",45,0) - . I ROU'[U D @("EN^%ut("""_ROU_""")") + ; Created M-UNIT TEST GROUP file at 17.9001 based on the 17.9001 file "RTN","utcover",46,0) - . D GETUTVAL^%ut(.UTDATA) + ; 141030 JLI - Removed tag TESTCOVR and code under it, not necessary "RTN","utcover",47,0) - . Q + ; since %uttcovr can handle all of the calling needed "RTN","utcover",48,0) - I $D(UTDATA) D LSTUTVAL^%ut(.UTDATA) + ; Added call to run routine %utt6 if run from the top, "RTN","utcover",49,0) - Q + ; since this will run the full range of unit tests "RTN","utcover",50,0) - ; + ; Modified STARTUP and SHUTDOWN commands to handle in "RTN","utcover",51,0) -COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ; run coverage analysis for multiple routines and entry points + ; each routine where they are available, since only "RTN","utcover",52,0) - ; can be run from %ut using D COVERAGE^%ut(ROUNMSP,.TESTROUS,.XCLDROUS,RESLTLVL) + ; running one STARTUP and SHUTDOWN (the first seen by "RTN","utcover",53,0) - ; input ROUNMSP - Namespace for routine(s) to be analyzed + ; the program) restricted their use in suites of multiple "RTN","utcover",54,0) - ; ROUNAME will result in only the routine ROUNAME being analyzed + ; tests. "RTN","utcover",55,0) - ; ROUN* will result in all routines beginning with ROUN being analyzed + ; 150101 JLI - Added COV entry to %ut (in addition to current in %ut1) so it is easier "RTN","utcover",56,0) - ; input TESTROUS - passed by reference - see TESTROUS description for JUSTTEST + ; to remember how to use it. "RTN","utcover",57,0) - ; input XCLDROUS - passed by reference - routines passed in a manner similar to TESTROUS, + ; 150621 JLI - Added a global location to pick up summary data for a unit test call, so "RTN","utcover",58,0) - ; but only the routine names, whether as arguments or a comma separated + ; programs running multiple calls can generate a summary if desired. "RTN","utcover",59,0) - ; list of routines, will be excluded from the analysis of coverage. These + ; "RTN","utcover",60,0) - ; would normally be names of routines which are only for unit tests, or + ; "RTN","utcover",61,0) - ; others which should not be included in the analysis for some reason. + D EN^%ut("%uttcovr") ; unit tests "RTN","utcover",62,0) - ; input RESLTLVL - This value determines the amount of information to be generated for the -"RTN","utcover",63,0) - ; analysis. A missing or null value will be considered to be level 1 -"RTN","utcover",64,0) - ; 1 - Listing of analysis only for routine overall -"RTN","utcover",65,0) - ; 2 - Listing of analysis for routine overall and for each TAG -"RTN","utcover",66,0) - ; 3 - Full analysis for each tag, and lists out those lines which were -"RTN","utcover",67,0) - ; not executed during the analysis -"RTN","utcover",68,0) - ; -"RTN","utcover",69,0) - N I,ROU,TYPE,VAL,XCLUDE -"RTN","utcover",70,0) - S RESLTLVL=$G(RESLTLVL,1) -"RTN","utcover",71,0) - I (RESLTLVL<1) S RESLTLVL=1 -"RTN","utcover",72,0) - I (RESLTLVL>3) S RESLTLVL=3 -"RTN","utcover",73,0) - M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS ; -"RTN","utcover",74,0) - D COV^%ut1(ROUNMSP,"D COVENTRY^%utcover",-1) -"RTN","utcover",75,0) - K ^TMP("%utcover",$J,"TESTROUS") -"RTN","utcover",76,0) - S ROU="" F S ROU=$O(XCLDROUS(ROU)) Q:ROU="" D -"RTN","utcover",77,0) - . I ROU'=+ROU S XCLUDE(ROU)="" -"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) - N TEXTGLOB S TEXTGLOB=$NA(^TMP("%utcover-text",$J)) K @TEXTGLOB -"RTN","utcover",81,0) - D LIST(.XCLUDE,RESLTLVL,TEXTGLOB) -"RTN","utcover",82,0) - F I=1:1 Q:'$D(@TEXTGLOB@(I)) W !,@TEXTGLOB@(I) -"RTN","utcover",83,0) - K @TEXTGLOB -"RTN","utcover",84,0) Q +"RTN","utcover",63,0) + ; +"RTN","utcover",64,0) +MULTAPIS(TESTROUS) ; RUN TESTS FOR SPECIFIED ROUTINES AND ENTRY POINTS +"RTN","utcover",65,0) + ; can be run from %ut using D MULTAPIS^%ut(.TESTROUS) +"RTN","utcover",66,0) + ; input TESTROUS - passed by reference - array of routine names to run tests for +"RTN","utcover",67,0) + ; specify those to be called directly by including ^ as part of +"RTN","utcover",68,0) + ; TAG^ROUTINE or ^ROUTINE. +"RTN","utcover",69,0) + ; ROUTINE names without a ^ will be called as EN^%ut("ROUTINE") +"RTN","utcover",70,0) + ; Sometimes to get complete coverage, different entry points may +"RTN","utcover",71,0) + ; need to be called (e.g., at top and for VERBOSE), these should each +"RTN","utcover",72,0) + ; be included. +"RTN","utcover",73,0) + ; If the subscript is a number, it will take the list of comma separated +"RTN","utcover",74,0) + ; values as the routines. If the the subscript is not a number, it will +"RTN","utcover",75,0) + ; take it as a routine to be added to the list, then if the value of the +"RTN","utcover",76,0) + ; contains a comma separated list of routines, they will be added as well. +"RTN","utcover",77,0) + ; Thus a value of +"RTN","utcover",78,0) + ; TESTROUS(1)="A^ROU1,^ROU1,^ROU2,ROU3" +"RTN","utcover",79,0) + ; or a value of +"RTN","utcover",80,0) + ; TESTROUS("A^ROU1")="^ROU1,^ROU2,ROU3" +"RTN","utcover",81,0) + ; will both result in tests for +"RTN","utcover",82,0) + ; D A^ROU1,^ROU1,^ROU2,EN^%ut("ROU3") +"RTN","utcover",83,0) + K ^TMP("%utcover",$J,"TESTROUS") +"RTN","utcover",84,0) + M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS "RTN","utcover",85,0) - ; + D COVENTRY "RTN","utcover",86,0) -LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; + K ^TMP("%utcover",$J,"TESTROUS") "RTN","utcover",87,0) - ; ZEXCEPT: TYPE1 - NEWed and set below for recursion + Q "RTN","utcover",88,0) - ; input - ROULIST - a comma separated list of routine names that will + ; "RTN","utcover",89,0) - ; be used to identify desired routines. Any name +COVENTRY ; setup of COVERAGE NEWs most variables, so TESTROUS passed by global "RTN","utcover",90,0) - ; that begins with one of the specified values will + ; "RTN","utcover",91,0) - ; be included + N I,ROU,VAL,VALS,UTDATA,TESTS,TESTROUS "RTN","utcover",92,0) - ; input - TYPE - value indicating amount of detail desired + M TESTROUS=^TMP("%utcover",$J,"TESTROUS") "RTN","utcover",93,0) - ; 3=full with listing of untouched lines + S ROU="" F S ROU=$O(TESTROUS(ROU)) Q:ROU="" D "RTN","utcover",94,0) - ; 2=moderated with listing by tags + . I ROU'=+ROU S TESTS(ROU)="" "RTN","utcover",95,0) - ; 1=summary with listing by routine + . F I=1:1 S VAL=$P(TESTROUS(ROU),",",I) Q:VAL="" S TESTS(VAL)="" "RTN","utcover",96,0) - ; input - TEXTGLOB - closed global location in which text is returned + . Q "RTN","utcover",97,0) - ; input - GLOB - used for unit tests - specifies global to work with + S ROU="" F S ROU=$O(TESTS(ROU)) Q:ROU="" D "RTN","utcover",98,0) - ; so that coverage data is not impacted + . W !!,"------------------- RUNNING ",ROU," -------------------" "RTN","utcover",99,0) - ; + . I ROU[U D @ROU "RTN","utcover",100,0) - N CURRCOV,CURRLIN,LINCOV,LINE,LINTOT,ROULIST,ROUNAME,TAG,TOTCOV,TOTLIN,XVAL + . I ROU'[U D @("EN^%ut("""_ROU_""")") "RTN","utcover",101,0) - ; + . D GETUTVAL^%ut(.UTDATA) "RTN","utcover",102,0) - I '$D(LINNUM) S LINNUM=0 ; initialize on first entry + . Q "RTN","utcover",103,0) - I '$D(GLOB) N GLOB S GLOB=$NA(^TMP("%utCOVREPORT",$J)) + I $D(UTDATA) D LSTUTVAL^%ut(.UTDATA) "RTN","utcover",104,0) - D TRIMDATA(.XCLDROUS,GLOB) ; remove undesired routines from data + Q "RTN","utcover",105,0) ; "RTN","utcover",106,0) - N JOB,NAME,BASE +COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ; run coverage analysis for multiple routines and entry points "RTN","utcover",107,0) - S TOTCOV=0,TOTLIN=0 + ; can be run from %ut using D COVERAGE^%ut(ROUNMSP,.TESTROUS,.XCLDROUS,RESLTLVL) "RTN","utcover",108,0) - ; F NAME="%utCOVREPORT","%utCOVRESULT","%utCOVCOHORT","%utCOVCOHORTSAV" D + ; input ROUNMSP - Namespace for routine(s) to be analyzed "RTN","utcover",109,0) - I TYPE>1 S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D + ; ROUNAME will result in only the routine ROUNAME being analyzed "RTN","utcover",110,0) - . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) + ; ROUN* will result in all routines beginning with ROUN being analyzed "RTN","utcover",111,0) - . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" + ; input TESTROUS - passed by reference - see TESTROUS description for JUSTTEST "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:"") + ; input XCLDROUS - passed by reference - routines passed in a manner similar to TESTROUS, "RTN","utcover",113,0) - . I TYPE>1 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" - "_$S(TYPE=2:"Summary",1:"Detailed Breakdown") + ; but only the routine names, whether as arguments or a comma separated "RTN","utcover",114,0) - . S TAG="" F S TAG=$O(@GLOB@(ROUNAME,TAG)) Q:TAG="" S XVAL=^(TAG) D + ; list of routines, will be excluded from the analysis of coverage. These "RTN","utcover",115,0) - . . S LINCOV=$P(XVAL,"/"),LINTOT=$P(XVAL,"/",2) + ; would normally be names of routines which are only for unit tests, or "RTN","utcover",116,0) - . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" Tag "_TAG_"^"_ROUNAME_" "_LINCOV_" out of "_LINTOT_" lines covered" + ; others which should not be included in the analysis for some reason. "RTN","utcover",117,0) - . . I TYPE=2 Q + ; input RESLTLVL - This value determines the amount of information to be generated for the "RTN","utcover",118,0) - . . I LINCOV=LINTOT Q + ; analysis. A missing or null value will be considered to be level 1 "RTN","utcover",119,0) - . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" the following is a list of the lines **NOT** covered" + ; 1 - Listing of analysis only for routine overall "RTN","utcover",120,0) - . . S LINE="" F S LINE=$O(@GLOB@(ROUNAME,TAG,LINE)) Q:LINE="" D + ; 2 - Listing of analysis for routine overall and for each TAG "RTN","utcover",121,0) - . . . I LINE=0 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_" "_@GLOB@(ROUNAME,TAG,LINE) Q + ; 3 - Full analysis for each tag, and lists out those lines which were "RTN","utcover",122,0) - . . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_"+"_LINE_" "_@GLOB@(ROUNAME,TAG,LINE) + ; not executed during the analysis "RTN","utcover",123,0) - . . . Q -"RTN","utcover",124,0) - . . Q -"RTN","utcover",125,0) - . Q -"RTN","utcover",126,0) - ; for type=3 generate a summary at bottom after detail -"RTN","utcover",127,0) - I TYPE=3 N TYPE1 S TYPE1=2 D LIST(.XCLDROUS,2,TEXTGLOB,GLOB,.LINNUM) K TYPE1 -"RTN","utcover",128,0) - I TYPE=2,$G(TYPE1) Q ; CAME IN FROM ABOVE LINE -"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 ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D -"RTN","utcover",132,0) - . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) -"RTN","utcover",133,0) - . S TOTCOV=TOTCOV+CURRCOV,TOTLIN=TOTLIN+CURRLIN -"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",135,0) - . Q -"RTN","utcover",136,0) - S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" -"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) ; -"RTN","utcover",140,0) -TRIMDATA(ROULIST,GLOB) ; -"RTN","utcover",141,0) - N ROUNAME -"RTN","utcover",142,0) - S ROUNAME="" F S ROUNAME=$O(ROULIST(ROUNAME)) Q:ROUNAME="" K @GLOB@(ROUNAME) -"RTN","utcover",143,0) +"RTN","utcover",124,0) + N I,ROU,TYPE,XCLUDE +"RTN","utcover",125,0) + S RESLTLVL=$G(RESLTLVL,1) +"RTN","utcover",126,0) + I (RESLTLVL<1) S RESLTLVL=1 +"RTN","utcover",127,0) + I (RESLTLVL>3) S RESLTLVL=3 +"RTN","utcover",128,0) + M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS ; +"RTN","utcover",129,0) + D COV^%ut1(ROUNMSP,"D COVENTRY^%utcover",-1) +"RTN","utcover",130,0) + K ^TMP("%utcover",$J,"TESTROUS") +"RTN","utcover",131,0) + S ROU="" F S ROU=$O(XCLDROUS(ROU)) Q:ROU="" D SETROUS(.XCLUDE,.XCLDROUS,ROU) +"RTN","utcover",132,0) + N TEXTGLOB S TEXTGLOB=$NA(^TMP("%utcover-text",$J)) K @TEXTGLOB +"RTN","utcover",133,0) + D LIST(.XCLUDE,RESLTLVL,TEXTGLOB) +"RTN","utcover",134,0) + F I=1:1 Q:'$D(@TEXTGLOB@(I)) W !,@TEXTGLOB@(I) +"RTN","utcover",135,0) + K @TEXTGLOB +"RTN","utcover",136,0) Q +"RTN","utcover",137,0) + ; +"RTN","utcover",138,0) +SETROUS(XCLUDE,XCLDROUS,ROU) ; +"RTN","utcover",139,0) + ; XCLUDE - passed by reference - on return contains array with indices as routines to exclude from analysis +"RTN","utcover",140,0) + ; XCLDROUS - passed by referenc - array may contain a comma-delimited list of routines to exclude from analysis +"RTN","utcover",141,0) + ; ROU - input - if non-numberic is name of routine to exclude from analysis +"RTN","utcover",142,0) + N I,VAL +"RTN","utcover",143,0) + I ROU'=+ROU S XCLUDE(ROU)="" "RTN","utcover",144,0) + F I=1:1 S VAL=$P(XCLDROUS(ROU),",",I) Q:VAL="" S XCLUDE(VAL)="" +"RTN","utcover",145,0) + Q +"RTN","utcover",146,0) + ; +"RTN","utcover",147,0) +LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; +"RTN","utcover",148,0) + ; ZEXCEPT: TYPE1 - NEWed and set below for recursion +"RTN","utcover",149,0) + ; input - ROULIST - a comma separated list of routine names that will +"RTN","utcover",150,0) + ; be used to identify desired routines. Any name +"RTN","utcover",151,0) + ; that begins with one of the specified values will +"RTN","utcover",152,0) + ; be included +"RTN","utcover",153,0) + ; input - TYPE - value indicating amount of detail desired +"RTN","utcover",154,0) + ; 3=full with listing of untouched lines +"RTN","utcover",155,0) + ; 2=moderated with listing by tags +"RTN","utcover",156,0) + ; 1=summary with listing by routine +"RTN","utcover",157,0) + ; input - TEXTGLOB - closed global location in which text is returned +"RTN","utcover",158,0) + ; input - GLOB - used for unit tests - specifies global to work with +"RTN","utcover",159,0) + ; so that coverage data is not impacted +"RTN","utcover",160,0) + ; +"RTN","utcover",161,0) + N CURRCOV,CURRLIN,LINCOV,LINE,LINTOT,ROULIST,ROUNAME,TAG,TOTCOV,TOTLIN,XVAL +"RTN","utcover",162,0) + ; +"RTN","utcover",163,0) + I '$D(LINNUM) S LINNUM=0 ; initialize on first entry +"RTN","utcover",164,0) + I '$D(GLOB) N GLOB S GLOB=$NA(^TMP("%utCOVREPORT",$J)) +"RTN","utcover",165,0) + D TRIMDATA(.XCLDROUS,GLOB) ; remove undesired routines from data +"RTN","utcover",166,0) + ; +"RTN","utcover",167,0) + N JOB,NAME,BASE,TEXT,VAL +"RTN","utcover",168,0) + S TOTCOV=0,TOTLIN=0 +"RTN","utcover",169,0) + ; F NAME="%utCOVREPORT","%utCOVRESULT","%utCOVCOHORT","%utCOVCOHORTSAV" D +"RTN","utcover",170,0) + I TYPE>1 S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D +"RTN","utcover",171,0) + . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) +"RTN","utcover",172,0) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" +"RTN","utcover",173,0) + . S TEXT="Routine "_ROUNAME_" ",TEXT=$E(TEXT,1,20) +"RTN","utcover",174,0) + . I CURRLIN>0 S VAL=" ("_$J((100*CURRCOV)/CURRLIN,"",2),VAL=$E(VAL,$L(VAL)-6,$L(VAL)) +"RTN","utcover",175,0) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=TEXT_" "_$S(CURRLIN>0:VAL_"%)",1:" ------ ")_" "_CURRCOV_" out of "_CURRLIN_" lines covered" +"RTN","utcover",176,0) + . I TYPE>1 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" - "_$S(TYPE=2:"Summary",1:"Detailed Breakdown") +"RTN","utcover",177,0) + . S TAG="" F S TAG=$O(@GLOB@(ROUNAME,TAG)) Q:TAG="" S XVAL=^(TAG) D +"RTN","utcover",178,0) + . . S LINCOV=$P(XVAL,"/"),LINTOT=$P(XVAL,"/",2) +"RTN","utcover",179,0) + . . S TEXT=" Tag "_TAG_"^"_ROUNAME_" ",TEXT=$E(TEXT,1,26) +"RTN","utcover",180,0) + . . I LINTOT>0 S VAL=" ("_$J((100*LINCOV)/LINTOT,"",2),VAL=$E(VAL,$L(VAL)-6,$L(VAL)) +"RTN","utcover",181,0) + . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=TEXT_$S(LINTOT>0:VAL_"%)",1:" ------ ")_" "_LINCOV_" out of "_LINTOT_" lines covered" +"RTN","utcover",182,0) + . . I TYPE=2 Q +"RTN","utcover",183,0) + . . I LINCOV=LINTOT Q +"RTN","utcover",184,0) + . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" the following is a list of the lines **NOT** covered" +"RTN","utcover",185,0) + . . S LINE="" F S LINE=$O(@GLOB@(ROUNAME,TAG,LINE)) Q:LINE="" D +"RTN","utcover",186,0) + . . . I LINE=0 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_" "_@GLOB@(ROUNAME,TAG,LINE) Q +"RTN","utcover",187,0) + . . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" "_TAG_"+"_LINE_" "_@GLOB@(ROUNAME,TAG,LINE) +"RTN","utcover",188,0) + . . . Q +"RTN","utcover",189,0) + . . Q +"RTN","utcover",190,0) + . Q +"RTN","utcover",191,0) + ; for type=3 generate a summary at bottom after detail +"RTN","utcover",192,0) + I TYPE=3 N TYPE1 S TYPE1=2 D LIST(.XCLDROUS,2,TEXTGLOB,GLOB,.LINNUM) K TYPE1 +"RTN","utcover",193,0) + I TYPE=2,$G(TYPE1) Q ; CAME IN FROM ABOVE LINE +"RTN","utcover",194,0) + ; summarize by just routine name +"RTN","utcover",195,0) + S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" +"RTN","utcover",196,0) + S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D +"RTN","utcover",197,0) + . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) +"RTN","utcover",198,0) + . S TOTCOV=TOTCOV+CURRCOV,TOTLIN=TOTLIN+CURRLIN +"RTN","utcover",199,0) + . I CURRLIN>0 S VAL=" ("_$J((100*CURRCOV)/CURRLIN,"",2),VAL=$E(VAL,$L(VAL)-6,$L(VAL)) +"RTN","utcover",200,0) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_$S(CURRLIN>0:VAL_"%)",1:" ------ ")_" "_CURRCOV_" out of "_CURRLIN_" lines covered" +"RTN","utcover",201,0) + S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" +"RTN","utcover",202,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",203,0) + Q +"RTN","utcover",204,0) + ; +"RTN","utcover",205,0) +TRIMDATA(ROULIST,GLOB) ; +"RTN","utcover",206,0) + N ROUNAME +"RTN","utcover",207,0) + S ROUNAME="" F S ROUNAME=$O(ROULIST(ROUNAME)) Q:ROUNAME="" K @GLOB@(ROUNAME) +"RTN","utcover",208,0) + Q +"RTN","utcover",209,0) ; "RTN","utt1") -0^3^B28788704 +0^4^B39370749 "RTN","utt1",1,0) -%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;09/14/15 09:38 +%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;12/07/15 17:00 "RTN","utt1",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 15 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 2 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt1",4,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 "RTN","utt1",5,0) @@ -3215,7 +3222,7 @@ T8 ; If IO starts with another device, write to that device as if it's the prici "RTN","utt1",141,0) ;D CHKTF(Y["MAIN") ; JLI 140829 commented out, gui doesn't run verbose "RTN","utt1",142,0) - D CHKTF((Y["MAIN")!(Z["Ran 1 Routine"),"Write to system during test didn't work") + D CHKTF((Y["MAIN")!(Z["T2 - Test 2"),"Write to system during test didn't work") "RTN","utt1",143,0) S IO=$P "RTN","utt1",144,0) @@ -3223,59 +3230,91 @@ T8 ; If IO starts with another device, write to that device as if it's the prici "RTN","utt1",145,0) ; "RTN","utt1",146,0) -LO(X) Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") +COVRPTGL ; "RTN","utt1",147,0) - ; Shortcut methods for M-Unit + N GL1,GL2,GL3,GL4 "RTN","utt1",148,0) -CHKTF(X,Y) ; + S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 "RTN","utt1",149,0) - D CHKTF^%ut(X,$G(Y)) + S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 "RTN","utt1",150,0) - QUIT + S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 "RTN","utt1",151,0) - ; + S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 "RTN","utt1",152,0) -CHKEQ(A,B,M) ; + D SETGLOBS^%uttcovr(GL1,GL2) "RTN","utt1",153,0) - D CHKEQ^%ut(A,B,$G(M)) + D COVRPTGL^%ut1(GL1,GL2,GL3,GL4) "RTN","utt1",154,0) - QUIT + D CHKEQ($G(@GL4@("%ut1","ACTLINES")),"0/9","Wrong number of lines covered f>>or ACTLINES") "RTN","utt1",155,0) - ; + D CHKEQ($G(@GL4@("%ut1","ACTLINES",9))," QUIT CNT","Wrong result for last l>>ine not covered for ACTLINES") "RTN","utt1",156,0) -XTENT ; Entry points + D CHKEQ($G(@GL4@("%ut1","CHEKTEST")),"8/10","Wrong number of lines covered >>for CHEKTEST") "RTN","utt1",157,0) - ;;T4;Entry point using XTMENT + D CHKEQ($G(@GL4@("%ut1","CHEKTEST",39))," . Q","Wrong result for last line >>not covered for CHEKTEST") "RTN","utt1",158,0) - ;;T5;Error count check + K @GL1,@GL2,@GL3,@GL4 "RTN","utt1",159,0) - ;;T6;Succeed Entry Point + Q "RTN","utt1",160,0) - ;;T7;Make sure we write to principal even though we are on another device -"RTN","utt1",161,0) - ;;T8;If IO starts with another device, write to that device as if it's the pricipal device -"RTN","utt1",162,0) ; +"RTN","utt1",161,0) +LO(X) Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") +"RTN","utt1",162,0) + ; Shortcut methods for M-Unit "RTN","utt1",163,0) -XTROU ; Routines containing additional tests +CHKTF(X,Y) ; "RTN","utt1",164,0) - ;;%utt2; old %utNITU + D CHKTF^%ut(X,$G(Y)) "RTN","utt1",165,0) - ;;%utt4; old %utNITW + QUIT "RTN","utt1",166,0) - ;;%utt5; + ; "RTN","utt1",167,0) - ;;%utt6; +CHKEQ(A,B,M) ; "RTN","utt1",168,0) + D CHKEQ^%ut(A,B,$G(M)) +"RTN","utt1",169,0) + QUIT +"RTN","utt1",170,0) + ; +"RTN","utt1",171,0) +XTENT ; Entry points +"RTN","utt1",172,0) + ;;T4;Entry point using XTMENT +"RTN","utt1",173,0) + ;;T5;Error count check +"RTN","utt1",174,0) + ;;T6;Succeed Entry Point +"RTN","utt1",175,0) + ;;T7;Make sure we write to principal even though we are on another device +"RTN","utt1",176,0) + ;;T8;If IO starts with another device, write to that device as if it's the pricipal device +"RTN","utt1",177,0) + ;;COVRPTGL;coverage report returning global +"RTN","utt1",178,0) + ; +"RTN","utt1",179,0) +XTROU ; Routines containing additional tests +"RTN","utt1",180,0) + ;;%utt2; old %utNITU +"RTN","utt1",181,0) + ;;%utt4; old %utNITW +"RTN","utt1",182,0) + ;;%utt5; +"RTN","utt1",183,0) + ;;%utt6; +"RTN","utt1",184,0) ;;%uttcovr;coverage related tests "RTN","utt2") -0^4^B501728 +0^5^B501728 "RTN","utt2",1,0) %utt2 ; VEN/SMH - Bad Ass Continuation of Unit Tests;09/14/15 09:38 "RTN","utt2",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 15 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 2 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt2",4,0) ; Original routine authored by Sam H. Habiel "RTN","utt2",5,0) @@ -3301,13 +3340,13 @@ XTENT ; "RTN","utt2",15,0) ;;T12;An XTENT offset entry point in Another Routine invoked through XTROU offsets "RTN","utt3") -0^5^B1628564 +0^6^B1628564 "RTN","utt3",1,0) %utt3 ; VEN/SMH-JLI - Unit Tests Coverage Tests;09/14/15 09:38 "RTN","utt3",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 15 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 2 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt3",4,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 "RTN","utt3",5,0) @@ -3397,13 +3436,13 @@ INTERNAL(A) ; Counts "RTN","utt3",47,0) QUIT ; Dead code "RTN","utt4") -0^6^B1522726 +0^7^B1568129 "RTN","utt4",1,0) -%utt4 ; VEN/SMH/JLI - Coverage Test Runner;09/14/15 09:38 +%utt4 ; VEN/SMH/JLI - Coverage Test Runner;12/06/15 19:05 "RTN","utt4",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 15 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 2 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt4",4,0) ; Original routine authored by Sam H. Habiel 07/2013?04/2014 "RTN","utt4",5,0) @@ -3427,9 +3466,9 @@ MAIN ; @TEST - Test coverage calculations "RTN","utt4",14,0) Q:$D(^TMP("%uttcovr",$J)) ; already running coverage analysis from %uttcovr "RTN","utt4",15,0) - Q:'(+$SY=47) ; GT.M ONLY + S ^TMP("%utt4val",$J)=1 "RTN","utt4",16,0) - D COV^%ut1("%utt3","D EN^%ut(""%utt3"",1)",-1) ; Only produce output global. + D COV^%ut("%utt3","D EN^%ut(""%utt3"",1)",-1) ; Only produce output global. "RTN","utt4",17,0) D CHKEQ^%ut("14/19",^TMP("%utCOVREPORT",$J)) "RTN","utt4",18,0) @@ -3439,15 +3478,17 @@ MAIN ; @TEST - Test coverage calculations "RTN","utt4",20,0) D CHKEQ^%ut("1/1",^TMP("%utCOVREPORT",$J,"%utt3","SETUP")) "RTN","utt4",21,0) + K ^TMP("%utt4val",$J) +"RTN","utt4",22,0) QUIT "RTN","utt5") -0^7^B23054235 +0^8^B23054235 "RTN","utt5",1,0) %utt5 ;JLI - test for aspects of MUnit functionality ;09/14/15 09:38 "RTN","utt5",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 15 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 2 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt5",4,0) ; Original routine authored by Joel L. Ivey "RTN","utt5",5,0) @@ -3719,13 +3760,13 @@ XTENT ; "RTN","utt5",138,0) ;;ISUTEST;check ISUTEST inside unit test "RTN","utt6") -0^8^B30891565 +0^9^B39118749 "RTN","utt6",1,0) -%utt6 ;JLI - Unit tests for MUnit functionality ;09/14/15 09:38 +%utt6 ;JLI - Unit tests for MUnit functionality ;12/07/15 16:40 "RTN","utt6",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 15 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 2 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","utt6",4,0) ; Original routine authored by Joel L. Ivey 05/2014-08/2015 "RTN","utt6",5,0) @@ -3879,91 +3920,131 @@ VERBOSE ; "RTN","utt6",79,0) ; "RTN","utt6",80,0) -NEWSTYLE ; tests return of valid new style or @TEST indicators +SETROUS ; @TEST - generate array with indices of routines to exclude "RTN","utt6",81,0) - N LIST + N ROU,XCLDROUS,ROULIST "RTN","utt6",82,0) - D NEWSTYLE^%ut1(.LIST,"%utt5") + S XCLDROUS(1)="ROU1NAME,ROU2NAME" "RTN","utt6",83,0) - D CHKEQ^%ut(LIST,1,"Returned an incorrect number ("_LIST_") of New Style indicators - should be one") + S XCLDROUS("ROUNAME3")="ROUNAME4,ROUNAME5" "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)) + D SETROUS^%utcover(.ROULIST,.XCLDROUS,1) "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)") + D CHKTF('$D(ROULIST(1)),"SETROUS returned number for routine") "RTN","utt6",86,0) - Q + D CHKTF($D(ROULIST("ROU1NAME")),"Didn't get first name on numeric subscript") "RTN","utt6",87,0) - ; + D CHKTF($D(ROULIST("ROU2NAME")),"Didn't get second name on numeric subscript") "RTN","utt6",88,0) -CKGUISET ; + D SETROUS^%utcover(.ROULIST,.XCLDROUS,"ROUNAME3") "RTN","utt6",89,0) - ; ZEXCEPT: %utt6var - if present, is NEWed and created in code following VERBOSE + D CHKTF($D(ROULIST("ROUNAME3")),"Didn't get name for routine argument") "RTN","utt6",90,0) - I '$D(%utt6var) Q + D CHKTF($D(ROULIST("ROUNAME4")),"Didn't get first name on routine subscript") "RTN","utt6",91,0) - N MAX + D CHKTF($D(ROULIST("ROUNAME5")),"Didn't get second name on routine subscript") "RTN","utt6",92,0) - S MAX=$O(^TMP("%utt6_GUISET",$J,""),-1) + Q "RTN","utt6",93,0) - D CHKTF^%ut(^TMP("%utt6_GUISET",$J,MAX)["%utt6^NEWSTYLE","GUISET returned incorrect list") + ; "RTN","utt6",94,0) - Q +NEWSTYLE ; tests return of valid new style or @TEST indicators "RTN","utt6",95,0) - ; + N LIST "RTN","utt6",96,0) -CHKCMDLN ; check command line processing of %utt5 + D NEWSTYLE^%ut1(.LIST,"%utt5") "RTN","utt6",97,0) - ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag + D CHKEQ^%ut(LIST,1,"Returned an incorrect number ("_LIST_") of New Style indicators - should be one") "RTN","utt6",98,0) - I '$D(%utt6var) Q + I LIST>0 D CHKEQ^%ut(LIST(1),"NEWSTYLE^identify new style test indicator functionality","Returned incorrect TAG^reason "_LIST(1)) "RTN","utt6",99,0) - D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) + 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",100,0) - D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) + ; the following is basically just for coverage "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'") + D PICKSET^%ut "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'") + Q "RTN","utt6",103,0) - Q + ; "RTN","utt6",104,0) - ; +CKGUISET ; "RTN","utt6",105,0) -CHKGUI ; check GUI processing of %utt5 + ; ZEXCEPT: %utt6var - if present, is NEWed and created in code following VERBOSE "RTN","utt6",106,0) - ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag -"RTN","utt6",107,0) I '$D(%utt6var) Q +"RTN","utt6",107,0) + N MAX "RTN","utt6",108,0) - D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) + S MAX=$O(^TMP("%utt6_GUISET",$J,""),-1) "RTN","utt6",109,0) - D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) + D CHKTF(^TMP("%utt6_GUISET",$J,MAX)["%utt6^NEWSTYLE","GUISET returned incorrect list") "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",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",112,0) Q -"RTN","utt6",113,0) +"RTN","utt6",111,0) ; +"RTN","utt6",112,0) +CHKCMDLN ; check command line processing of %utt5 +"RTN","utt6",113,0) + ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag "RTN","utt6",114,0) -XTENT ; + I '$D(%utt6var) Q "RTN","utt6",115,0) - ;;CHKCMDLN;check command line processing of %utt5 + D CHKTF($D(^TMP("%utt5_C",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) "RTN","utt6",116,0) - ;;CHKGUI;check GUI processing of %utt5 + D CHKTF($D(^TMP("%utt5_C",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) "RTN","utt6",117,0) - ;;CKGUISET;check list of tests returned by GUISET + D CHKTF($O(^TMP("%utt5_C",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5_C",$J,1,""))_"' should be 'STARTUP'") "RTN","utt6",118,0) + D CHKTF($O(^TMP("%utt5_C",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_C",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") +"RTN","utt6",119,0) + Q +"RTN","utt6",120,0) + ; +"RTN","utt6",121,0) +CHKGUI ; check GUI processing of %utt5 +"RTN","utt6",122,0) + ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag +"RTN","utt6",123,0) + I '$D(%utt6var) Q +"RTN","utt6",124,0) + D CHKTF($D(^TMP("%utt5_G",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) +"RTN","utt6",125,0) + D CHKTF($D(^TMP("%utt5_G",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) +"RTN","utt6",126,0) + D CHKTF($O(^TMP("%utt5_G",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5Z_G",1,""))_"' should be 'STARTUP'") +"RTN","utt6",127,0) + D CHKTF($O(^TMP("%utt5_G",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_G",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") +"RTN","utt6",128,0) + Q +"RTN","utt6",129,0) + ; +"RTN","utt6",130,0) +CHKTF(VALUE,MESSAGE) ; +"RTN","utt6",131,0) + D CHKTF^%ut($G(VALUE),$G(MESSAGE)) +"RTN","utt6",132,0) + Q +"RTN","utt6",133,0) + ; +"RTN","utt6",134,0) +XTENT ; +"RTN","utt6",135,0) + ;;CHKCMDLN;check command line processing of %utt5 +"RTN","utt6",136,0) + ;;CHKGUI;check GUI processing of %utt5 +"RTN","utt6",137,0) + ;;CKGUISET;check list of tests returned by GUISET +"RTN","utt6",138,0) ;;NEWSTYLE;test return of valid new style or @TEST indicators "RTN","uttcovr") -0^9^B146530441 +0^10^B186023122 "RTN","uttcovr",1,0) -%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;09/14/15 09:35 +%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;12/07/15 16:46 "RTN","uttcovr",2,0) - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 15 + ;;0.3;MASH UTILITIES;;Dec 7, 2015;Build 2 "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) + ; Submitted to OSEHRA Dec 07, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) "RTN","uttcovr",4,0) ; Original routine authored by Joel L. Ivey "RTN","uttcovr",5,0) @@ -3983,511 +4064,625 @@ XTENT ; "RTN","uttcovr",12,0) S RUNCODE("ENTRY^%uttcovr")="" "RTN","uttcovr",13,0) - I '(+$SY=47) D Q ; GT.M only! -"RTN","uttcovr",14,0) - . W !,"This coverage analysis is currently only available in GT.M" -"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",16,0) - . I "Yy"[$E(VAL) D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",17,0) - . Q -"RTN","uttcovr",18,0) ; Have the analysis EXCLUDE the following routines from coverage - unit test routines -"RTN","uttcovr",19,0) +"RTN","uttcovr",14,0) S XCLUDE(1)="%utt1,%utt2,%utt3,%utt4,%utt5,%utt6,%uttcovr" -"RTN","uttcovr",20,0) +"RTN","uttcovr",15,0) S XCLUDE(2)="%utf2hex" ; a GT.M system file, although it wasn't showing up anyway -"RTN","uttcovr",21,0) +"RTN","uttcovr",16,0) M ^TMP("%uttcovr",$J,"XCLUDE")=XCLUDE -"RTN","uttcovr",22,0) +"RTN","uttcovr",17,0) D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) -"RTN","uttcovr",23,0) +"RTN","uttcovr",18,0) Q -"RTN","uttcovr",24,0) +"RTN","uttcovr",19,0) ; -"RTN","uttcovr",25,0) +"RTN","uttcovr",20,0) ENTRY ; -"RTN","uttcovr",26,0) +"RTN","uttcovr",21,0) K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",27,0) +"RTN","uttcovr",22,0) M ^TMP("ENTRY^%uttcovr",$J,"VALS")=^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",28,0) +"RTN","uttcovr",23,0) K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",29,0) +"RTN","uttcovr",24,0) ; these tests run outside of unit tests to handle CHKLEAKS calls not in unit tests -"RTN","uttcovr",30,0) +"RTN","uttcovr",25,0) ; they need data set, so they are called in here -"RTN","uttcovr",31,0) +"RTN","uttcovr",26,0) ; LEAKSOK ; -"RTN","uttcovr",32,0) +"RTN","uttcovr",27,0) N CODE,LOCATN,MYVALS,X,I -"RTN","uttcovr",33,0) +"RTN","uttcovr",28,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSOK TEST",MYVALS("X")="" -"RTN","uttcovr",34,0) +"RTN","uttcovr",29,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find no leaks -"RTN","uttcovr",35,0) +"RTN","uttcovr",30,0) ; LEAKSBAD ; -"RTN","uttcovr",36,0) +"RTN","uttcovr",31,0) N CODE,LOCATN,MYVALS,X -"RTN","uttcovr",37,0) +"RTN","uttcovr",32,0) S CODE="S X=$$NOW^XLFDT()",LOCATN="LEAKSBAD TEST - X NOT SPECIFIED" -"RTN","uttcovr",38,0) +"RTN","uttcovr",33,0) D CHKLEAKS^%ut(CODE,LOCATN,.MYVALS) ; should find X since it isn't indicated -"RTN","uttcovr",39,0) +"RTN","uttcovr",34,0) ; try to run coverage -"RTN","uttcovr",40,0) +"RTN","uttcovr",35,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at 3",!!! -"RTN","uttcovr",41,0) +"RTN","uttcovr",36,0) D COV^%ut("%ut1","D EN^%ut(""%utt5"")",3) -"RTN","uttcovr",42,0) +"RTN","uttcovr",37,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COV^%ut FOR %utt5 at -1",!!! -"RTN","uttcovr",43,0) +"RTN","uttcovr",38,0) D COV^%ut("%ut1","D EN^%ut(""%utt5"")",-1) -"RTN","uttcovr",44,0) +"RTN","uttcovr",39,0) N RUNCODE S RUNCODE(1)="^%utt4,^%ut" -"RTN","uttcovr",45,0) +"RTN","uttcovr",40,0) N XCLUDE M XCLUDE=^TMP("%uttcovr",$J,"XCLUDE") -"RTN","uttcovr",46,0) +"RTN","uttcovr",41,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO MULTAPIS for %utt4 and %ut",!!! -"RTN","uttcovr",47,0) +"RTN","uttcovr",42,0) D MULTAPIS^%ut(.RUNCODE) -"RTN","uttcovr",48,0) +"RTN","uttcovr",43,0) W !,"xxxxxxxxxxxxxxxxxxxx GOING TO COVERAGE for %utt4 and %ut at 3",!!! -"RTN","uttcovr",49,0) +"RTN","uttcovr",44,0) D COVERAGE^%ut("%ut*",.RUNCODE,.XCLUDE,3) -"RTN","uttcovr",50,0) +"RTN","uttcovr",45,0) N GLT S GLT=$NA(^TMP("%uttcovr-text",$J)) K @GLT -"RTN","uttcovr",51,0) +"RTN","uttcovr",46,0) W !,"xxxxxxxxxxxxxxxxxxxx LISTING DATA VIA LIST",!!! -"RTN","uttcovr",52,0) +"RTN","uttcovr",47,0) D LIST^%utcover(.XCLUDE,3,GLT) ; get coverage for listing and trimdata in %utcover -"RTN","uttcovr",53,0) +"RTN","uttcovr",48,0) F I=1:1 Q:'$D(@GLT@(I)) W !,@GLT@(I) -"RTN","uttcovr",54,0) +"RTN","uttcovr",49,0) K @GLT -"RTN","uttcovr",55,0) +"RTN","uttcovr",50,0) ; restore unit test totals from before entry -"RTN","uttcovr",56,0) +"RTN","uttcovr",51,0) K ^TMP("%ut",$J,"UTVALS") -"RTN","uttcovr",57,0) +"RTN","uttcovr",52,0) M ^TMP("%ut",$J,"UTVALS")=^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",58,0) +"RTN","uttcovr",53,0) K ^TMP("ENTRY^%uttcovr",$J,"VALS") -"RTN","uttcovr",59,0) +"RTN","uttcovr",54,0) W !,"xxxxxxxxxxxxxxxxxxxx Finished in ENTRY^%uttcovr",!!! -"RTN","uttcovr",60,0) +"RTN","uttcovr",55,0) Q -"RTN","uttcovr",61,0) +"RTN","uttcovr",56,0) ; -"RTN","uttcovr",62,0) +"RTN","uttcovr",57,0) RTNANAL ; @TEST - routine analysis -"RTN","uttcovr",63,0) +"RTN","uttcovr",58,0) N ROUS,GLB -"RTN","uttcovr",64,0) +"RTN","uttcovr",59,0) S ROUS("%utt4")="" -"RTN","uttcovr",65,0) +"RTN","uttcovr",60,0) S GLB=$NA(^TMP("%uttcovr-rtnanal",$J)) K @GLB -"RTN","uttcovr",66,0) +"RTN","uttcovr",61,0) D RTNANAL^%ut1(.ROUS,GLB) -"RTN","uttcovr",67,0) - D CHKTF^%ut($D(@GLB@("%utt4","MAIN"))>1,"Not enough 'MAIN' nodes found") -"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",69,0) - D CHKTF^%ut($G(@GLB@("%utt4","MAIN",8))=" QUIT","Final QUIT not on expected line") -"RTN","uttcovr",70,0) +"RTN","uttcovr",62,0) + D CHKTF($D(@GLB@("%utt4","MAIN"))>1,"Not enough 'MAIN' nodes found") +"RTN","uttcovr",63,0) + D CHKTF($G(@GLB@("%utt4","MAIN",3))["D COV^%ut(""%utt3"",""D EN^%ut(""""%utt3"""",1)"",-1)","Incorrect data for line 2 in MAIN") +"RTN","uttcovr",64,0) + D CHKTF($G(@GLB@("%utt4","MAIN",9))=" QUIT","Final QUIT not on expected line") +"RTN","uttcovr",65,0) K @GLB -"RTN","uttcovr",71,0) +"RTN","uttcovr",66,0) Q -"RTN","uttcovr",72,0) +"RTN","uttcovr",67,0) ; -"RTN","uttcovr",73,0) +"RTN","uttcovr",68,0) COVCOV ; @TEST - check COVCOV - remove seen lines -"RTN","uttcovr",74,0) +"RTN","uttcovr",69,0) N C,R -"RTN","uttcovr",75,0) +"RTN","uttcovr",70,0) S C=$NA(^TMP("%uttcovr_C",$J)) -"RTN","uttcovr",76,0) +"RTN","uttcovr",71,0) S R=$NA(^TMP("%uttcovr_R",$J)) -"RTN","uttcovr",77,0) +"RTN","uttcovr",72,0) S @C@("ROU1")="" -"RTN","uttcovr",78,0) +"RTN","uttcovr",73,0) S @C@("ROU2")="",@R@("ROU2")="" -"RTN","uttcovr",79,0) +"RTN","uttcovr",74,0) S @C@("ROU2","TAG1")="",@R@("ROU2","TAG1")="" -"RTN","uttcovr",80,0) +"RTN","uttcovr",75,0) S @C@("ROU2","TAG1",1)="AAA" -"RTN","uttcovr",81,0) +"RTN","uttcovr",76,0) S @C@("ROU2","TAG1",2)="AAA",@R@("ROU2","TAG1",2)="AAA" -"RTN","uttcovr",82,0) +"RTN","uttcovr",77,0) S @C@("ROU2","TAG1",3)="ABB",@R@("ROU2","TAG1",3)="ABB" -"RTN","uttcovr",83,0) +"RTN","uttcovr",78,0) S @C@("ROU2","TAG2",6)="ACC" -"RTN","uttcovr",84,0) +"RTN","uttcovr",79,0) S @C@("ROU2","TAG2",7)="ADD",@R@("ROU2","TAG2",7)="ADD" -"RTN","uttcovr",85,0) +"RTN","uttcovr",80,0) S @C@("ROU3","TAG1",2)="BAA",@R@("ROU3","TAG1",2)="BAA" -"RTN","uttcovr",86,0) +"RTN","uttcovr",81,0) S @C@("ROU3","TAG1",3)="CAA" -"RTN","uttcovr",87,0) +"RTN","uttcovr",82,0) S @C@("ROU3","TAG1",4)="DAA" -"RTN","uttcovr",88,0) +"RTN","uttcovr",83,0) S @C@("ROU3","TAG1",5)="EAA",@R@("ROU3","TAG1",5)="EAA" -"RTN","uttcovr",89,0) +"RTN","uttcovr",84,0) S @C@("ROU3","TAG1",6)="FAA",@R@("ROU3","TAG1",6)="FAA" -"RTN","uttcovr",90,0) +"RTN","uttcovr",85,0) D COVCOV^%ut1(C,R) +"RTN","uttcovr",86,0) + D CHKTF($D(@C@("ROU2","TAG1",1)),"Invalid value for ""ROU2"",""TAG1"",1") +"RTN","uttcovr",87,0) + D CHKTF('$D(@C@("ROU2","TAG1",2)),"Unexpected value for ""ROU2"",""TAG1"",1") +"RTN","uttcovr",88,0) + D CHKTF($D(@C@("ROU2","TAG2",6)),"Invalid value for ""ROU2"",""TAG1"",1") +"RTN","uttcovr",89,0) + D CHKTF('$D(@C@("ROU2","TAG2",7)),"Unexpected value for ""ROU2"",""TAG1"",1") +"RTN","uttcovr",90,0) + D CHKTF($D(@C@("ROU3","TAG1",4)),"Invalid value for ""ROU2"",""TAG1"",1") "RTN","uttcovr",91,0) - D CHKTF^%ut($D(@C@("ROU2","TAG1",1)),"Invalid value for ""ROU2"",""TAG1"",1") + D CHKTF('$D(@C@("ROU3","TAG1",5)),"Unexpected value for ""ROU2"",""TAG1"",1") "RTN","uttcovr",92,0) - D CHKTF^%ut('$D(@C@("ROU2","TAG1",2)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",93,0) - D CHKTF^%ut($D(@C@("ROU2","TAG2",6)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",94,0) - D CHKTF^%ut('$D(@C@("ROU2","TAG2",7)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",95,0) - D CHKTF^%ut($D(@C@("ROU3","TAG1",4)),"Invalid value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",96,0) - D CHKTF^%ut('$D(@C@("ROU3","TAG1",5)),"Unexpected value for ""ROU2"",""TAG1"",1") -"RTN","uttcovr",97,0) K @C,@R -"RTN","uttcovr",98,0) +"RTN","uttcovr",93,0) Q -"RTN","uttcovr",99,0) +"RTN","uttcovr",94,0) ; -"RTN","uttcovr",100,0) -COVRPTGL ; @TEST - coverage report returning global -"RTN","uttcovr",101,0) - N GL1,GL2,GL3,GL4 -"RTN","uttcovr",102,0) +"RTN","uttcovr",95,0) +COVRPT ; @TEST +"RTN","uttcovr",96,0) + N GL1,GL2,GL3,GL4,VRBOSITY,GL5 +"RTN","uttcovr",97,0) S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 -"RTN","uttcovr",103,0) +"RTN","uttcovr",98,0) S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",104,0) +"RTN","uttcovr",99,0) S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",105,0) +"RTN","uttcovr",100,0) S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",106,0) +"RTN","uttcovr",101,0) + S GL5=$NA(^TMP("%ut1-covrpt",$J)) K @GL5 +"RTN","uttcovr",102,0) D SETGLOBS(GL1,GL2) +"RTN","uttcovr",103,0) + S VRBOSITY=1 +"RTN","uttcovr",104,0) + D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) +"RTN","uttcovr",105,0) + D CHKEQ("COVERAGE PERCENTAGE: 42.11",$G(@GL5@(5)),"Verbosity 1 - not expected percentage value") +"RTN","uttcovr",106,0) + D CHKEQ(" %ut1 42.11% 8 out of 19",$G(@GL5@(9)),"Verbosity 1 - not expected value for line 9") "RTN","uttcovr",107,0) - D COVRPTGL^%ut1(GL1,GL2,GL3,GL4) + D CHKTF('$D(@GL5@(10)),"Verbosity 1 - unexpected data in 10th line") "RTN","uttcovr",108,0) - D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES")),"0/9","Wrong number of lines covered f>>or ACTLINES") + ; "RTN","uttcovr",109,0) - D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES",9))," QUIT CNT","Wrong result for last l>>ine not covered for ACTLINES") + S VRBOSITY=2 "RTN","uttcovr",110,0) - D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST")),"8/10","Wrong number of lines covered >>for CHEKTEST") + D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) "RTN","uttcovr",111,0) - D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST",39))," . Q","Wrong result for last line >>not covered for CHEKTEST") + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL5@(10)),"Verbosity 2 - not expected value for 10th line") "RTN","uttcovr",112,0) - K @GL1,@GL2,@GL3,@GL4 + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL5@(11)),"Verbosity 2 - not expected value for 11th line") "RTN","uttcovr",113,0) - Q + D CHKTF('$D(@GL5@(12)),"Verbosity 2 - unexpected data for 12th line") "RTN","uttcovr",114,0) ; "RTN","uttcovr",115,0) -COVRPT ; @TEST -"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 GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",119,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",120,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",121,0) - S GL5=$NA(^TMP("%ut1-covrpt",$J)) K @GL5 -"RTN","uttcovr",122,0) - D SETGLOBS(GL1,GL2) -"RTN","uttcovr",123,0) - S VRBOSITY=1 -"RTN","uttcovr",124,0) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",125,0) - D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL5@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",126,0) - D CHKEQ^%ut("42.11",$G(@GL5@(9)),"Verbosity 1 - not expected value for line 9") -"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) - D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",131,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",132,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(11)),"Verbosity 2 - not expected value for 11th line") -"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) +"RTN","uttcovr",116,0) D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) -"RTN","uttcovr",137,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",138,0) - D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL5@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",139,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",140,0) - D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL5@(22)),"Verbosity 3 - unexpected value for line 22") -"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",117,0) + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL5@(10)),"Verbosity 3 - unexpected value for line 10") +"RTN","uttcovr",118,0) + D CHKEQ("ACTLINES+9: QUIT CNT",$G(@GL5@(19)),"Verbosity 3 - unexpected value for line 19") +"RTN","uttcovr",119,0) + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL5@(20)),"Verbosity 3 - unexpected value for line 20") +"RTN","uttcovr",120,0) + D CHKEQ("CHEKTEST+39: . Q",$G(@GL5@(22)),"Verbosity 3 - unexpected value for line 22") +"RTN","uttcovr",121,0) + D CHKTF('$D(@GL5@(23)),"Verbosity 3 - unexpected line 23") +"RTN","uttcovr",122,0) K @GL1,@GL2,@GL3,@GL4,@GL5 -"RTN","uttcovr",144,0) +"RTN","uttcovr",123,0) Q +"RTN","uttcovr",124,0) + ; +"RTN","uttcovr",125,0) +COVRPTLS ; @TEST - coverage report returning text in global +"RTN","uttcovr",126,0) + N GL1,GL2,GL3,GL4,VRBOSITY +"RTN","uttcovr",127,0) + S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 +"RTN","uttcovr",128,0) + S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 +"RTN","uttcovr",129,0) + S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 +"RTN","uttcovr",130,0) + S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 +"RTN","uttcovr",131,0) + D SETGLOBS(GL1,GL2) +"RTN","uttcovr",132,0) + S VRBOSITY=1 +"RTN","uttcovr",133,0) + D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) +"RTN","uttcovr",134,0) + D CHKEQ("COVERAGE PERCENTAGE: 42.11",$G(@GL4@(5)),"Verbosity 1 - not expected percentage value") +"RTN","uttcovr",135,0) + D CHKEQ(" %ut1 42.11% 8 out of 19",$G(@GL4@(9)),"Verbosity 1 - not expected value for line 9") +"RTN","uttcovr",136,0) + D CHKTF('$D(@GL4@(10)),"Verbosity 1 - unexpected data in 10th line") +"RTN","uttcovr",137,0) + K @GL4 +"RTN","uttcovr",138,0) + ; +"RTN","uttcovr",139,0) + S VRBOSITY=2 +"RTN","uttcovr",140,0) + D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) +"RTN","uttcovr",141,0) + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL4@(10)),"Verbosity 2 - not expected value for 10th line") +"RTN","uttcovr",142,0) + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL4@(11)),"Verbosity 2 - not expected value for 11th line") +"RTN","uttcovr",143,0) + D CHKTF('$D(@GL4@(12)),"Verbosity 2 - unexpected data for 12th line") +"RTN","uttcovr",144,0) + K @GL4 "RTN","uttcovr",145,0) ; "RTN","uttcovr",146,0) -COVRPTLS ; @TEST - coverage report returning text in global -"RTN","uttcovr",147,0) - N GL1,GL2,GL3,GL4,VRBOSITY -"RTN","uttcovr",148,0) - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 -"RTN","uttcovr",149,0) - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 -"RTN","uttcovr",150,0) - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 -"RTN","uttcovr",151,0) - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 -"RTN","uttcovr",152,0) - D SETGLOBS(GL1,GL2) -"RTN","uttcovr",153,0) - S VRBOSITY=1 -"RTN","uttcovr",154,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",155,0) - D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL4@(5)),"Verbosity 1 - not expected percentage value") -"RTN","uttcovr",156,0) - D CHKEQ^%ut("42.11",$G(@GL4@(9)),"Verbosity 1 - not expected value for line 9") -"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) - ; -"RTN","uttcovr",160,0) - S VRBOSITY=2 -"RTN","uttcovr",161,0) - D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",162,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 2 - not expected value for 10th line") -"RTN","uttcovr",163,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(11)),"Verbosity 2 - not expected value for 11th line") -"RTN","uttcovr",164,0) - D CHKTF^%ut('$D(@GL4@(12)),"Verbosity 2 - unexpected data for 12th line") -"RTN","uttcovr",165,0) - K @GL4 -"RTN","uttcovr",166,0) - ; -"RTN","uttcovr",167,0) S VRBOSITY=3 -"RTN","uttcovr",168,0) +"RTN","uttcovr",147,0) D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) -"RTN","uttcovr",169,0) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 3 - unexpected value for line 10") -"RTN","uttcovr",170,0) - D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL4@(19)),"Verbosity 3 - unexpected value for line 19") -"RTN","uttcovr",171,0) - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(20)),"Verbosity 3 - unexpected value for line 20") -"RTN","uttcovr",172,0) - D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL4@(22)),"Verbosity 3 - unexpected value for line 22") -"RTN","uttcovr",173,0) - D CHKTF^%ut('$D(@GL4@(23)),"Verbosity 3 - unexpected line 23") -"RTN","uttcovr",174,0) +"RTN","uttcovr",148,0) + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL4@(10)),"Verbosity 3 - unexpected value for line 10") +"RTN","uttcovr",149,0) + D CHKEQ("ACTLINES+9: QUIT CNT",$G(@GL4@(19)),"Verbosity 3 - unexpected value for line 19") +"RTN","uttcovr",150,0) + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL4@(20)),"Verbosity 3 - unexpected value for line 20") +"RTN","uttcovr",151,0) + D CHKEQ("CHEKTEST+39: . Q",$G(@GL4@(22)),"Verbosity 3 - unexpected value for line 22") +"RTN","uttcovr",152,0) + D CHKTF('$D(@GL4@(23)),"Verbosity 3 - unexpected line 23") +"RTN","uttcovr",153,0) ; -"RTN","uttcovr",175,0) +"RTN","uttcovr",154,0) K @GL1,@GL2,@GL3,@GL4 -"RTN","uttcovr",176,0) +"RTN","uttcovr",155,0) Q -"RTN","uttcovr",177,0) +"RTN","uttcovr",156,0) ; -"RTN","uttcovr",178,0) +"RTN","uttcovr",157,0) TRIMDATA ; @TEST - TRIMDATA in %utcover -"RTN","uttcovr",179,0) +"RTN","uttcovr",158,0) N GL1,XCLUD -"RTN","uttcovr",180,0) +"RTN","uttcovr",159,0) S GL1=$NA(^TMP("%uttcovr-trimdata",$J)) K @GL1 -"RTN","uttcovr",181,0) +"RTN","uttcovr",160,0) S @GL1@("GOOD",1)="1" -"RTN","uttcovr",182,0) +"RTN","uttcovr",161,0) S @GL1@("BAD",1)="1" -"RTN","uttcovr",183,0) +"RTN","uttcovr",162,0) S XCLUD("BAD")="" -"RTN","uttcovr",184,0) +"RTN","uttcovr",163,0) D TRIMDATA^%utcover(.XCLUD,GL1) -"RTN","uttcovr",185,0) - D CHKTF^%ut($D(@GL1@("GOOD")),"GOOD ENTRY WAS REMOVED") -"RTN","uttcovr",186,0) - D CHKTF^%ut('$D(@GL1@("BAD")),"ENTRY WAS NOT TRIMMED") -"RTN","uttcovr",187,0) +"RTN","uttcovr",164,0) + D CHKTF($D(@GL1@("GOOD")),"GOOD ENTRY WAS REMOVED") +"RTN","uttcovr",165,0) + D CHKTF('$D(@GL1@("BAD")),"ENTRY WAS NOT TRIMMED") +"RTN","uttcovr",166,0) K @GL1,XCLUD -"RTN","uttcovr",188,0) +"RTN","uttcovr",167,0) Q -"RTN","uttcovr",189,0) +"RTN","uttcovr",168,0) ; -"RTN","uttcovr",190,0) +"RTN","uttcovr",169,0) LIST ; @TEST - LIST in %utcover -"RTN","uttcovr",191,0) +"RTN","uttcovr",170,0) N GL1,GLT S GL1=$NA(^TMP("%uttcovr-list",$J)),GLT=$NA(^TMP("%uttcovr-text",$J)) -"RTN","uttcovr",192,0) +"RTN","uttcovr",171,0) S @GL1@("%ut1")="89/160" -"RTN","uttcovr",193,0) +"RTN","uttcovr",172,0) S @GL1@("%ut1","%ut1")="2/2" -"RTN","uttcovr",194,0) +"RTN","uttcovr",173,0) S @GL1@("%ut1","ACTLINES")="0/8" -"RTN","uttcovr",195,0) +"RTN","uttcovr",174,0) S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",196,0) +"RTN","uttcovr",175,0) S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",197,0) +"RTN","uttcovr",176,0) S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",198,0) +"RTN","uttcovr",177,0) S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",199,0) +"RTN","uttcovr",178,0) S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",200,0) +"RTN","uttcovr",179,0) S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",201,0) +"RTN","uttcovr",180,0) S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",202,0) +"RTN","uttcovr",181,0) S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",203,0) +"RTN","uttcovr",182,0) S @GL1@("%ut1","CHECKTAG")="11/11" -"RTN","uttcovr",204,0) +"RTN","uttcovr",183,0) S @GL1@("%ut1","CHEKTEST")="10/10" -"RTN","uttcovr",205,0) +"RTN","uttcovr",184,0) N XCLUD S XCLUD("%utt1")="" -"RTN","uttcovr",206,0) +"RTN","uttcovr",185,0) D LIST^%utcover(.XCLUD,1,GLT,GL1) -"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",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",209,0) - D CHKTF^%ut('$D(@GLT@(7)),"Verbosity 1 - Unexpected line 7 present") -"RTN","uttcovr",210,0) +"RTN","uttcovr",186,0) + D CHKEQ("Routine %ut1 (55.63%) 89 out of 160 lines covered",$G(@GLT@(3)),"Verbosity 1 - Unexpected text for line 3") +"RTN","uttcovr",187,0) + D CHKEQ("Overall Analysis 89 out of 160 lines covered (55% coverage)",$G(@GLT@(6)),"Verbosity 1 - unexpected text for line 6") +"RTN","uttcovr",188,0) + D CHKTF('$D(@GLT@(7)),"Verbosity 1 - Unexpected line 7 present") +"RTN","uttcovr",189,0) K @GLT -"RTN","uttcovr",211,0) +"RTN","uttcovr",190,0) ; -"RTN","uttcovr",212,0) +"RTN","uttcovr",191,0) D LIST^%utcover(.XCLUD,2,GLT,GL1) -"RTN","uttcovr",213,0) - D CHKEQ^%ut(" - Summary",$G(@GLT@(4)),"Verbosity 2 - unexpected text at line 4") -"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",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",216,0) - D CHKTF^%ut($D(@GLT@(14)),"Verbosity 2 - expected line at line 14") -"RTN","uttcovr",217,0) - D CHKTF^%ut('$D(@GLT@(15)),"Verbosity 2 - unexpected line at line 15") -"RTN","uttcovr",218,0) +"RTN","uttcovr",192,0) + D CHKEQ(" - Summary",$G(@GLT@(4)),"Verbosity 2 - unexpected text at line 4") +"RTN","uttcovr",193,0) + D CHKEQ(" Tag ACTLINES^%ut1 (0.00%) 0 out of 8 lines covered",$G(@GLT@(6)),"Verbosity 2 - unexpected text at line 6") +"RTN","uttcovr",194,0) + D CHKEQ(" Tag CHEKTEST^%ut1 (100.00%) 10 out of 10 lines covered",$G(@GLT@(8)),"Verbosity 2 - unexpected text at line 8") +"RTN","uttcovr",195,0) + D CHKTF($D(@GLT@(14)),"Verbosity 2 - expected line at line 14") +"RTN","uttcovr",196,0) + D CHKTF('$D(@GLT@(15)),"Verbosity 2 - unexpected line at line 15") +"RTN","uttcovr",197,0) K @GLT -"RTN","uttcovr",219,0) +"RTN","uttcovr",198,0) ; -"RTN","uttcovr",220,0) +"RTN","uttcovr",199,0) D LIST^%utcover(.XCLUD,3,GLT,GL1) -"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",222,0) - D CHKEQ^%ut(" ACTLINES+9 QUIT CNT",$G(@GLT@(15)),"Verbosity 3 - incorrect line 15") -"RTN","uttcovr",223,0) - D CHKTF^%ut($D(@GLT@(31)),"Verbosity 3 - expected data in line 31") -"RTN","uttcovr",224,0) - D CHKTF^%ut('$D(@GLT@(32)),"Verbosity 3 - did not expect a line 32") -"RTN","uttcovr",225,0) +"RTN","uttcovr",200,0) + D CHKEQ(" Tag %ut1^%ut1 (100.00%) 2 out of 2 lines covered",$G(@GLT@(5)),"Verbosity 3 - Incorrect text at line 5") +"RTN","uttcovr",201,0) + D CHKEQ(" ACTLINES+9 QUIT CNT",$G(@GLT@(15)),"Verbosity 3 - incorrect line 15") +"RTN","uttcovr",202,0) + D CHKTF($D(@GLT@(31)),"Verbosity 3 - expected data in line 31") +"RTN","uttcovr",203,0) + D CHKTF('$D(@GLT@(32)),"Verbosity 3 - did not expect a line 32") +"RTN","uttcovr",204,0) ; -"RTN","uttcovr",226,0) +"RTN","uttcovr",205,0) K @GL1,@GLT -"RTN","uttcovr",227,0) +"RTN","uttcovr",206,0) Q -"RTN","uttcovr",228,0) +"RTN","uttcovr",207,0) ; -"RTN","uttcovr",229,0) +"RTN","uttcovr",208,0) SETGLOBS(GL1,GL2) ; -"RTN","uttcovr",230,0) +"RTN","uttcovr",209,0) S @GL1@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",231,0) +"RTN","uttcovr",210,0) S @GL1@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",232,0) +"RTN","uttcovr",211,0) S @GL1@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",233,0) +"RTN","uttcovr",212,0) S @GL1@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",234,0) +"RTN","uttcovr",213,0) S @GL1@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",235,0) +"RTN","uttcovr",214,0) S @GL1@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",236,0) +"RTN","uttcovr",215,0) S @GL1@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",237,0) +"RTN","uttcovr",216,0) S @GL1@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",238,0) +"RTN","uttcovr",217,0) S @GL1@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",239,0) +"RTN","uttcovr",218,0) S @GL1@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",240,0) +"RTN","uttcovr",219,0) S @GL1@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",241,0) +"RTN","uttcovr",220,0) S @GL1@("%ut1","CHEKTEST",0)="CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list." -"RTN","uttcovr",242,0) +"RTN","uttcovr",221,0) S @GL1@("%ut1","CHEKTEST",13)=" N I,LIST" -"RTN","uttcovr",243,0) +"RTN","uttcovr",222,0) S @GL1@("%ut1","CHEKTEST",14)=" S I=$L($T(@(U_%utROU))) I I<0 Q ""-1^Invalid Routine Name""" -"RTN","uttcovr",244,0) +"RTN","uttcovr",223,0) S @GL1@("%ut1","CHEKTEST",31)=" D NEWSTYLE(.LIST,%utROU)" -"RTN","uttcovr",245,0) +"RTN","uttcovr",224,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",246,0) +"RTN","uttcovr",225,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",247,0) +"RTN","uttcovr",226,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",248,0) +"RTN","uttcovr",227,0) S @GL1@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",249,0) +"RTN","uttcovr",228,0) S @GL1@("%ut1","CHEKTEST",41)=" QUIT" -"RTN","uttcovr",250,0) +"RTN","uttcovr",229,0) S @GL1@("%ut1","CHEKTEST",9)=" S %ut(""ENTN"")=0 ; Number of test, sub to %utUETRY." -"RTN","uttcovr",251,0) +"RTN","uttcovr",230,0) S @GL2@("%ut1","ACTLINES")="ACTLINES" -"RTN","uttcovr",252,0) +"RTN","uttcovr",231,0) S @GL2@("%ut1","ACTLINES",0)="ACTLINES(GL) ; [Private] $$ ; Count active lines" -"RTN","uttcovr",253,0) +"RTN","uttcovr",232,0) S @GL2@("%ut1","ACTLINES",2)=" N CNT S CNT=0" -"RTN","uttcovr",254,0) +"RTN","uttcovr",233,0) S @GL2@("%ut1","ACTLINES",3)=" N REF S REF=GL" -"RTN","uttcovr",255,0) +"RTN","uttcovr",234,0) S @GL2@("%ut1","ACTLINES",4)=" N GLQL S GLQL=$QL(GL)" -"RTN","uttcovr",256,0) +"RTN","uttcovr",235,0) S @GL2@("%ut1","ACTLINES",5)=" F S REF=$Q(@REF) Q:REF="""" Q:(GL'=$NA(@REF,GLQL)) D" -"RTN","uttcovr",257,0) +"RTN","uttcovr",236,0) S @GL2@("%ut1","ACTLINES",6)=" . N REFQL S REFQL=$QL(REF)" -"RTN","uttcovr",258,0) +"RTN","uttcovr",237,0) S @GL2@("%ut1","ACTLINES",7)=" . N LASTSUB S LASTSUB=$QS(REF,REFQL)" -"RTN","uttcovr",259,0) +"RTN","uttcovr",238,0) S @GL2@("%ut1","ACTLINES",8)=" . I LASTSUB?1.N S CNT=CNT+1" -"RTN","uttcovr",260,0) +"RTN","uttcovr",239,0) S @GL2@("%ut1","ACTLINES",9)=" QUIT CNT" -"RTN","uttcovr",261,0) +"RTN","uttcovr",240,0) S @GL2@("%ut1","CHEKTEST")="CHEKTEST" -"RTN","uttcovr",262,0) +"RTN","uttcovr",241,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",263,0) +"RTN","uttcovr",242,0) S @GL2@("%ut1","CHEKTEST",39)=" . Q" -"RTN","uttcovr",264,0) +"RTN","uttcovr",243,0) Q +"RTN","uttcovr",244,0) + ; +"RTN","uttcovr",245,0) + ; +"RTN","uttcovr",246,0) +CACHECOV ;@TEST - set up routine for analysis in globals +"RTN","uttcovr",247,0) + N GLOB,GLOBT +"RTN","uttcovr",248,0) + S GLOB=$NA(^TMP("%uttcovr1",$J)),GLOBT=$NA(@GLOB@("uttcovr2",$J)) K @GLOB,@GLOBT +"RTN","uttcovr",249,0) + D CACHECOV^%ut1(GLOB,GLOBT) +"RTN","uttcovr",250,0) + D CHKEQ($T(+1^%ut),@GLOB@("%ut",1,0),"BAD FIRST LINE LOADED FOR %ut") +"RTN","uttcovr",251,0) + D CHKEQ($T(+14^%ut),@GLOBT@("%ut",14,0),"Bad 14th line loaded for %ut") +"RTN","uttcovr",252,0) + K @GLOB,@GLOBT +"RTN","uttcovr",253,0) + Q +"RTN","uttcovr",254,0) + ; +"RTN","uttcovr",255,0) +GETVALS ; no test - primarily calls to Cache classes +"RTN","uttcovr",256,0) + Q +"RTN","uttcovr",257,0) + ; +"RTN","uttcovr",258,0) +LINEDATA ; @TEST - convert code line to based on tags and offset, and identify active code lines +"RTN","uttcovr",259,0) + N CODE,LINE,OFFSET,TAG +"RTN","uttcovr",260,0) + S LINE="TEST1 ; COMMENT ON TAG",TAG="",OFFSET=0 +"RTN","uttcovr",261,0) + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; +"RTN","uttcovr",262,0) + D CHKEQ(0,CODE,"Tag with comment identified as active code") +"RTN","uttcovr",263,0) + D CHKEQ("TEST1",TAG,"Bad tag returned for TEST1") +"RTN","uttcovr",264,0) + D CHKEQ(0,OFFSET,"Bad OFFSET returned for TEST1") "RTN","uttcovr",265,0) ; +"RTN","uttcovr",266,0) + S LINE=" ; COMMENT ONLY" +"RTN","uttcovr",267,0) + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; +"RTN","uttcovr",268,0) + D CHKEQ(0,CODE,"Comment line identified as active code") +"RTN","uttcovr",269,0) + D CHKEQ("TEST1",TAG,"Bad tag returned for TEST1+1") +"RTN","uttcovr",270,0) + D CHKEQ(1,OFFSET,"Bad OFFSET returned for TEST1+1") +"RTN","uttcovr",271,0) + ; +"RTN","uttcovr",272,0) + S LINE=" S X=VALUE" +"RTN","uttcovr",273,0) + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; +"RTN","uttcovr",274,0) + D CHKEQ(1,CODE,"Code line NOT identified as active code") +"RTN","uttcovr",275,0) + D CHKEQ("TEST1",TAG,"Bad tag returned for TEST1+2") +"RTN","uttcovr",276,0) + D CHKEQ(2,OFFSET,"Bad OFFSET returned for TEST1+2") +"RTN","uttcovr",277,0) + ; +"RTN","uttcovr",278,0) + S LINE="TEST2 S X=VALUE" +"RTN","uttcovr",279,0) + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; +"RTN","uttcovr",280,0) + D CHKEQ(1,CODE,"Tag line with code NOT identified as active code") +"RTN","uttcovr",281,0) + D CHKEQ("TEST2",TAG,"Bad tag returned for TEST2") +"RTN","uttcovr",282,0) + D CHKEQ(0,OFFSET,"Bad OFFSET returned for TEST2") +"RTN","uttcovr",283,0) + ; +"RTN","uttcovr",284,0) + Q +"RTN","uttcovr",285,0) + ; +"RTN","uttcovr",286,0) +TOTAGS ;@TEST - convert from lines of code by line number to lines ordered by tag, line from tag, and only not covered +"RTN","uttcovr",287,0) + N ACTIVE,GLOB,GLOBT,X1,X0 +"RTN","uttcovr",288,0) + S GLOB=$NA(^TMP("%uttcovr",$J)),GLOBT=$NA(@GLOB@("TEST1")) K @GLOB +"RTN","uttcovr",289,0) + S @GLOBT@(1,0)="LINE1 ; CODE1 LINE1+0 NOT ACTIVE" +"RTN","uttcovr",290,0) + S @GLOBT@(2,0)=" CODE2 LINE+1 SEEN" +"RTN","uttcovr",291,0) + S @GLOBT@(2,"C")=2 +"RTN","uttcovr",292,0) + S @GLOBT@(3,0)=" CODE3 LINE1+2 NOT SEEN" +"RTN","uttcovr",293,0) + S @GLOBT@(4,0)="LINE4 CODE4 LINE4+0 SEEN" +"RTN","uttcovr",294,0) + S @GLOBT@(4,"C")=5 +"RTN","uttcovr",295,0) + S @GLOBT@(5,0)=" ; CODE5 LINE4+1 NOT ACTIVE" +"RTN","uttcovr",296,0) + S @GLOBT@(6,0)=" CODE6 LINE4+2 COVERED" +"RTN","uttcovr",297,0) + S @GLOBT@(6,"C")=2 +"RTN","uttcovr",298,0) + S @GLOBT@(7,0)="LINE7 CODE7 LINE7+0 NOT COVERED" +"RTN","uttcovr",299,0) + S @GLOBT@(8,0)=" CODE8 LINE7+1 NOT COVERED" +"RTN","uttcovr",300,0) + S ACTIVE=1 +"RTN","uttcovr",301,0) + D TOTAGS^%ut1(GLOB,ACTIVE) +"RTN","uttcovr",302,0) + D CHKEQ(1,($D(@GLOBT@("LINE1"))#2),"LINE1 TAG NOT IDENTIFIED") +"RTN","uttcovr",303,0) + D CHKEQ(1,($D(@GLOBT@("LINE4"))#2),"LINE4 TAG NOT IDENTIFIED") +"RTN","uttcovr",304,0) + D CHKEQ(1,($D(@GLOBT@("LINE7"))#2),"LINE7 TAG NOT IDENTIFIED") +"RTN","uttcovr",305,0) + D CHKEQ(0,$D(@GLOBT@("LINE1",0)),"LINE1+0 SHOULD NOT BE INCLUDED - IT IS A COMMENT") +"RTN","uttcovr",306,0) + D CHKEQ(0,$D(@GLOBT@("LINE1",1)),"LINE1+1 SHOULD NOT BE INCLUDED - IT WAS COVERED") +"RTN","uttcovr",307,0) + D CHKEQ(1,$D(@GLOBT@("LINE1",2)),"LINE1+2 SHOULD BE INCLUDED - IT WAS NOT COVERED") +"RTN","uttcovr",308,0) + D CHKEQ(0,$D(@GLOBT@("LINE4",0)),"LINE4+0 SHOULD NOT BE INCLUDED - IT WAS COVERED") +"RTN","uttcovr",309,0) + D CHKEQ(0,$D(@GLOBT@("LINE4",1)),"LINE4+1 SHOULD NOT BE INCLUDED - IT IS A COMMENT") +"RTN","uttcovr",310,0) + D CHKEQ(0,$D(@GLOBT@("LINE4",2)),"LINE4+2 SHOULD NOT BE INCLUDED - IT WAS COVERED") +"RTN","uttcovr",311,0) + D CHKEQ(1,$D(@GLOBT@("LINE7",0)),"LINE7+0 SHOULD BE INCLUDED - IT IS NOT COVERED") +"RTN","uttcovr",312,0) + D CHKEQ(1,$D(@GLOBT@("LINE7",1)),"LINE7+1 SHOULD BE INCLUDED - IT IS NOT COVERED") +"RTN","uttcovr",313,0) + K @GLOB,@GLOBT +"RTN","uttcovr",314,0) + Q +"RTN","uttcovr",315,0) + ; +"RTN","uttcovr",316,0) +CHKEQ(EXPECTED,SEEN,COMMENT) ; +"RTN","uttcovr",317,0) + D CHKEQ^%ut(EXPECTED,SEEN,$G(COMMENT)) +"RTN","uttcovr",318,0) + Q +"RTN","uttcovr",319,0) + ; +"RTN","uttcovr",320,0) +CHKTF(VALUE,COMMENT) ; +"RTN","uttcovr",321,0) + D CHKTF^%ut(VALUE,$G(COMMENT)) +"RTN","uttcovr",322,0) + Q "SEC","^DIC",17.9001,17.9001,0,"AUDIT") @ "SEC","^DIC",17.9001,17.9001,0,"DD") @@ -4507,7 +4702,6 @@ 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") @@ -4551,7 +4745,6 @@ 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") @@ -4575,7 +4768,6 @@ 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) @@ -4605,6 +4797,6 @@ 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 KID MASH*0.3*0 -$END KID MASH*0.2*0 diff --git a/Routines/%ut.m b/Routines/%ut.m index bac9962..9f47897 100644 --- a/Routines/%ut.m +++ b/Routines/%ut.m @@ -1,4 +1,4 @@ -%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;09/14/15 09:38 +%ut ;VEN-SMH/JLI - PRIMARY PROGRAM FOR M-UNIT TESTING ;12/07/15 15:32 ;;0.2;MASH UTILITIES;;;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 XTMUNIT while working for U.S. Department of Veterans Affairs 2003-2012 @@ -145,13 +145,44 @@ VERBOSE1(%utETRY,%utI) ; Print out the entry point info Q ; CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values + ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END + ; ZEXCEPT: %ut - NEWED IN EN + ; ZEXCEPT: XTGUISEP - newed in GUINEXT I '$D(XTSTVAL) D NVLDARG^%ut1("CHKTF") Q - D CHKTF^%ut1(XTSTVAL,$G(XTERMSG)) + I $G(XTERMSG)="" S XTERMSG="no failure message provided" + S %ut("CHK")=$G(%ut("CHK"))+1 + I '$D(%utGUI) D + . D SETIO^%ut1 + . I 'XTSTVAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " D + . . W XTERMSG,! S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") + . . I $D(%ut("BREAK")) BREAK ; Break upon failure + . . Q + . I XTSTVAL W "." + . D RESETIO^%ut1 + . Q + 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 Q ; CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL + N FAILMSG + ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END + ; ZEXCEPT: %ut -- NEWED IN EN + ; ZEXCEPT: XTGUISEP - newed in GUINEXT I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG^%ut1("CHKEQ") Q - D CHKEQ^%ut1(XTEXPECT,XTACTUAL,$G(XTERMSG)) + S XTACTUAL=$G(XTACTUAL),XTEXPECT=$G(XTEXPECT) + I $G(XTERMSG)="" S XTERMSG="no failure message provided" + S %ut("CHK")=%ut("CHK")+1 + I XTEXPECT'=XTACTUAL S FAILMSG="<"_XTEXPECT_"> vs <"_XTACTUAL_"> - " + I '$D(%utGUI) D + . D SETIO^%ut1 + . I XTEXPECT'=XTACTUAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W FAILMSG,XTERMSG,! D + . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") + . . I $D(%ut("BREAK")) BREAK ; Break upon failure + . . Q + . E W "." + . D RESETIO^%ut1 + . Q + 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 Q ; FAIL(XTERMSG) ; Entry point for generating a failure message @@ -240,7 +271,8 @@ ISUTEST() ; .SUPPORTED API TO DETERMINE IF CURRENTLY IN UNIT TEST Q $G(%ut)=1 ; PICKSET ; .OPT Interactive selection of MUnit Test Group - 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 + N DIC,Y,%utROU,%utLIST,DIR + I '$$ISUTEST^%ut() 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 Q ; RUNSET(SETNAME,VERBOSE) ; .SR Run with Specified Selection of MUnit Test Group diff --git a/Routines/%ut1.m b/Routines/%ut1.m index f24350c..27e9506 100644 --- a/Routines/%ut1.m +++ b/Routines/%ut1.m @@ -1,4 +1,4 @@ -%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;09/14/15 09:37 +%ut1 ;VEN/SMH/JLI - CONTINUATION OF M-UNIT PROCESSING ;12/07/15 15:34 ;;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 @@ -16,60 +16,6 @@ ; Original by Dr. Joel Ivey ; Major contributions by Dr. Sam Habiel ; - ; Changes: - ; 130726 SMH - Moved test collection logic from %utUNIT to here (multiple places) - ; 131218 SMH - dependence on XLFSTR removed - ; 131218 SMH - CHEKTEST refactored to use $TEXT instead of ^%ZOSF("LOAD") - ; 131218 SMH - CATCHERR now nulls out $ZS if on GT.M - ; - ; ------- COMMENTS moved from %ut due to space requirements - ; - ; 100622 JLI - corrected typo in comments where %utINPT was listed as %utINP - ; 100622 JLI - removed a comment which indicated data could potentially be returned from the called routine - ; in the %utINPT array. - ; 100622 JLI - added code to handle STARTUP and SHUTDOWN from GUI app - ; 110719 JLI - modified separators in GUI handling from ^ to ~~^~~ - ; in the variable XTGUISEP if using a newer version of the - ; GUI app (otherwise, it is simply set to ^) since results - ; with a series of ^ embedded disturbed the output reported - ; 130726 SMH - Fixed SETUP and TEARDOWN so that they run before/after each - ; test rather than once. General refactoring. - ; 130726 SMH - SETUT initialized IO in case it's not there to $P. Inits vars - ; using DT^DICRW. - ; 131217 SMH - Change call in SETUP to S U="^" instead of DT^DICRW - ; 131218 SMH - Any checks to $ZE will also check $ZS for GT.M. - ; 131218 SMH - Remove calls to %ZISUTL to manage devices to prevent dependence on VISTA. - ; Use %utNIT("DEV","OLD") for old devices - ; 140109 SMH - Add parameter %utBREAK - Break upon error - ; 1402 SMH - Break will cause the break to happen even on failed tests. - ; 140401 SMH - Added Succeed entry point for take it into your hands tester. - ; 140401 SMH - Reformatted the output of M-Unit so that the test's name - ; will print BEFORE the execution of the test. This has been - ; really confusing for beginning users of M-Unit, so this was - ; necessary. - ; 140401 SMH - OK message gets printed at the end of --- as [OK]. - ; 140401 SMH - FAIL message now prints. Previously, OK failed to be printed. - ; Unfortunately, that's rather passive aggressive. Now it - ; explicitly says that a test failed. - ; 140503 SMH - Fixed IO issues all over the routine. Much simpler now. - ; 140731 JLI - Combined routine changes between JLI and SMH - ; Moved routines from %utNIT and %utNIT1 to %ut and %ut1 - ; Updated unit test routines (%utt1 to %utt6) - ; Created M-UNIT TEST GROUP file at 17.9001 based on the 17.9001 file - ; 141030 JLI - Removed tag TESTCOVR and code under it, not necessary - ; since %uttcovr can handle all of the calling needed - ; Added call to run routine %utt6 if run from the top, - ; since this will run the full range of unit tests - ; Modified STARTUP and SHUTDOWN commands to handle in - ; each routine where they are available, since only - ; running one STARTUP and SHUTDOWN (the first seen by - ; the program) restricted their use in suites of multiple - ; tests. - ; 150101 JLI - Added COV entry to %ut (in addition to current in %ut1) so it is easier - ; to remember how to use it. - ; 150621 JLI - Added a global location to pick up summary data for a unit test call, so - ; programs running multiple calls can generate a summary if desired. - ; ; CHEKTEST(%utROU,%ut,%utUETRY) ; Collect Test list. ; %utROU - input - Name of routine to check for tags with @TEST attribute @@ -134,47 +80,6 @@ CHECKTAG(LINE) ; JLI 140726 check line to determine @test TAG S TAG=TAG_U_LINE Q TAG ; -CHKTF(XTSTVAL,XTERMSG) ; Entry point for checking True or False values - ; ZEXCEPT: %utERRL,%utGUI - CREATED IN SETUP, KILLED IN END - ; ZEXCEPT: %ut - NEWED IN EN - ; ZEXCEPT: XTGUISEP - newed in GUINEXT - I '$D(XTSTVAL) D NVLDARG("CHKTF") Q - I $G(XTERMSG)="" S XTERMSG="no failure message provided" - S %ut("CHK")=$G(%ut("CHK"))+1 - I '$D(%utGUI) D - . D SETIO - . I 'XTSTVAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " D - . . W XTERMSG,! S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") - . . I $D(%ut("BREAK")) BREAK ; Break upon failure - . . Q - . I XTSTVAL W "." - . D RESETIO - . Q - 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 - Q - ; -CHKEQ(XTEXPECT,XTACTUAL,XTERMSG) ; Entry point for checking values to see if they are EQUAL - N FAILMSG - ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END - ; ZEXCEPT: %ut -- NEWED IN EN - ; ZEXCEPT: XTGUISEP - newed in GUINEXT - I '$D(XTEXPECT)!'$D(XTACTUAL) D NVLDARG("CHKEQ") Q - S XTACTUAL=$G(XTACTUAL),XTEXPECT=$G(XTEXPECT) - I $G(XTERMSG)="" S XTERMSG="no failure message provided" - S %ut("CHK")=%ut("CHK")+1 - I XTEXPECT'=XTACTUAL S FAILMSG="<"_XTEXPECT_"> vs <"_XTACTUAL_"> - " - I '$D(%utGUI) D - . D SETIO - . I XTEXPECT'=XTACTUAL W !,%ut("ENT")," - " W:%ut("NAME")'="" %ut("NAME")," - " W FAILMSG,XTERMSG,! D - . . S %ut("FAIL")=%ut("FAIL")+1,%utERRL(%ut("FAIL"))=%ut("NAME"),%utERRL(%ut("FAIL"),"MSG")=XTERMSG,%utERRL(%ut("FAIL"),"ENTRY")=%ut("ENT") - . . I $D(%ut("BREAK")) BREAK ; Break upon failure - . . Q - . E W "." - . D RESETIO - . Q - 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 - Q - ; FAIL(XTERMSG) ; Entry point for generating a failure message ; ZEXCEPT: %utERRL,%utGUI -CREATED IN SETUP, KILLED IN END ; ZEXCEPT: %ut -- NEWED ON ENTRY @@ -236,45 +141,74 @@ COV(NMSP,COVCODE,VERBOSITY) ; VEN/SMH - PUBLIC ENTRY POINT; Coverage calculation ; - 3 = Break down by routine and tag, and print lines that didn't execute for each tag. ; ; ZEXCEPT: %utcovxx - SET and KILLED in this code at top level - Q:'(+$SY=47) ; GT.M only! + ; ZEXCEPT: %Monitor,%apiOBJ,DecomposeStatus,LineByLine,Start,Stop,System,class - not variables parts of classes + N COVER,COVERSAV,I,NMSP1,RTN,RTNS,ERR,STATUS + I (+$SY=47) D ; GT.M only! + . N %ZR ; GT.M specific + . D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R(RTN)). + . N RN S RN="" + . W !,"Loading routines to test coverage...",! + . F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D + . . N L2 S L2=$T(+2^@RN) + . . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out + . . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine + . ; + . M RTNS=%ZR + . K %ZR + . Q + ; + I (+$SY=0) D ; CACHE SPECIFIC + . S NMSP1=NMSP I NMSP["*" S NMSP1=$P(NMSP,"*") + . I $D(^$R(NMSP1)) S RTNS(NMSP1)="" + . I NMSP["*" S RTN=NMSP1 F S RTN=$O(^$R(RTN)) Q:RTN'[NMSP1 S RTNS(RTN)="" + . Q ; ; ZEXCEPT: CTRAP - not really a variable S VERBOSITY=+$G(VERBOSITY) ; Get 0 if not passed. - N %ZR ; GT.M specific - D SILENT^%RSEL(NMSP,"SRC") ; GT.M specific. On Cache use $O(^$R(RTN)). ; - N RN S RN="" - W !,"Loading routines to test coverage...",! - F S RN=$O(%ZR(RN)) Q:RN="" W RN," " D - . N L2 S L2=$T(+2^@RN) - . S L2=$TR(L2,$C(9,32)) ; Translate spaces and tabs out - . I $E(L2,1,2)'=";;" K %ZR(RN) ; Not a human produced routine - ; - N RTNS M RTNS=%ZR - K %ZR ; N GL S GL=$NA(^TMP("%utCOVCOHORT",$J)) I '$D(^TMP("%utcovrunning",$J)) K @GL - D RTNANAL(.RTNS,GL) - I '$D(^TMP("%utcovrunning",$J)) D + D RTNANAL(.RTNS,GL) ; save off any current coverage data + I '$D(^TMP("%utcovrunning",$J)) N EXIT S EXIT=0 D Q:EXIT . K ^TMP("%utCOVCOHORTSAV",$J) . M ^TMP("%utCOVCOHORTSAV",$J)=^TMP("%utCOVCOHORT",$J) . K ^TMP("%utCOVRESULT",$J) . S ^TMP("%utcovrunning",$J)=1,%utcovxx=1 - . VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M START PROFILING + . ; + . I (+$SY=47) VIEW "TRACE":1:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M START PROFILING + . ; + . I (+$SY=0) D ; CACHE CODE TO START PROFILING + . . S STATUS=##class(%Monitor.System.LineByLine).Start($lb(NMSP),$lb("RtnLine"),$lb($j)) + . . I +STATUS'=1 D DecomposeStatus^%apiOBJ(STATUS,.ERR,"-d") F I=1:1:ERR W ERR(I),! + . . I +STATUS'=1 K ERR S EXIT=1 + . . Q . Q DO ; Run the code, but keep our variables to ourselves. . NEW $ETRAP,$ESTACK - . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" - . USE $PRINCIPAL:(CTRAP=$C(3)) + . I (+$SY=47) D ; GT.M SPECIFIC + . . SET $ETRAP="Q:($ES&$Q) -9 Q:$ES W ""CTRL-C ENTERED""" + . . USE $PRINCIPAL:(CTRAP=$C(3)) + . . Q . NEW (DUZ,IO,COVCODE,U,DILOCKTM,DISYS,DT,DTIME,IOBS,IOF,IOM,ION,IOS,IOSL,IOST,IOT,IOXY) . XECUTE COVCODE . Q ; GT.M STOP PROFILING if this is the original level that started it - I $D(^TMP("%utcovrunning",$J)),$D(%utcovxx) VIEW "TRACE":0:$NA(^TMP("%utCOVRESULT",$J)) K %utcovxx,^TMP("%utcovrunning",$J) + I $D(^TMP("%utcovrunning",$J)),$D(%utcovxx) D + . I (+$SY=47) VIEW "TRACE":0:$NA(^TMP("%utCOVRESULT",$J)) ; GT.M SPECIFIC + . I (+$SY=0) ; CACHE SPECIFIC + . K %utcovxx,^TMP("%utcovrunning",$J) + . Q ; I '$D(^TMP("%utcovrunning",$J)) D + . I (+$SY=0) D ; CACHE SPECIFIC CODE + . . S COVERSAV=$NA(^TMP("%utCOVCOHORTSAV",$J)) K @COVERSAV + . . S COVER=$NA(^TMP("%utCOVCOHORT",$J)) K @COVER + . . D CACHECOV(COVERSAV,COVER) + . . D TOTAGS(COVERSAV,0),TOTAGS(COVER,1) + . . D ##class(%Monitor.System.LineByLine).Stop() + . . Q . D COVCOV($NA(^TMP("%utCOVCOHORT",$J)),$NA(^TMP("%utCOVRESULT",$J))) ; Venn diagram matching between globals . ; Report . I VERBOSITY=-1 D @@ -285,6 +219,69 @@ COV(NMSP,COVCODE,VERBOSITY) ; VEN/SMH - PUBLIC ENTRY POINT; Coverage calculation . Q QUIT ; +CACHECOV(GLOBSAV,GLOB) ; + ; ZEXCEPT: %Monitor,GetMetrics,GetRoutineCount,GetRoutineName,LineByLine,System,class - not variable names, part of classes + N DIF,I,METRIC,METRICNT,METRICS,MTRICNUM,ROUNAME,ROUNUM,X,XCNP,XXX + I $$ISUTEST(),'$D(^TMP("%utt4val",$J)) S ROUNUM=1,METRICS="RtnLine",METRICNT=1,ROUNAME="%ut" + I $D(^TMP("%utt4val",$J))!'$$ISUTEST() S ROUNUM=##class(%Monitor.System.LineByLine).GetRoutineCount(),METRICS=##class(%Monitor.System.LineByLine).GetMetrics(),METRICNT=$l(METRICS,",") + ; if only running to do coverage, should be 1 + S MTRICNUM=0 F I=1:1:METRICNT S METRIC=$P(METRICS,",",I) I METRIC="RtnLine" S MTRICNUM=I Q + ; + F I=1:1:ROUNUM D + . I $D(^TMP("%utt4val",$J))!'$$ISUTEST() S ROUNAME=##class(%Monitor.System.LineByLine).GetRoutineName(I) + . ; get routine loaded into location + . S DIF=$NA(@GLOBSAV@(ROUNAME)),DIF=$E(DIF,1,$L(DIF)-1)_",",XCNP=0,X=ROUNAME + . X ^%ZOSF("LOAD") + . M @GLOB@(ROUNAME)=@GLOBSAV@(ROUNAME) + . Q + ; + I $D(^TMP("%utt4val",$J))!'$$ISUTEST() F XXX=1:1:ROUNUM D GETVALS(XXX,GLOB,MTRICNUM) + Q + ; +GETVALS(ROUNUM,GLOB,MTRICNUM) ; get data on number of times a line seen (set into VAL) + ; ZEXCEPT: %Monitor,%New,%ResultSet,Execute,GetData,GetRoutineName,LineByLine,Next,System,class - not variables parts of Cache classes + N LINE,MORE,ROUNAME,RSET,VAL,X + ; + S RSET=##class(%ResultSet).%New("%Monitor.System.LineByLine:Result") + S ROUNAME=##class(%Monitor.System.LineByLine).GetRoutineName(ROUNUM) + S LINE=RSET.Execute(ROUNAME) + F LINE=1:1 S MORE=RSET.Next() Q:'MORE D + . S X=RSET.GetData(1) + . S VAL=$LI(X,MTRICNUM) + . S @GLOB@(ROUNAME,LINE,"C")=+VAL ; values are 0 if not seen, otherwises positive number + . Q + D RSET.Close() + Q + ; +TOTAGS(GLOBAL,ACTIVE) ; convert to lines from tags and set value only if not seen + N ACTIVCOD,LINE,LINENUM,ROU,ROUCODE + S ROU="" F S ROU=$O(@GLOBAL@(ROU)) Q:ROU="" D + . M ROUCODE(ROU)=@GLOBAL@(ROU) K @GLOBAL@(ROU) + . N TAG,OFFSET,OLDTAG S TAG="",OFFSET=0,OLDTAG="" + . F LINENUM=1:1 Q:'$D(ROUCODE(ROU,LINENUM,0)) D + . . S LINE=ROUCODE(ROU,LINENUM,0) + . . S ACTIVCOD=$$LINEDATA(LINE,.TAG,.OFFSET) + . . I TAG'=OLDTAG S @GLOBAL@(ROU,TAG)=TAG + . . I ACTIVE,ACTIVCOD,(+$G(ROUCODE(ROU,LINENUM,"C"))'>0) S @GLOBAL@(ROU,TAG,OFFSET)=LINE + . . I 'ACTIVE,ACTIVCOD S @GLOBAL@(ROU,TAG,OFFSET)=LINE + . . Q + . Q + Q + ; +LINEDATA(LINE,TAG,OFFSET) ; + ; LINE - input - the line of code + ; TAG - passed by reference - + ; OFFSET - passed by reference + N CODE,NEWTAG + S NEWTAG="" + S OFFSET=$G(OFFSET)+1 + F Q:$E(LINE,1)=" " Q:$E(LINE,1)=$C(9) Q:LINE="" S NEWTAG=NEWTAG_$E(LINE,1),LINE=$E(LINE,2,$L(LINE)) + S NEWTAG=$P(NEWTAG,"(") + I NEWTAG'="" S TAG=NEWTAG,OFFSET=0 + S CODE=1 + F S:(LINE="")!($E(LINE)=";") CODE=0 Q:'CODE Q:(" ."'[$E(LINE)) S LINE=$E(LINE,2,$L(LINE)) + Q CODE + ; RTNANAL(RTNS,GL) ; [Private] - Routine Analysis ; Create a global similar to the trace global produced by GT.M in GL ; Only non-comment lines are stored. @@ -369,7 +366,7 @@ COVRPTLS(C,S,R,V,X) ; ;W "LEFT: "_LEFTLINES,! S LINNUM=LINNUM+1,@X@(LINNUM)="LEFT: "_LEFTLINES ;W "COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00),! - S LINNUM=LINNUM+1,@X@(LINNUM)="COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J(ORIGLINES-LEFTLINES/ORIGLINES*100,"",2),1:100.00) + S LINNUM=LINNUM+1,@X@(LINNUM)="COVERAGE PERCENTAGE: "_$S(ORIGLINES:$J((ORIGLINES-LEFTLINES)/ORIGLINES*100,"",2),1:100.00) ;W !! S LINNUM=LINNUM+1,@X@(LINNUM)="",LINNUM=LINNUM+1,@X@(LINNUM)="" ;W "BY ROUTINE:",! @@ -380,8 +377,10 @@ COVRPTLS(C,S,R,V,X) ; . N O S O=$$ACTLINES($NA(@C@(RTN))) . N L S L=$$ACTLINES($NA(@S@(RTN))) . ;W ?3,RTN,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! - . N XX S XX=" "_RTN_" ",XX=$E(XX,1,20) - . S LINNUM=LINNUM+1,@X@(LINNUM)=XX+$S(O:$J(O-L/O*100,"",2),1:"100.00") + . N XX,XY S XX=" "_RTN_" ",XX=$E(XX,1,12) + . S XY=" "_$S(O:$J((O-L)/O*100,"",2)_"%",1:"------"),XY=$E(XY,$L(XY)-11,$L(XY)) + . ;S LINNUM=LINNUM+1,@X@(LINNUM)=XX_$S(O:$J((O-L)/O*100,"",2)_"%",1:"------")_" "_(O-L)_" out of "_O + . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_XY_" "_(O-L)_" out of "_O . I V=1 QUIT ; Just print the routine coverage for V=1 . N TAG S TAG="" . F S TAG=$O(@C@(RTN,TAG)) Q:TAG="" D @@ -389,7 +388,9 @@ COVRPTLS(C,S,R,V,X) ; . . N L S L=$$ACTLINES($NA(@S@(RTN,TAG))) . . ;W ?5,TAG,?21,$S(O:$J(O-L/O*100,"",2),1:"100.00"),! . . S XX=" "_TAG_" ",XX=$E(XX,1,20) - . . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_$S(O:$J(O-L/O*100,"",2),1:"100.00") + . . ;S XY=" ("_(O-L)_"/"_O_")",XY=$E(XY,$L(XY)-11,$L(XY)),XX=XX_XY + . . S XY=" "_$S(O:$J((O-L)/O*100,"",2)_"%",1:"------"),XY=$E(XY,$L(XY)-7,$L(XY)) + . . S LINNUM=LINNUM+1,@X@(LINNUM)=XX_XY_" "_(O-L)_" out of "_O . . I V=2 QUIT ; Just print routine/tags coverage for V=2; V=3 print uncovered lines . . N LN S LN="" . . ;F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" W TAG_"+"_LN_": "_^(LN),! @@ -419,3 +420,5 @@ COVRPTGL(C,S,R,OUT) ; [Private] - Coverage Global for silent invokers . . F S LN=$O(@S@(RTN,TAG,LN)) Q:LN="" S @OUT@(RTN,TAG,LN)=@S@(RTN,TAG,LN) QUIT ; +ISUTEST() ; + Q $$ISUTEST^%ut() diff --git a/Routines/%utcover.m b/Routines/%utcover.m index 6634d41..04d0495 100644 --- a/Routines/%utcover.m +++ b/Routines/%utcover.m @@ -1,8 +1,63 @@ -%utcover ;JLI - generic coverage and unit test runner ;09/14/15 09:37 +%utcover ;JLI - generic coverage and unit test runner ;12/07/15 16:36 ;;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 ; + ; Changes: (Moved from %ut and %ut1) + ; 130726 SMH - Moved test collection logic from %utUNIT to here (multiple places) + ; 131218 SMH - dependence on XLFSTR removed + ; 131218 SMH - CHEKTEST refactored to use $TEXT instead of ^%ZOSF("LOAD") + ; 131218 SMH - CATCHERR now nulls out $ZS if on GT.M + ; + ; ------- COMMENTS moved from %ut due to space requirements + ; + ; 100622 JLI - corrected typo in comments where %utINPT was listed as %utINP + ; 100622 JLI - removed a comment which indicated data could potentially be returned from the called routine + ; in the %utINPT array. + ; 100622 JLI - added code to handle STARTUP and SHUTDOWN from GUI app + ; 110719 JLI - modified separators in GUI handling from ^ to ~~^~~ + ; in the variable XTGUISEP if using a newer version of the + ; GUI app (otherwise, it is simply set to ^) since results + ; with a series of ^ embedded disturbed the output reported + ; 130726 SMH - Fixed SETUP and TEARDOWN so that they run before/after each + ; test rather than once. General refactoring. + ; 130726 SMH - SETUT initialized IO in case it's not there to $P. Inits vars + ; using DT^DICRW. + ; 131217 SMH - Change call in SETUP to S U="^" instead of DT^DICRW + ; 131218 SMH - Any checks to $ZE will also check $ZS for GT.M. + ; 131218 SMH - Remove calls to %ZISUTL to manage devices to prevent dependence on VISTA. + ; Use %utNIT("DEV","OLD") for old devices + ; 140109 SMH - Add parameter %utBREAK - Break upon error + ; 1402 SMH - Break will cause the break to happen even on failed tests. + ; 140401 SMH - Added Succeed entry point for take it into your hands tester. + ; 140401 SMH - Reformatted the output of M-Unit so that the test's name + ; will print BEFORE the execution of the test. This has been + ; really confusing for beginning users of M-Unit, so this was + ; necessary. + ; 140401 SMH - OK message gets printed at the end of --- as [OK]. + ; 140401 SMH - FAIL message now prints. Previously, OK failed to be printed. + ; Unfortunately, that's rather passive aggressive. Now it + ; explicitly says that a test failed. + ; 140503 SMH - Fixed IO issues all over the routine. Much simpler now. + ; 140731 JLI - Combined routine changes between JLI and SMH + ; Moved routines from %utNIT and %utNIT1 to %ut and %ut1 + ; Updated unit test routines (%utt1 to %utt6) + ; Created M-UNIT TEST GROUP file at 17.9001 based on the 17.9001 file + ; 141030 JLI - Removed tag TESTCOVR and code under it, not necessary + ; since %uttcovr can handle all of the calling needed + ; Added call to run routine %utt6 if run from the top, + ; since this will run the full range of unit tests + ; Modified STARTUP and SHUTDOWN commands to handle in + ; each routine where they are available, since only + ; running one STARTUP and SHUTDOWN (the first seen by + ; the program) restricted their use in suites of multiple + ; tests. + ; 150101 JLI - Added COV entry to %ut (in addition to current in %ut1) so it is easier + ; to remember how to use it. + ; 150621 JLI - Added a global location to pick up summary data for a unit test call, so + ; programs running multiple calls can generate a summary if desired. + ; + ; D EN^%ut("%uttcovr") ; unit tests Q ; @@ -66,23 +121,29 @@ COVERAGE(ROUNMSP,TESTROUS,XCLDROUS,RESLTLVL) ; run coverage analysis for multipl ; 3 - Full analysis for each tag, and lists out those lines which were ; not executed during the analysis ; - N I,ROU,TYPE,VAL,XCLUDE + N I,ROU,TYPE,XCLUDE S RESLTLVL=$G(RESLTLVL,1) I (RESLTLVL<1) S RESLTLVL=1 I (RESLTLVL>3) S RESLTLVL=3 M ^TMP("%utcover",$J,"TESTROUS")=TESTROUS ; D COV^%ut1(ROUNMSP,"D COVENTRY^%utcover",-1) K ^TMP("%utcover",$J,"TESTROUS") - S ROU="" F S ROU=$O(XCLDROUS(ROU)) Q:ROU="" D - . I ROU'=+ROU S XCLUDE(ROU)="" - . F I=1:1 S VAL=$P(XCLDROUS(ROU),",",I) Q:VAL="" S XCLUDE(VAL)="" - . Q + S ROU="" F S ROU=$O(XCLDROUS(ROU)) Q:ROU="" D SETROUS(.XCLUDE,.XCLDROUS,ROU) N TEXTGLOB S TEXTGLOB=$NA(^TMP("%utcover-text",$J)) K @TEXTGLOB D LIST(.XCLUDE,RESLTLVL,TEXTGLOB) F I=1:1 Q:'$D(@TEXTGLOB@(I)) W !,@TEXTGLOB@(I) K @TEXTGLOB Q ; +SETROUS(XCLUDE,XCLDROUS,ROU) ; + ; XCLUDE - passed by reference - on return contains array with indices as routines to exclude from analysis + ; XCLDROUS - passed by referenc - array may contain a comma-delimited list of routines to exclude from analysis + ; ROU - input - if non-numberic is name of routine to exclude from analysis + N I,VAL + I ROU'=+ROU S XCLUDE(ROU)="" + F I=1:1 S VAL=$P(XCLDROUS(ROU),",",I) Q:VAL="" S XCLUDE(VAL)="" + Q + ; LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; ; ZEXCEPT: TYPE1 - NEWed and set below for recursion ; input - ROULIST - a comma separated list of routine names that will @@ -103,17 +164,21 @@ LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; I '$D(GLOB) N GLOB S GLOB=$NA(^TMP("%utCOVREPORT",$J)) D TRIMDATA(.XCLDROUS,GLOB) ; remove undesired routines from data ; - N JOB,NAME,BASE + N JOB,NAME,BASE,TEXT,VAL S TOTCOV=0,TOTLIN=0 ; F NAME="%utCOVREPORT","%utCOVRESULT","%utCOVCOHORT","%utCOVCOHORTSAV" D I TYPE>1 S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" - . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") + . S TEXT="Routine "_ROUNAME_" ",TEXT=$E(TEXT,1,20) + . I CURRLIN>0 S VAL=" ("_$J((100*CURRCOV)/CURRLIN,"",2),VAL=$E(VAL,$L(VAL)-6,$L(VAL)) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=TEXT_" "_$S(CURRLIN>0:VAL_"%)",1:" ------ ")_" "_CURRCOV_" out of "_CURRLIN_" lines covered" . I TYPE>1 S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" - "_$S(TYPE=2:"Summary",1:"Detailed Breakdown") . S TAG="" F S TAG=$O(@GLOB@(ROUNAME,TAG)) Q:TAG="" S XVAL=^(TAG) D . . S LINCOV=$P(XVAL,"/"),LINTOT=$P(XVAL,"/",2) - . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" Tag "_TAG_"^"_ROUNAME_" "_LINCOV_" out of "_LINTOT_" lines covered" + . . S TEXT=" Tag "_TAG_"^"_ROUNAME_" ",TEXT=$E(TEXT,1,26) + . . I LINTOT>0 S VAL=" ("_$J((100*LINCOV)/LINTOT,"",2),VAL=$E(VAL,$L(VAL)-6,$L(VAL)) + . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=TEXT_$S(LINTOT>0:VAL_"%)",1:" ------ ")_" "_LINCOV_" out of "_LINTOT_" lines covered" . . I TYPE=2 Q . . I LINCOV=LINTOT Q . . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)=" the following is a list of the lines **NOT** covered" @@ -131,8 +196,8 @@ LIST(XCLDROUS,TYPE,TEXTGLOB,GLOB,LINNUM) ; S ROUNAME="" F S ROUNAME=$O(@GLOB@(ROUNAME)) Q:ROUNAME="" S XVAL=^(ROUNAME) D . S CURRCOV=$P(XVAL,"/"),CURRLIN=$P(XVAL,"/",2) . S TOTCOV=TOTCOV+CURRCOV,TOTLIN=TOTLIN+CURRLIN - . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_CURRCOV_" out of "_CURRLIN_" lines covered"_$S(CURRLIN>0:" ("_$P((100*CURRCOV)/CURRLIN,".")_"%)",1:"") - . Q + . I CURRLIN>0 S VAL=" ("_$J((100*CURRCOV)/CURRLIN,"",2),VAL=$E(VAL,$L(VAL)-6,$L(VAL)) + . S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Routine "_ROUNAME_" "_$S(CURRLIN>0:VAL_"%)",1:" ------ ")_" "_CURRCOV_" out of "_CURRLIN_" lines covered" S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="",LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="" S LINNUM=LINNUM+1,@TEXTGLOB@(LINNUM)="Overall Analysis "_TOTCOV_" out of "_TOTLIN_" lines covered"_$S(TOTLIN>0:" ("_$P((100*TOTCOV)/TOTLIN,".")_"% coverage)",1:"") Q diff --git a/Routines/%utt1.m b/Routines/%utt1.m index b87a7bd..7223767 100644 --- a/Routines/%utt1.m +++ b/Routines/%utt1.m @@ -1,4 +1,4 @@ -%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;09/14/15 09:38 +%utt1 ; VEN/SMH-JLI - Testing routines for M-Unit;12/07/15 17:00 ;;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 @@ -139,10 +139,25 @@ T8 ; If IO starts with another device, write to that device as if it's the prici I +$SY=0 C D:"D" I +$SY=47 C D:(delete) ;D CHKTF(Y["MAIN") ; JLI 140829 commented out, gui doesn't run verbose - D CHKTF((Y["MAIN")!(Z["Ran 1 Routine"),"Write to system during test didn't work") + D CHKTF((Y["MAIN")!(Z["T2 - Test 2"),"Write to system during test didn't work") S IO=$P QUIT ; +COVRPTGL ; + N GL1,GL2,GL3,GL4 + S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 + S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 + S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 + S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 + D SETGLOBS^%uttcovr(GL1,GL2) + D COVRPTGL^%ut1(GL1,GL2,GL3,GL4) + D CHKEQ($G(@GL4@("%ut1","ACTLINES")),"0/9","Wrong number of lines covered f>>or ACTLINES") + D CHKEQ($G(@GL4@("%ut1","ACTLINES",9))," QUIT CNT","Wrong result for last l>>ine not covered for ACTLINES") + D CHKEQ($G(@GL4@("%ut1","CHEKTEST")),"8/10","Wrong number of lines covered >>for CHEKTEST") + D CHKEQ($G(@GL4@("%ut1","CHEKTEST",39))," . Q","Wrong result for last line >>not covered for CHEKTEST") + K @GL1,@GL2,@GL3,@GL4 + Q + ; LO(X) Q $TR(X,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz") ; Shortcut methods for M-Unit CHKTF(X,Y) ; @@ -159,6 +174,7 @@ XTENT ; Entry points ;;T6;Succeed Entry Point ;;T7;Make sure we write to principal even though we are on another device ;;T8;If IO starts with another device, write to that device as if it's the pricipal device + ;;COVRPTGL;coverage report returning global ; XTROU ; Routines containing additional tests ;;%utt2; old %utNITU diff --git a/Routines/%utt4.m b/Routines/%utt4.m index 2a711b4..60f61d0 100644 --- a/Routines/%utt4.m +++ b/Routines/%utt4.m @@ -1,5 +1,5 @@ -%utt4 ; VEN/SMH/JLI - Coverage Test Runner;09/14/15 09:38 - ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 7 +%utt4 ; VEN/SMH/JLI - Coverage Test Runner;12/06/15 19:05 + ;;0.2;MASH UTILITIES;;Sep 14, 2015;Build 1 ; 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 @@ -12,10 +12,11 @@ XTMUNITW ; VEN/SMH - Coverage Test Runner;2014-04-17 3:30 PM ; MAIN ; @TEST - Test coverage calculations Q:$D(^TMP("%uttcovr",$J)) ; already running coverage analysis from %uttcovr - Q:'(+$SY=47) ; GT.M ONLY - D COV^%ut1("%utt3","D EN^%ut(""%utt3"",1)",-1) ; Only produce output global. + S ^TMP("%utt4val",$J)=1 + D COV^%ut("%utt3","D EN^%ut(""%utt3"",1)",-1) ; Only produce output global. D CHKEQ^%ut("14/19",^TMP("%utCOVREPORT",$J)) D CHKEQ^%ut("2/5",^TMP("%utCOVREPORT",$J,"%utt3","INTERNAL")) D CHKTF^%ut($D(^TMP("%utCOVREPORT",$J,"%utt3","T2",4))) D CHKEQ^%ut("1/1",^TMP("%utCOVREPORT",$J,"%utt3","SETUP")) + K ^TMP("%utt4val",$J) QUIT diff --git a/Routines/%utt6.m b/Routines/%utt6.m index 6ff9888..9955e93 100644 --- a/Routines/%utt6.m +++ b/Routines/%utt6.m @@ -1,4 +1,4 @@ -%utt6 ;JLI - Unit tests for MUnit functionality ;09/14/15 09:38 +%utt6 ;JLI - Unit tests for MUnit functionality ;12/07/15 16:40 ;;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 @@ -77,12 +77,28 @@ VERBOSE ; ; test will need to be updated to reflect the change(s) ; END OF WARNING -- END OF WARNING -- END OF WARNING ; +SETROUS ; @TEST - generate array with indices of routines to exclude + N ROU,XCLDROUS,ROULIST + S XCLDROUS(1)="ROU1NAME,ROU2NAME" + S XCLDROUS("ROUNAME3")="ROUNAME4,ROUNAME5" + D SETROUS^%utcover(.ROULIST,.XCLDROUS,1) + D CHKTF('$D(ROULIST(1)),"SETROUS returned number for routine") + D CHKTF($D(ROULIST("ROU1NAME")),"Didn't get first name on numeric subscript") + D CHKTF($D(ROULIST("ROU2NAME")),"Didn't get second name on numeric subscript") + D SETROUS^%utcover(.ROULIST,.XCLDROUS,"ROUNAME3") + D CHKTF($D(ROULIST("ROUNAME3")),"Didn't get name for routine argument") + D CHKTF($D(ROULIST("ROUNAME4")),"Didn't get first name on routine subscript") + D CHKTF($D(ROULIST("ROUNAME5")),"Didn't get second name on routine subscript") + Q + ; NEWSTYLE ; tests return of valid new style or @TEST indicators N LIST D NEWSTYLE^%ut1(.LIST,"%utt5") D CHKEQ^%ut(LIST,1,"Returned an incorrect number ("_LIST_") of New Style indicators - should be one") I LIST>0 D CHKEQ^%ut(LIST(1),"NEWSTYLE^identify new style test indicator functionality","Returned incorrect TAG^reason "_LIST(1)) I LIST>0 D CHKEQ^%ut($G(LIST(2)),"","Returned a value for LIST(2) - should not have any value (i.e., null)") + ; the following is basically just for coverage + D PICKSET^%ut Q ; CKGUISET ; @@ -90,25 +106,29 @@ CKGUISET ; I '$D(%utt6var) Q N MAX S MAX=$O(^TMP("%utt6_GUISET",$J,""),-1) - D CHKTF^%ut(^TMP("%utt6_GUISET",$J,MAX)["%utt6^NEWSTYLE","GUISET returned incorrect list") + D CHKTF(^TMP("%utt6_GUISET",$J,MAX)["%utt6^NEWSTYLE","GUISET returned incorrect list") Q ; CHKCMDLN ; check command line processing of %utt5 ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag I '$D(%utt6var) Q - D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) - D CHKTF^%ut($D(^TMP("%utt5_C",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) - D CHKTF^%ut($O(^TMP("%utt5_C",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5_C",$J,1,""))_"' should be 'STARTUP'") - D CHKTF^%ut($O(^TMP("%utt5_C",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_C",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") + D CHKTF($D(^TMP("%utt5_C",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) + D CHKTF($D(^TMP("%utt5_C",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) + D CHKTF($O(^TMP("%utt5_C",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5_C",$J,1,""))_"' should be 'STARTUP'") + D CHKTF($O(^TMP("%utt5_C",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_C",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") Q ; CHKGUI ; check GUI processing of %utt5 ; ZEXCEPT: JLIEXPCT,%utt6var - if present NEWed and created in code following VERBOSE tag I '$D(%utt6var) Q - D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) - D CHKTF^%ut($D(^TMP("%utt5_G",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) - D CHKTF^%ut($O(^TMP("%utt5_G",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5Z_G",1,""))_"' should be 'STARTUP'") - D CHKTF^%ut($O(^TMP("%utt5_G",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_G",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") + D CHKTF($D(^TMP("%utt5_G",$J,JLIEXPCT))=10,"Not enough entries in %utt5 expected "_JLIEXPCT) + D CHKTF($D(^TMP("%utt5_G",$J,JLIEXPCT+1))=0,"Too many entries in %utt5 expected "_JLIEXPCT) + D CHKTF($O(^TMP("%utt5_G",$J,1,""))="STARTUP","Incorrect function for entry 1,'"_$O(^TMP("%utt5Z_G",1,""))_"' should be 'STARTUP'") + D CHKTF($O(^TMP("%utt5_G",$J,JLIEXPCT,""))="SHUTDOWN","Incorrect function for entry "_JLIEXPCT_", '"_$O(^TMP("%utt5_G",$J,JLIEXPCT,""))_"' should be 'SHUTDOWN'") + Q + ; +CHKTF(VALUE,MESSAGE) ; + D CHKTF^%ut($G(VALUE),$G(MESSAGE)) Q ; XTENT ; diff --git a/Routines/%uttcovr.m b/Routines/%uttcovr.m index 6d84de1..67a0188 100644 --- a/Routines/%uttcovr.m +++ b/Routines/%uttcovr.m @@ -1,4 +1,4 @@ -%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;09/14/15 09:35 +%uttcovr ;JIVEYSOFT/JLI - runs coverage tests on %ut and %ut1 routines via unit tests ;12/07/15 16:46 ;;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 @@ -10,11 +10,6 @@ ; Have it run the following entry points or, if no ^, call EN^%ut with routine name S RUNCODE(1)="^%utt1,%utt1,^%utt6,VERBOSE^%utt6,%uttcovr,^%ut,^%ut1,^%utcover" S RUNCODE("ENTRY^%uttcovr")="" - I '(+$SY=47) D Q ; GT.M only! - . W !,"This coverage analysis is currently only available in GT.M" - . N VAL R !,"Do you want to run the same tests using MULTAPIS Y/N ? ",VAL:$G(DTIME,300) Q:'$T - . I "Yy"[$E(VAL) D MULTAPIS^%ut(.RUNCODE) - . Q ; Have the analysis EXCLUDE the following routines from coverage - unit test routines S XCLUDE(1)="%utt1,%utt2,%utt3,%utt4,%utt5,%utt6,%uttcovr" S XCLUDE(2)="%utf2hex" ; a GT.M system file, although it wasn't showing up anyway @@ -64,9 +59,9 @@ RTNANAL ; @TEST - routine analysis S ROUS("%utt4")="" S GLB=$NA(^TMP("%uttcovr-rtnanal",$J)) K @GLB D RTNANAL^%ut1(.ROUS,GLB) - D CHKTF^%ut($D(@GLB@("%utt4","MAIN"))>1,"Not enough 'MAIN' nodes found") - D CHKTF^%ut($G(@GLB@("%utt4","MAIN",2))["+$SY=47","Check for GT.M not found in expected line") - D CHKTF^%ut($G(@GLB@("%utt4","MAIN",8))=" QUIT","Final QUIT not on expected line") + D CHKTF($D(@GLB@("%utt4","MAIN"))>1,"Not enough 'MAIN' nodes found") + D CHKTF($G(@GLB@("%utt4","MAIN",3))["D COV^%ut(""%utt3"",""D EN^%ut(""""%utt3"""",1)"",-1)","Incorrect data for line 2 in MAIN") + D CHKTF($G(@GLB@("%utt4","MAIN",9))=" QUIT","Final QUIT not on expected line") K @GLB Q ; @@ -88,30 +83,15 @@ COVCOV ; @TEST - check COVCOV - remove seen lines S @C@("ROU3","TAG1",5)="EAA",@R@("ROU3","TAG1",5)="EAA" S @C@("ROU3","TAG1",6)="FAA",@R@("ROU3","TAG1",6)="FAA" D COVCOV^%ut1(C,R) - D CHKTF^%ut($D(@C@("ROU2","TAG1",1)),"Invalid value for ""ROU2"",""TAG1"",1") - D CHKTF^%ut('$D(@C@("ROU2","TAG1",2)),"Unexpected value for ""ROU2"",""TAG1"",1") - D CHKTF^%ut($D(@C@("ROU2","TAG2",6)),"Invalid value for ""ROU2"",""TAG1"",1") - D CHKTF^%ut('$D(@C@("ROU2","TAG2",7)),"Unexpected value for ""ROU2"",""TAG1"",1") - D CHKTF^%ut($D(@C@("ROU3","TAG1",4)),"Invalid value for ""ROU2"",""TAG1"",1") - D CHKTF^%ut('$D(@C@("ROU3","TAG1",5)),"Unexpected value for ""ROU2"",""TAG1"",1") + D CHKTF($D(@C@("ROU2","TAG1",1)),"Invalid value for ""ROU2"",""TAG1"",1") + D CHKTF('$D(@C@("ROU2","TAG1",2)),"Unexpected value for ""ROU2"",""TAG1"",1") + D CHKTF($D(@C@("ROU2","TAG2",6)),"Invalid value for ""ROU2"",""TAG1"",1") + D CHKTF('$D(@C@("ROU2","TAG2",7)),"Unexpected value for ""ROU2"",""TAG1"",1") + D CHKTF($D(@C@("ROU3","TAG1",4)),"Invalid value for ""ROU2"",""TAG1"",1") + D CHKTF('$D(@C@("ROU3","TAG1",5)),"Unexpected value for ""ROU2"",""TAG1"",1") K @C,@R Q ; -COVRPTGL ; @TEST - coverage report returning global - N GL1,GL2,GL3,GL4 - S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 - S GL2=$NA(^TMP("%utCOVCOHORTx",$J)) K @GL2 - S GL3=$NA(^TMP("%utCOVRESULTx",$J)) K @GL3 - S GL4=$NA(^TMP("%utCOVREPORTx",$J)) K @GL4 - D SETGLOBS(GL1,GL2) - D COVRPTGL^%ut1(GL1,GL2,GL3,GL4) - D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES")),"0/9","Wrong number of lines covered f>>or ACTLINES") - D CHKEQ^%ut($G(@GL4@("%ut1","ACTLINES",9))," QUIT CNT","Wrong result for last l>>ine not covered for ACTLINES") - D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST")),"8/10","Wrong number of lines covered >>for CHEKTEST") - D CHKEQ^%ut($G(@GL4@("%ut1","CHEKTEST",39))," . Q","Wrong result for last line >>not covered for CHEKTEST") - K @GL1,@GL2,@GL3,@GL4 - Q - ; COVRPT ; @TEST N GL1,GL2,GL3,GL4,VRBOSITY,GL5 S GL1=$NA(^TMP("%utCOVCOHORTSAVx",$J)) K @GL1 @@ -122,24 +102,23 @@ COVRPT ; @TEST D SETGLOBS(GL1,GL2) S VRBOSITY=1 D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) - D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL5@(5)),"Verbosity 1 - not expected percentage value") - D CHKEQ^%ut("42.11",$G(@GL5@(9)),"Verbosity 1 - not expected value for line 9") - D CHKTF^%ut('$D(@GL5@(10)),"Verbosity 1 - unexpected data in 10th line") + D CHKEQ("COVERAGE PERCENTAGE: 42.11",$G(@GL5@(5)),"Verbosity 1 - not expected percentage value") + D CHKEQ(" %ut1 42.11% 8 out of 19",$G(@GL5@(9)),"Verbosity 1 - not expected value for line 9") + D CHKTF('$D(@GL5@(10)),"Verbosity 1 - unexpected data in 10th line") ; S VRBOSITY=2 D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 2 - not expected value for 10th line") - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(11)),"Verbosity 2 - not expected value for 11th line") - D CHKTF^%ut('$D(@GL5@(12)),"Verbosity 2 - unexpected data for 12th line") + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL5@(10)),"Verbosity 2 - not expected value for 10th line") + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL5@(11)),"Verbosity 2 - not expected value for 11th line") + D CHKTF('$D(@GL5@(12)),"Verbosity 2 - unexpected data for 12th line") ; S VRBOSITY=3 D COVRPT^%ut1(GL1,GL2,GL3,VRBOSITY) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL5@(10)),"Verbosity 3 - unexpected value for line 10") - D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL5@(19)),"Verbosity 3 - unexpected value for line 19") - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL5@(20)),"Verbosity 3 - unexpected value for line 20") - D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL5@(22)),"Verbosity 3 - unexpected value for line 22") - D CHKTF^%ut('$D(@GL5@(23)),"Verbosity 3 - unexpected line 23") - ; + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL5@(10)),"Verbosity 3 - unexpected value for line 10") + D CHKEQ("ACTLINES+9: QUIT CNT",$G(@GL5@(19)),"Verbosity 3 - unexpected value for line 19") + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL5@(20)),"Verbosity 3 - unexpected value for line 20") + D CHKEQ("CHEKTEST+39: . Q",$G(@GL5@(22)),"Verbosity 3 - unexpected value for line 22") + D CHKTF('$D(@GL5@(23)),"Verbosity 3 - unexpected line 23") K @GL1,@GL2,@GL3,@GL4,@GL5 Q ; @@ -152,25 +131,25 @@ COVRPTLS ; @TEST - coverage report returning text in global D SETGLOBS(GL1,GL2) S VRBOSITY=1 D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) - D CHKEQ^%ut("COVERAGE PERCENTAGE: 42.11",$G(@GL4@(5)),"Verbosity 1 - not expected percentage value") - D CHKEQ^%ut("42.11",$G(@GL4@(9)),"Verbosity 1 - not expected value for line 9") - D CHKTF^%ut('$D(@GL4@(10)),"Verbosity 1 - unexpected data in 10th line") + D CHKEQ("COVERAGE PERCENTAGE: 42.11",$G(@GL4@(5)),"Verbosity 1 - not expected percentage value") + D CHKEQ(" %ut1 42.11% 8 out of 19",$G(@GL4@(9)),"Verbosity 1 - not expected value for line 9") + D CHKTF('$D(@GL4@(10)),"Verbosity 1 - unexpected data in 10th line") K @GL4 ; S VRBOSITY=2 D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 2 - not expected value for 10th line") - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(11)),"Verbosity 2 - not expected value for 11th line") - D CHKTF^%ut('$D(@GL4@(12)),"Verbosity 2 - unexpected data for 12th line") + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL4@(10)),"Verbosity 2 - not expected value for 10th line") + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL4@(11)),"Verbosity 2 - not expected value for 11th line") + D CHKTF('$D(@GL4@(12)),"Verbosity 2 - unexpected data for 12th line") K @GL4 ; S VRBOSITY=3 D COVRPTLS^%ut1(GL1,GL2,GL3,VRBOSITY,GL4) - D CHKEQ^%ut(" ACTLINES 0.00",$G(@GL4@(10)),"Verbosity 3 - unexpected value for line 10") - D CHKEQ^%ut("ACTLINES+9: QUIT CNT",$G(@GL4@(19)),"Verbosity 3 - unexpected value for line 19") - D CHKEQ^%ut(" CHEKTEST 80.00",$G(@GL4@(20)),"Verbosity 3 - unexpected value for line 20") - D CHKEQ^%ut("CHEKTEST+39: . Q",$G(@GL4@(22)),"Verbosity 3 - unexpected value for line 22") - D CHKTF^%ut('$D(@GL4@(23)),"Verbosity 3 - unexpected line 23") + D CHKEQ(" ACTLINES 0.00% 0 out of 9",$G(@GL4@(10)),"Verbosity 3 - unexpected value for line 10") + D CHKEQ("ACTLINES+9: QUIT CNT",$G(@GL4@(19)),"Verbosity 3 - unexpected value for line 19") + D CHKEQ(" CHEKTEST 80.00% 8 out of 10",$G(@GL4@(20)),"Verbosity 3 - unexpected value for line 20") + D CHKEQ("CHEKTEST+39: . Q",$G(@GL4@(22)),"Verbosity 3 - unexpected value for line 22") + D CHKTF('$D(@GL4@(23)),"Verbosity 3 - unexpected line 23") ; K @GL1,@GL2,@GL3,@GL4 Q @@ -182,8 +161,8 @@ TRIMDATA ; @TEST - TRIMDATA in %utcover S @GL1@("BAD",1)="1" S XCLUD("BAD")="" D TRIMDATA^%utcover(.XCLUD,GL1) - D CHKTF^%ut($D(@GL1@("GOOD")),"GOOD ENTRY WAS REMOVED") - D CHKTF^%ut('$D(@GL1@("BAD")),"ENTRY WAS NOT TRIMMED") + D CHKTF($D(@GL1@("GOOD")),"GOOD ENTRY WAS REMOVED") + D CHKTF('$D(@GL1@("BAD")),"ENTRY WAS NOT TRIMMED") K @GL1,XCLUD Q ; @@ -204,24 +183,24 @@ LIST ; @TEST - LIST in %utcover S @GL1@("%ut1","CHEKTEST")="10/10" N XCLUD S XCLUD("%utt1")="" D LIST^%utcover(.XCLUD,1,GLT,GL1) - D CHKEQ^%ut("Routine %ut1 89 out of 160 lines covered (55%)",$G(@GLT@(3)),"Verbosity 1 - Unexpected text for line 3") - D CHKEQ^%ut("Overall Analysis 89 out of 160 lines covered (55% coverage)",$G(@GLT@(6)),"Verbosity 1 - unexpected text for line 6") - D CHKTF^%ut('$D(@GLT@(7)),"Verbosity 1 - Unexpected line 7 present") + D CHKEQ("Routine %ut1 (55.63%) 89 out of 160 lines covered",$G(@GLT@(3)),"Verbosity 1 - Unexpected text for line 3") + D CHKEQ("Overall Analysis 89 out of 160 lines covered (55% coverage)",$G(@GLT@(6)),"Verbosity 1 - unexpected text for line 6") + D CHKTF('$D(@GLT@(7)),"Verbosity 1 - Unexpected line 7 present") K @GLT ; D LIST^%utcover(.XCLUD,2,GLT,GL1) - D CHKEQ^%ut(" - Summary",$G(@GLT@(4)),"Verbosity 2 - unexpected text at line 4") - D CHKEQ^%ut(" Tag ACTLINES^%ut1 0 out of 8 lines covered",$G(@GLT@(6)),"Verbosity 2 - unexpected text at line 6") - D CHKEQ^%ut(" Tag CHEKTEST^%ut1 10 out of 10 lines covered",$G(@GLT@(8)),"Verbosity 2 - unexpected text at line 8") - D CHKTF^%ut($D(@GLT@(14)),"Verbosity 2 - expected line at line 14") - D CHKTF^%ut('$D(@GLT@(15)),"Verbosity 2 - unexpected line at line 15") + D CHKEQ(" - Summary",$G(@GLT@(4)),"Verbosity 2 - unexpected text at line 4") + D CHKEQ(" Tag ACTLINES^%ut1 (0.00%) 0 out of 8 lines covered",$G(@GLT@(6)),"Verbosity 2 - unexpected text at line 6") + D CHKEQ(" Tag CHEKTEST^%ut1 (100.00%) 10 out of 10 lines covered",$G(@GLT@(8)),"Verbosity 2 - unexpected text at line 8") + D CHKTF($D(@GLT@(14)),"Verbosity 2 - expected line at line 14") + D CHKTF('$D(@GLT@(15)),"Verbosity 2 - unexpected line at line 15") K @GLT ; D LIST^%utcover(.XCLUD,3,GLT,GL1) - D CHKEQ^%ut(" Tag %ut1^%ut1 2 out of 2 lines covered",$G(@GLT@(5)),"Verbosity 3 - Incorrect text at line 5") - D CHKEQ^%ut(" ACTLINES+9 QUIT CNT",$G(@GLT@(15)),"Verbosity 3 - incorrect line 15") - D CHKTF^%ut($D(@GLT@(31)),"Verbosity 3 - expected data in line 31") - D CHKTF^%ut('$D(@GLT@(32)),"Verbosity 3 - did not expect a line 32") + D CHKEQ(" Tag %ut1^%ut1 (100.00%) 2 out of 2 lines covered",$G(@GLT@(5)),"Verbosity 3 - Incorrect text at line 5") + D CHKEQ(" ACTLINES+9 QUIT CNT",$G(@GLT@(15)),"Verbosity 3 - incorrect line 15") + D CHKTF($D(@GLT@(31)),"Verbosity 3 - expected data in line 31") + D CHKTF('$D(@GLT@(32)),"Verbosity 3 - did not expect a line 32") ; K @GL1,@GLT Q @@ -263,3 +242,81 @@ SETGLOBS(GL1,GL2) ; S @GL2@("%ut1","CHEKTEST",39)=" . Q" Q ; + ; +CACHECOV ;@TEST - set up routine for analysis in globals + N GLOB,GLOBT + S GLOB=$NA(^TMP("%uttcovr1",$J)),GLOBT=$NA(@GLOB@("uttcovr2",$J)) K @GLOB,@GLOBT + D CACHECOV^%ut1(GLOB,GLOBT) + D CHKEQ($T(+1^%ut),@GLOB@("%ut",1,0),"BAD FIRST LINE LOADED FOR %ut") + D CHKEQ($T(+14^%ut),@GLOBT@("%ut",14,0),"Bad 14th line loaded for %ut") + K @GLOB,@GLOBT + Q + ; +GETVALS ; no test - primarily calls to Cache classes + Q + ; +LINEDATA ; @TEST - convert code line to based on tags and offset, and identify active code lines + N CODE,LINE,OFFSET,TAG + S LINE="TEST1 ; COMMENT ON TAG",TAG="",OFFSET=0 + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; + D CHKEQ(0,CODE,"Tag with comment identified as active code") + D CHKEQ("TEST1",TAG,"Bad tag returned for TEST1") + D CHKEQ(0,OFFSET,"Bad OFFSET returned for TEST1") + ; + S LINE=" ; COMMENT ONLY" + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; + D CHKEQ(0,CODE,"Comment line identified as active code") + D CHKEQ("TEST1",TAG,"Bad tag returned for TEST1+1") + D CHKEQ(1,OFFSET,"Bad OFFSET returned for TEST1+1") + ; + S LINE=" S X=VALUE" + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; + D CHKEQ(1,CODE,"Code line NOT identified as active code") + D CHKEQ("TEST1",TAG,"Bad tag returned for TEST1+2") + D CHKEQ(2,OFFSET,"Bad OFFSET returned for TEST1+2") + ; + S LINE="TEST2 S X=VALUE" + S CODE=$$LINEDATA^%ut1(LINE,.TAG,.OFFSET) ; + D CHKEQ(1,CODE,"Tag line with code NOT identified as active code") + D CHKEQ("TEST2",TAG,"Bad tag returned for TEST2") + D CHKEQ(0,OFFSET,"Bad OFFSET returned for TEST2") + ; + Q + ; +TOTAGS ;@TEST - convert from lines of code by line number to lines ordered by tag, line from tag, and only not covered + N ACTIVE,GLOB,GLOBT,X1,X0 + S GLOB=$NA(^TMP("%uttcovr",$J)),GLOBT=$NA(@GLOB@("TEST1")) K @GLOB + S @GLOBT@(1,0)="LINE1 ; CODE1 LINE1+0 NOT ACTIVE" + S @GLOBT@(2,0)=" CODE2 LINE+1 SEEN" + S @GLOBT@(2,"C")=2 + S @GLOBT@(3,0)=" CODE3 LINE1+2 NOT SEEN" + S @GLOBT@(4,0)="LINE4 CODE4 LINE4+0 SEEN" + S @GLOBT@(4,"C")=5 + S @GLOBT@(5,0)=" ; CODE5 LINE4+1 NOT ACTIVE" + S @GLOBT@(6,0)=" CODE6 LINE4+2 COVERED" + S @GLOBT@(6,"C")=2 + S @GLOBT@(7,0)="LINE7 CODE7 LINE7+0 NOT COVERED" + S @GLOBT@(8,0)=" CODE8 LINE7+1 NOT COVERED" + S ACTIVE=1 + D TOTAGS^%ut1(GLOB,ACTIVE) + D CHKEQ(1,($D(@GLOBT@("LINE1"))#2),"LINE1 TAG NOT IDENTIFIED") + D CHKEQ(1,($D(@GLOBT@("LINE4"))#2),"LINE4 TAG NOT IDENTIFIED") + D CHKEQ(1,($D(@GLOBT@("LINE7"))#2),"LINE7 TAG NOT IDENTIFIED") + D CHKEQ(0,$D(@GLOBT@("LINE1",0)),"LINE1+0 SHOULD NOT BE INCLUDED - IT IS A COMMENT") + D CHKEQ(0,$D(@GLOBT@("LINE1",1)),"LINE1+1 SHOULD NOT BE INCLUDED - IT WAS COVERED") + D CHKEQ(1,$D(@GLOBT@("LINE1",2)),"LINE1+2 SHOULD BE INCLUDED - IT WAS NOT COVERED") + D CHKEQ(0,$D(@GLOBT@("LINE4",0)),"LINE4+0 SHOULD NOT BE INCLUDED - IT WAS COVERED") + D CHKEQ(0,$D(@GLOBT@("LINE4",1)),"LINE4+1 SHOULD NOT BE INCLUDED - IT IS A COMMENT") + D CHKEQ(0,$D(@GLOBT@("LINE4",2)),"LINE4+2 SHOULD NOT BE INCLUDED - IT WAS COVERED") + D CHKEQ(1,$D(@GLOBT@("LINE7",0)),"LINE7+0 SHOULD BE INCLUDED - IT IS NOT COVERED") + D CHKEQ(1,$D(@GLOBT@("LINE7",1)),"LINE7+1 SHOULD BE INCLUDED - IT IS NOT COVERED") + K @GLOB,@GLOBT + Q + ; +CHKEQ(EXPECTED,SEEN,COMMENT) ; + D CHKEQ^%ut(EXPECTED,SEEN,$G(COMMENT)) + Q + ; +CHKTF(VALUE,COMMENT) ; + D CHKTF^%ut(VALUE,$G(COMMENT)) + Q diff --git a/Routines/ZZUTPOST.m b/Routines/ZZUTPOST.m index 556e698..80d2b17 100644 --- a/Routines/ZZUTPOST.m +++ b/Routines/ZZUTPOST.m @@ -1,6 +1,6 @@ -%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 Sep 14, 2015 by Joel L. Ivey under the Apache 2 license (http://www.apache.org/licenses/LICENSE-2.0.html) +%utPOST ;VEN-SMH/JLI - post install for M-Unit Test software ;12/13/15 15:36 + ;;0.3;MASH UTILITIES;;;Build 1 + ; Submitted to OSEHRA Dec 07, 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/ZZUTPRE.m b/Routines/ZZUTPRE.m index 396a5d9..76acf06 100644 --- a/Routines/ZZUTPRE.m +++ b/Routines/ZZUTPRE.m @@ -1,6 +1,6 @@ -%utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;10/08/15 19:11 - ;;0.2;MASH UTILITIES;;;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) +%utPRE ;VEN/SMH/JLI - pre installation routine to set up MASH UTILITIES package and assign %ut routines and globals ;12/13/15 15:35 + ;;0.3;MASH UTILITIES;;;Build 1 + ; Submitted to OSEHRA Dec 07, 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 ; ;