Przeglądaj źródła

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

Simon Charette 9 lat temu
rodzic
commit
1c5f4e86bc

+ 6 - 8
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.

+ 1 - 0
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'])

+ 2 - 0
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)

+ 4 - 13
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):
         """

+ 4 - 13
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()
-            )

+ 2 - 0
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')