summaryrefslogtreecommitdiff
path: root/creole/tests/test_cli.py
diff options
context:
space:
mode:
authorJensDiemer <git@jensdiemer.de>2015-06-02 18:02:29 +0200
committerJensDiemer <git@jensdiemer.de>2015-06-02 18:02:29 +0200
commit0bd2955957227ba611954d180cc7c0a6c3e62cf7 (patch)
tree27d8e27f334df26263ca78b4681f4b14ec80a5c5 /creole/tests/test_cli.py
parentaa309e7c4eee478386a7a38cdbbc3adb2fc8e1c7 (diff)
downloadcreole-0bd2955957227ba611954d180cc7c0a6c3e62cf7.tar.gz
Squashed commit of the following:
commit 04b2b00e51e3a60369de4a2ecde07c4cd5f67c57 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 17:58:34 2015 +0200 --verbose not needed commit 1206d8fd18f368e0cacb54f76788c5eb855f72c5 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 17:49:13 2015 +0200 Strange: argparse use stderr in Py2 and stdout in Py3 for --version ;) commit 82140fcec5c1994081d31b288a28f924a7723ed8 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 17:47:39 2015 +0200 Bugfix: get rid of the u'' with Py2 commit cdbb3ff08848698ad9e0f7df5bfa7486e60cb7da Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 17:41:03 2015 +0200 fixup! WIP: refactor CLI tests commit 6d959e3a9d793eed76cbe606f4cf43843ddfc281 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 17:29:28 2015 +0200 WIP: refactor CLI tests commit 4ff6eb4f3454e92b50408541d3ed72215cfc4682 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 16:39:44 2015 +0200 bixfix travis config? commit ecc22075a5433e91075700e1e928a63b96090de7 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 16:38:57 2015 +0200 new v1.3.0 commit 16f4244224856defa711d90b02b0e9498c55b220 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 16:38:46 2015 +0200 update README commit ba59454aae040486d77843c9c41f1873fabf7f87 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 16:38:40 2015 +0200 +"pip install ." makes the CLI available on Travis?!? commit 75a782dcd679f8c9aea6a5ef43f22245559f32c2 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 16:27:08 2015 +0200 run nosetests on travis with doctests commit d3de2ebb979c1d08cc4bda1db439aeac98117500 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 15:49:22 2015 +0200 use 'json.dumps()' instead of own repr2() commit 1ec9d9eacbaa1ec475ea2573f0a8744c713073da Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 14:13:50 2015 +0200 search in sys.path, too. commit 1a101ec988b3c365d592e5e471f16d2a00700e04 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 14:07:10 2015 +0200 -"2.6" commit 514d7b8f28708ad2c81e163e444cdd1901f9a992 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 14:07:00 2015 +0200 more info commit 30c67fe9ef1af41a87fa676e6c345ec358a1928d Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 13:52:44 2015 +0200 sys.exit() if not importable commit 5bf5c0829ea550609ff160d5240609d6948035d9 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 13:48:46 2015 +0200 run cli tests via subprocess commit f9eac72fa1b9f7cfd60f1242887caa86c3d23422 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 13:48:19 2015 +0200 rename test macros, so that nose will not interpret them as a test ;) commit 8e7f236490a7374e79d3a342b6446c79b645a484 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 13:47:39 2015 +0200 use "with" commit a7376c023f0ef8886bdc8aff05e2eb4db82cb84b Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 13:47:29 2015 +0200 use nose and add a simple test, if nose is installed commit 932aacb70ca387302fd6242aa9094df3d80322db Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 13:45:26 2015 +0200 Bugfix: --version commit d884abc68a06961dcc0ae99f5642dcfdb560bd90 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 11:00:46 2015 +0200 use @unittest.expectedFailure commit 75b21bd449e969bd05d5dcd41c74e2909172fb3f Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 10:54:09 2015 +0200 WIP: refactor commit 17041df8d8cf1de91295da50b06de1c7f3bf7c62 Merge: 4285bbf e82d365 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 10:51:55 2015 +0200 Merge branch 'nose' into refactor commit 4285bbf7707542772a70b3718d03394cd3537a43 Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 10:51:15 2015 +0200 WIP: refactor commit e82d365885bd5f23c3ad144d464a11ccb007fdae Author: JensDiemer <git@jensdiemer.de> Date: Tue Jun 2 10:38:24 2015 +0200 WIP: use nose
Diffstat (limited to 'creole/tests/test_cli.py')
-rw-r--r--creole/tests/test_cli.py142
1 files changed, 122 insertions, 20 deletions
diff --git a/creole/tests/test_cli.py b/creole/tests/test_cli.py
index 6febeff..52014bf 100644
--- a/creole/tests/test_cli.py
+++ b/creole/tests/test_cli.py
@@ -5,30 +5,96 @@
unittest for CLI
~~~~~~~~~~~~~~~~
- :copyleft: 2013 by python-creole team, see AUTHORS for more details.
+ :copyleft: 2013-2015 by python-creole team, see AUTHORS for more details.
:license: GNU GPL v3 or above, see LICENSE for more details.
"""
from __future__ import division, absolute_import, print_function, unicode_literals
+import subprocess
import unittest
import sys
+import os
import tempfile
+from creole.py3compat import PY3
from creole.tests.utils.base_unittest import BaseCreoleTest
-from creole.cmdline import cli_creole2html, cli_html2creole, cli_html2rest, \
- cli_html2textile
+from creole import VERSION_STRING
+
+
+CMDS = ("creole2html", "html2creole", "html2rest", "html2textile")
class CreoleCLITests(BaseCreoleTest):
- def setUp(self):
- super(CreoleCLITests, self).setUp()
- self._old_argv = sys.argv[:]
- def tearDown(self):
- super(CreoleCLITests, self).tearDown()
- sys.argv = self._old_argv
-
- def _test_convert(self, source_content, dest_content, cli_func):
+ CMD_PATH = None
+
+ @classmethod
+ def setUpClass(cls):
+ # FIXME: How can this be easier?!?
+ prog = CMDS[0]
+ cls.CMD_PATH = os.path.abspath(os.path.dirname(sys.executable))
+ if not os.path.isfile(os.path.join(cls.CMD_PATH, prog)):
+ for path in sys.path:
+ if os.path.isfile(os.path.join(path, prog)):
+ cls.CMD_PATH = path
+ break
+
+ def _subprocess(self, popen_args, verbose=True):
+ assert isinstance(popen_args, list)
+
+ # set absolute path to called cli program
+ prog = popen_args[0]
+ prog = os.path.join(self.CMD_PATH, prog)
+ self.assertTrue(os.path.isfile(prog), "File not found: %r" % prog)
+ self.assertTrue(os.access(prog, os.X_OK), "File %r is not executeable?!?" % prog)
+ popen_args[0] = prog
+
+ if verbose:
+ print("Call:", popen_args)
+
+ process = subprocess.Popen(popen_args,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ universal_newlines=True,
+ )
+ stdout, stderr = process.communicate()
+ retcode = process.poll()
+
+ if verbose:
+ print("return code: %r" % retcode)
+ print("stdout: %r" % stdout)
+ print("stderr: %r" % stderr)
+
+ stdout = stdout.strip()
+ stderr = stderr.strip()
+ return popen_args, retcode, stdout, stderr
+
+ def assertSubprocess(self, popen_args, retcode, stdout, stderr, verbose=True):
+ popen_args2, retcode2, stdout2, stderr2 = self._subprocess(popen_args, verbose)
+ try:
+ self.assertEqual(stdout, stdout2, "stdout wrong:")
+ self.assertEqual(stderr, stderr2, "stderr wrong:")
+ self.assertEqual(retcode, retcode2, "return code wrong:")
+ except AssertionError as err:
+ msg = (
+ "Error: %s"
+ "call via subprocess: %s\n"
+ "return code........: %r\n"
+ " ---------- [stdout] ---------- \n"
+ "%s\n"
+ " ---------- [stderr] ---------- \n"
+ "%s\n"
+ "-------------------------------"
+ ) % (
+ err,
+ repr(popen_args2), retcode2,
+ stdout2, stderr2,
+ )
+ self.fail(msg)
+
+ def _test_convert(self, source_content, dest_content, cli_str, verbose=True):
+ assert isinstance(source_content, bytes), type(source_content)
+ assert isinstance(dest_content, bytes), type(dest_content)
+
source_file = tempfile.NamedTemporaryFile()
sourcefilepath = source_file.name
source_file.write(source_content)
@@ -37,45 +103,81 @@ class CreoleCLITests(BaseCreoleTest):
dest_file = tempfile.NamedTemporaryFile()
destfilepath = dest_file.name
- sys.argv += [sourcefilepath, destfilepath]
- cli_func()
+ 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, stderr="",
+ verbose=False,
+ )
dest_file.seek(0)
result_content = dest_file.read()
-# print(dest_content)
+ result_content = result_content.decode("utf-8")
+ dest_content = dest_content.decode("utf-8")
self.assertEqual(result_content, dest_content)
+ def test_version(self):
+ for cmd in CMDS:
+ version_info = "%s from python-creole v%s" % (
+ cmd, VERSION_STRING
+ )
+ if PY3:
+ self.assertSubprocess(
+ popen_args=[cmd, "--version"],
+ retcode=0,
+ stdout=version_info,
+ stderr="",
+ verbose=False,
+ )
+ else:
+ self.assertSubprocess(
+ popen_args=[cmd, "--version"],
+ retcode=0,
+ stdout="",
+ stderr=version_info,
+ verbose=False,
+ )
+
def test_creole2html(self):
self._test_convert(
source_content=b"= test creole2html =",
dest_content=b"<h1>test creole2html</h1>",
- cli_func=cli_creole2html
+ cli_str="creole2html",
)
def test_html2creole(self):
self._test_convert(
source_content=b"<h1>test html2creole</h1>",
dest_content=b"= test html2creole",
- cli_func=cli_html2creole
+ cli_str="html2creole",
)
def test_html2rest(self):
self._test_convert(
source_content=b"<h1>test html2rest</h1>",
dest_content=(b"==============\n"
- "test html2rest\n"
- "=============="
+ b"test html2rest\n"
+ b"=============="
),
- cli_func=cli_html2rest
+ cli_str="html2rest",
)
def test_html2textile(self):
self._test_convert(
source_content=b"<h1>test html2textile</h1>",
dest_content=b"h1. test html2textile",
- cli_func=cli_html2textile
+ cli_str="html2textile",
)
+
if __name__ == '__main__':
unittest.main()