def test_instantiation(self): output_manager = mt.OutputManager() self.assertEqual(sys.stdout, output_manager.print_stream) self.assertEqual(sys.stderr, output_manager.error_stream)
def test_printers(self): out_stream = six.StringIO() err_stream = six.StringIO() starting_thread_count = threading.active_count() with mt.OutputManager(print_stream=out_stream, error_stream=err_stream) as thread_manager: # Sanity-checking these gives power to the previous test which # looked at the default values of thread_manager.print/error_stream self.assertEqual(out_stream, thread_manager.print_stream) self.assertEqual(err_stream, thread_manager.error_stream) # No printing has happened yet, so no new threads self.assertEqual(starting_thread_count, threading.active_count()) thread_manager.print_msg('one-argument') thread_manager.print_msg('one %s, %d fish', 'fish', 88) thread_manager.error('I have %d problems, but a %s is not one', 99, u'\u062A\u062A') thread_manager.print_msg('some\n%s\nover the %r', 'where', u'\u062A\u062A') thread_manager.error('one-error-argument') thread_manager.error('Sometimes\n%.1f%% just\ndoes not\nwork!', 3.14159) # Now we have a thread for error printing and a thread for # normal print messages self.assertEqual(starting_thread_count + 2, threading.active_count()) # The threads should have been cleaned up self.assertEqual(starting_thread_count, threading.active_count()) out_stream.seek(0) if six.PY3: over_the = "over the '\u062a\u062a'\n" else: over_the = "over the u'\\u062a\\u062a'\n" self.assertEqual([ 'one-argument\n', 'one fish, 88 fish\n', 'some\n', 'where\n', over_the, ], list(out_stream.readlines())) err_stream.seek(0) first_item = u'I have 99 problems, but a \u062A\u062A is not one\n' if six.PY2: first_item = first_item.encode('utf8') self.assertEqual([ first_item, 'one-error-argument\n', 'Sometimes\n', '3.1% just\n', 'does not\n', 'work!\n', ], list(err_stream.readlines())) self.assertEqual(3, thread_manager.error_count)
def test_printers(self): out_stream = CaptureStream(sys.stdout) err_stream = CaptureStream(sys.stderr) starting_thread_count = threading.active_count() with mt.OutputManager(print_stream=out_stream, error_stream=err_stream) as thread_manager: # Sanity-checking these gives power to the previous test which # looked at the default values of thread_manager.print/error_stream self.assertEqual(out_stream, thread_manager.print_stream) self.assertEqual(err_stream, thread_manager.error_stream) # No printing has happened yet, so no new threads self.assertEqual(starting_thread_count, threading.active_count()) thread_manager.print_msg('one-argument') thread_manager.print_msg('one %s, %d fish', 'fish', 88) thread_manager.error('I have %d problems, but a %s is not one', 99, u'\u062A\u062A') thread_manager.print_msg('some\n%s\nover the %r', 'where', u'\u062A\u062A') thread_manager.error('one-error-argument') thread_manager.error('Sometimes\n%.1f%% just\ndoes not\nwork!', 3.14159) thread_manager.print_raw( u'some raw bytes: \u062A\u062A'.encode('utf-8')) thread_manager.print_items([ ('key', 'value'), ('object', u'O\u0308bject'), ]) thread_manager.print_raw(b'\xffugly\xffraw') # Now we have a thread for error printing and a thread for # normal print messages self.assertEqual(starting_thread_count + 2, threading.active_count()) # The threads should have been cleaned up self.assertEqual(starting_thread_count, threading.active_count()) if six.PY3: over_the = "over the '\u062a\u062a'\n" else: over_the = "over the u'\\u062a\\u062a'\n" # We write to the CaptureStream so no decoding is performed self.assertEqual( ''.join([ 'one-argument\n', 'one fish, 88 fish\n', 'some\n', 'where\n', over_the, u'some raw bytes: \u062a\u062a', ' key: value\n', u' object: O\u0308bject\n' ]).encode('utf8') + b'\xffugly\xffraw', out_stream.getvalue()) self.assertEqual( ''.join([ u'I have 99 problems, but a \u062A\u062A is not one\n', 'one-error-argument\n', 'Sometimes\n', '3.1% just\n', 'does not\n', 'work!\n' ]), err_stream.getvalue().decode('utf8')) self.assertEqual(3, thread_manager.error_count)