def test_generic_redirect(): expected_result = [ ('[stdout] ', 'hello there!\n'), ('[stderr] ', 'meh meh mehhhh!\n'), ('[stdout] ', 'abcdefghij\n'), ('[stderr] ', 'ABCDEFGHIJ\n'), ('[stdout] ', 'klmn stranger\n'), ('[stdout] ', 'things\n'), ('[stdout] ', 'have\n'), ('[stderr] ', 'KLMN STRANGER\n'), ('[stderr] ', 'THINGS\n'), ('[stderr] ', 'HAVE\n'), ('[stdout] ', 'happened!\n'), ('[stderr] ', 'HAPPENED!\n')] # Used to retrieve the actual results from the TestOutputObserver subprocess. results = Queue() class TestOutputObserver(object): def __init__(self): self.actual_results = [] def __call__(self, src, msg): self.actual_results.append((src, msg)) def __enter__(self): pass # noinspection PyUnusedLocal def __exit__(self, exc_type, exc_val, exc_tb): results.put(self.actual_results) r = Redirect(TestOutputObserver()) out = r.write_wrapper('[stdout] ') err = r.write_wrapper('[stderr] ') with r.context_manager(): out.write('hello there!\n') err.write('meh meh mehhhh!\n') for c in 'abcde': out.write(c) for c in 'ABCDE': err.write(c) for c in 'fghij': out.write(c) for c in 'FGHIJ': err.write(c) out.write('\nklmn') err.write('\nKLMN') out.write(' stranger\nthings\nhave\nhappened!') err.write(' STRANGER\nTHINGS\nHAVE\nHAPPENED!') actual_results = results.get() pprint(actual_results) pprint(expected_result) assert actual_results == expected_result
def test_uninitialized_write_after_stopping(): r = Redirect(NullOutputObserver()) with r.context_manager(): r.write('src', 'msg') r.write('src', 'msg')