I was using rather obsolete version of GoogleTest and have used hack for custom printing, found here: How to send custom message in Google C++ Testing Framework?
My sources contain the following code from the link above
namespace testing
{
namespace internal
{
enum GTestColor {
COLOR_DEFAULT,
COLOR_RED,
COLOR_GREEN,
COLOR_YELLOW
};
extern void ColoredPrintf(GTestColor color, const char* fmt, ...);
}
}
#define PRINTF(...) do { testing::internal::ColoredPrintf(testing::internal::COLOR_GREEN, "[ ] "); testing::internal::ColoredPrintf(testing::internal::COLOR_YELLOW, __VA_ARGS__); } while(0)
I have updated sources of GoogleTest in my project to master version and now I have link errors saying that ColoredPrintf is not defined.
error LNK2019: unresolved external symbol "void __cdecl testing::internal::ColoredPrintf(enum testing::internal::`anonymous namespace'::GTestColor,char const *,...)" (?ColoredPrintf@internal@testing@@YAXW4GTestColor@?A0x313d419f@12@PEBDZZ) referenced in function
Studying fresh gtest.cc
shows that they have changed GTestColor
to enum class and put it into an anonymous namespace inside the namespace testing::internal
:
https://github.com/google/googletest/blob/master/googletest/src/gtest.cc#L3138
I've changed the snippet in my sources to:
namespace testing {
namespace internal
{
enum class GTestColor { kDefault, kRed, kGreen, kYellow };
extern void ColoredPrintf(GTestColor color, const char* fmt, ...);
}
}
And as a quick fix I have removed namespace { ... }
around GTestColor
in gtest.cc
.
The question: is it possible to avoid editing gtest.cc
and still have access to their function?