From 1c5f4e86bc9c7bae5d5f3830d9cfbb0043297261 Mon Sep 17 00:00:00 2001 From: Simon Charette Date: Fri, 13 Nov 2015 15:54:05 -0500 Subject: [PATCH] Fixed #25745 -- Promoted RuntimeWarnings to errors in the test suite. --- tests/apps/tests.py | 14 ++++++-------- tests/backends/tests.py | 1 + tests/migrations/test_graph.py | 2 ++ tests/model_regress/test_pickle.py | 17 ++++------------- tests/queryset_pickle/tests.py | 17 ++++------------- tests/runtests.py | 2 ++ 6 files changed, 19 insertions(+), 34 deletions(-) diff --git a/tests/apps/tests.py b/tests/apps/tests.py index c226bf5010..9dad3cfb86 100644 --- a/tests/apps/tests.py +++ b/tests/apps/tests.py @@ -1,7 +1,6 @@ from __future__ import unicode_literals import os -import warnings from unittest import skipUnless from django.apps import AppConfig, apps @@ -232,14 +231,13 @@ class AppsTests(SimpleTestCase): body = {} body['Meta'] = type(str("Meta"), tuple(), meta_contents) 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) - 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 # a RuntimeError. diff --git a/tests/backends/tests.py b/tests/backends/tests.py index 6237e860fb..693bb77180 100644 --- a/tests/backends/tests.py +++ b/tests/backends/tests.py @@ -203,6 +203,7 @@ class PostgreSQLTests(TestCase): with warnings.catch_warnings(record=True) as w: with mock.patch('django.db.backends.base.base.BaseDatabaseWrapper.connect', side_effect=mocked_connect, autospec=True): + warnings.simplefilter('always', RuntimeWarning) nodb_conn = connection._nodb_connection self.assertIsNotNone(nodb_conn.settings_dict['NAME']) self.assertEqual(nodb_conn.settings_dict['NAME'], connection.settings_dict['NAME']) diff --git a/tests/migrations/test_graph.py b/tests/migrations/test_graph.py index 29738dfdf0..6260d41887 100644 --- a/tests/migrations/test_graph.py +++ b/tests/migrations/test_graph.py @@ -197,6 +197,7 @@ class GraphTests(SimpleTestCase): leaf = expected[-1] with warnings.catch_warnings(record=True) as w: + warnings.simplefilter('always', RuntimeWarning) forwards_plan = graph.forwards_plan(leaf) self.assertEqual(len(w), 1) @@ -205,6 +206,7 @@ class GraphTests(SimpleTestCase): self.assertEqual(expected, forwards_plan) with warnings.catch_warnings(record=True) as w: + warnings.simplefilter('always', RuntimeWarning) backwards_plan = graph.backwards_plan(root) self.assertEqual(len(w), 1) diff --git a/tests/model_regress/test_pickle.py b/tests/model_regress/test_pickle.py index 517646c407..393c53733b 100644 --- a/tests/model_regress/test_pickle.py +++ b/tests/model_regress/test_pickle.py @@ -3,13 +3,11 @@ import os import pickle import subprocess import sys -import warnings from django.core.files.temp import NamedTemporaryFile from django.db import DJANGO_VERSION_PICKLE_KEY, models from django.test import TestCase, mock from django.utils._os import npath, upath -from django.utils.encoding import force_text from django.utils.version import get_version from .models import Article @@ -31,11 +29,9 @@ class ModelPickleTestCase(TestCase): return reduce_list 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)) - msg = force_text(recorded.pop().message) - self.assertEqual(msg, - "Pickled model instance's Django version is not specified.") def test_unsupported_unpickle(self): """ @@ -52,14 +48,9 @@ class ModelPickleTestCase(TestCase): return reduce_list 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)) - 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): """ diff --git a/tests/queryset_pickle/tests.py b/tests/queryset_pickle/tests.py index 3e038b0c51..2a21e94889 100644 --- a/tests/queryset_pickle/tests.py +++ b/tests/queryset_pickle/tests.py @@ -3,12 +3,10 @@ from __future__ import unicode_literals import datetime import pickle import unittest -import warnings from django.db import models from django.test import TestCase from django.utils import six -from django.utils.encoding import force_text from django.utils.version import get_version from .models import Container, Event, Group, Happening, M2MModel @@ -142,11 +140,9 @@ class PickleabilityTestCase(TestCase): unpickled without a Django version """ 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)) - msg = force_text(recorded.pop().message) - self.assertEqual(msg, - "Pickled queryset instance's Django version is not specified.") def test_unsupported_unpickle(self): """ @@ -154,11 +150,6 @@ class PickleabilityTestCase(TestCase): unpickled with a different Django version than the current """ 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)) - 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() - ) diff --git a/tests/runtests.py b/tests/runtests.py index af7b4046e8..55468e494d 100755 --- a/tests/runtests.py +++ b/tests/runtests.py @@ -24,6 +24,8 @@ from django.utils.log import DEFAULT_LOGGING # Make deprecation warnings errors to ensure no usage of deprecated features. 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. warnings.filterwarnings("ignore", "'U' mode is deprecated", DeprecationWarning, module='docutils.io')