diff --git a/src/robotremoteserver.py b/src/robotremoteserver.py index 62fc5ed..d3e1bbb 100644 --- a/src/robotremoteserver.py +++ b/src/robotremoteserver.py @@ -433,14 +433,28 @@ def _handle_binary(self, arg): return arg +class StreamDuplicator(StringIO): + """ + Duplicate stream to stream given as parameter and internal StringIO. + """ + + def __init__(self, stream): + self.other_stream = stream + super(StreamDuplicator, self).__init__() + + def write(self, s): + self.other_stream.write(s) + return super(StreamDuplicator, self).write(s) + + class StandardStreamInterceptor(object): def __init__(self): self.output = '' self.origout = sys.stdout self.origerr = sys.stderr - sys.stdout = StringIO() - sys.stderr = StringIO() + sys.stdout = StreamDuplicator(self.origout) + sys.stderr = StreamDuplicator(self.origerr) def __enter__(self): return self diff --git a/test/utest/test_serve.py b/test/utest/test_serve.py index c973fcb..8798269 100644 --- a/test/utest/test_serve.py +++ b/test/utest/test_serve.py @@ -64,7 +64,8 @@ def _run_remote_keyword(self, uri): sys.stdout = StringIO() try: self.assertEqual(Remote(uri).run_keyword('kw', (), None), 42) - self.assertEqual(sys.stdout.getvalue(), 'The message!\n') + # Duplication of 'The message!\n' is expected as test and RobotRemoteServer run in same process. + self.assertEqual(sys.stdout.getvalue(), 'The message!\nThe message!\n') finally: sys.stdout.close() sys.stdout = origout