| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | from __future__ import absolute_importfrom __future__ import unicode_literalsimport pytestimport sixfrom compose.cli.log_printer import LogPrinterfrom compose.cli.log_printer import wait_on_exitfrom compose.container import Containerfrom tests import mockdef build_mock_container(reader):    return mock.Mock(        spec=Container,        name='myapp_web_1',        name_without_project='web_1',        has_api_logs=True,        log_stream=None,        attach=reader,        wait=mock.Mock(return_value=0),    )@pytest.fixturedef output_stream():    output = six.StringIO()    output.flush = mock.Mock()    return output@pytest.fixturedef mock_container():    def reader(*args, **kwargs):        yield b"hello\nworld"    return build_mock_container(reader)class TestLogPrinter(object):    def test_single_container(self, output_stream, mock_container):        LogPrinter([mock_container], output=output_stream).run()        output = output_stream.getvalue()        assert 'hello' in output        assert 'world' in output        # Call count is 2 lines + "container exited line"        assert output_stream.flush.call_count == 3    def test_monochrome(self, output_stream, mock_container):        LogPrinter([mock_container], output=output_stream, monochrome=True).run()        assert '\033[' not in output_stream.getvalue()    def test_polychrome(self, output_stream, mock_container):        LogPrinter([mock_container], output=output_stream).run()        assert '\033[' in output_stream.getvalue()    def test_unicode(self, output_stream):        glyph = u'\u2022'        def reader(*args, **kwargs):            yield glyph.encode('utf-8') + b'\n'        container = build_mock_container(reader)        LogPrinter([container], output=output_stream).run()        output = output_stream.getvalue()        if six.PY2:            output = output.decode('utf-8')        assert glyph in output    def test_wait_on_exit(self):        exit_status = 3        mock_container = mock.Mock(            spec=Container,            name='cname',            wait=mock.Mock(return_value=exit_status))        expected = '{} exited with code {}\n'.format(mock_container.name, exit_status)        assert expected == wait_on_exit(mock_container)    def test_generator_with_no_logs(self, mock_container, output_stream):        mock_container.has_api_logs = False        mock_container.log_driver = 'none'        LogPrinter([mock_container], output=output_stream).run()        output = output_stream.getvalue()        assert "WARNING: no logs are available with the 'none' log driver\n" in output
 |