Fixed #25745 -- Promoted RuntimeWarnings to errors in the test suite.

This commit is contained in:
Simon Charette 2015-11-13 15:54:05 -05:00
parent d95b22bd56
commit 1c5f4e86bc
6 changed files with 19 additions and 34 deletions

View File

@ -1,7 +1,6 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import os import os
import warnings
from unittest import skipUnless from unittest import skipUnless
from django.apps import AppConfig, apps from django.apps import AppConfig, apps
@ -232,14 +231,13 @@ class AppsTests(SimpleTestCase):
body = {} body = {}
body['Meta'] = type(str("Meta"), tuple(), meta_contents) body['Meta'] = type(str("Meta"), tuple(), meta_contents)
body['__module__'] = TotallyNormal.__module__ body['__module__'] = TotallyNormal.__module__
with warnings.catch_warnings(record=True) as w: msg = (
"Model 'apps.southponies' was already registered. "
"Reloading models is not advised as it can lead to inconsistencies, "
"most notably with related models."
)
with self.assertRaisesMessage(RuntimeWarning, msg):
type(str("SouthPonies"), (models.Model,), body) type(str("SouthPonies"), (models.Model,), body)
self.assertEqual(len(w), 1)
self.assertTrue(issubclass(w[-1].category, RuntimeWarning))
self.assertEqual(str(w[-1].message),
"Model 'apps.southponies' was already registered. "
"Reloading models is not advised as it can lead to inconsistencies, "
"most notably with related models.")
# If it doesn't appear to be a reloaded module then we expect # If it doesn't appear to be a reloaded module then we expect
# a RuntimeError. # a RuntimeError.

View File

@ -203,6 +203,7 @@ class PostgreSQLTests(TestCase):
with warnings.catch_warnings(record=True) as w: with warnings.catch_warnings(record=True) as w:
with mock.patch('django.db.backends.base.base.BaseDatabaseWrapper.connect', with mock.patch('django.db.backends.base.base.BaseDatabaseWrapper.connect',
side_effect=mocked_connect, autospec=True): side_effect=mocked_connect, autospec=True):
warnings.simplefilter('always', RuntimeWarning)
nodb_conn = connection._nodb_connection nodb_conn = connection._nodb_connection
self.assertIsNotNone(nodb_conn.settings_dict['NAME']) self.assertIsNotNone(nodb_conn.settings_dict['NAME'])
self.assertEqual(nodb_conn.settings_dict['NAME'], connection.settings_dict['NAME']) self.assertEqual(nodb_conn.settings_dict['NAME'], connection.settings_dict['NAME'])

View File

@ -197,6 +197,7 @@ class GraphTests(SimpleTestCase):
leaf = expected[-1] leaf = expected[-1]
with warnings.catch_warnings(record=True) as w: with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always', RuntimeWarning)
forwards_plan = graph.forwards_plan(leaf) forwards_plan = graph.forwards_plan(leaf)
self.assertEqual(len(w), 1) self.assertEqual(len(w), 1)
@ -205,6 +206,7 @@ class GraphTests(SimpleTestCase):
self.assertEqual(expected, forwards_plan) self.assertEqual(expected, forwards_plan)
with warnings.catch_warnings(record=True) as w: with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always', RuntimeWarning)
backwards_plan = graph.backwards_plan(root) backwards_plan = graph.backwards_plan(root)
self.assertEqual(len(w), 1) self.assertEqual(len(w), 1)

View File

