Utils/Termlib: Extend the completion API
[senf.git] / PPI / Connectors.test.cc
index 6b95fc2..20b7e3e 100644 (file)
@@ -21,7 +21,7 @@
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
 /** \file
-    \brief Connectors.test unit tests */
+    \brief Connectors unit tests */
 
 //#include "Connectors.test.hh"
 //#include "Connectors.test.ih"
@@ -402,22 +402,139 @@ BOOST_AUTO_UNIT_TEST(connectorTest)
     {
         TypedPassiveInput<> input;
         TypedActiveOutput<> output;
-        BOOST_CHECK_NO_THROW( ppi::connect(output, input) );
+        SENF_CHECK_NO_THROW( ppi::connect(output, input) );
     }
     { 
         TypedPassiveInput<> input;
         debug::ActiveSource output;
-        BOOST_CHECK_NO_THROW( ppi::connect(output, input) );
+        SENF_CHECK_NO_THROW( ppi::connect(output, input) );
     }
     {
         debug::ActiveSink input;
         TypedPassiveOutput<> output;
-        BOOST_CHECK_NO_THROW( ppi::connect(output, input) );
+        SENF_CHECK_NO_THROW( ppi::connect(output, input) );
     }
     {
         debug::ActiveSink input;
         debug::PassiveSource output;
-        BOOST_CHECK_NO_THROW( ppi::connect(output, input) );
+        SENF_CHECK_NO_THROW( ppi::connect(output, input) );
+    }
+}
+
+BOOST_AUTO_UNIT_TEST(delayedConnect)
+{
+    {
+        debug::PassiveSource source;
+        debug::ActiveSink target;
+
+        ppi::init();
+
+        BOOST_CHECK( ! target.input );
+        BOOST_CHECK( ! target.request() );
+
+        ppi::connect(source, target);
+        ppi::init();
+
+        BOOST_CHECK( ! target.input );
+
+        senf::Packet p (senf::DataPacket::create());
+        source.submit(p);
+        BOOST_CHECK( target.request() == p );
+    }
+
+    {
+        debug::PassiveSource source;
+        debug::ActiveSink target;
+
+        ppi::init();
+
+        senf::Packet p (senf::DataPacket::create());
+        source.submit(p);
+
+        BOOST_CHECK( ! target.input );
+        BOOST_CHECK( ! target.request() );
+
+        ppi::connect(source, target);
+        ppi::init();
+
+        BOOST_CHECK( target.input );
+        BOOST_CHECK( target.request() == p );
+    }
+
+    {
+        debug::ActiveSource source;
+        debug::PassiveSink target;
+
+        ppi::init();
+
+        BOOST_CHECK( ! source.output );
+        SENF_CHECK_NO_THROW( source.output(senf::DataPacket::create()) );
+
+        ppi::connect(source, target);
+        ppi::init();
+        
+        BOOST_CHECK( source.output );
+
+        senf::Packet p (senf::DataPacket::create());
+        source.submit(p);
+
+        BOOST_CHECK( target.front() == p );        
+        BOOST_CHECK_EQUAL( target.size(), 1u );
+    }
+
+    {
+        debug::ActiveSource source;
+        debug::PassiveSink target;
+
+        ppi::init();
+
+        BOOST_CHECK( ! source.output );
+        SENF_CHECK_NO_THROW( source.output(senf::DataPacket::create()) );
+        target.throttle();
+
+        ppi::connect(source, target);
+        ppi::init();
+        
+        BOOST_CHECK( ! source.output );
+        target.unthrottle();
+        BOOST_CHECK( source.output );
+    }
+}
+
+BOOST_AUTO_UNIT_TEST(disconnect)
+{
+    {
+        debug::PassiveSource source;
+        debug::ActiveSink target;
+
+        ppi::connect(source, target);
+        ppi::init();
+
+        BOOST_CHECK( ! target.input );
+
+        senf::Packet p (senf::DataPacket::create());
+        source.submit(p);
+
+        BOOST_CHECK( target.input );
+        
+        target.input.disconnect();
+        ppi::init();
+        
+        BOOST_CHECK( ! target.input );
+    }
+    {
+        debug::ActiveSource source;
+        debug::PassiveSink target;
+
+        ppi::connect(source, target);
+        ppi::init();
+
+        BOOST_CHECK( source.output );
+
+        source.output.disconnect();
+        ppi::init();
+
+        BOOST_CHECK( ! source.output );
     }
 }