diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-04-28 17:03:37 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-04-28 17:03:37 -0400 |
commit | 70981099103828afbe33eb4d1f668dc20894b399 (patch) | |
tree | 4b9c0a98829b4d409211a8d536ca4e94e7450c8d /test/test_cmd.py | |
parent | d1f6d7f3e7e698eff2c7774b63531f151d908209 (diff) | |
download | mako-70981099103828afbe33eb4d1f668dc20894b399.tar.gz |
- switch to argparse for cmdline template runner
- write a test suite for cmdline
- start using context manager helpers in tests. intrinsic here is that
we're going to go 1.0 and drop at least 2.4 and probably 2.5
- update .gitignore
Diffstat (limited to 'test/test_cmd.py')
-rw-r--r-- | test/test_cmd.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/test/test_cmd.py b/test/test_cmd.py new file mode 100644 index 0000000..d7e07ae --- /dev/null +++ b/test/test_cmd.py @@ -0,0 +1,73 @@ +from __future__ import with_statement +from contextlib import contextmanager +from test import TemplateTest, eq_, raises, template_base +import os +import mock +from mako.cmd import cmdline + +class CmdTest(TemplateTest): + @contextmanager + def _capture_output_fixture(self, stream="stdout"): + with mock.patch("sys.%s" % stream) as stdout: + yield stdout + + def test_stdin_success(self): + with self._capture_output_fixture() as stdout: + with mock.patch("sys.stdin", mock.Mock( + read=mock.Mock(return_value="hello world ${x}"))): + cmdline(["--var", "x=5", "-"]) + + eq_(stdout.write.mock_calls[0][1][0], "hello world 5") + + def test_stdin_syntax_err(self): + with mock.patch("sys.stdin", mock.Mock( + read=mock.Mock(return_value="${x"))): + with self._capture_output_fixture("stderr") as stderr: + with raises(SystemExit): + cmdline(["--var", "x=5", "-"]) + + assert "SyntaxException: Expected" in \ + stderr.write.mock_calls[0][1][0] + assert "Traceback" in stderr.write.mock_calls[0][1][0] + + + def test_stdin_rt_err(self): + with mock.patch("sys.stdin", mock.Mock( + read=mock.Mock(return_value="${q}"))): + with self._capture_output_fixture("stderr") as stderr: + with raises(SystemExit): + cmdline(["--var", "x=5", "-"]) + + assert "NameError: Undefined" in stderr.write.mock_calls[0][1][0] + assert "Traceback" in stderr.write.mock_calls[0][1][0] + + def test_file_success(self): + with self._capture_output_fixture() as stdout: + cmdline(["--var", "x=5", + os.path.join(template_base, "cmd_good.mako")]) + + eq_(stdout.write.mock_calls[0][1][0], "hello world 5") + + def test_file_syntax_err(self): + with self._capture_output_fixture("stderr") as stderr: + with raises(SystemExit): + cmdline(["--var", "x=5", + os.path.join(template_base, "cmd_syntax.mako")]) + + assert "SyntaxException: Expected" in stderr.write.mock_calls[0][1][0] + assert "Traceback" in stderr.write.mock_calls[0][1][0] + + def test_file_rt_err(self): + with self._capture_output_fixture("stderr") as stderr: + with raises(SystemExit): + cmdline(["--var", "x=5", + os.path.join(template_base, "cmd_runtime.mako")]) + + assert "NameError: Undefined" in stderr.write.mock_calls[0][1][0] + assert "Traceback" in stderr.write.mock_calls[0][1][0] + + + def test_file_notfound(self): + with raises(SystemExit, "error: can't find fake.lalala"): + cmdline(["--var", "x=5", "fake.lalala"]) + |