| from __future__ import with_statement |
| from contextlib import contextmanager |
| from test import TemplateTest, eq_, raises, template_base, mock |
| import os |
| 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"]) |
| |