mirror of
				https://github.com/django/django.git
				synced 2025-10-30 17:16:10 +00:00 
			
		
		
		
	Added the possibility to pass a stdin object to a management command.
This makes testing certain features easier. Thanks to AeroNotix for the original patch.
This commit is contained in:
		| @@ -306,6 +306,7 @@ class BaseCommand(object): | ||||
|             self.stderr = OutputWrapper(options.get('stderr', sys.stderr)) | ||||
|         else: | ||||
|             self.stderr = OutputWrapper(options.get('stderr', sys.stderr), self.style.ERROR) | ||||
|         self.stdin = options.get('stdin', sys.stdin)  # Useful for testing | ||||
|  | ||||
|         if self.can_import_settings: | ||||
|             from django.conf import settings  # NOQA | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import sys | ||||
|  | ||||
| from django.core import management | ||||
| from django.core.management import CommandError | ||||
| from django.core.management.base import BaseCommand | ||||
| from django.core.management.utils import popen_wrapper | ||||
| from django.test import SimpleTestCase | ||||
| from django.utils import translation | ||||
| @@ -60,6 +61,32 @@ class CommandTests(SimpleTestCase): | ||||
|             management.call_command('leave_locale_alone_true', stdout=out) | ||||
|             self.assertEqual(out.getvalue(), "pl\n") | ||||
|  | ||||
|     def test_passing_stdin(self): | ||||
|         """ | ||||
|         You can pass a stdin object to a command's options and it should be | ||||
|         available on self.stdin. | ||||
|         """ | ||||
|         class CustomCommand(BaseCommand): | ||||
|             def handle(self, *args, **kwargs): | ||||
|                 pass | ||||
|  | ||||
|         sentinel = object() | ||||
|         command = CustomCommand() | ||||
|         command.execute(stdin=sentinel, stdout=StringIO()) | ||||
|         self.assertIs(command.stdin, sentinel) | ||||
|  | ||||
|     def test_passing_stdin_default(self): | ||||
|         """ | ||||
|         If stdin is not passed as an option, the default should be sys.stdin. | ||||
|         """ | ||||
|         class CustomCommand(BaseCommand): | ||||
|             def handle(self, *args, **kwargs): | ||||
|                 return 'OK' | ||||
|  | ||||
|         command = CustomCommand() | ||||
|         command.execute(stdout=StringIO()) | ||||
|         self.assertIs(command.stdin, sys.stdin) | ||||
|  | ||||
|  | ||||
| class UtilsTests(SimpleTestCase): | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user