UnitTestFrameworkPkg: Expand host-based exception handling and gcov
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4683 Update MSFT CC_FLAGS for host-based unit tests to use /EHs instead of /EHsc to support building C functions with SEH (Structured Exception Handling) enabled. This is required to build UnitTestDebugAssertLibHost.inf. Update GCC CC_FLAGS for host-based unit tests to use -fexceptions to support catching exceptions. Update GoogleTestLib.h to include Throws() APIs that enable unit tests to use EXPECT_THAT() to check for expected ASSERT() conditions for a specific ASSERT() expression. Update GCC CC_FLAGS to add --coverage for host-based builds for all GCC tool chains. Cc: Michael Kubacki <mikuback@linux.microsoft.com> Cc: Sean Brogan <sean.brogan@microsoft.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Michael Kubacki <michael.kubacki@microsoft.com>
This commit is contained in:
parent
46c6de57b0
commit
81b69f306f
|
@ -13,6 +13,26 @@
|
||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
using ::testing::Throws;
|
||||||
|
using ::testing::ThrowsMessage;
|
||||||
|
using ::testing::HasSubstr;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Extended macros for testing exceptions with a specific description string
|
||||||
|
// in the exception message. Typically used to check that the expression
|
||||||
|
// that generates an ASSERT() matches the expected expression.
|
||||||
|
//
|
||||||
|
#define EXPECT_THROW_MESSAGE(statement, description) \
|
||||||
|
EXPECT_THAT ( \
|
||||||
|
[]() { statement; }, \
|
||||||
|
ThrowsMessage<std::runtime_error>(HasSubstr (description)) \
|
||||||
|
)
|
||||||
|
#define ASSERT_THROW_MESSAGE(statement, description) \
|
||||||
|
ASSERT_THAT ( \
|
||||||
|
[]() { statement; }, \
|
||||||
|
ThrowsMessage<std::runtime_error>(HasSubstr (description)) \
|
||||||
|
)
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <Uefi.h>
|
#include <Uefi.h>
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,6 @@
|
||||||
UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
|
UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec
|
||||||
|
|
||||||
[BuildOptions]
|
[BuildOptions]
|
||||||
MSFT:*_*_*_CC_FLAGS == /c /EHsc /Zi /Od /MT
|
MSFT:*_*_*_CC_FLAGS == /c /EHs /Zi /Od /MT
|
||||||
GCC:*_*_IA32_CC_FLAGS == -g -c -fshort-wchar -O0 -m32
|
GCC:*_*_IA32_CC_FLAGS == -g -c -fshort-wchar -fexceptions -O0 -m32 -malign-double -fno-pie
|
||||||
GCC:*_*_X64_CC_FLAGS == -g -c -fshort-wchar -O0 -m64
|
GCC:*_*_X64_CC_FLAGS == -g -c -fshort-wchar -fexceptions -O0 -m64 -fno-pie "-DEFIAPI=__attribute__((ms_abi))"
|
||||||
|
|
|
@ -102,6 +102,8 @@
|
||||||
"cobertura",
|
"cobertura",
|
||||||
"DHAVE", # build flag for cmocka in the INF
|
"DHAVE", # build flag for cmocka in the INF
|
||||||
"gtest", # file name in GoogleTestLib.inf
|
"gtest", # file name in GoogleTestLib.inf
|
||||||
|
"defiapi", # build flag for gtest
|
||||||
|
"fexceptions", # build flag for gtest
|
||||||
"corthon", # Contact GitHub account in Readme
|
"corthon", # Contact GitHub account in Readme
|
||||||
"mdkinney", # Contact GitHub account in Readme
|
"mdkinney", # Contact GitHub account in Readme
|
||||||
"spbrogan" # Contact GitHub account in Readme
|
"spbrogan" # Contact GitHub account in Readme
|
||||||
|
|
|
@ -31,13 +31,14 @@
|
||||||
GCC:*_*_*_CC_FLAGS = -D UNIT_TESTING_DEBUG=1
|
GCC:*_*_*_CC_FLAGS = -D UNIT_TESTING_DEBUG=1
|
||||||
XCODE:*_*_*_CC_FLAGS = -D UNIT_TESTING_DEBUG=1
|
XCODE:*_*_*_CC_FLAGS = -D UNIT_TESTING_DEBUG=1
|
||||||
!endif
|
!endif
|
||||||
GCC:*_GCC5_*_CC_FLAGS = --coverage
|
GCC:*_*_*_CC_FLAGS = -fexceptions
|
||||||
GCC:*_GCC5_*_DLINK_FLAGS = --coverage
|
GCC:*_*_*_CC_FLAGS = --coverage
|
||||||
|
GCC:*_*_*_DLINK_FLAGS = --coverage
|
||||||
[BuildOptions.common.EDKII.HOST_APPLICATION]
|
[BuildOptions.common.EDKII.HOST_APPLICATION]
|
||||||
#
|
#
|
||||||
# MSFT
|
# MSFT
|
||||||
#
|
#
|
||||||
MSFT:*_*_*_CC_FLAGS = /EHsc
|
MSFT:*_*_*_CC_FLAGS = /EHs
|
||||||
MSFT:*_*_*_DLINK_FLAGS == /out:"$(BIN_DIR)\$(MODULE_NAME_GUID).exe" /pdb:"$(BIN_DIR)\$(MODULE_NAME_GUID).pdb" /IGNORE:4001 /NOLOGO /SUBSYSTEM:CONSOLE /DEBUG /STACK:0x40000,0x40000 /WHOLEARCHIVE
|
MSFT:*_*_*_DLINK_FLAGS == /out:"$(BIN_DIR)\$(MODULE_NAME_GUID).exe" /pdb:"$(BIN_DIR)\$(MODULE_NAME_GUID).pdb" /IGNORE:4001 /NOLOGO /SUBSYSTEM:CONSOLE /DEBUG /STACK:0x40000,0x40000 /WHOLEARCHIVE
|
||||||
MSFT:*_*_IA32_DLINK_FLAGS = /MACHINE:I386
|
MSFT:*_*_IA32_DLINK_FLAGS = /MACHINE:I386
|
||||||
MSFT:*_*_X64_DLINK_FLAGS = /MACHINE:AMD64
|
MSFT:*_*_X64_DLINK_FLAGS = /MACHINE:AMD64
|
||||||
|
|
Loading…
Reference in New Issue