summaryrefslogtreecommitdiff
path: root/indra/llcommon/tests/llprocess_test.cpp
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2012-02-15 20:57:25 -0500
committerNat Goodspeed <nat@lindenlab.com>2012-02-15 20:57:25 -0500
commitfc6d70db8771320f3b1136e76383fc85ddf1b6b2 (patch)
tree8f66c971860b8592c6b2790254fa076f132158ff /indra/llcommon/tests/llprocess_test.cpp
parent56d931216e67a3e59199669bba022c65a9617bb5 (diff)
Don't be confused by "\r\n" line endings on pipe on Windows.
These are all very well when we just want to dump the output to a log, or whatever, but in a unit-test context it matters for comparison.
Diffstat (limited to 'indra/llcommon/tests/llprocess_test.cpp')
-rw-r--r--indra/llcommon/tests/llprocess_test.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp
index 2db17cae97..6d6b888471 100644
--- a/indra/llcommon/tests/llprocess_test.cpp
+++ b/indra/llcommon/tests/llprocess_test.cpp
@@ -288,6 +288,22 @@ public:
LLError::Settings* mOldSettings;
};
+std::string getline(std::istream& in)
+{
+ std::string line;
+ std::getline(in, line);
+ // Blur the distinction between "\r\n" and plain "\n". std::getline() will
+ // have eaten the "\n", but we could still end up with a trailing "\r".
+ std::string::size_type lastpos = line.find_last_not_of("\r");
+ if (lastpos != std::string::npos)
+ {
+ // Found at least one character that's not a trailing '\r'. SKIP OVER
+ // IT and then erase the rest of the line.
+ line.erase(lastpos+1);
+ }
+ return line;
+}
+
/*****************************************************************************
* TUT
*****************************************************************************/
@@ -1010,17 +1026,15 @@ namespace tut
yield();
}
ensure("script never started", i < timeout);
- std::string line;
- std::getline(childout.get_istream(), line);
- ensure_equals("bad wakeup from stdin/stdout script", line, "ok");
+ ensure_equals("bad wakeup from stdin/stdout script",
+ getline(childout.get_istream()), "ok");
py.mPy->getWritePipe().get_ostream() << "go" << std::endl;
for (i = 0; i < timeout && py.mPy->isRunning() && ! childout.contains("\n"); ++i)
{
yield();
}
ensure("script never replied", childout.contains("\n"));
- std::getline(childout.get_istream(), line);
- ensure_equals("child didn't ack", line, "ack");
+ ensure_equals("child didn't ack", getline(childout.get_istream()), "ack");
ensure_equals("bad child termination", py.mPy->getStatus().mState, LLProcess::EXITED);
ensure_equals("bad child exit code", py.mPy->getStatus().mData, 0);
}