mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[1.5.x] Fixed #19546 - ensure that deprecation warnings are shown during tests
refs #18985
This commit is contained in:
		| @@ -1,3 +1,4 @@ | ||||
| import logging | ||||
| import unittest as real_unittest | ||||
|  | ||||
| from django.conf import settings | ||||
| @@ -365,7 +366,19 @@ class DjangoTestSuiteRunner(object): | ||||
|         self.setup_test_environment() | ||||
|         suite = self.build_suite(test_labels, extra_tests) | ||||
|         old_config = self.setup_databases() | ||||
|         if self.verbosity > 0: | ||||
|             # ensure that deprecation warnings are displayed during testing | ||||
|             # the following state is assumed: | ||||
|             # logging.capturewarnings is true | ||||
|             # a "default" level warnings filter has been added for | ||||
|             # DeprecationWarning. See django.conf.LazySettings._configure_logging | ||||
|             logger = logging.getLogger('py.warnings') | ||||
|             handler = logging.StreamHandler() | ||||
|             logger.addHandler(handler) | ||||
|         result = self.run_suite(suite) | ||||
|         if self.verbosity > 0: | ||||
|             # remove the testing-specific handler | ||||
|             logger.removeHandler(handler) | ||||
|         self.teardown_databases(old_config) | ||||
|         self.teardown_test_environment() | ||||
|         return self.suite_result(suite, result) | ||||
|   | ||||
| @@ -142,24 +142,31 @@ class WarningLoggerTests(TestCase): | ||||
|     and captured to the logging system | ||||
|     """ | ||||
|     def setUp(self): | ||||
|         # this convoluted setup is to avoid printing this deprecation to | ||||
|         # stderr during test running - as the test runner forces deprecations | ||||
|         # to be displayed at the global py.warnings level | ||||
|         self.logger = logging.getLogger('py.warnings') | ||||
|         self.old_stream = self.logger.handlers[0].stream | ||||
|         self.outputs = [] | ||||
|         self.old_streams = [] | ||||
|         for handler in self.logger.handlers: | ||||
|             self.old_streams.append(handler.stream) | ||||
|             self.outputs.append(StringIO()) | ||||
|             handler.stream = self.outputs[-1] | ||||
|  | ||||
|     def tearDown(self): | ||||
|         self.logger.handlers[0].stream = self.old_stream | ||||
|         for i, handler in enumerate(self.logger.handlers): | ||||
|             self.logger.handlers[i].stream = self.old_streams[i] | ||||
|  | ||||
|     @override_settings(DEBUG=True) | ||||
|     def test_warnings_capture(self): | ||||
|         output = StringIO() | ||||
|         self.logger.handlers[0].stream = output | ||||
|         warnings.warn('Foo Deprecated', DeprecationWarning) | ||||
|         self.assertTrue('Foo Deprecated' in force_text(output.getvalue())) | ||||
|         output = force_text(self.outputs[0].getvalue()) | ||||
|         self.assertTrue('Foo Deprecated' in output) | ||||
|  | ||||
|     def test_warnings_capture_debug_false(self): | ||||
|         output = StringIO() | ||||
|         self.logger.handlers[0].stream = output | ||||
|         warnings.warn('Foo Deprecated', DeprecationWarning) | ||||
|         self.assertFalse('Foo Deprecated' in force_text(output.getvalue())) | ||||
|         output = force_text(self.outputs[0].getvalue()) | ||||
|         self.assertFalse('Foo Deprecated' in output) | ||||
|  | ||||
|  | ||||
| class CallbackFilterTest(TestCase): | ||||
|   | ||||
| @@ -0,0 +1,3 @@ | ||||
| from django.db import models | ||||
|  | ||||
| # Create your models here. | ||||
| @@ -0,0 +1,9 @@ | ||||
| import warnings | ||||
|  | ||||
| from django.test import TestCase | ||||
|  | ||||
| class DummyTest(TestCase): | ||||
|     def test_warn(self): | ||||
|         warnings.warn("warning from test", DeprecationWarning) | ||||
|  | ||||
|  | ||||
| @@ -279,6 +279,25 @@ class DummyBackendTest(unittest.TestCase): | ||||
|             db.connections = old_db_connections | ||||
|  | ||||
|  | ||||
| class DeprecationDisplayTest(AdminScriptTestCase): | ||||
|     # tests for 19546 | ||||
|     def setUp(self): | ||||
|         settings = {'INSTALLED_APPS': '("regressiontests.test_runner.deprecation_app",)' } | ||||
|         self.write_settings('settings.py', sdict=settings) | ||||
|  | ||||
|     def tearDown(self): | ||||
|         self.remove_settings('settings.py') | ||||
|  | ||||
|     def test_runner_deprecation_verbosity_default(self): | ||||
|         args = ['test', '--settings=regressiontests.settings'] | ||||
|         out, err = self.run_django_admin(args) | ||||
|         self.assertTrue("DeprecationWarning: warning from test" in err) | ||||
|  | ||||
|     def test_runner_deprecation_verbosity_zero(self): | ||||
|         args = ['test', '--settings=regressiontests.settings', '--verbosity=0'] | ||||
|         out, err = self.run_django_admin(args) | ||||
|         self.assertFalse("DeprecationWarning: warning from test" in err) | ||||
|  | ||||
| class AutoIncrementResetTest(TransactionTestCase): | ||||
|     """ | ||||
|     Here we test creating the same model two times in different test methods, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user