summaryrefslogtreecommitdiff
path: root/test/test_cmd.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_cmd.py')
-rw-r--r--test/test_cmd.py97
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"])