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:
parent
f3b4ee3b5f
commit
2144ca38d2
@ -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__
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user