DynamicLibTests.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
12 /*
13  * $Log$
14  *
15  */
16 
17 #ifndef DynamicLib_cpp
18 #define DynamicLib_cpp
19 
20 #include <cppunit/ui/text/TestRunner.h>
21 #include <cppunit/TextOutputter.h>
22 #include <cppunit/extensions/TestFactoryRegistry.h>
23 #include <cppunit/extensions/HelperMacros.h>
24 #include <cppunit/TestAssert.h>
25 
26 #include <coil/DynamicLib.h>
27 
32 namespace DynamicLib
33 {
34 #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
35 // #error WIN32!!
36  const char * LibName = "DynamicLibTestDll.dll";
37 // const char * LibName = "coil.dll";
38  const char * SymbolName = "ForExternTest";
39 
40 #else
41 // #error POSIX.
42 // const char * LibName = "libPluginC.so";
43  const char * LibName = ".libs/libDynamicLib.so";
44 // const char * LibName = "libcoil.so.0";
45 // const char * SymbolName = "svc_run";
46  const char * SymbolName = "ForExternTest";
47 // const char * SymbolName = "PluginCInit";
48 
49 #endif
50 
52  : public CppUnit::TestFixture
53  {
65 
66  private:
68 
69  public:
70 
75  {
76 
77  }
78 
83  {
84  }
85 
89  virtual void setUp()
90  {
91  }
92 
96  virtual void tearDown()
97  {
98  }
99 
100  /* test case */
101 
106  {
107  /* 例外が起きなければOKとする */
108  coil::DynamicLib * dl1 = new coil::DynamicLib(1);
109  int result = dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
110  CPPUNIT_ASSERT_EQUAL(0, result);
111  delete dl1;
112  }
113 
118  {
119  /* 例外が起きなければOKとする */
121  delete dl1;
122  }
123 
128  {
129  /* 例外が起きなければOKとする */
131  coil::DynamicLib dl2(dl1); // <--- ここで、std::bad_allocに落ちる Kz.080930 ← fix 081006.
132  }
133 
138  {
139  /* 例外が起きなければOKとする */
141  coil::DynamicLib dl2 = *dl1; // <--- ここで、std::bad_allocに落ちる Kz.080930 ← fix 081006.
142  delete dl1;
143  }
144 
149  {
151  int result = dl1->open("Hoge", COIL_DEFAULT_DYNLIB_MODE, 1);
152  CPPUNIT_ASSERT_EQUAL(-1, result);
153  delete dl1;
154  }
155 
160  {
162  int result = dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
163  CPPUNIT_ASSERT_EQUAL(0, result);
164 
165  dl1->close();
166 
167  delete dl1;
168  }
169 
175  {
177  dl1->symbol("Hoge");
178 
179  int result = dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
180  CPPUNIT_ASSERT_EQUAL(0, result);
181 
182  char * p = (char *)dl1->symbol("HogeHoge");
183 // std::cout << "Error : " << dl1->error() << "." << std::endl ;
184  CPPUNIT_ASSERT(0 == p);
185 
186  dl1->close();
187  delete dl1;
188  }
189 
195  {
197  dl1->symbol("Hoge");
198 
199  int result = dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
200  CPPUNIT_ASSERT_EQUAL(0, result);
201 
202  typedef int (*exec)();
203 
204  exec func = NULL;
205  func = (exec)dl1->symbol(SymbolName);
206 
207  CPPUNIT_ASSERT(func);
208 
209  int ic = func();
210 
211  CPPUNIT_ASSERT_EQUAL((int)0xdeadbeef, ic);
212 
213  dl1->close();
214  delete dl1;
215  }
216 
222  {
223 // coil::DynamicLib * dl1 = new coil::DynamicLib(1); // ↓どちらでも例外は起きない
225  dl1->error();
226 
227  dl1->open(LibName, COIL_DEFAULT_DYNLIB_MODE, 1);
228  CPPUNIT_ASSERT(!dl1->error()); // 正常時には0を返す
229 
230  dl1->symbol("HogeHogeHoge");
231  CPPUNIT_ASSERT(dl1->error()); // 非正常時には非0を返す
232 // std::cout << "error() : " << err2 << "." << std::endl;
233 
234  dl1->close();
235  delete dl1;
236  }
237 
238  };
239 }; // namespace DynamicLib
240 
241 /*
242  * Register test suite
243  */
245 
246 #ifdef LOCAL_MAIN
247 int main(int argc, char* argv[])
248 {
249  CppUnit::TextUi::TestRunner runner;
250  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
251  CppUnit::Outputter* outputter =
252  new CppUnit::TextOutputter(&runner.result(), std::cout);
253  runner.setOutputter(outputter);
254  bool retcode = runner.run();
255  return !retcode;
256 }
257 #endif // MAIN
258 #endif // DynamicLib_cpp
int main(int argc, char **argv)
CPPUNIT_TEST_SUITE(DynamicLibTests)
void test_DynamicLib_error()
do error note エラー発生時にerror()が非0を返すこと
CPPUNIT_TEST(test_DynamicLib_1)
void * symbol(const char *symbol_name)
Return an address of the memory where a symbol was loaded.
void test_DynamicLib_3()
コンストラクタその3
void test_DynamicLib_1()
コンストラクタその1
CPPUNIT_TEST_SUITE_REGISTRATION(DynamicLib::DynamicLibTests)
virtual void setUp()
Test initialization.
DynamicLib class.
void test_DynamicLib_symbol()
do symbol note 存在するシンボルを読み出す。
ACE_DLL DynamicLib
const char * SymbolName
#define COIL_DEFAULT_DYNLIB_MODE
void test_DynamicLib_open_and_close()
Open and Close.
void test_DynamicLib_4()
コンストラクタその4
virtual void tearDown()
Test finalization.
virtual int close(void)
Unload of the Dynamic link library.
void test_DynamicLib_symbol_failure()
do symbol note 存在しないシンボルを読み出す。
const char * error(void) const
Return the explanation message about the error.
const char * LibName
void test_DynamicLib_open_failure()
Try to open nonExistence.
void test_DynamicLib_2()
コンストラクタその2
virtual int open(const char *dll_name, int open_mode=COIL_DEFAULT_DYNLIB_MODE, int close_handle_on_destruction=1)
Load of the Dynamic link library.


openrtm_aist
Author(s): Noriaki Ando
autogenerated on Mon Jun 10 2019 14:07:52