Implement getline() for IOImplementation.
[libasyncio] / unittest / test_simpleio_basics.cpp
index 6fbc7be..6de16ee 100644 (file)
@@ -826,6 +826,39 @@ BOOST_AUTO_TEST_CASE(DirectProcessImplementationTestEcho)
     BOOST_CHECK_EQUAL( false, proc.inputAvailable());
 } // eo SimpleProcessTestEcho
 
+BOOST_AUTO_TEST_CASE(DirectProcessImplementationGetline)
+{
+    DOUT("enter SimpleProcessTestEcho");
+    bool res;
+    BOOST_REQUIRE(backend);
+
+    ProcessImplementation proc(
+        "/bin/sh",
+        TransientPushBackFiller<std::string, std::vector >()("-c")("echo -n 1; sleep 1; echo 2; echo")
+    );
+
+    res= proc.startProcess();
+    BOOST_CHECK_EQUAL(true, res);
+
+    res= backend->doOneStep(800);
+    BOOST_CHECK_EQUAL(true, res);
+
+    // echo -n 1 should be out by now
+
+    BOOST_CHECK_EQUAL( std::string(""), proc.getline());
+
+    for(int i=20; i-->0 && (proc.processState()!= ProcessState::stopped || !proc.eof());)
+    {
+        backend->doOneStep(100);
+    }
+
+    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("12\n"), proc.getline());
+    BOOST_CHECK_EQUAL( std::string("\n"), proc.getline());
+    BOOST_CHECK_EQUAL( false, proc.inputAvailable());
+} // eo SimpleProcessTestEcho
 
 BOOST_AUTO_TEST_CASE(CallOut1)
 {