diff options
| author | Claude Paroz <claude@2xlibre.net> | 2013-01-25 14:52:24 +0100 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2013-01-25 14:56:41 +0100 |
| commit | b9c8bbf3726a1956be1db70ffd3bef04a2e5311a (patch) | |
| tree | 4b07462ba19354e4c130342929fe595e3695b7d2 /tests/regressiontests/admin_scripts/tests.py | |
| parent | eafc0364764ba12babd76194d8e1f78b876471ec (diff) | |
Fixed #19665 -- Ensured proper stderr output for Command.run_from_argv
Thanks Stefan Koegl for the report and Simon Charette for the review.
Diffstat (limited to 'tests/regressiontests/admin_scripts/tests.py')
| -rw-r--r-- | tests/regressiontests/admin_scripts/tests.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/regressiontests/admin_scripts/tests.py b/tests/regressiontests/admin_scripts/tests.py index df2326e163..921108600e 100644 --- a/tests/regressiontests/admin_scripts/tests.py +++ b/tests/regressiontests/admin_scripts/tests.py @@ -16,11 +16,13 @@ import codecs from django import conf, bin, get_version from django.conf import settings +from django.core.management import BaseCommand from django.db import connection from django.test.simple import DjangoTestSuiteRunner from django.utils import unittest from django.utils.encoding import force_str, force_text from django.utils._os import upath +from django.utils.six import StringIO from django.test import LiveServerTestCase test_dir = os.path.dirname(os.path.dirname(upath(__file__))) @@ -1279,6 +1281,31 @@ class CommandTypes(AdminScriptTestCase): self.assertNoOutput(err) self.assertOutput(out, "EXECUTE:BaseCommand labels=('testlabel',), options=[('option_a', 'x'), ('option_b', 'y'), ('option_c', '3'), ('pythonpath', None), ('settings', None), ('traceback', None), ('verbosity', '1')]") + def test_base_run_from_argv(self): + """ + Test run_from_argv properly terminates even with custom execute() (#19665) + Also test proper traceback display. + """ + command = BaseCommand() + command.execute = lambda args: args # This will trigger TypeError + + old_stderr = sys.stderr + sys.stderr = err = StringIO() + try: + with self.assertRaises(SystemExit): + command.run_from_argv(['', '']) + err_message = err.getvalue() + self.assertNotIn("Traceback", err_message) + self.assertIn("TypeError", err_message) + + with self.assertRaises(SystemExit): + command.run_from_argv(['', '', '--traceback']) + err_message = err.getvalue() + self.assertIn("Traceback (most recent call last)", err_message) + self.assertIn("TypeError", err_message) + finally: + sys.stderr = old_stderr + def test_noargs(self): "NoArg Commands can be executed" args = ['noargs_command'] |
