]>
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__