/** @file
  Unit Test Debug Assert Library

  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#include <Uefi.h>
#include <Library/BaseLib.h>
#include <Library/UnitTestLib.h>

///
/// Point to jump buffer used with SetJump()/LongJump() to test if a function
/// under test generates an expected ASSERT() condition.
///
BASE_LIBRARY_JUMP_BUFFER  *gUnitTestExpectAssertFailureJumpBuffer = NULL;

/**
  Unit test library replacement for DebugAssert() in DebugLib.

  If FileName is NULL, then a <FileName> string of "(NULL) Filename" is printed.
  If Description is NULL, then a <Description> string of "(NULL) Description" is printed.

  @param  FileName     The pointer to the name of the source file that generated the assert condition.
  @param  LineNumber   The line number in the source file that generated the assert condition
  @param  Description  The pointer to the description of the assert condition.

**/
VOID
EFIAPI
UnitTestDebugAssert (
  IN CONST CHAR8  *FileName,
  IN UINTN        LineNumber,
  IN CONST CHAR8  *Description
  )
{
  CHAR8  Message[256];

  if (gUnitTestExpectAssertFailureJumpBuffer != NULL) {
    UT_LOG_INFO ("Detected expected ASSERT: %a(%d): %a\n", FileName, LineNumber, Description);
    LongJump (gUnitTestExpectAssertFailureJumpBuffer, 1);
  } else {
    AsciiStrCpyS (Message, sizeof (Message), "Detected unexpected ASSERT(");
    AsciiStrCatS (Message, sizeof (Message), Description);
    AsciiStrCatS (Message, sizeof (Message), ")");
    UnitTestAssertTrue (FALSE, "", LineNumber, FileName, Message);
  }
}
