diff options
author | JensDiemer <git@jensdiemer.de> | 2015-06-02 18:02:29 +0200 |
---|---|---|
committer | JensDiemer <git@jensdiemer.de> | 2015-06-02 18:02:29 +0200 |
commit | 0bd2955957227ba611954d180cc7c0a6c3e62cf7 (patch) | |
tree | 27d8e27f334df26263ca78b4681f4b14ec80a5c5 /creole/tests/test_cli.py | |
parent | aa309e7c4eee478386a7a38cdbbc3adb2fc8e1c7 (diff) | |
download | creole-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.py | 142 |
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() |