From 3043b34abb8271504665c5412880e2bdcf7e44f9 Mon Sep 17 00:00:00 2001 From: MarkKoz Date: Sun, 26 Dec 2021 15:11:28 -0800 Subject: Add tests for main() --- tests/test_main.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/tests/test_main.py b/tests/test_main.py index 1017123..196c196 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -2,6 +2,7 @@ import contextlib import io import unittest from argparse import Namespace +from subprocess import CompletedProcess from unittest.mock import patch import snekbox.__main__ as snekbox_main @@ -49,3 +50,51 @@ class ArgParseTests(unittest.TestCase): self.assertEqual(cm.exception.code, 2) self.assertIn("the following arguments are required: code", stderr.getvalue()) + + +class EntrypointTests(unittest.TestCase): + @patch("sys.argv", ["", "code"]) + @patch("snekbox.__main__.NsJail", autospec=True) + def test_main_prints_stdout(self, mock_nsjail): + mock_nsjail.return_value.python3.return_value = CompletedProcess( + args=[], + returncode=0, + stdout="output", + stderr=None + ) + + with contextlib.redirect_stdout(io.StringIO()) as stdout: + snekbox_main.main() + + self.assertEqual(stdout.getvalue(), "output\n") + + @patch("sys.argv", ["", "code"]) + @patch("snekbox.__main__.NsJail", autospec=True) + def test_main_exits_with_returncode(self, mock_nsjail): + mock_nsjail.return_value.python3.return_value = CompletedProcess( + args=[], + returncode=137, + stdout="output", + stderr=None + ) + + with self.assertRaises(SystemExit) as cm: + snekbox_main.main() + + self.assertEqual(cm.exception.code, 137) + + @patch("sys.argv", ["", "code", "--time_limit", "0", "---", "-m", "timeit"]) + @patch("snekbox.__main__.NsJail", autospec=True) + def test_main_forwards_args(self, mock_nsjail): + mock_nsjail.return_value.python3.return_value = CompletedProcess( + args=[], + returncode=0, + stdout="output", + stderr=None + ) + + snekbox_main.main() + + mock_nsjail.return_value.python3.assert_called_once_with( + "code", nsjail_args=["--time_limit", "0"], py_args=["-m", "timeit"] + ) -- cgit v1.2.3