]>
git.saurik.com Git - wxWidgets.git/blob - tests/misc/dynamiclib.cpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: tests/misc/dynamiclib.cpp
3 // Purpose: Test wxDynamicLibrary
4 // Author: Francesco Montorsi (extracted from console sample)
7 // Copyright: (c) 2010 wxWidgets team
8 ///////////////////////////////////////////////////////////////////////////////
10 // ----------------------------------------------------------------------------
12 // ----------------------------------------------------------------------------
20 #include "wx/dynlib.h"
23 #include "wx/filename.h"
27 // ----------------------------------------------------------------------------
29 // ----------------------------------------------------------------------------
31 class DynamicLibraryTestCase
: public CppUnit::TestCase
34 DynamicLibraryTestCase() { }
37 CPPUNIT_TEST_SUITE( DynamicLibraryTestCase
);
39 CPPUNIT_TEST_SUITE_END();
43 DECLARE_NO_COPY_CLASS(DynamicLibraryTestCase
)
46 // register in the unnamed registry so that these tests are run by default
47 CPPUNIT_TEST_SUITE_REGISTRATION( DynamicLibraryTestCase
);
49 // also include in its own registry so that these tests can be run alone
50 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( DynamicLibraryTestCase
, "DynamicLibraryTestCase" );
52 void DynamicLibraryTestCase::Load()
54 #if defined(__WINDOWS__)
55 static const wxChar
*LIB_NAME
= wxT("kernel32.dll");
56 static const wxChar
*FUNC_NAME
= wxT("lstrlenA");
57 #elif defined(__UNIX__)
59 static const wxChar
*LIB_NAME
= wxT("/usr/lib/libc.dylib");
61 // weird: using just libc.so does *not* work!
62 static const wxChar
*LIB_NAME
= wxT("/lib/libc.so.6");
64 static const wxChar
*FUNC_NAME
= wxT("strlen");
66 if ( !wxFileName::Exists(LIB_NAME
) )
68 wxLogWarning("Shared library \"%s\" doesn't exist, "
69 "skipping DynamicLibraryTestCase::Load() test.");
73 #error "don't know how to test wxDllLoader on this platform"
76 wxDynamicLibrary
lib(LIB_NAME
);
77 CPPUNIT_ASSERT( lib
.IsLoaded() );
79 typedef int (wxSTDCALL
*wxStrlenType
)(const char *);
80 wxStrlenType pfnStrlen
= (wxStrlenType
)lib
.GetSymbol(FUNC_NAME
);
82 wxString errMsg
= wxString::Format("ERROR: function '%s' wasn't found in '%s'.\n",
84 CPPUNIT_ASSERT_MESSAGE( errMsg
.ToStdString(), pfnStrlen
);
86 // Call the function dynamically loaded
87 CPPUNIT_ASSERT( pfnStrlen("foo") == 3 );
90 static const wxChar
*FUNC_NAME_AW
= wxT("lstrlen");
92 typedef int (wxSTDCALL
*wxStrlenTypeAorW
)(const wxChar
*);
94 pfnStrlenAorW
= (wxStrlenTypeAorW
)lib
.GetSymbolAorW(FUNC_NAME_AW
);
96 wxString errMsg2
= wxString::Format("ERROR: function '%s' wasn't found in '%s'.\n",
97 FUNC_NAME_AW
, LIB_NAME
);
98 CPPUNIT_ASSERT_MESSAGE( errMsg2
.ToStdString(), pfnStrlenAorW
);
100 CPPUNIT_ASSERT( pfnStrlenAorW(wxT("foobar")) == 6 );
101 #endif // __WINDOWS__