--- a/trunk/Library/POUs/FB_TestResults/svnobj
+++ b/trunk/Library/POUs/FB_TestResults/svnobj
@@ -1,5 +1,5 @@
-Gx_lv7!0…jüo¥.'ì¸@©"KVSystem.StringL{6f9dac99-8de1-4efc-8465-68ac443b7d08}SpecialFuncL{0db3d7bb-cde0-4416-9a7b-ce49a0124323}NoneImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocument	L{f3878285-8e4f-490b-bb1b-9acbb7eb04db}
-TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}Id
longTagTextx(* The body of the function block stores the test results *)ÞIF StoringTestSuiteResultNumber <= GVL_CfUnit.NumberOfInitializedTestSuites AND NOT StoredTestSuiteResults THENî    StoringTestSuiteTrigger(CLK := GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.AreAllTestsFinished());J    IF StoringTestSuiteTrigger.Q THENž        (* Remove everything except the program name + "." + test suite name *)è        TestSuiteName := F_RemoveInstancePathAndProjectNameFromTestInstancePath(TestInstancePath := GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetInstancePath());T        (* Store test suite name and ID *)¼        TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].Name := TestSuiteName;ê        TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].Identity := StoringTestSuiteResultNumber - 1;b        (* Store number of tests in test suite *)°        TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].NumberOfTests :=¸            GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetNumberOfTests();p        (* Store number of failed tests in test suite *)¼        TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].NumberOfFailedTests :=Ä            GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetNumberOfFailedTests(); n        (* Iterate and print all tests in test suite *)!†        FOR TestsInTestSuiteCounter := 1 TO GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetNumberOfTests() BY 1 DO"Œ            TestToBeStored := GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetTestByPosition(TestsInTestSuiteCounter);#B            (* Store test name *)$´            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].TestName := TestToBeStored.GetName();%N            (* Store test class name *)&Š            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].TestClassName :='®                F_RemoveInstancePathAndProjectNameFromTestInstancePath(GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetInstancePath());(f            (* Store whether the test has failed *))ˆ            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].TestIsFailed :=*T                TestToBeStored.IsFailed();+h            (* Store whether the test was skipped *),Š            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].TestIsSkipped :=-V                TestToBeStored.IsSkipped();.x            (* Store the (first failed) assertion message *)/Œ            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].FailureMessage :=0j                TestToBeStored.GetAssertionMessage();1           2r            (* Store the (first failed) assertion type *)3†            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].FailureType :=4d                TestToBeStored.GetAssertionType();5		END_FOR6®        IF StoringTestSuiteResultNumber = GVL_CfUnit.NumberOfInitializedTestSuites THEN7V            StoredTestSuiteResults := TRUE;8        ELSE9š            StoringTestSuiteResultNumber := StoringTestSuiteResultNumber + 1;:        END_IF;~        StoringTestSuiteTrigger(CLK := FALSE); // Reset trigger<    END_IF=END_IF>œ(* If all test suites have finished running, store the general test results *)?œIF StoringTestSuiteResultNumber = GVL_CfUnit.NumberOfInitializedTestSuites AND@º   GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.AreAllTestsFinished() AND NOTA@   StoredGeneralTestResults THENB¨    TestSuiteResults.NumberOfTestSuites := GVL_CfUnit.NumberOfInitializedTestSuites;CÈ    FOR GeneralTestResultsTestSuitesCounter := 1 TO GVL_CfUnit.NumberOfInitializedTestSuites BY 1 DODÐ        TestSuiteResults.NumberOfTestCases := TestSuiteResults.NumberOfTestCases + TestSuiteResults.TestSuiteResults[GeneralTestResultsTestSuitesCounter].NumberOfTests;EÌ        TestSuiteResults.NumberOfSuccessfulTestCases := TestSuiteResults.NumberOfSuccessfulTestCases +Fž                                                        (TestSuiteResults.TestSuiteResults[GeneralTestResultsTestSuitesCounter].NumberOfTests -Gª                                                         TestSuiteResults.TestSuiteResults[GeneralTestResultsTestSuitesCounter].NumberOfFailedTests);Hô        TestSuiteResults.NumberOfFailedTestCases := TestSuiteResults.NumberOfFailedTestCases + TestSuiteResults.TestSuiteResults[GeneralTestResultsTestSuitesCounter].NumberOfFailedTests;I	END_FORJJ    StoredGeneralTestResults := TRUE;KInterfaceLL{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}MÄ(* This function block holds results of the complete test run, i.e. results for all test suites *)NlFUNCTION_BLOCK FB_TestResults IMPLEMENTS I_TestResultsOVARP*    (* Test results*)QV    TestSuiteResults : ST_TestSuiteResults;R    S0    (* Misc variables *)T¦    StoringTestSuiteResultNumber : UINT(1..GVL_Param_CfUnit.MaxNumberOfTestSuites);UJ    StoringTestSuiteTrigger : R_TRIG;VD    StoredTestSuiteResults : BOOL;WH    StoredGeneralTestResults : BOOL;XEND_VARYVAR_TEMPZ@    TestSuiteName : T_MaxString;[6    TestName : T_MaxString;\²    TestsInTestSuiteCounter : UINT(1..GVL_Param_CfUnit.MaxNumberOfTestsForEachTestSuite);]:    TestToBeStored : FB_Test;^´    GeneralTestResultsTestSuitesCounter : UINT(1..GVL_Param_CfUnit.MaxNumberOfTestSuites);_"UniqueIdGenerator`342aPOULevelbL{8e575c5b-1d37-49c6-941b-5c0ec7874787}cStandardd ChildObjectGuidse8System.Collections.ArrayListf,AddAttributeSubsequentgboolÐÐ-ÐÐ	E
-EÐÐ
­îÚÐ-ÐÐ
­ïÚÐ-ÐÐ
­ðÚÐ-ÐÐ
­ñÚÐ-ÐÐ
­òÚÐ-ÐÐ
­óÚÐ-ÐÐ
­ôÚÐ-ÐÐ
­õÚÐ-ÐÐ
­öÚÐ-ÐÐ
­÷ÚÐ-ÐÐ
­øÚÐ-ÐÐ
­ùÚÐ-ÐÐ
­úÚÐ-ÐÐ
­ûÚÐ-ÐÐ
­üÚÐ-ÐÐ
­ýÚÐ-ÐÐ
­þÚÐ-ÐÐ
­ÿÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ- ÐÐ
­ÚÐ-!ÐÐ
­ÚÐ-"ÐÐ
­ÚÐ-#ÐÐ
­ÚÐ-$ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-%ÐÐ
­ÚÐ-&ÐÐ
­	ÚÐ-'ÐÐ
­
-ÚÐ-ÐÐ
­IÚÐ-(ÐÐ
­JÚÐ-)ÐÐ
­KÚÐ-*ÐÐ
­LÚÐ-ÐÐ
­MÚÐ-+ÐÐ
­NÚÐ-,ÐÐ
­OÚÐ--ÐÐ
­PÚÐ-ÐÐ
­QÚÐ-.ÐÐ
­RÚÐ-/ÐÐ
­SÚÐ-0ÐÐ
­TÚÐ-1ÐÐ
­UÚÐ-2ÐÐ
­VÚÐ-3ÐÐ
­ÚÐ-4ÐÐ
­ÚÐ-5ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-6ÐÐ
­ÚÐ-7ÐÐ
­ÚÐ-8ÐÐ
­ÚÐ-9ÐÐ
­ÚÐ-:ÐÐ
­ÚÐ-;ÐÐ
­ÚÐ-<ÐÐ
­ÚÐ-=ÐÐ
­ÚÐ-ÐÐ
­ÚÐ->ÐÐ
­ÚÐ-?ÐÐ
­ÚÐ-@ÐÐ
­ ÚÐ-AÐÐ
­"ÚÐ-BÐÐ
­#ÚÐ-CÐÐ
­$ÚÐ-DÐÐ
­%ÚÐ-EÐÐ
­&ÚÐ-FÐÐ
­'ÚÐ-GÐÐ
­(ÚÐ-HÐÐ
­)ÚÐ-IÐÐ
­*ÚÐ-JÐÐ
­tÚÐ-=ÐKLÐ	E
-ÐÐ
­ÚÚÐ-MÐÐ
­ÛÚÐ-NÐÐ
­ÜÚÐ-OÐÐ
­ÝÚÐ-PÐÐ
­ÞÚÐ-QÐÐ
­ßÚÐ-RÐÐ
­àÚÐ-SÐÐ
­áÚÐ-TÐÐ
­âÚÐ-UÐÐ
­ãÚÐ-VÐÐ
­äÚÐ-WÐÐ
­åÚÐ-XÐÐ
­æÚÐ-YÐÐ
­çÚÐ-ZÐÐ
­èÚÐ-[ÐÐ
­éÚÐ-RÐÐ
­êÚÐ-\ÐÐ
­ëÚÐ-RÐÐ
­ìÚÐ-]ÐÐ
­íÚÐ-^ÐÐ
­ÚÐ-XÐ_-`Ðab-cdeÐfg­+Gx_ló8!0…jüoò/^Ç<åÙ´é,ISystem.StringL{6f9dac99-8de1-4efc-8465-68ac443b7d08}SpecialFuncL{0db3d7bb-cde0-4416-9a7b-ce49a0124323}NoneImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocument	L{f3878285-8e4f-490b-bb1b-9acbb7eb04db}
+TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}Id
longTagTextx(* The body of the function block stores the test results *)ÞIF StoringTestSuiteResultNumber <= GVL_CfUnit.NumberOfInitializedTestSuites AND NOT StoredTestSuiteResults THENî    StoringTestSuiteTrigger(CLK := GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.AreAllTestsFinished());J    IF StoringTestSuiteTrigger.Q THENž        (* Remove everything except the program name + "." + test suite name *)è        TestSuiteName := F_RemoveInstancePathAndProjectNameFromTestInstancePath(TestInstancePath := GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetInstancePath());T        (* Store test suite name and ID *)¼        TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].Name := TestSuiteName;ê        TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].Identity := StoringTestSuiteResultNumber - 1;b        (* Store number of tests in test suite *)°        TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].NumberOfTests :=¸            GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetNumberOfTests();p        (* Store number of failed tests in test suite *)¼        TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].NumberOfFailedTests :=Ä            GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetNumberOfFailedTests(); n        (* Iterate and print all tests in test suite *)!†        FOR TestsInTestSuiteCounter := 1 TO GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetNumberOfTests() BY 1 DO"Œ            TestToBeStored := GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetTestByPosition(TestsInTestSuiteCounter);#B            (* Store test name *)$´            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].TestName := TestToBeStored.GetName();%N            (* Store test class name *)&Š            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].TestClassName :='®                F_RemoveInstancePathAndProjectNameFromTestInstancePath(GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.GetInstancePath());(f            (* Store whether the test has failed *))ˆ            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].TestIsFailed :=*T                TestToBeStored.IsFailed();+h            (* Store whether the test was skipped *),Š            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].TestIsSkipped :=-V                TestToBeStored.IsSkipped();.x            (* Store the (first failed) assertion message *)/Œ            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].FailureMessage :=0j                TestToBeStored.GetAssertionMessage();1           2r            (* Store the (first failed) assertion type *)3†            TestSuiteResults.TestSuiteResults[StoringTestSuiteResultNumber].TestCaseResults[TestsInTestSuiteCounter].FailureType :=4d                TestToBeStored.GetAssertionType();5		END_FOR6®        IF StoringTestSuiteResultNumber = GVL_CfUnit.NumberOfInitializedTestSuites THEN7V            StoredTestSuiteResults := TRUE;8        ELSE9š            StoringTestSuiteResultNumber := StoringTestSuiteResultNumber + 1;:        END_IF;~        StoringTestSuiteTrigger(CLK := FALSE); // Reset trigger<    END_IF=END_IF>¸(* If all test suites have finished storing their results, store the general test results *)?~IF StoredTestSuiteResults AND NOT StoredGeneralTestResults THEN@ //(* If all test suites have finished running, store the general test results *)A //IF StoringTestSuiteResultNumber = GVL_CfUnit.NumberOfInitializedTestSuites ANDB¾//   GVL_CfUnit.TestSuiteAddresses[StoringTestSuiteResultNumber]^.AreAllTestsFinished() AND NOTCD//   StoredGeneralTestResults THEND¨    TestSuiteResults.NumberOfTestSuites := GVL_CfUnit.NumberOfInitializedTestSuites;EÈ    FOR GeneralTestResultsTestSuitesCounter := 1 TO GVL_CfUnit.NumberOfInitializedTestSuites BY 1 DOFÐ        TestSuiteResults.NumberOfTestCases := TestSuiteResults.NumberOfTestCases + TestSuiteResults.TestSuiteResults[GeneralTestResultsTestSuitesCounter].NumberOfTests;GÌ        TestSuiteResults.NumberOfSuccessfulTestCases := TestSuiteResults.NumberOfSuccessfulTestCases +Hž                                                        (TestSuiteResults.TestSuiteResults[GeneralTestResultsTestSuitesCounter].NumberOfTests -Iª                                                         TestSuiteResults.TestSuiteResults[GeneralTestResultsTestSuitesCounter].NumberOfFailedTests);Jô        TestSuiteResults.NumberOfFailedTestCases := TestSuiteResults.NumberOfFailedTestCases + TestSuiteResults.TestSuiteResults[GeneralTestResultsTestSuitesCounter].NumberOfFailedTests;K	END_FORLJ    StoredGeneralTestResults := TRUE;MInterfaceNL{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}OÄ(* This function block holds results of the complete test run, i.e. results for all test suites *)PlFUNCTION_BLOCK FB_TestResults IMPLEMENTS I_TestResultsQVARR,    (* Test results *)SV    TestSuiteResults : ST_TestSuiteResults;T    U0    (* Misc variables *)V¦    StoringTestSuiteResultNumber : UINT(1..GVL_Param_CfUnit.MaxNumberOfTestSuites);WJ    StoringTestSuiteTrigger : R_TRIG;XD    StoredTestSuiteResults : BOOL;YH    StoredGeneralTestResults : BOOL;ZEND_VAR[VAR_TEMP\@    TestSuiteName : T_MaxString;]6    TestName : T_MaxString;^²    TestsInTestSuiteCounter : UINT(1..GVL_Param_CfUnit.MaxNumberOfTestsForEachTestSuite);_:    TestToBeStored : FB_Test;`´    GeneralTestResultsTestSuitesCounter : UINT(1..GVL_Param_CfUnit.MaxNumberOfTestSuites);a"UniqueIdGeneratorb378cPOULeveldL{8e575c5b-1d37-49c6-941b-5c0ec7874787}eStandardf ChildObjectGuidsg8System.Collections.ArrayListh,AddAttributeSubsequentiboolÐÐ-ÐÐ	E
+GÐÐ
­îÚÐ-ÐÐ
­ïÚÐ-ÐÐ
­ðÚÐ-ÐÐ
­ñÚÐ-ÐÐ
­òÚÐ-ÐÐ
­óÚÐ-ÐÐ
­ôÚÐ-ÐÐ
­õÚÐ-ÐÐ
­öÚÐ-ÐÐ
­÷ÚÐ-ÐÐ
­øÚÐ-ÐÐ
­ùÚÐ-ÐÐ
­úÚÐ-ÐÐ
­ûÚÐ-ÐÐ
­üÚÐ-ÐÐ
­ýÚÐ-ÐÐ
­þÚÐ-ÐÐ
­ÿÚÐ-ÐÐ
­ÚÐ-ÐÐ
­ÚÐ- ÐÐ
­ÚÐ-!ÐÐ
­ÚÐ-"ÐÐ
­ÚÐ-#ÐÐ
­ÚÐ-$ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-%ÐÐ
­ÚÐ-&ÐÐ
­	ÚÐ-'ÐÐ
­
+ÚÐ-ÐÐ
­IÚÐ-(ÐÐ
­JÚÐ-)ÐÐ
­KÚÐ-*ÐÐ
­LÚÐ-ÐÐ
­MÚÐ-+ÐÐ
­NÚÐ-,ÐÐ
­OÚÐ--ÐÐ
­PÚÐ-ÐÐ
­QÚÐ-.ÐÐ
­RÚÐ-/ÐÐ
­SÚÐ-0ÐÐ
­TÚÐ-1ÐÐ
­UÚÐ-2ÐÐ
­VÚÐ-3ÐÐ
­ÚÐ-4ÐÐ
­ÚÐ-5ÐÐ
­ÚÐ-ÐÐ
­ÚÐ-6ÐÐ
­ÚÐ-7ÐÐ
­ÚÐ-8ÐÐ
­ÚÐ-9ÐÐ
­ÚÐ-:ÐÐ
­ÚÐ-;ÐÐ
­ÚÐ-<ÐÐ
­ÚÐ-=ÐÐ
­uÚÐ-ÐÐ
­tÚÐ->ÐÐ
­sÚÐ-?ÐÐ
­xÚÐ-@ÐÐ
­yÚÐ-AÐÐ
­zÚÐ-BÐÐ
­wÚÐ-CÐÐ
­"ÚÐ-DÐÐ
­#ÚÐ-EÐÐ
­$ÚÐ-FÐÐ
­%ÚÐ-GÐÐ
­&ÚÐ-HÐÐ
­'ÚÐ-IÐÐ
­(ÚÐ-JÐÐ
­)ÚÐ-KÐÐ
­*ÚÐ-LÐÐ
­tÚÐ-=ÐMNÐ	E
+ÐÐ
­WÚÐ-OÐÐ
­XÚÐ-PÐÐ
­YÚÐ-QÐÐ
­ZÚÐ-RÐÐ
­[ÚÐ-SÐÐ
­\ÚÐ-TÐÐ
­]ÚÐ-UÐÐ
­^ÚÐ-VÐÐ
­_ÚÐ-WÐÐ
­`ÚÐ-XÐÐ
­aÚÐ-YÐÐ
­bÚÐ-ZÐÐ
­cÚÐ-[ÐÐ
­dÚÐ-\ÐÐ
­eÚÐ-]ÐÐ
­fÚÐ-ÐÐ
­gÚÐ-^ÐÐ
­hÚÐ-ÐÐ
­iÚÐ-_ÐÐ
­jÚÐ-`ÐÐ
­ÚÐ-ZÐa-bÐcd-efgÐhi­