return real_len;
}
+/**
+ * Read and remove a line from the input buffer.
+ * @param delim the line ending character, \\n by default.
+ * @returns A full line including the line ending if available, an empty string otherwise.
+ */
+std::string IOImplementation::getline(char delim)
+{
+ std::string line;
+ std::string::size_type pos=m_input_buffer.find(delim);
+
+ // no line ending in the buffer?
+ if (pos==std::string::npos)
+ return line;
+
+ // copy the line including the delimiter
+ line=m_input_buffer.substr(0,pos+1);
+
+ m_input_buffer.erase(0,pos+1);
+
+ return line;
+}
+
+
/*
* implementation of SimpleIO
*/
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)
{