Commit cfa70d0c authored by Preston Holmes's avatar Preston Holmes
Browse files

Fixed #19546 - ensure that deprecation warnings are shown during tests

refs #18985
parent 1884868a
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
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)
+15 −8
Original line number Diff line number Diff line
@@ -93,24 +93,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

Empty file added.

+3 −0
Original line number Diff line number Diff line
from django.db import models

# Create your models here.
+9 −0
Original line number Diff line number Diff line
import warnings

from django.test import TestCase

class DummyTest(TestCase):
    def test_warn(self):
        warnings.warn("warning from test", DeprecationWarning)

Loading