From 4996dbe000774b8d6fe015dd5d29b9bd9bfc827d Mon Sep 17 00:00:00 2001 From: Steve Piercy Date: Mon, 5 Dec 2016 23:15:17 -0800 Subject: add new test in attempt to catch status code and stderr --- pyramid/tests/test_scripts/test_pcreate.py | 39 ++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/pyramid/tests/test_scripts/test_pcreate.py b/pyramid/tests/test_scripts/test_pcreate.py index 0286614ce..d6e6814fa 100644 --- a/pyramid/tests/test_scripts/test_pcreate.py +++ b/pyramid/tests/test_scripts/test_pcreate.py @@ -1,6 +1,32 @@ +from contextlib import contextmanager import unittest +@contextmanager +def patch_argparser(parser): + result = {} + old_exit = parser.exit + old_error = parser.error + try: + def dummy_exit(status=0, message=None): + result['status'] = status + result['message'] = message + raise ArgumentParserExit + + def dummy_error(message): + result['message'] = message + + parser.exit = dummy_exit + parser.error = dummy_error + yield result + finally: + parser.exit = old_exit + parser.error = old_error + +class ArgumentParserExit(Exception): + pass + + class TestPCreateCommand(unittest.TestCase): def setUp(self): from pyramid.compat import NativeIO @@ -49,6 +75,19 @@ class TestPCreateCommand(unittest.TestCase): self.assertTrue(out.count( 'You must provide at least one scaffold name')) + def test_test_no_project_name(self): + cmd = self._makeOne('-s', 'dummy') + with patch_argparser(cmd.parser) as result: + try: + cmd.run() + except ArgumentParserExit: + self.assertEqual(result['status'], 2) + self.assertTrue(result['message'].startswith( + 'usage: pcreate [-h] [-s SCAFFOLD_NAME] [-t SCAFFOLD_NAME] [-l]' + )) + else: # pragma: no cover + raise AssertionError + def test_no_project_name(self): cmd = self._makeOne('-s', 'dummy') result = cmd.run() -- cgit v1.2.3