示例#1
0
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
示例#2
0
def test_uninitialized_write_after_stopping():
    r = Redirect(NullOutputObserver())
    with r.context_manager():
        r.write('src', 'msg')
    r.write('src', 'msg')