ObjectManagerTests.cpp
Go to the documentation of this file.
1 // -*- C++ -*-
21 /*
22  * $Log: ObjectManagerTests.cpp,v $
23  * Revision 1.2 2008/04/18 06:23:58 arafune
24  * Modified / Added some tests.
25  *
26  * Revision 1.1 2007/12/20 07:50:18 arafune
27  * *** empty log message ***
28  *
29  * Revision 1.1 2006/11/27 08:26:00 n-ando
30  * TestSuites are devided into each directory.
31  *
32  * Revision 1.2 2006/10/24 03:08:15 kurihara
33  *
34  * test program for ObjectManager class
35  *
36  */
37 
38 #ifndef ObjectManager_cpp
39 #define ObjectManager_cpp
40 
41 #include <cppunit/ui/text/TestRunner.h>
42 #include <cppunit/TextOutputter.h>
43 #include <cppunit/extensions/TestFactoryRegistry.h>
44 #include <cppunit/extensions/HelperMacros.h>
45 #include <cppunit/TestAssert.h>
46 
47 #include <fstream>
48 #include <string>
49 
50 #include <rtm/ObjectManager.h>
51 
57 {
58  class ObjectMock
59  {
60  public:
61  ObjectMock(const std::string& id) : m_id(id) {}
62  std::string getId() const { return std::string(m_id); }
63 
64  private:
65  std::string m_id;
66  };
67 
69  {
70  public:
71  PredicateMock(const ObjectMock* obj) : m_id(obj->getId()) {}
72  PredicateMock(const std::string& id) : m_id(id) {}
73  bool operator()(const ObjectMock* obj) { return (obj->getId() == m_id); }
74 
75  private:
76  const std::string m_id;
77  };
78 
80  : public CppUnit::TestFixture
81  {
82  CPPUNIT_TEST_SUITE(ObjectManagerTests);
83  CPPUNIT_TEST(test_registerObject);
84  CPPUNIT_TEST(test_registerObject_with_overlapped_identifier);
85  CPPUNIT_TEST(test_find);
86  CPPUNIT_TEST(test_unregisterObject_and_find);
87  CPPUNIT_TEST(test_getObjects);
88  CPPUNIT_TEST_SUITE_END();
89 
90  public:
95  {
96  }
97 
102  {
103  }
104 
108  virtual void setUp()
109  {
110  }
111 
115  virtual void tearDown()
116  {
117  }
118 
125  {
127 
128  // オブジェクトを準備しておく
129  ObjectMock obj1("ID 1");
130  ObjectMock obj2("ID 2");
131 
132  // オブジェクトを正常に登録できるか?
133  CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1));
134  CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2));
135  }
136 
144  {
146 
147  // 同一の識別子を持つオブジェクトを準備しておく
148  ObjectMock obj1("ID");
149  ObjectMock obj2("ID");
150 
151  // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); // 同一のオブジェクト(当然、識別子も同じ)の登録を試みて、意図どおり失敗するか? CPPUNIT_ASSERT_EQUAL(false, objMgr.registerObject(&obj1)); // 同一の識別子を持つ別のオブジェクトの登録を試みて、意図どおり失敗するか? CPPUNIT_ASSERT_EQUAL(false, objMgr.registerObject(&obj2)); } /*! * @brief find()メソッドのテスト * * - 登録されたオブジェクトをfind()で正しく取得できるか? * - 存在しないIDを指定した場合、意図どおりNULLが取得されるか? */ void test_find() { ::ObjectManager<std::string, ObjectMock, PredicateMock> objMgr; // オブジェクトを準備しておく ObjectMock obj1("ID 1"); ObjectMock obj2("ID 2"); // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2)); // 登録されたオブジェクトをfind()で正しく取得できるか? ObjectMock* pObjRet1 = objMgr.find("ID 1"); CPPUNIT_ASSERT(pObjRet1 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), pObjRet1->getId()); ObjectMock* pObjRet2 = objMgr.find("ID 2"); CPPUNIT_ASSERT(pObjRet2 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), pObjRet2->getId()); // 存在しないIDを指定した場合、意図どおりNULLが取得されるか? CPPUNIT_ASSERT_EQUAL((ObjectMock*) NULL, objMgr.find("INEXIST ID")); } /*! * @brief unregisterObject()メソッドとfind()メソッドのテスト * * - オブジェクトをunregisterObject()で登録解除して、そのオブジェクトを正しく取得できるか? * - 登録解除したオブジェクトのIDを指定してfind()した場合、意図どおりNULLを得るか? * - 登録解除していないオブジェクトは、依然としてfind()で正しく取得できるか? */ void test_unregisterObject_and_find() { ::ObjectManager<std::string, ObjectMock, PredicateMock> objMgr; // オブジェクトを準備しておく ObjectMock obj1("ID 1"); ObjectMock obj2("ID 2"); // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2)); // オブジェクトを登録解除して、そのオブジェクトを正しく取得できるか? ObjectMock* pObjRet1 = objMgr.unregisterObject("ID 1"); CPPUNIT_ASSERT(pObjRet1 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), pObjRet1->getId()); // 登録解除したオブジェクトのIDを指定してfind()した場合、意図どおりNULLを得るか? CPPUNIT_ASSERT_EQUAL((ObjectMock*) NULL, objMgr.find("ID 1")); // 登録解除していないオブジェクトは、依然としてfind()で正しく取得できるか? ObjectMock* pObjRet2 = objMgr.find("ID 2"); CPPUNIT_ASSERT(pObjRet2 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), pObjRet2->getId()); } /*! * @brief getObjects()メソッドのテスト * * - getObjects()で、登録済みの全オブジェクトを正しく取得できるか? */ void test_getObjects() { ::ObjectManager<std::string, ObjectMock, PredicateMock> objMgr; // オブジェクトを準備しておく ObjectMock obj1("ID 1"); ObjectMock obj2("ID 2"); // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2)); // getObjects()で、登録済みの全オブジェクトを正しく取得できるか? std::vector<ObjectMock*> objs = objMgr.getObjects(); CPPUNIT_ASSERT_EQUAL(2, (int) objs.size()); CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 1")))->getId()); CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 2")))->getId()); } }; }; // namespace ObjectManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ObjectManagerTests::ObjectManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ObjectManager_cpp
152  CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1));
153 
154  // 同一のオブジェクト(当然、識別子も同じ)の登録を試みて、意図どおり失敗するか?
155  CPPUNIT_ASSERT_EQUAL(false, objMgr.registerObject(&obj1));
156 
157  // 同一の識別子を持つ別のオブジェクトの登録を試みて、意図どおり失敗するか?
158  CPPUNIT_ASSERT_EQUAL(false, objMgr.registerObject(&obj2));
159  }
160 
167  void test_find()
168  {
170 
171  // オブジェクトを準備しておく
172  ObjectMock obj1("ID 1");
173  ObjectMock obj2("ID 2");
174 
175  // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2)); // 登録されたオブジェクトをfind()で正しく取得できるか? ObjectMock* pObjRet1 = objMgr.find("ID 1"); CPPUNIT_ASSERT(pObjRet1 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), pObjRet1->getId()); ObjectMock* pObjRet2 = objMgr.find("ID 2"); CPPUNIT_ASSERT(pObjRet2 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), pObjRet2->getId()); // 存在しないIDを指定した場合、意図どおりNULLが取得されるか? CPPUNIT_ASSERT_EQUAL((ObjectMock*) NULL, objMgr.find("INEXIST ID")); } /*! * @brief unregisterObject()メソッドとfind()メソッドのテスト * * - オブジェクトをunregisterObject()で登録解除して、そのオブジェクトを正しく取得できるか? * - 登録解除したオブジェクトのIDを指定してfind()した場合、意図どおりNULLを得るか? * - 登録解除していないオブジェクトは、依然としてfind()で正しく取得できるか? */ void test_unregisterObject_and_find() { ::ObjectManager<std::string, ObjectMock, PredicateMock> objMgr; // オブジェクトを準備しておく ObjectMock obj1("ID 1"); ObjectMock obj2("ID 2"); // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2)); // オブジェクトを登録解除して、そのオブジェクトを正しく取得できるか? ObjectMock* pObjRet1 = objMgr.unregisterObject("ID 1"); CPPUNIT_ASSERT(pObjRet1 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), pObjRet1->getId()); // 登録解除したオブジェクトのIDを指定してfind()した場合、意図どおりNULLを得るか? CPPUNIT_ASSERT_EQUAL((ObjectMock*) NULL, objMgr.find("ID 1")); // 登録解除していないオブジェクトは、依然としてfind()で正しく取得できるか? ObjectMock* pObjRet2 = objMgr.find("ID 2"); CPPUNIT_ASSERT(pObjRet2 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), pObjRet2->getId()); } /*! * @brief getObjects()メソッドのテスト * * - getObjects()で、登録済みの全オブジェクトを正しく取得できるか? */ void test_getObjects() { ::ObjectManager<std::string, ObjectMock, PredicateMock> objMgr; // オブジェクトを準備しておく ObjectMock obj1("ID 1"); ObjectMock obj2("ID 2"); // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2)); // getObjects()で、登録済みの全オブジェクトを正しく取得できるか? std::vector<ObjectMock*> objs = objMgr.getObjects(); CPPUNIT_ASSERT_EQUAL(2, (int) objs.size()); CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 1")))->getId()); CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 2")))->getId()); } }; }; // namespace ObjectManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ObjectManagerTests::ObjectManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ObjectManager_cpp
176  CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1));
177  CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2));
178 
179  // 登録されたオブジェクトをfind()で正しく取得できるか?
180  ObjectMock* pObjRet1 = objMgr.find("ID 1");
181  CPPUNIT_ASSERT(pObjRet1 != NULL);
182  CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), pObjRet1->getId());
183 
184  ObjectMock* pObjRet2 = objMgr.find("ID 2");
185  CPPUNIT_ASSERT(pObjRet2 != NULL);
186  CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), pObjRet2->getId());
187 
188  // 存在しないIDを指定した場合、意図どおりNULLが取得されるか?
189  CPPUNIT_ASSERT_EQUAL((ObjectMock*) NULL, objMgr.find("INEXIST ID"));
190  }
191 
200  {
202 
203  // オブジェクトを準備しておく
204  ObjectMock obj1("ID 1");
205  ObjectMock obj2("ID 2");
206 
207  // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2)); // オブジェクトを登録解除して、そのオブジェクトを正しく取得できるか? ObjectMock* pObjRet1 = objMgr.unregisterObject("ID 1"); CPPUNIT_ASSERT(pObjRet1 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), pObjRet1->getId()); // 登録解除したオブジェクトのIDを指定してfind()した場合、意図どおりNULLを得るか? CPPUNIT_ASSERT_EQUAL((ObjectMock*) NULL, objMgr.find("ID 1")); // 登録解除していないオブジェクトは、依然としてfind()で正しく取得できるか? ObjectMock* pObjRet2 = objMgr.find("ID 2"); CPPUNIT_ASSERT(pObjRet2 != NULL); CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), pObjRet2->getId()); } /*! * @brief getObjects()メソッドのテスト * * - getObjects()で、登録済みの全オブジェクトを正しく取得できるか? */ void test_getObjects() { ::ObjectManager<std::string, ObjectMock, PredicateMock> objMgr; // オブジェクトを準備しておく ObjectMock obj1("ID 1"); ObjectMock obj2("ID 2"); // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2)); // getObjects()で、登録済みの全オブジェクトを正しく取得できるか? std::vector<ObjectMock*> objs = objMgr.getObjects(); CPPUNIT_ASSERT_EQUAL(2, (int) objs.size()); CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 1")))->getId()); CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 2")))->getId()); } }; }; // namespace ObjectManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ObjectManagerTests::ObjectManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ObjectManager_cpp
208  CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1));
209  CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2));
210 
211  // オブジェクトを登録解除して、そのオブジェクトを正しく取得できるか?
212  ObjectMock* pObjRet1 = objMgr.unregisterObject("ID 1");
213  CPPUNIT_ASSERT(pObjRet1 != NULL);
214  CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), pObjRet1->getId());
215 
216  // 登録解除したオブジェクトのIDを指定してfind()した場合、意図どおりNULLを得るか?
217  CPPUNIT_ASSERT_EQUAL((ObjectMock*) NULL, objMgr.find("ID 1"));
218 
219  // 登録解除していないオブジェクトは、依然としてfind()で正しく取得できるか?
220  ObjectMock* pObjRet2 = objMgr.find("ID 2");
221  CPPUNIT_ASSERT(pObjRet2 != NULL);
222  CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), pObjRet2->getId());
223  }
224 
231  {
233 
234  // オブジェクトを準備しておく
235  ObjectMock obj1("ID 1");
236  ObjectMock obj2("ID 2");
237 
238  // オブジェクトを登録する CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1)); CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2)); // getObjects()で、登録済みの全オブジェクトを正しく取得できるか? std::vector<ObjectMock*> objs = objMgr.getObjects(); CPPUNIT_ASSERT_EQUAL(2, (int) objs.size()); CPPUNIT_ASSERT_EQUAL(std::string("ID 1"), (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 1")))->getId()); CPPUNIT_ASSERT_EQUAL(std::string("ID 2"), (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 2")))->getId()); } }; }; // namespace ObjectManager /* * Register test suite */ CPPUNIT_TEST_SUITE_REGISTRATION(ObjectManagerTests::ObjectManagerTests); #ifdef LOCAL_MAIN int main(int argc, char* argv[]) { FORMAT format = TEXT_OUT; int target = 0; std::string xsl; std::string ns; std::string fname; std::ofstream ofs; int i(1); while (i < argc) { std::string arg(argv[i]); std::string next_arg; if (i + 1 < argc) next_arg = argv[i + 1]; else next_arg = ""; if (arg == "--text") { format = TEXT_OUT; break; } if (arg == "--xml") { if (next_arg == "") { fname = argv[0]; fname += ".xml"; } else { fname = next_arg; } format = XML_OUT; ofs.open(fname.c_str()); } if ( arg == "--compiler" ) { format = COMPILER_OUT; break; } if ( arg == "--cerr" ) { target = 1; break; } if ( arg == "--xsl" ) { if (next_arg == "") xsl = "default.xsl"; else xsl = next_arg; } if ( arg == "--namespace" ) { if (next_arg == "") { std::cerr << "no namespace specified" << std::endl; exit(1); } else { xsl = next_arg; } } ++i; } CppUnit::TextUi::TestRunner runner; if ( ns.empty() ) runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest()); else runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest()); CppUnit::Outputter* outputter = 0; std::ostream* stream = target ? &std::cerr : &std::cout; switch ( format ) { case TEXT_OUT : outputter = new CppUnit::TextOutputter(&runner.result(),*stream); break; case XML_OUT : std::cout << "XML_OUT" << std::endl; outputter = new CppUnit::XmlOutputter(&runner.result(), ofs, "shift_jis"); static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl); break; case COMPILER_OUT : outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream); break; } runner.setOutputter(outputter); runner.run(); return 0; // runner.run() ? 0 : 1; } #endif // MAIN #endif // ObjectManager_cpp
239  CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj1));
240  CPPUNIT_ASSERT_EQUAL(true, objMgr.registerObject(&obj2));
241 
242  // getObjects()で、登録済みの全オブジェクトを正しく取得できるか?
243  std::vector<ObjectMock*> objs = objMgr.getObjects();
244  CPPUNIT_ASSERT_EQUAL(2, (int) objs.size());
245  CPPUNIT_ASSERT_EQUAL(std::string("ID 1"),
246  (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 1")))->getId());
247  CPPUNIT_ASSERT_EQUAL(std::string("ID 2"),
248  (*std::find_if(objs.begin(), objs.end(), PredicateMock("ID 2")))->getId());
249  }
250 
251  };
252 }; // namespace ObjectManager
253 
254 /*
255  * Register test suite
256  */
258 
259 #ifdef LOCAL_MAIN
260 int main(int argc, char* argv[])
261 {
262 
263  FORMAT format = TEXT_OUT;
264  int target = 0;
265  std::string xsl;
266  std::string ns;
267  std::string fname;
268  std::ofstream ofs;
269 
270  int i(1);
271  while (i < argc)
272  {
273  std::string arg(argv[i]);
274  std::string next_arg;
275  if (i + 1 < argc) next_arg = argv[i + 1];
276  else next_arg = "";
277 
278  if (arg == "--text") { format = TEXT_OUT; break; }
279  if (arg == "--xml")
280  {
281  if (next_arg == "")
282  {
283  fname = argv[0];
284  fname += ".xml";
285  }
286  else
287  {
288  fname = next_arg;
289  }
290  format = XML_OUT;
291  ofs.open(fname.c_str());
292  }
293  if ( arg == "--compiler" ) { format = COMPILER_OUT; break; }
294  if ( arg == "--cerr" ) { target = 1; break; }
295  if ( arg == "--xsl" )
296  {
297  if (next_arg == "") xsl = "default.xsl";
298  else xsl = next_arg;
299  }
300  if ( arg == "--namespace" )
301  {
302  if (next_arg == "")
303  {
304  std::cerr << "no namespace specified" << std::endl;
305  exit(1);
306  }
307  else
308  {
309  xsl = next_arg;
310  }
311  }
312  ++i;
313  }
314  CppUnit::TextUi::TestRunner runner;
315  if ( ns.empty() )
316  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
317  else
318  runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest());
319  CppUnit::Outputter* outputter = 0;
320  std::ostream* stream = target ? &std::cerr : &std::cout;
321  switch ( format )
322  {
323  case TEXT_OUT :
324  outputter = new CppUnit::TextOutputter(&runner.result(),*stream);
325  break;
326  case XML_OUT :
327  std::cout << "XML_OUT" << std::endl;
328  outputter = new CppUnit::XmlOutputter(&runner.result(),
329  ofs, "shift_jis");
330  static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl);
331  break;
332  case COMPILER_OUT :
333  outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream);
334  break;
335  }
336  runner.setOutputter(outputter);
337  runner.run();
338  return 0; // runner.run() ? 0 : 1;
339 }
340 #endif // MAIN
341 #endif // ObjectManager_cpp
int main(int argc, char **argv)
CPPUNIT_TEST_SUITE_REGISTRATION(ObjectManagerTests::ObjectManagerTests)
Object * find(const Identifier &id) const
Find the object.
ObjectMock(const std::string &id)
virtual void tearDown()
Test finalization.
virtual void setUp()
Test initialization.
Class for managing objects.
bool registerObject(Object *obj)
Register the specified object.
Object * unregisterObject(const Identifier &id)
Unregister the specified object.
void test_find()
find()メソッドのテスト
void test_registerObject()
registerObject()メソッドのテスト
void test_unregisterObject_and_find()
unregisterObject()メソッドとfind()メソッドのテスト
void test_registerObject_with_overlapped_identifier()
registerObject()メソッドのテスト
std::vector< Object * > getObjects() const
Get a list of obejects that are registerd.
bool operator()(const ObjectMock *obj)
void test_getObjects()
getObjects()メソッドのテスト


openrtm_aist
Author(s): Noriaki Ando
autogenerated on Thu Jun 6 2019 19:25:59