25 #ifndef WMODULECONNECTOR_TEST_H
26 #define WMODULECONNECTOR_TEST_H
31 #include <boost/shared_ptr.hpp>
33 #include <cxxtest/TestSuite.h>
35 #include "../WModuleConnector.h"
36 #include "../WModuleInputData.h"
37 #include "../WModuleOutputData.h"
38 #include "../WModuleInputConnector.h"
39 #include "../WModuleOutputConnector.h"
40 #include "../WModule.h"
41 #include "../../common/WSegmentationFault.h"
42 #include "../../common/WTransferable.h"
43 #include "../../common/WPrototyped.h"
44 #include "../../common/WLogger.h"
45 #include "../exceptions/WModuleConnectorInitFailed.h"
46 #include "../exceptions/WModuleConnectionFailed.h"
47 #include "../exceptions/WModuleConnectorsIncompatible.h"
48 #include "../exceptions/WModuleException.h"
49 #include "../exceptions/WModuleConnectorUnconnected.h"
76 return "WTestTransferableBase";
86 return "Test class for testing transfer of data.";
152 return "WTestTransferableDerived";
162 return "Test class for testing transfer of data.";
212 virtual boost::shared_ptr< WModule >
factory()
const
214 return boost::shared_ptr< WModule >(
new WModuleImpl() );
242 m_input = boost::shared_ptr< WModuleInputData< WTestTransferableBase > >(
248 m_output = boost::shared_ptr< WModuleOutputData< WTestTransferableBase > >(
255 m_inputDerived = boost::shared_ptr< WModuleInputData< WTestTransferableDerived > >(
261 m_outputDerived = boost::shared_ptr< WModuleOutputData< WTestTransferableDerived > >(
290 boost::shared_ptr< WModuleConnector > )
300 boost::shared_ptr< WModuleConnector > )
313 boost::shared_ptr< WModuleConnector > output )
316 boost::shared_ptr< WModuleOutputData< WTestTransferableBase > > o =
323 boost::shared_ptr< WTestTransferableBase > ds = o->
getData();
326 data = ds->get() + 1;
343 boost::shared_ptr< WModuleInputData< WTestTransferableBase > >
m_input;
348 boost::shared_ptr< WModuleInputData< WTestTransferableDerived > >
m_inputDerived;
353 boost::shared_ptr< WModuleOutputData< WTestTransferableBase > >
m_output;
381 boost::shared_ptr< WModuleImpl >
m1;
386 boost::shared_ptr< WModuleImpl >
m2;
391 boost::shared_ptr< WModuleImpl >
m3;
399 m1 = boost::shared_ptr< WModuleImpl >(
new WModuleImpl(
"m1" ) );
400 m2 = boost::shared_ptr< WModuleImpl >(
new WModuleImpl(
"m2" ) );
401 m3 = boost::shared_ptr< WModuleImpl >(
new WModuleImpl(
"m3" ) );
420 m1->m_output->connect(
m2->m_input );
421 m1->m_input->connect(
m2->m_output );
434 TS_ASSERT(
m1->m_inputConnectors.size() == 0 );
435 TS_ASSERT(
m1->m_outputConnectors.size() == 0 );
448 TS_ASSERT(
m1->m_inputConnectors.size() == 2 );
449 TS_ASSERT(
m1->m_outputConnectors.size() == 2 );
450 TS_ASSERT(
m2->m_inputConnectors.size() == 2 );
451 TS_ASSERT(
m2->m_outputConnectors.size() == 2 );
452 TS_ASSERT(
m3->m_inputConnectors.size() == 2 );
453 TS_ASSERT(
m3->m_outputConnectors.size() == 2 );
456 TS_ASSERT(
m1->isInitialized()() );
457 TS_ASSERT(
m2->isInitialized()() );
458 TS_ASSERT(
m3->isInitialized()() );
473 TS_ASSERT(
m1->isInitialized()() );
491 TS_ASSERT(
m1->m_output->m_connected.size() == 0 );
492 TS_ASSERT(
m1->m_input->m_connected.size() == 0 );
493 TS_ASSERT(
m2->m_output->m_connected.size() == 0 );
494 TS_ASSERT(
m2->m_input->m_connected.size() == 0 );
507 TS_ASSERT(
m1->m_input->m_connected.size() == 0 );
508 TS_ASSERT(
m1->m_output->m_connected.size() == 0 );
509 TS_ASSERT(
m1->m_inputDerived->m_connected.size() == 0 );
510 TS_ASSERT(
m1->m_outputDerived->m_connected.size() == 0 );
513 TS_ASSERT_THROWS_NOTHING(
m1->m_input->connect(
m2->m_outputDerived ) );
514 TS_ASSERT(
m1->m_input->m_connected.size() == 1 );
515 TS_ASSERT(
m2->m_outputDerived->m_connected.size() == 1 );
519 TS_ASSERT(
m1->m_output->m_connected.size() == 0 );
520 TS_ASSERT(
m1->m_inputDerived->m_connected.size() == 0 );
534 TS_ASSERT(
m1->m_output->m_connected.size() == 1 );
535 TS_ASSERT(
m1->m_input->m_connected.size() == 1 );
536 TS_ASSERT(
m2->m_output->m_connected.size() == 1 );
537 TS_ASSERT(
m2->m_input->m_connected.size() == 1 );
550 TS_ASSERT_THROWS_NOTHING(
m1->m_output->connect(
m2->m_input ) );
551 TS_ASSERT_THROWS_NOTHING(
m1->m_input->connect(
m2->m_output ) );
552 TS_ASSERT(
m1->m_output->m_connected.size() == 1 );
553 TS_ASSERT(
m1->m_input->m_connected.size() == 1 );
554 TS_ASSERT(
m2->m_output->m_connected.size() == 1 );
555 TS_ASSERT(
m2->m_input->m_connected.size() == 1 );
568 TS_ASSERT_THROWS_NOTHING(
m1->m_output->disconnect(
m1->m_input ) );
569 TS_ASSERT(
m1->m_output->m_connected.size() == 1 );
570 TS_ASSERT(
m1->m_input->m_connected.size() == 1 );
573 TS_ASSERT_THROWS_NOTHING(
m1->m_output->disconnect(
m2->m_input ) );
574 TS_ASSERT(
m1->m_output->m_connected.size() == 0 );
575 TS_ASSERT(
m1->m_input->m_connected.size() == 1 );
576 TS_ASSERT(
m2->m_output->m_connected.size() == 1 );
577 TS_ASSERT(
m2->m_input->m_connected.size() == 0 );
590 TS_ASSERT_THROWS_NOTHING(
m3->m_input->connect(
m2->m_output ) );
593 TS_ASSERT(
m2->m_output->m_connected.size() == 2 );
594 TS_ASSERT(
m3->m_input->m_connected.size() == 1 );
597 m2->m_output->disconnectAll();
598 TS_ASSERT(
m2->m_output->m_connected.size() == 0 );
599 TS_ASSERT(
m1->m_input->m_connected.size() == 0 );
600 TS_ASSERT(
m3->m_input->m_connected.size() == 0 );
612 TS_ASSERT_THROWS_NOTHING(
m1->cleanup() );
613 TS_ASSERT(
m1->m_inputConnectors.size() == 0 );
614 TS_ASSERT(
m1->m_outputConnectors.size() == 0 );
627 boost::shared_ptr< WTestTransferableBase > data = boost::shared_ptr< WTestTransferableBase >(
new WTestTransferableBase() );
630 TS_ASSERT_THROWS_NOTHING(
m1->m_output->updateData( data ) );
633 TS_ASSERT(
m1->m_output->getData()->get() == d );
634 TS_ASSERT(
m2->m_input->getData()->get() == d );
635 TS_ASSERT(
m2->data == d + 1 );
650 TS_ASSERT( !
m3->m_input->getData().get() );
653 TS_ASSERT(
m2->m_input->getData() == boost::shared_ptr< WTestTransferableBase >() );
657 #endif // WMODULECONNECTOR_TEST_H