From be051fde3746da229cef9af1853b140d83404bb9 Mon Sep 17 00:00:00 2001 From: Juho Hovila Date: Fri, 23 Jul 2021 13:25:56 +0300 Subject: [PATCH] Duplicate test output to stdout/stderr --- src/robotremoteserver.py | 18 ++++++++++++++++-- test/utest/test_serve.py | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) 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