Get rid of CppUnit boilerplate in DynamicLibraryTestCase

Use CATCH macros directly, this is simpler and more clear.

Also use narrow strings instead of wide ones and get rid of wxT() too.

No real changes.

This commit is best viewed ignoring whitespace-only changes.
This commit is contained in:
Vadim Zeitlin 2022-04-17 18:44:51 +02:00
parent f3b4ee3b5f
commit 2144ca38d2

View File

@ -23,47 +23,26 @@
// test class
// ----------------------------------------------------------------------------
class DynamicLibraryTestCase : public CppUnit::TestCase
{
public:
DynamicLibraryTestCase() { }
private:
CPPUNIT_TEST_SUITE( DynamicLibraryTestCase );
CPPUNIT_TEST( Load );
CPPUNIT_TEST_SUITE_END();
void Load();
wxDECLARE_NO_COPY_CLASS(DynamicLibraryTestCase);
};
// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( DynamicLibraryTestCase );
// also include in its own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( DynamicLibraryTestCase, "DynamicLibraryTestCase" );
void DynamicLibraryTestCase::Load()
TEST_CASE("DynamicLibrary::Load", "[dynlib]")
{
#if defined(__WINDOWS__)
static const wxChar *LIB_NAME = wxT("kernel32.dll");
static const wxChar *FUNC_NAME = wxT("lstrlenA");
static const char* const LIB_NAME = "kernel32.dll";
static const char* const FUNC_NAME = "lstrlenA";
#elif defined(__UNIX__)
#ifdef __DARWIN__
static const wxChar *LIB_NAME = wxT("/usr/lib/libc.dylib");
static const char* const LIB_NAME = "/usr/lib/libc.dylib";
#else
// weird: using just libc.so does *not* work!
static const wxChar *LIB_NAME = wxT("/lib/libc.so.6");
static const char* const LIB_NAME = "/lib/libc.so.6";
#endif
static const wxChar *FUNC_NAME = wxT("strlen");
static const char* const FUNC_NAME = "strlen";
// Under macOS 12+ we can actually load the libc dylib even though the
// corresponding file doesn't exist on disk, so skip this check there.
#ifndef __DARWIN__
if ( !wxFileName::Exists(LIB_NAME) )
{
WARN("Shared library \"" << wxString(LIB_NAME) << "\" doesn't exist, "
WARN("Shared library \"" << LIB_NAME << "\" doesn't exist, "
"skipping DynamicLibraryTestCase::Load() test.");
return;
}
@ -73,29 +52,36 @@ void DynamicLibraryTestCase::Load()
#endif
wxDynamicLibrary lib(LIB_NAME);
CPPUNIT_ASSERT( lib.IsLoaded() );
REQUIRE( lib.IsLoaded() );
typedef int (wxSTDCALL *wxStrlenType)(const char *);
wxStrlenType pfnStrlen = (wxStrlenType)lib.GetSymbol(FUNC_NAME);
SECTION("strlen")
{
typedef int (wxSTDCALL *wxStrlenType)(const char *);
wxStrlenType pfnStrlen = (wxStrlenType)lib.GetSymbol(FUNC_NAME);
wxString errMsg = wxString::Format("ERROR: function '%s' wasn't found in '%s'.\n",
FUNC_NAME, LIB_NAME);
CPPUNIT_ASSERT_MESSAGE( errMsg.ToStdString(), (pfnStrlen != NULL) );
INFO("'" << FUNC_NAME << "' wasn't found in '" << LIB_NAME << "'");
CHECK( pfnStrlen );
// Call the function dynamically loaded
CPPUNIT_ASSERT( pfnStrlen("foo") == 3 );
if ( pfnStrlen )
{
// Call the function dynamically loaded
CHECK( pfnStrlen("foo") == 3 );
}
}
#ifdef __WINDOWS__
static const wxChar *FUNC_NAME_AW = wxT("lstrlen");
SECTION("A/W")
{
static const wxChar *FUNC_NAME_AW = wxT("lstrlen");
typedef int (wxSTDCALL *wxStrlenTypeAorW)(const wxChar *);
wxStrlenTypeAorW
pfnStrlenAorW = (wxStrlenTypeAorW)lib.GetSymbolAorW(FUNC_NAME_AW);
typedef int (wxSTDCALL *wxStrlenTypeAorW)(const wxChar *);
wxStrlenTypeAorW
pfnStrlenAorW = (wxStrlenTypeAorW)lib.GetSymbolAorW(FUNC_NAME_AW);
wxString errMsg2 = wxString::Format("ERROR: function '%s' wasn't found in '%s'.\n",
FUNC_NAME_AW, LIB_NAME);
CPPUNIT_ASSERT_MESSAGE( errMsg2.ToStdString(), (pfnStrlenAorW != NULL) );
INFO( "'" << FUNC_NAME_AW << "' wasn't found in '" << LIB_NAME << "'");
REQUIRE( pfnStrlenAorW );
CPPUNIT_ASSERT( pfnStrlenAorW(wxT("foobar")) == 6 );
CHECK( pfnStrlenAorW(wxT("foobar")) == 6 );
}
#endif // __WINDOWS__
}