123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /** @file
- Implement UnitTestResultReportLib doing plain txt out to console
- Copyright (c) Microsoft Corporation.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <Uefi.h>
- #include <Library/UnitTestResultReportLib.h>
- #include <Library/BaseLib.h>
- #include <Library/DebugLib.h>
- VOID
- EFIAPI
- ReportPrint (
- IN CONST CHAR8 *Format,
- ...
- );
- VOID
- ReportOutput (
- IN CONST CHAR8 *Output
- );
- struct _UNIT_TEST_STATUS_STRING {
- UNIT_TEST_STATUS Status;
- CHAR8 *String;
- };
- struct _UNIT_TEST_FAILURE_TYPE_STRING {
- FAILURE_TYPE Type;
- CHAR8 *String;
- };
- struct _UNIT_TEST_STATUS_STRING mStatusStrings[] = {
- { UNIT_TEST_PASSED, "PASSED" },
- { UNIT_TEST_ERROR_PREREQUISITE_NOT_MET, "NOT RUN - PREREQUISITE FAILED" },
- { UNIT_TEST_ERROR_TEST_FAILED, "FAILED" },
- { UNIT_TEST_RUNNING, "RUNNING" },
- { UNIT_TEST_PENDING, "PENDING" },
- { 0, "**UNKNOWN**" }
- };
- struct _UNIT_TEST_FAILURE_TYPE_STRING mFailureTypeStrings[] = {
- { FAILURETYPE_NOFAILURE, "NO FAILURE" },
- { FAILURETYPE_OTHER, "OTHER FAILURE" },
- { FAILURETYPE_ASSERTTRUE, "ASSERT_TRUE FAILURE" },
- { FAILURETYPE_ASSERTFALSE, "ASSERT_FALSE FAILURE" },
- { FAILURETYPE_ASSERTEQUAL, "ASSERT_EQUAL FAILURE" },
- { FAILURETYPE_ASSERTNOTEQUAL, "ASSERT_NOTEQUAL FAILURE" },
- { FAILURETYPE_ASSERTNOTEFIERROR, "ASSERT_NOTEFIERROR FAILURE" },
- { FAILURETYPE_ASSERTSTATUSEQUAL, "ASSERT_STATUSEQUAL FAILURE" },
- { FAILURETYPE_ASSERTNOTNULL, "ASSERT_NOTNULL FAILURE" },
- { FAILURETYPE_EXPECTASSERT, "EXPECT_ASSERT FAILURE" },
- { 0, "*UNKNOWN* Failure" }
- };
- //
- // TEST REPORTING FUNCTIONS
- //
- STATIC
- CONST CHAR8 *
- GetStringForUnitTestStatus (
- IN UNIT_TEST_STATUS Status
- )
- {
- UINTN Index;
- for (Index = 0; Index < ARRAY_SIZE (mStatusStrings) - 1; Index++) {
- if (mStatusStrings[Index].Status == Status) {
- //
- // Return string from matching entry
- //
- return mStatusStrings[Index].String;
- }
- }
- //
- // Return last entry if no match found.
- //
- return mStatusStrings[Index].String;
- }
- STATIC
- CONST CHAR8 *
- GetStringForFailureType (
- IN FAILURE_TYPE Failure
- )
- {
- UINTN Index;
- for (Index = 0; Index < ARRAY_SIZE (mFailureTypeStrings) - 1; Index++) {
- if (mFailureTypeStrings[Index].Type == Failure) {
- //
- // Return string from matching entry
- //
- return mFailureTypeStrings[Index].String;
- }
- }
- //
- // Return last entry if no match found.
- //
- DEBUG ((DEBUG_INFO, "%a Failure Type does not have string defined 0x%X\n", __FUNCTION__, (UINT32)Failure));
- return mFailureTypeStrings[Index].String;
- }
- /*
- Method to print the Unit Test run results
- @retval Success
- */
- EFI_STATUS
- EFIAPI
- OutputUnitTestFrameworkReport (
- IN UNIT_TEST_FRAMEWORK_HANDLE FrameworkHandle
- )
- {
- UNIT_TEST_FRAMEWORK *Framework;
- INTN Passed;
- INTN Failed;
- INTN NotRun;
- UNIT_TEST_SUITE_LIST_ENTRY *Suite;
- UNIT_TEST_LIST_ENTRY *Test;
- INTN SPassed;
- INTN SFailed;
- INTN SNotRun;
- Passed = 0;
- Failed = 0;
- NotRun = 0;
- Suite = NULL;
- Framework = (UNIT_TEST_FRAMEWORK *)FrameworkHandle;
- if (Framework == NULL) {
- return EFI_INVALID_PARAMETER;
- }
- ReportPrint ("---------------------------------------------------------\n");
- ReportPrint ("------------- UNIT TEST FRAMEWORK RESULTS ---------------\n");
- ReportPrint ("---------------------------------------------------------\n");
- // print the version and time
- //
- // Iterate all suites
- //
- for (Suite = (UNIT_TEST_SUITE_LIST_ENTRY *)GetFirstNode (&Framework->TestSuiteList);
- (LIST_ENTRY *)Suite != &Framework->TestSuiteList;
- Suite = (UNIT_TEST_SUITE_LIST_ENTRY *)GetNextNode (&Framework->TestSuiteList, (LIST_ENTRY *)Suite))
- {
- Test = NULL;
- SPassed = 0;
- SFailed = 0;
- SNotRun = 0;
- ReportPrint ("/////////////////////////////////////////////////////////\n");
- ReportPrint (" SUITE: %a\n", Suite->UTS.Title);
- ReportPrint (" PACKAGE: %a\n", Suite->UTS.Name);
- ReportPrint ("/////////////////////////////////////////////////////////\n");
- //
- // Iterate all tests within the suite
- //
- for (Test = (UNIT_TEST_LIST_ENTRY *)GetFirstNode (&(Suite->UTS.TestCaseList));
- (LIST_ENTRY *)Test != &(Suite->UTS.TestCaseList);
- Test = (UNIT_TEST_LIST_ENTRY *)GetNextNode (&(Suite->UTS.TestCaseList), (LIST_ENTRY *)Test))
- {
- ReportPrint ("*********************************************************\n");
- ReportPrint (" CLASS NAME: %a\n", Test->UT.Name);
- ReportPrint (" TEST: %a\n", Test->UT.Description);
- ReportPrint (" STATUS: %a\n", GetStringForUnitTestStatus (Test->UT.Result));
- ReportPrint (" FAILURE: %a\n", GetStringForFailureType (Test->UT.FailureType));
- ReportPrint (" FAILURE MESSAGE:\n%a\n", Test->UT.FailureMessage);
- if (Test->UT.Log != NULL) {
- ReportPrint (" LOG:\n");
- ReportOutput (Test->UT.Log);
- }
- switch (Test->UT.Result) {
- case UNIT_TEST_PASSED:
- SPassed++;
- break;
- case UNIT_TEST_ERROR_TEST_FAILED:
- SFailed++;
- break;
- case UNIT_TEST_PENDING: // Fall through...
- case UNIT_TEST_RUNNING: // Fall through...
- case UNIT_TEST_ERROR_PREREQUISITE_NOT_MET:
- SNotRun++;
- break;
- default:
- break;
- }
- ReportPrint ("**********************************************************\n");
- } // End Test iteration
- ReportPrint ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
- ReportPrint ("Suite Stats\n");
- ReportPrint (" Passed: %d (%d%%)\n", SPassed, (SPassed * 100)/(SPassed+SFailed+SNotRun));
- ReportPrint (" Failed: %d (%d%%)\n", SFailed, (SFailed * 100) / (SPassed + SFailed + SNotRun));
- ReportPrint (" Not Run: %d (%d%%)\n", SNotRun, (SNotRun * 100) / (SPassed + SFailed + SNotRun));
- ReportPrint ("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
- Passed += SPassed; // add to global counters
- Failed += SFailed; // add to global counters
- NotRun += SNotRun; // add to global counters
- }// End Suite iteration
- ReportPrint ("=========================================================\n");
- ReportPrint ("Total Stats\n");
- ReportPrint (" Passed: %d (%d%%)\n", Passed, (Passed * 100) / (Passed + Failed + NotRun));
- ReportPrint (" Failed: %d (%d%%)\n", Failed, (Failed * 100) / (Passed + Failed + NotRun));
- ReportPrint (" Not Run: %d (%d%%)\n", NotRun, (NotRun * 100) / (Passed + Failed + NotRun));
- ReportPrint ("=========================================================\n");
- return EFI_SUCCESS;
- }
|