summaryrefslogtreecommitdiff
path: root/tests/regressiontests/admin_scripts
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2013-01-25 14:52:24 +0100
committerClaude Paroz <claude@2xlibre.net>2013-01-25 14:56:41 +0100
commitb9c8bbf3726a1956be1db70ffd3bef04a2e5311a (patch)
tree4b07462ba19354e4c130342929fe595e3695b7d2 /tests/regressiontests/admin_scripts
parenteafc0364764ba12babd76194d8e1f78b876471ec (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')
-rw-r--r--tests/regressiontests/admin_scripts/tests.py27
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']