Go to the documentation of this file.00001
00012
00013
00014
00015
00016
00017 #ifndef DynamicLib_cpp
00018 #define DynamicLib_cpp
00019
00020 #include <cppunit/ui/text/TestRunner.h>
00021 #include <cppunit/TextOutputter.h>
00022 #include <cppunit/extensions/TestFactoryRegistry.h>
00023 #include <cppunit/extensions/HelperMacros.h>
00024 #include <cppunit/TestAssert.h>
00025
00026 #include <coil/DynamicLib.h>
00027
00032 namespace DynamicLib
00033 {
00034 #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
00035
00036 const char * LibName = "DynamicLibTestDll.dll";
00037
00038 const char * SymbolName = "ForExternTest";
00039
00040 #else
00041
00042
00043 const char * LibName = ".libs/libDynamicLib.so";
00044
00045
00046 const char * SymbolName = "ForExternTest";
00047
00048
00049 #endif
00050
00051 class DynamicLibTests
00052 : public CppUnit::TestFixture
00053 {
00054 CPPUNIT_TEST_SUITE(DynamicLibTests);
00055 CPPUNIT_TEST(test_DynamicLib_1);
00056 CPPUNIT_TEST(test_DynamicLib_2);
00057 CPPUNIT_TEST(test_DynamicLib_3);
00058 CPPUNIT_TEST(test_DynamicLib_4);
00059 CPPUNIT_TEST(test_DynamicLib_open_failure);
00060 CPPUNIT_TEST(test_DynamicLib_open_and_close);
00061 CPPUNIT_TEST(test_DynamicLib_symbol_failure);
00062 CPPUNIT_TEST(test_DynamicLib_symbol);
00063 CPPUNIT_TEST(test_DynamicLib_error);
00064 CPPUNIT_TEST_SUITE_END();
00065
00066 private:
00067 coil::DynamicLib * dl;
00068
00069 public:
00070
00074 DynamicLibTests()
00075 {
00076
00077 }
00078
00082 ~DynamicLibTests()
00083 {
00084 }
00085
00089 virtual void setUp()
00090 {
00091 }
00092
00096 virtual void tearDown()
00097 {
00098 }
00099
00100
00101
00105 void test_DynamicLib_1()
00106 {
00107
00108 coil::DynamicLib * dl1 = new coil::DynamicLib(1);
00109 int result = dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00110 CPPUNIT_ASSERT_EQUAL(0, result);
00111 delete dl1;
00112 }
00113
00117 void test_DynamicLib_2()
00118 {
00119
00120 coil::DynamicLib * dl1 = new coil::DynamicLib(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00121 delete dl1;
00122 }
00123
00127 void test_DynamicLib_3()
00128 {
00129
00130 coil::DynamicLib dl1(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00131 coil::DynamicLib dl2(dl1);
00132 }
00133
00137 void test_DynamicLib_4()
00138 {
00139
00140 coil::DynamicLib * dl1 = new coil::DynamicLib(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00141 coil::DynamicLib dl2 = *dl1;
00142 delete dl1;
00143 }
00144
00148 void test_DynamicLib_open_failure()
00149 {
00150 coil::DynamicLib * dl1 = new coil::DynamicLib(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00151 int result = dl1->open("Hoge", COIL_DEFAULT_DYNLIB_MODE, 1);
00152 CPPUNIT_ASSERT_EQUAL(-1, result);
00153 delete dl1;
00154 }
00155
00159 void test_DynamicLib_open_and_close()
00160 {
00161 coil::DynamicLib * dl1 = new coil::DynamicLib(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00162 int result = dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00163 CPPUNIT_ASSERT_EQUAL(0, result);
00164
00165 dl1->close();
00166
00167 delete dl1;
00168 }
00169
00174 void test_DynamicLib_symbol_failure()
00175 {
00176 coil::DynamicLib * dl1 = new coil::DynamicLib(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00177 dl1->symbol("Hoge");
00178
00179 int result = dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00180 CPPUNIT_ASSERT_EQUAL(0, result);
00181
00182 char * p = (char *)dl1->symbol("HogeHoge");
00183
00184 CPPUNIT_ASSERT(0 == p);
00185
00186 dl1->close();
00187 delete dl1;
00188 }
00189
00194 void test_DynamicLib_symbol()
00195 {
00196 coil::DynamicLib * dl1 = new coil::DynamicLib(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00197 dl1->symbol("Hoge");
00198
00199 int result = dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00200 CPPUNIT_ASSERT_EQUAL(0, result);
00201
00202 typedef int (*exec)();
00203
00204 exec func = NULL;
00205 func = (exec)dl1->symbol(SymbolName);
00206
00207 CPPUNIT_ASSERT(func);
00208
00209 int ic = func();
00210
00211 CPPUNIT_ASSERT_EQUAL((int)0xdeadbeef, ic);
00212
00213 dl1->close();
00214 delete dl1;
00215 }
00216
00221 void test_DynamicLib_error()
00222 {
00223
00224 coil::DynamicLib * dl1 = new coil::DynamicLib(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00225 dl1->error();
00226
00227 dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
00228 CPPUNIT_ASSERT(!dl1->error());
00229
00230 dl1->symbol("HogeHogeHoge");
00231 CPPUNIT_ASSERT(dl1->error());
00232
00233
00234 dl1->close();
00235 delete dl1;
00236 }
00237
00238 };
00239 };
00240
00241
00242
00243
00244 CPPUNIT_TEST_SUITE_REGISTRATION(DynamicLib::DynamicLibTests);
00245
00246 #ifdef LOCAL_MAIN
00247 int main(int argc, char* argv[])
00248 {
00249 CppUnit::TextUi::TestRunner runner;
00250 runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
00251 CppUnit::Outputter* outputter =
00252 new CppUnit::TextOutputter(&runner.result(), std::cout);
00253 runner.setOutputter(outputter);
00254 bool retcode = runner.run();
00255 return !retcode;
00256 }
00257 #endif // MAIN
00258 #endif // DynamicLib_cpp