REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the UnitTestFrameworkPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Bret Barkelew <bret.barkelew@microsoft.com>
		
			
				
	
	
		
			222 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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;
 | |
| }
 |