import sys import unittest import mozunit from mozlog import capture, structuredlog from test_structured import TestHandler class TestCaptureIO(unittest.TestCase): """Tests expected logging output of CaptureIO""" def setUp(self): self.logger = structuredlog.StructuredLogger("test") self.handler = TestHandler() self.logger.add_handler(self.handler) def test_captureio_log(self): """ CaptureIO takes in two arguments. The second argument must be truthy in order for the code to run. Hence, the string "capture_stdio" has been used in this test case. """ with capture.CaptureIO(self.logger, "capture_stdio"): print("message 1") sys.stdout.write("message 2") sys.stderr.write("message 3") sys.stdout.write("\xff") log = self.handler.items messages = [item["message"] for item in log] self.assertIn("STDOUT: message 1", messages) self.assertIn("STDOUT: message 2", messages) self.assertIn("STDERR: message 3", messages) self.assertIn(u"STDOUT: \xff", messages) if __name__ == "__main__": mozunit.main()