#!/usr/bin/env python
# coding: utf-8
"""
unittest for CLI
~~~~~~~~~~~~~~~~
:copyleft: 2013-2020 by python-creole team, see AUTHORS for more details.
:license: GNU GPL v3 or above, see LICENSE for more details.
"""
import sys
import tempfile
import unittest
from creole import VERSION_STRING, cmdline
from creole.tests.utils.base_unittest import BaseCreoleTest
from creole.tests.utils.unittest_subprocess import SubprocessMixin
CMDS = ("creole2html", "html2creole", "html2rest", "html2textile")
class CliTestMixins(object):
def test_creole2html(self):
self._test_convert(
source_content=b"= test creole2html =",
dest_content="
test creole2html
",
cli_str="creole2html",
)
def test_html2creole(self):
self._test_convert(
source_content=b"test html2creole
",
dest_content="= test html2creole",
cli_str="html2creole",
)
def test_html2rest(self):
self._test_convert(
source_content=b"test html2rest
",
dest_content=(
"==============\n"
"test html2rest\n"
"=============="
),
cli_str="html2rest",
)
def test_html2textile(self):
self._test_convert(
source_content=b"test html2textile
",
dest_content="h1. test html2textile",
cli_str="html2textile",
)
class CreoleCLITests(BaseCreoleTest, SubprocessMixin, CliTestMixins):
def _test_convert(self, source_content, dest_content, cli_str, verbose=True):
assert isinstance(source_content, bytes), type(source_content)
source_file = tempfile.NamedTemporaryFile()
sourcefilepath = source_file.name
source_file.write(source_content)
source_file.seek(0)
dest_file = tempfile.NamedTemporaryFile()
destfilepath = dest_file.name
stdout = (
"Convert '%(src)s' to '%(dst)s' with %(prog)s (codec: utf-8)\n"
"done. '%(dst)s' created."
) % {
"prog": cli_str,
"src": sourcefilepath,
"dst": destfilepath,
}
self.assertSubprocess(
popen_args=[cli_str, sourcefilepath, destfilepath],
retcode=0, stdout=stdout,
)
dest_file.seek(0)
result_content = dest_file.read()
result_content = result_content.decode("utf-8")
self.assertEqual(result_content, dest_content)
def test_version(self):
for cmd in CMDS:
version_info = f"{cmd} from python-creole v{VERSION_STRING}"
self.assertSubprocess(
popen_args=[cmd, "--version"],
retcode=0,
stdout=version_info,
)
class CreoleCLITestsDirect(BaseCreoleTest, CliTestMixins):
def setUp(self):
super(CreoleCLITestsDirect, self).setUp()
self._old_sys_argv = sys.argv[:]
def tearDown(self):
sys.argv = self._old_sys_argv
def _test_convert(self, source_content, dest_content, cli_str, verbose=True):
assert isinstance(source_content, bytes), type(source_content)
source_file = tempfile.NamedTemporaryFile()
sourcefilepath = source_file.name
source_file.write(source_content)
source_file.seek(0)
dest_file = tempfile.NamedTemporaryFile()
destfilepath = dest_file.name
sys.argv = [cli_str, sourcefilepath, destfilepath]
cli = getattr(cmdline, f"cli_{cli_str}")
cli()
dest_file.seek(0)
result_content = dest_file.read()
result_content = result_content.decode("utf-8")
self.assertEqual(result_content, dest_content)
if __name__ == '__main__':
unittest.main()