Implement basic input buffer handling functions for IOImplementation
[libasyncio] / unittest / test_simpleio_basics.cpp
index e86ad7a..6fbc7be 100644 (file)
@@ -791,6 +791,40 @@ BOOST_AUTO_TEST_CASE(SignaledProcessTermination)
     BOOST_CHECK_EQUAL( Signal::USR1 , proc.exitCode()>>8 );
 } // eo SignaledProcessTermination
 
+/**
+    * fork an echo subprocess and read back the output. Directly use ProcessImplementation without helper class.
+    */
+BOOST_AUTO_TEST_CASE(DirectProcessImplementationTestEcho)
+{
+    DOUT("enter SimpleProcessTestEcho");
+    bool res;
+    BOOST_REQUIRE(backend);
+
+    ProcessImplementation proc(
+        "/bin/echo",
+        TransientPushBackFiller<std::string, std::vector >()("Eine")("Zeichenkette")
+    );
+
+    res= proc.startProcess();
+    BOOST_CHECK_EQUAL(true, res);
+
+    res= backend->doOneStep(200);
+    BOOST_CHECK_EQUAL(true, res);
+    for(int i=20; i-->0 && (proc.processState()!= ProcessState::stopped || !proc.eof());)
+    {
+        backend->doOneStep(10);
+    }
+
+    BOOST_CHECK_EQUAL( ProcessState(ProcessState::stopped), proc.processState() );
+    BOOST_CHECK_EQUAL( true, proc.eof() );
+    BOOST_CHECK_EQUAL( 0, proc.exitCode() );
+    BOOST_CHECK_EQUAL( std::string("Eine Zeichenkette\n"), proc.getInput());
+    BOOST_CHECK_EQUAL( 5, proc.shortenInput(5));
+    BOOST_CHECK_EQUAL( std::string("Zeichenkette\n"), proc.getInput());
+    BOOST_CHECK_EQUAL( true, proc.inputAvailable());
+    BOOST_CHECK_EQUAL( std::string("Zeichenkette\n"), proc.getInputClear());
+    BOOST_CHECK_EQUAL( false, proc.inputAvailable());
+} // eo SimpleProcessTestEcho
 
 
 BOOST_AUTO_TEST_CASE(CallOut1)