ConnectorListenerTests.cpp
Go to the documentation of this file.
00001 // -*- C++ -*-
00012 /*
00013  * $Log: ConnectorListenerTests.cpp,v $
00014  */
00015 
00016 #ifndef ConnectorListener_cpp
00017 #define ConnectorListener_cpp
00018 
00019 #include <iostream>
00020 
00021 #include <cppunit/ui/text/TestRunner.h>
00022 #include <cppunit/TextOutputter.h>
00023 #include <cppunit/extensions/TestFactoryRegistry.h>
00024 #include <cppunit/extensions/HelperMacros.h>
00025 #include <cppunit/TestAssert.h>
00026 
00027 #include <rtm/idl/BasicDataTypeSkel.h>
00028 #include <rtm/idl/DataPortSkel.h>
00029 #include <rtm/RTC.h>
00030 #include <rtm/CdrBufferBase.h>
00031 #include <coil/Properties.h>
00032 #include <rtm/ConnectorListener.h>
00033 
00034 // ConnectorDataListenerType count
00035 #define cdl_len 10
00036 // ConnectorListenerType count
00037 #define cl_len 7
00038 
00044 namespace ConnectorListener
00045 {
00046   // ConnectorDataListenerType
00047   static const char* str_cdl[] =
00048   {
00049     "ON_BUFFER_WRITE",
00050     "ON_BUFFER_FULL",
00051     "ON_BUFFER_WRITE_TIMEOUT",
00052     "ON_BUFFER_OVERWRITE",
00053     "ON_BUFFER_READ", 
00054     "ON_SEND", 
00055     "ON_RECEIVED",
00056     "ON_RECEIVER_FULL", 
00057     "ON_RECEIVER_TIMEOUT", 
00058     "ON_RECEIVER_ERROR"
00059   };
00060 
00061   // ConnectorListenerType
00062   static const char* str_cl[] =
00063   {
00064     "ON_BUFFER_EMPTY",
00065     "ON_BUFFER_READ_TIMEOUT",
00066     "ON_SENDER_EMPTY", 
00067     "ON_SENDER_TIMEOUT", 
00068     "ON_SENDER_ERROR", 
00069     "ON_CONNECT",
00070     "ON_DISCONNECT"
00071   };
00072 
00073   static int cdl_count;
00074   static int cl_count;
00075 
00076   class DataListener
00077     : public RTC::ConnectorDataListenerT<RTC::TimedLong>
00078   {
00079   public:
00080     DataListener(const char* name) : m_name(name)
00081     {
00082       ++cdl_count;
00083     }
00084     virtual ~DataListener()
00085     {
00086       --cdl_count;
00087     }
00088 
00089     virtual void operator()(const RTC::ConnectorInfo& info,
00090                             const RTC::TimedLong& data)
00091     {
00092       m_data = data;
00093       std::cout << "-------------------------------------------" << std::endl;
00094       std::cout << "Data Listener: " << m_name << std::endl;
00095 //      std::cout << "    Data: " << data.data << std::endl;
00096       std::cout << "-------------------------------------------" << std::endl;
00097     }
00098 
00099     RTC::TimedLong get_data()
00100     {
00101        RTC::TimedLong ret;
00102        ret = m_data;
00103        m_data.data = 0;
00104        return ret;
00105     };
00106 
00107     std::string m_name;
00108     RTC::TimedLong m_data;
00109   };
00110 
00111   class ConnListener
00112     : public RTC::ConnectorListener
00113   {
00114   public:
00115     ConnListener(const char* name) : m_name(name)
00116     {
00117       ++cl_count;
00118     }
00119     virtual ~ConnListener()
00120     {
00121       --cl_count;
00122     }
00123 
00124     virtual void operator()(const RTC::ConnectorInfo& info)
00125     {
00126       std::cout << "-------------------------------------------" << std::endl;
00127       std::cout << "Connector Listener: " << m_name << std::endl;
00128       std::cout << "-------------------------------------------" << std::endl;
00129     };
00130 
00131     std::string m_name;
00132   };
00133 
00134 
00135   class ConnectorListenerTests
00136    : public CppUnit::TestFixture
00137   {
00138     CPPUNIT_TEST_SUITE(ConnectorListenerTests);
00139 
00140     CPPUNIT_TEST(test_ConnectorDataListener);
00141     CPPUNIT_TEST(test_ConnectorListener);
00142 
00143     CPPUNIT_TEST_SUITE_END();
00144   
00145   private:
00146     RTC::ConnectorListeners listeners;
00147     DataListener *datalisteners[cdl_len];
00148     ConnListener *connlisteners[cl_len];
00149 
00150   public:
00151   
00155     ConnectorListenerTests()
00156     {
00157     }
00158     
00162     ~ConnectorListenerTests()
00163     {
00164     }
00165   
00169     virtual void setUp()
00170     {
00171     }
00172     
00176     virtual void tearDown()
00177     { 
00178     }
00179   
00183     void test_ConnectorDataListener()
00184     {
00185       //ConnectorDataListeners
00186       for (int i(0); i<cdl_len; ++i)
00187         {
00188           datalisteners[i] = new DataListener(str_cdl[i]);
00189         }
00190 
00191       //ConnectorInfo
00192       coil::Properties prop;
00193       coil::vstring ports;
00194       RTC::ConnectorInfo info("name", "id", ports, prop);
00195       RTC::ConnectorInfo info_big("name", "id", ports, prop);
00196       info_big.properties.setProperty("serializer.cdr.endian", "big");
00197 
00198       // addListener()
00199       for (int i(0); i<cdl_len; ++i)
00200         {
00201           listeners.connectorData_[i].addListener(datalisteners[i], true);
00202         }
00203 
00204       // notify() endian: little
00205       for (int i(0); i<cdl_len; ++i)
00206         {
00207           RTC::TimedLong rtd;
00208           cdrMemoryStream cdr;
00209           RTC::TimedLong td;
00210           td.data = i;
00211           cdr.setByteSwapFlag(true);
00212           td >>= cdr;
00213           listeners.connectorData_[i].notify(info, cdr);
00214           rtd = datalisteners[i]->get_data();
00215           CPPUNIT_ASSERT_EQUAL(i, (int)rtd.data);
00216         }
00217       
00218       // notify() endian: big
00219       for (int i(0); i<cdl_len; ++i)
00220         {
00221           RTC::TimedLong rtd;
00222           cdrMemoryStream cdr;
00223           RTC::TimedLong td;
00224           td.data = i;
00225           cdr.setByteSwapFlag(false);
00226           td >>= cdr;
00227           listeners.connectorData_[i].notify(info_big, cdr);
00228           rtd = datalisteners[i]->get_data();
00229           CPPUNIT_ASSERT_EQUAL(i, (int)rtd.data);
00230         }
00231 
00232       // removeListener()
00233       for (int i(0); i<cdl_len; ++i)
00234         {
00235           listeners.connectorData_[i].removeListener(datalisteners[i]);
00236         }
00237 
00238       // notify() endian: little
00239       for (int i(0); i<cdl_len; ++i)
00240         {
00241           RTC::TimedLong rtd;
00242           cdrMemoryStream cdr;
00243           RTC::TimedLong td;
00244           td.data = i;
00245           cdr.setByteSwapFlag(true);
00246           td >>= cdr;
00247           listeners.connectorData_[i].notify(info, cdr);
00248           rtd = datalisteners[i]->get_data();
00249           CPPUNIT_ASSERT_EQUAL(0, (int)rtd.data);
00250         }
00251 
00252         CPPUNIT_ASSERT_EQUAL(0, cdl_count);
00253 
00254         // デストラクタでdelete しているので不要。
00255         // delete datalisteners;
00256     }
00257 
00261     void test_ConnectorListener()
00262     {
00263       //ConnectorListeners
00264       for (int i(0); i<cl_len; ++i)
00265         {
00266           connlisteners[i] = new ConnListener(str_cl[i]);
00267         }
00268 
00269       //ConnectorInfo
00270       coil::Properties prop;
00271       coil::vstring ports;
00272       RTC::ConnectorInfo info("name", "id", ports, prop);
00273 
00274       // addListener()
00275       for (int i(0); i<cl_len; ++i)
00276         {
00277           listeners.connector_[i].addListener(connlisteners[i], true);
00278         }
00279 
00280       // notify()
00281       for (int i(0); i<cl_len; ++i)
00282         {
00283           listeners.connector_[i].notify(info);
00284         }
00285       
00286       // removeListener()
00287       for (int i(0); i<cl_len; ++i)
00288         {
00289           listeners.connector_[i].removeListener(connlisteners[i]);
00290         }
00291 
00292       // notify() endian: little
00293       for (int i(0); i<cl_len; ++i)
00294         {
00295           listeners.connector_[i].notify(info);
00296         }
00297         CPPUNIT_ASSERT_EQUAL(0, cl_count);
00298 
00299         // デストラクタでdelete しているので不要。
00300         // delete datalisteners;
00301     }
00302 
00303   };
00304 }; // namespace ConnectorListener
00305 
00306 /*
00307  * Register test suite
00308  */
00309 CPPUNIT_TEST_SUITE_REGISTRATION(ConnectorListener::ConnectorListenerTests);
00310 
00311 #ifdef LOCAL_MAIN
00312 int main(int argc, char* argv[])
00313 {
00314 
00315   FORMAT format = TEXT_OUT;
00316   int target = 0;
00317   std::string xsl;
00318   std::string ns;
00319   std::string fname;
00320   std::ofstream ofs;
00321 
00322   int i(1);
00323   while (i < argc)
00324     {
00325       std::string arg(argv[i]);
00326       std::string next_arg;
00327       if (i + 1 < argc) next_arg = argv[i + 1];
00328       else              next_arg = "";
00329 
00330       if (arg == "--text") { format = TEXT_OUT; break; }
00331       if (arg == "--xml")
00332         {
00333           if (next_arg == "")
00334             {
00335               fname = argv[0];
00336               fname += ".xml";
00337             }
00338           else
00339             {
00340               fname = next_arg;
00341             }
00342           format = XML_OUT;
00343           ofs.open(fname.c_str());
00344         }
00345       if ( arg == "--compiler"  ) { format = COMPILER_OUT; break; }
00346       if ( arg == "--cerr"      ) { target = 1; break; }
00347       if ( arg == "--xsl"       )
00348         {
00349           if (next_arg == "") xsl = "default.xsl"; 
00350           else                xsl = next_arg;
00351         }
00352       if ( arg == "--namespace" )
00353         {
00354           if (next_arg == "")
00355             {
00356               std::cerr << "no namespace specified" << std::endl;
00357               exit(1); 
00358             }
00359           else
00360             {
00361               xsl = next_arg;
00362             }
00363         }
00364       ++i;
00365     }
00366   CppUnit::TextUi::TestRunner runner;
00367   if ( ns.empty() )
00368     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
00369   else
00370     runner.addTest(CppUnit::TestFactoryRegistry::getRegistry(ns).makeTest());
00371   CppUnit::Outputter* outputter = 0;
00372   std::ostream* stream = target ? &std::cerr : &std::cout;
00373   switch ( format )
00374     {
00375     case TEXT_OUT :
00376       outputter = new CppUnit::TextOutputter(&runner.result(),*stream);
00377       break;
00378     case XML_OUT :
00379       std::cout << "XML_OUT" << std::endl;
00380       outputter = new CppUnit::XmlOutputter(&runner.result(),
00381                                             ofs, "shift_jis");
00382       static_cast<CppUnit::XmlOutputter*>(outputter)->setStyleSheet(xsl);
00383       break;
00384     case COMPILER_OUT :
00385       outputter = new CppUnit::CompilerOutputter(&runner.result(),*stream);
00386       break;
00387     }
00388   runner.setOutputter(outputter);
00389   runner.run();
00390   return 0; // runner.run() ? 0 : 1;
00391 }
00392 #endif // MAIN
00393 #endif // ConnectorListener_cpp


openrtm_aist
Author(s): Noriaki Ando
autogenerated on Thu Aug 27 2015 14:16:37