diff options
Diffstat (limited to 'test/test_cmd.py')
-rw-r--r-- | test/test_cmd.py | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/test/test_cmd.py b/test/test_cmd.py new file mode 100644 index 0000000..785c652 --- /dev/null +++ b/test/test_cmd.py @@ -0,0 +1,97 @@ +from contextlib import contextmanager +import os +from unittest import mock + +from mako.cmd import cmdline +from mako.testing.assertions import eq_ +from mako.testing.assertions import expect_raises +from mako.testing.assertions import expect_raises_message +from mako.testing.config import config +from mako.testing.fixtures import TemplateTest + + +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 expect_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 expect_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(config.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 expect_raises(SystemExit): + cmdline( + [ + "--var", + "x=5", + os.path.join(config.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 expect_raises(SystemExit): + cmdline( + [ + "--var", + "x=5", + os.path.join(config.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 expect_raises_message( + SystemExit, "error: can't find fake.lalala" + ): + cmdline(["--var", "x=5", "fake.lalala"]) |