Skip to content

Commit

Permalink
WIP: refactor CLI tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jedie committed Jun 2, 2015
1 parent 4ff6eb4 commit 6d959e3
Showing 1 changed file with 43 additions and 28 deletions.
71 changes: 43 additions & 28 deletions creole/tests/test_cli.py
Expand Up @@ -37,33 +37,51 @@ def setUpClass(cls):
cls.CMD_PATH = path
break

def _subprocess(self, prog, *args, verbose=True):
def _subprocess(self, popen_args):
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

args = (prog,) + args
if verbose:
print("call via subprocess:", args)

# subprocess.check_output() doesn't exist in Python 2.6 :(
process = subprocess.Popen(args,
process = subprocess.Popen(popen_args,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=True,
)
process.wait()
stdout, stderr = process.communicate()
retcode = process.poll()
stdout = process.stdout.read()
stderr = process.stdout.read()

stdout = stdout.strip()
stderr = stderr.strip()
if verbose:
print("return code........: %r" % retcode)
print("out................: %r" % stdout)
print("err................: %r" % stderr)
return retcode, stdout, stderr
return popen_args, retcode, stdout, stderr

def assertSubprocess(self, popen_args, retcode, stdout, stderr):
popen_args2, retcode2, stdout2, stderr2 = self._subprocess(popen_args)
try:
self.assertEqual(stdout, stdout2)
self.assertEqual(stderr, stderr2)
self.assertEqual(retcode, retcode2)
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):
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)

Expand All @@ -75,32 +93,29 @@ def _test_convert(self, source_content, dest_content, cli_str):
dest_file = tempfile.NamedTemporaryFile()
destfilepath = dest_file.name

retcode, stdout, stderr = self._subprocess(
cli_str, sourcefilepath, destfilepath,
verbose=False
self.assertSubprocess(
popen_args=[cli_str, sourcefilepath, destfilepath],
retcode=0, stdout="", stderr="",
)

dest_file.seek(0)
result_content = dest_file.read()
print("result_content:", result_content)
print("dest_content:", 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:
retcode, stdout, stderr = self._subprocess(
cmd, "--version",
verbose=False
)
version_info = "%s from python-creole v%s" % (
cmd, VERSION_STRING
)
self.assertEqual(stdout, version_info)
self.assertEqual(stderr, "")
self.assertEqual(retcode, 0)
self.assertSubprocess(
popen_args=[cmd, "--version"],
retcode=0,
stdout=version_info,
stderr="",
)

def test_creole2html(self):
self._test_convert(
Expand Down

0 comments on commit 6d959e3

Please sign in to comment.