@ -3,13 +3,11 @@ import os
import pickle import pickle
import subprocess import subprocess
import sys import sys
import warnings
from django.core.files.temp import NamedTemporaryFile from django.core.files.temp import NamedTemporaryFile
from django.db import DJANGO_VERSION_PICKLE_KEY, models from django.db import DJANGO_VERSION_PICKLE_KEY, models
from django.test import TestCase, mock from django.test import TestCase, mock
from django.utils._os import npath, upath from django.utils._os import npath, upath
from django.utils.encoding import force_text
from django.utils.version import get_version from django.utils.version import get_version
from .models import Article from .models import Article
@ -31,11 +29,9 @@ class ModelPickleTestCase(TestCase):
return reduce_list return reduce_list
p = MissingDjangoVersion(title="FooBar") p = MissingDjangoVersion(title="FooBar")
with warnings.catch_warnings(record=True) as recorded: msg = "Pickled model instance's Django version is not specified."
with self.assertRaisesMessage(RuntimeWarning, msg):
pickle.loads(pickle.dumps(p)) pickle.loads(pickle.dumps(p))
msg = force_text(recorded.pop().message)
self.assertEqual(msg,
"Pickled model instance's Django version is not specified.")
def test_unsupported_unpickle(self): def test_unsupported_unpickle(self):
""" """
@ -52,14 +48,9 @@ class ModelPickleTestCase(TestCase):
return reduce_list return reduce_list
p = DifferentDjangoVersion(title="FooBar") p = DifferentDjangoVersion(title="FooBar")
with warnings.catch_warnings(record=True) as recorded: msg = "Pickled model instance's Django version 1.0 does not match the current version %s." % get_version()
with self.assertRaisesMessage(RuntimeWarning, msg):
pickle.loads(pickle.dumps(p)) pickle.loads(pickle.dumps(p))
msg = force_text(recorded.pop().message)
self.assertEqual(
msg,
"Pickled model instance's Django version 1.0 does not "
"match the current version %s." % get_version()
)
def test_unpickling_when_appregistrynotready(self): def test_unpickling_when_appregistrynotready(self):
""" """

View File

@ -3,12 +3,10 @@ from __future__ import unicode_literals
import datetime import datetime
import pickle import pickle
import unittest import unittest
import warnings
from django.db import models from django.db import models
from django.test import TestCase from django.test import TestCase
from django.utils import six from django.utils import six
from django.utils.encoding import force_text
from django.utils.version import get_version from django.utils.version import get_version
from .models import Container, Event, Group, Happening, M2MModel from .models import Container, Event, Group, Happening, M2MModel
@ -142,11 +140,9 @@ class PickleabilityTestCase(TestCase):
unpickled without a Django version unpickled without a Django version
""" """
qs = Group.missing_django_version_objects.all() qs = Group.missing_django_version_objects.all()
with warnings.catch_warnings(record=True) as recorded: msg = "Pickled queryset instance's Django version is not specified."
with self.assertRaisesMessage(RuntimeWarning, msg):
pickle.loads(pickle.dumps(qs)) pickle.loads(pickle.dumps(qs))
msg = force_text(recorded.pop().message)
self.assertEqual(msg,
"Pickled queryset instance's Django version is not specified.")
def test_unsupported_unpickle(self): def test_unsupported_unpickle(self):
""" """
@ -154,11 +150,6 @@ class PickleabilityTestCase(TestCase):
unpickled with a different Django version than the current unpickled with a different Django version than the current
""" """
qs = Group.previous_django_version_objects.all() qs = Group.previous_django_version_objects.all()
with warnings.catch_warnings(record=True) as recorded: msg = "Pickled queryset instance's Django version 1.0 does not match the current version %s." % get_version()
with self.assertRaisesMessage(RuntimeWarning, msg):
pickle.loads(pickle.dumps(qs)) pickle.loads(pickle.dumps(qs))
msg = force_text(recorded.pop().message)
self.assertEqual(
msg,
"Pickled queryset instance's Django version 1.0 does not "
"match the current version %s." % get_version()
)

View File

@ -24,6 +24,8 @@ from django.utils.log import DEFAULT_LOGGING
# Make deprecation warnings errors to ensure no usage of deprecated features. # Make deprecation warnings errors to ensure no usage of deprecated features.
warnings.simplefilter("error", RemovedInDjango20Warning) warnings.simplefilter("error", RemovedInDjango20Warning)
# Make runtime warning errors to ensure no usage of error prone patterns.
warnings.simplefilter("error", RuntimeWarning)
# Ignore known warnings in test dependencies. # Ignore known warnings in test dependencies.
warnings.filterwarnings("ignore", "'U' mode is deprecated", DeprecationWarning, module='docutils.io') warnings.filterwarnings("ignore", "'U' mode is deprecated", DeprecationWarning, module='docutils.io')