kiwi-el8/test/unit/utils/output_test.py
Marcus Schäfer 4720d21283
Support multiple markup formats
Allow to read multiple markup formats. Supported are XML
and YAML. The parsing and transformation is based on the
anymarkup module. The use of anymarkup is optional and
implemented as an on demand loading module. If a user
uses a yaml config file or a request to convert into
yaml is made without an installed anymarkup module an
exception is thrown
2020-05-15 13:59:22 +02:00

58 lines
1.9 KiB
Python

import logging
from pytest import fixture
from mock import patch
from kiwi.utils.output import DataOutput
import json
import mock
class TestDataOutput:
@fixture(autouse=True)
def inject_fixtures(self, caplog):
self._caplog = caplog
def setup(self):
test_data = {
'some-name': 'some-data'
}
self.expected_out = json.dumps(
test_data, sort_keys=True, indent=4, separators=(',', ': ')
)
self.out = DataOutput(test_data)
@patch('sys.stdout')
def test_display(self, mock_stdout):
self.out.display()
mock_stdout.write.assert_any_call(self.expected_out)
def test_display_file(self):
with self._caplog.at_level(logging.INFO):
with patch('builtins.open', create=True) as mock_open:
file_handle = mock_open.return_value.__enter__.return_value
DataOutput.display_file('some-file', 'some-message')
mock_open.assert_called_once_with('some-file')
file_handle.read.assert_called_once_with()
@patch('sys.stdout')
@patch('os.system')
@patch('kiwi.utils.output.NamedTemporaryFile')
def test_display_color(self, mock_temp, mock_system, mock_stdout):
out_file = mock.Mock()
out_file.name = 'tmpfile'
mock_temp.return_value = out_file
self.out.style = 'color'
self.out.color_json = True
self.out.display()
mock_system.assert_called_once_with(
'cat tmpfile | pjson'
)
@patch('sys.stdout')
def test_display_color_no_pjson(self, mock_stdout):
self.out.style = 'color'
self.out.color_json = False
with self._caplog.at_level(logging.WARNING):
self.out.display()
assert 'pjson for color output not installed' in self._caplog.text
assert 'run: pip install pjson' in self._caplog.text