Răsfoiți Sursa

Removed unneeded force_text calls in the test suite

Claude Paroz 8 ani în urmă
părinte
comite
2366100872

+ 34 - 35
tests/admin_filters/tests.py

@@ -11,7 +11,6 @@ from django.contrib.auth.admin import UserAdmin
 from django.contrib.auth.models import User
 from django.core.exceptions import ImproperlyConfigured
 from django.test import RequestFactory, TestCase, override_settings
-from django.utils.encoding import force_text
 
 from .models import Book, Bookmark, Department, Employee, TaggedItem
 
@@ -332,7 +331,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][4]
-        self.assertEqual(force_text(filterspec.title), 'date registered')
+        self.assertEqual(filterspec.title, 'date registered')
         choice = select_by(filterspec.choices(changelist), "display", "Today")
         self.assertIs(choice['selected'], True)
         self.assertEqual(
@@ -357,7 +356,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][4]
-        self.assertEqual(force_text(filterspec.title), 'date registered')
+        self.assertEqual(filterspec.title, 'date registered')
         choice = select_by(filterspec.choices(changelist), "display", "This month")
         self.assertIs(choice['selected'], True)
         self.assertEqual(
@@ -382,7 +381,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][4]
-        self.assertEqual(force_text(filterspec.title), 'date registered')
+        self.assertEqual(filterspec.title, 'date registered')
         choice = select_by(filterspec.choices(changelist), "display", "This year")
         self.assertIs(choice['selected'], True)
         self.assertEqual(
@@ -405,7 +404,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][4]
-        self.assertEqual(force_text(filterspec.title), 'date registered')
+        self.assertEqual(filterspec.title, 'date registered')
         choice = select_by(filterspec.choices(changelist), "display", "Past 7 days")
         self.assertIs(choice['selected'], True)
         self.assertEqual(
@@ -427,7 +426,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][4]
-        self.assertEqual(force_text(filterspec.title), 'date registered')
+        self.assertEqual(filterspec.title, 'date registered')
         choice = select_by(filterspec.choices(changelist), 'display', 'No date')
         self.assertIs(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?date_registered__isnull=True')
@@ -442,7 +441,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][4]
-        self.assertEqual(force_text(filterspec.title), 'date registered')
+        self.assertEqual(filterspec.title, 'date registered')
         choice = select_by(filterspec.choices(changelist), 'display', 'Has date')
         self.assertIs(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?date_registered__isnull=False')
@@ -469,7 +468,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the last choice is None and is selected
         filterspec = changelist.get_filters(request)[0][0]
-        self.assertEqual(force_text(filterspec.title), 'year')
+        self.assertEqual(filterspec.title, 'year')
         choices = list(filterspec.choices(changelist))
         self.assertIs(choices[-1]['selected'], True)
         self.assertEqual(choices[-1]['query_string'], '?year__isnull=True')
@@ -479,7 +478,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][0]
-        self.assertEqual(force_text(filterspec.title), 'year')
+        self.assertEqual(filterspec.title, 'year')
         choices = list(filterspec.choices(changelist))
         self.assertIs(choices[2]['selected'], True)
         self.assertEqual(choices[2]['query_string'], '?year=2002')
@@ -520,7 +519,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the last choice is None and is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_text(filterspec.title), 'Verbose Author')
+        self.assertEqual(filterspec.title, 'Verbose Author')
         choices = list(filterspec.choices(changelist))
         self.assertIs(choices[-1]['selected'], True)
         self.assertEqual(choices[-1]['query_string'], '?author__isnull=True')
@@ -530,7 +529,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_text(filterspec.title), 'Verbose Author')
+        self.assertEqual(filterspec.title, 'Verbose Author')
         # order of choices depends on User model, which has no order
         choice = select_by(filterspec.choices(changelist), "display", "alfred")
         self.assertIs(choice['selected'], True)
@@ -556,7 +555,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the last choice is None and is selected
         filterspec = changelist.get_filters(request)[0][2]
-        self.assertEqual(force_text(filterspec.title), 'Verbose Contributors')
+        self.assertEqual(filterspec.title, 'Verbose Contributors')
         choices = list(filterspec.choices(changelist))
         self.assertIs(choices[-1]['selected'], True)
         self.assertEqual(choices[-1]['query_string'], '?contributors__isnull=True')
@@ -566,7 +565,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][2]
-        self.assertEqual(force_text(filterspec.title), 'Verbose Contributors')
+        self.assertEqual(filterspec.title, 'Verbose Contributors')
         choice = select_by(filterspec.choices(changelist), "display", "bob")
         self.assertIs(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?contributors__id__exact=%d' % self.bob.pk)
@@ -584,7 +583,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the last choice is None and is selected
         filterspec = changelist.get_filters(request)[0][0]
-        self.assertEqual(force_text(filterspec.title), 'book')
+        self.assertEqual(filterspec.title, 'book')
         choices = list(filterspec.choices(changelist))
         self.assertIs(choices[-1]['selected'], True)
         self.assertEqual(choices[-1]['query_string'], '?books_authored__isnull=True')
@@ -594,7 +593,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][0]
-        self.assertEqual(force_text(filterspec.title), 'book')
+        self.assertEqual(filterspec.title, 'book')
         choice = select_by(filterspec.choices(changelist), "display", self.bio_book.title)
         self.assertIs(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?books_authored__id__exact=%d' % self.bio_book.pk)
@@ -609,7 +608,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the last choice is None and is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_text(filterspec.title), 'book')
+        self.assertEqual(filterspec.title, 'book')
         choices = list(filterspec.choices(changelist))
         self.assertIs(choices[-1]['selected'], True)
         self.assertEqual(choices[-1]['query_string'], '?books_contributed__isnull=True')
@@ -619,7 +618,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_text(filterspec.title), 'book')
+        self.assertEqual(filterspec.title, 'book')
         choice = select_by(filterspec.choices(changelist), "display", self.django_book.title)
         self.assertIs(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?books_contributed__id__exact=%d' % self.django_book.pk)
@@ -715,7 +714,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][3]
-        self.assertEqual(force_text(filterspec.title), 'is best seller')
+        self.assertEqual(filterspec.title, 'is best seller')
         choice = select_by(filterspec.choices(changelist), "display", "No")
         self.assertIs(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?is_best_seller__exact=0')
@@ -729,7 +728,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][3]
-        self.assertEqual(force_text(filterspec.title), 'is best seller')
+        self.assertEqual(filterspec.title, 'is best seller')
         choice = select_by(filterspec.choices(changelist), "display", "Yes")
         self.assertIs(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?is_best_seller__exact=1')
@@ -743,7 +742,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][3]
-        self.assertEqual(force_text(filterspec.title), 'is best seller')
+        self.assertEqual(filterspec.title, 'is best seller')
         choice = select_by(filterspec.choices(changelist), "display", "Unknown")
         self.assertIs(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?is_best_seller__isnull=True')
@@ -777,7 +776,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_text(filterspec.title), 'publication decade')
+        self.assertEqual(filterspec.title, 'publication decade')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[0]['display'], 'All')
         self.assertIs(choices[0]['selected'], True)
@@ -793,7 +792,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_text(filterspec.title), 'publication decade')
+        self.assertEqual(filterspec.title, 'publication decade')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[1]['display'], 'the 1980\'s')
         self.assertIs(choices[1]['selected'], True)
@@ -809,7 +808,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_text(filterspec.title), 'publication decade')
+        self.assertEqual(filterspec.title, 'publication decade')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[2]['display'], 'the 1990\'s')
         self.assertIs(choices[2]['selected'], True)
@@ -825,7 +824,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_text(filterspec.title), 'publication decade')
+        self.assertEqual(filterspec.title, 'publication decade')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[3]['display'], 'the 2000\'s')
         self.assertIs(choices[3]['selected'], True)
@@ -841,7 +840,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choices are selected
         filterspec = changelist.get_filters(request)[0][1]
-        self.assertEqual(force_text(filterspec.title), 'publication decade')
+        self.assertEqual(filterspec.title, 'publication decade')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[3]['display'], 'the 2000\'s')
         self.assertIs(choices[3]['selected'], True)
@@ -851,7 +850,7 @@ class ListFiltersTests(TestCase):
         )
 
         filterspec = changelist.get_filters(request)[0][0]
-        self.assertEqual(force_text(filterspec.title), 'Verbose Author')
+        self.assertEqual(filterspec.title, 'Verbose Author')
         choice = select_by(filterspec.choices(changelist), "display", "alfred")
         self.assertIs(choice['selected'], True)
         self.assertEqual(choice['query_string'], '?author__id__exact=%s&publication-decade=the+00s' % self.alfred.pk)
@@ -903,7 +902,7 @@ class ListFiltersTests(TestCase):
         changelist = self.get_changelist(request, Book, modeladmin)
 
         filterspec = changelist.get_filters(request)[0][0]
-        self.assertEqual(force_text(filterspec.title), 'publication decade')
+        self.assertEqual(filterspec.title, 'publication decade')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(len(choices), 3)
 
@@ -932,7 +931,7 @@ class ListFiltersTests(TestCase):
         self.assertEqual(list(queryset), [self.bio_book])
 
         filterspec = changelist.get_filters(request)[0][-1]
-        self.assertEqual(force_text(filterspec.title), 'number')
+        self.assertEqual(filterspec.title, 'number')
         choices = list(filterspec.choices(changelist))
         self.assertIs(choices[2]['selected'], True)
         self.assertEqual(choices[2]['query_string'], '?no=207')
@@ -953,7 +952,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][0]
-        self.assertEqual(force_text(filterspec.title), 'publication decade')
+        self.assertEqual(filterspec.title, 'publication decade')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[2]['display'], 'the 1990\'s')
         self.assertIs(choices[2]['selected'], True)
@@ -970,7 +969,7 @@ class ListFiltersTests(TestCase):
 
         # Make sure the correct choice is selected
         filterspec = changelist.get_filters(request)[0][0]
-        self.assertEqual(force_text(filterspec.title), 'publication decade')
+        self.assertEqual(filterspec.title, 'publication decade')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[2]['display'], 'the 1990\'s')
         self.assertIs(choices[2]['selected'], True)
@@ -990,7 +989,7 @@ class ListFiltersTests(TestCase):
         self.assertEqual(list(queryset), [self.john])
 
         filterspec = changelist.get_filters(request)[0][-1]
-        self.assertEqual(force_text(filterspec.title), 'department')
+        self.assertEqual(filterspec.title, 'department')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[1]['display'], 'DEV')
         self.assertIs(choices[1]['selected'], True)
@@ -1010,7 +1009,7 @@ class ListFiltersTests(TestCase):
         self.assertEqual(list(queryset), [self.john])
 
         filterspec = changelist.get_filters(request)[0][-1]
-        self.assertEqual(force_text(filterspec.title), 'department')
+        self.assertEqual(filterspec.title, 'department')
         choices = list(filterspec.choices(changelist))
         self.assertEqual(choices[1]['display'], 'DEV')
         self.assertIs(choices[1]['selected'], True)
@@ -1030,7 +1029,7 @@ class ListFiltersTests(TestCase):
         self.assertEqual(list(queryset), [self.jack, self.john])
 
         filterspec = changelist.get_filters(request)[0][-1]
-        self.assertEqual(force_text(filterspec.title), 'department')
+        self.assertEqual(filterspec.title, 'department')
         choices = list(filterspec.choices(changelist))
 
         self.assertEqual(choices[0]['display'], 'All')
@@ -1055,7 +1054,7 @@ class ListFiltersTests(TestCase):
         self.assertEqual(list(queryset), [self.john])
 
         filterspec = changelist.get_filters(request)[0][-1]
-        self.assertEqual(force_text(filterspec.title), 'department')
+        self.assertEqual(filterspec.title, 'department')
         choices = list(filterspec.choices(changelist))
 
         self.assertEqual(choices[0]['display'], 'All')
@@ -1079,7 +1078,7 @@ class ListFiltersTests(TestCase):
         def _test_choices(request, expected_displays):
             changelist = self.get_changelist(request, Book, modeladmin)
             filterspec = changelist.get_filters(request)[0][0]
-            self.assertEqual(force_text(filterspec.title), 'publication decade')
+            self.assertEqual(filterspec.title, 'publication decade')
             choices = tuple(c['display'] for c in filterspec.choices(changelist))
             self.assertEqual(choices, expected_displays)
 

+ 1 - 4
tests/admin_scripts/tests.py

@@ -27,7 +27,6 @@ from django.db.migrations.recorder import MigrationRecorder
 from django.test import (
     LiveServerTestCase, SimpleTestCase, TestCase, override_settings,
 )
-from django.utils.encoding import force_text
 
 custom_templates_dir = os.path.join(os.path.dirname(__file__), 'custom_templates')
 
@@ -196,7 +195,6 @@ class AdminScriptTestCase(unittest.TestCase):
 
     def assertOutput(self, stream, msg, regex=False):
         "Utility assertion: assert that the given message exists in the output"
-        stream = force_text(stream)
         if regex:
             self.assertIsNotNone(
                 re.search(msg, stream),
@@ -207,7 +205,6 @@ class AdminScriptTestCase(unittest.TestCase):
 
     def assertNotInOutput(self, stream, msg):
         "Utility assertion: assert that the given message doesn't exist in the output"
-        stream = force_text(stream)
         self.assertNotIn(msg, stream, "'%s' matches actual output text '%s'" % (msg, stream))
 
 ##########################################################################
@@ -2021,7 +2018,7 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
         self.assertNoOutput(err)
         test_manage_py = os.path.join(testproject_dir, 'manage.py')
         with open(test_manage_py, 'r') as fp:
-            content = force_text(fp.read())
+            content = fp.read()
             self.assertIn("project_name = 'another_project'", content)
             self.assertIn("project_directory = '%s'" % testproject_dir, content)
 

+ 1 - 2
tests/auth_tests/test_deprecated_views.py

@@ -14,7 +14,6 @@ from django.http import QueryDict
 from django.test import TestCase, override_settings
 from django.test.utils import ignore_warnings, patch_logger
 from django.utils.deprecation import RemovedInDjango21Warning
-from django.utils.encoding import force_text
 
 from .models import CustomUser, UUIDUser
 from .settings import AUTH_TEMPLATES
@@ -52,7 +51,7 @@ class AuthViewsTestCase(TestCase):
     def assertFormError(self, response, error):
         """Assert that error is found in response.context['form'] errors"""
         form_errors = list(itertools.chain(*response.context['form'].errors.values()))
-        self.assertIn(force_text(error), form_errors)
+        self.assertIn(str(error), form_errors)
 
     def assertURLEqual(self, url, expected, parse_qs=False):
         """

+ 12 - 13
tests/auth_tests/test_forms.py

@@ -16,7 +16,6 @@ from django.core.mail import EmailMultiAlternatives
 from django.forms.fields import CharField, Field, IntegerField
 from django.test import SimpleTestCase, TestCase, override_settings
 from django.utils import translation
-from django.utils.encoding import force_text
 from django.utils.text import capfirst
 from django.utils.translation import ugettext as _
 
@@ -51,7 +50,7 @@ class UserCreationFormTest(TestDataMixin, TestCase):
         form = UserCreationForm(data)
         self.assertFalse(form.is_valid())
         self.assertEqual(form["username"].errors,
-                         [force_text(User._meta.get_field('username').error_messages['unique'])])
+                         [str(User._meta.get_field('username').error_messages['unique'])])
 
     def test_invalid_data(self):
         data = {
@@ -62,7 +61,7 @@ class UserCreationFormTest(TestDataMixin, TestCase):
         form = UserCreationForm(data)
         self.assertFalse(form.is_valid())
         validator = next(v for v in User._meta.get_field('username').validators if v.code == 'invalid')
-        self.assertEqual(form["username"].errors, [force_text(validator.message)])
+        self.assertEqual(form["username"].errors, [str(validator.message)])
 
     def test_password_verification(self):
         # The verification password is incorrect.
@@ -74,13 +73,13 @@ class UserCreationFormTest(TestDataMixin, TestCase):
         form = UserCreationForm(data)
         self.assertFalse(form.is_valid())
         self.assertEqual(form["password2"].errors,
-                         [force_text(form.error_messages['password_mismatch'])])
+                         [str(form.error_messages['password_mismatch'])])
 
     def test_both_passwords(self):
         # One (or both) passwords weren't given
         data = {'username': 'jsmith'}
         form = UserCreationForm(data)
-        required_error = [force_text(Field.default_error_messages['required'])]
+        required_error = [str(Field.default_error_messages['required'])]
         self.assertFalse(form.is_valid())
         self.assertEqual(form['password1'].errors, required_error)
         self.assertEqual(form['password2'].errors, required_error)
@@ -257,9 +256,9 @@ class AuthenticationFormTest(TestDataMixin, TestCase):
         self.assertFalse(form.is_valid())
         self.assertEqual(
             form.non_field_errors(), [
-                force_text(form.error_messages['invalid_login'] % {
+                form.error_messages['invalid_login'] % {
                     'username': User._meta.get_field('username').verbose_name
-                })
+                }
             ]
         )
 
@@ -271,7 +270,7 @@ class AuthenticationFormTest(TestDataMixin, TestCase):
         }
         form = AuthenticationForm(None, data)
         self.assertFalse(form.is_valid())
-        self.assertEqual(form.non_field_errors(), [force_text(form.error_messages['inactive'])])
+        self.assertEqual(form.non_field_errors(), [str(form.error_messages['inactive'])])
 
     def test_login_failed(self):
         signal_calls = []
@@ -300,7 +299,7 @@ class AuthenticationFormTest(TestDataMixin, TestCase):
             }
             form = AuthenticationForm(None, data)
             self.assertFalse(form.is_valid())
-            self.assertEqual(form.non_field_errors(), [force_text(form.error_messages['inactive'])])
+            self.assertEqual(form.non_field_errors(), [str(form.error_messages['inactive'])])
 
     def test_custom_login_allowed_policy(self):
         # The user is inactive, but our custom form policy allows them to log in.
@@ -421,7 +420,7 @@ class SetPasswordFormTest(TestDataMixin, TestCase):
         self.assertFalse(form.is_valid())
         self.assertEqual(
             form["new_password2"].errors,
-            [force_text(form.error_messages['password_mismatch'])]
+            [str(form.error_messages['password_mismatch'])]
         )
 
     @mock.patch('django.contrib.auth.password_validation.password_changed')
@@ -499,7 +498,7 @@ class PasswordChangeFormTest(TestDataMixin, TestCase):
         }
         form = PasswordChangeForm(user, data)
         self.assertFalse(form.is_valid())
-        self.assertEqual(form["old_password"].errors, [force_text(form.error_messages['password_incorrect'])])
+        self.assertEqual(form["old_password"].errors, [str(form.error_messages['password_incorrect'])])
 
     def test_password_verification(self):
         # The two new passwords do not match.
@@ -511,7 +510,7 @@ class PasswordChangeFormTest(TestDataMixin, TestCase):
         }
         form = PasswordChangeForm(user, data)
         self.assertFalse(form.is_valid())
-        self.assertEqual(form["new_password2"].errors, [force_text(form.error_messages['password_mismatch'])])
+        self.assertEqual(form["new_password2"].errors, [str(form.error_messages['password_mismatch'])])
 
     @mock.patch('django.contrib.auth.password_validation.password_changed')
     def test_success(self, password_changed):
@@ -557,7 +556,7 @@ class UserChangeFormTest(TestDataMixin, TestCase):
         form = UserChangeForm(data, instance=user)
         self.assertFalse(form.is_valid())
         validator = next(v for v in User._meta.get_field('username').validators if v.code == 'invalid')
-        self.assertEqual(form["username"].errors, [force_text(validator.message)])
+        self.assertEqual(form["username"].errors, [str(validator.message)])
 
     def test_bug_14242(self):
         # A regression test, introduce by adding an optimization for the

+ 2 - 2
tests/auth_tests/test_templates.py

@@ -7,7 +7,7 @@ from django.contrib.auth.views import (
 )
 from django.test import RequestFactory, TestCase, override_settings
 from django.urls import reverse
-from django.utils.encoding import force_bytes, force_text
+from django.utils.encoding import force_bytes
 from django.utils.http import urlsafe_base64_encode
 
 from .client import PasswordResetConfirmClient
@@ -48,7 +48,7 @@ class AuthTemplateTests(TestCase):
         client = PasswordResetConfirmClient()
         default_token_generator = PasswordResetTokenGenerator()
         token = default_token_generator.make_token(self.user)
-        uidb64 = force_text(urlsafe_base64_encode(force_bytes(self.user.pk)))
+        uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)).decode()
         url = reverse('password_reset_confirm', kwargs={'uidb64': uidb64, 'token': token})
         response = client.get(url)
         self.assertContains(response, '<title>Enter new password</title>')

+ 1 - 1
tests/auth_tests/test_views.py

@@ -68,7 +68,7 @@ class AuthViewsTestCase(TestCase):
     def assertFormError(self, response, error):
         """Assert that error is found in response.context['form'] errors"""
         form_errors = list(itertools.chain(*response.context['form'].errors.values()))
-        self.assertIn(force_text(error), form_errors)
+        self.assertIn(str(error), form_errors)
 
     def assertURLEqual(self, url, expected, parse_qs=False):
         """

+ 2 - 3
tests/cache/tests.py

@@ -41,7 +41,6 @@ from django.utils.cache import (
     patch_response_headers, patch_vary_headers,
 )
 from django.utils.deprecation import RemovedInDjango21Warning
-from django.utils.encoding import force_text
 from django.views.decorators.cache import cache_page
 
 from .models import Poll, expensive_calculation
@@ -1789,7 +1788,7 @@ class CacheI18nTest(TestCase):
         request = self.factory.get(self.path)
         # This is tightly coupled to the implementation,
         # but it's the most straightforward way to test the key.
-        tz = force_text(timezone.get_current_timezone_name(), errors='ignore')
+        tz = timezone.get_current_timezone_name()
         tz = tz.encode('ascii', 'ignore').decode('ascii').replace(' ', '_')
         response = HttpResponse()
         key = learn_cache_key(request, response)
@@ -1801,7 +1800,7 @@ class CacheI18nTest(TestCase):
     def test_cache_key_no_i18n(self):
         request = self.factory.get(self.path)
         lang = translation.get_language()
-        tz = force_text(timezone.get_current_timezone_name(), errors='ignore')
+        tz = timezone.get_current_timezone_name()
         tz = tz.encode('ascii', 'ignore').decode('ascii').replace(' ', '_')
         response = HttpResponse()
         key = learn_cache_key(request, response)

+ 7 - 8
tests/check_framework/tests.py

@@ -12,7 +12,6 @@ from django.test import SimpleTestCase
 from django.test.utils import (
     isolate_apps, override_settings, override_system_checks,
 )
-from django.utils.encoding import force_text
 
 from .models import SimpleModel, my_check
 
@@ -73,39 +72,39 @@ class MessageTests(SimpleTestCase):
     def test_printing(self):
         e = Error("Message", hint="Hint", obj=DummyObj())
         expected = "obj: Message\n\tHINT: Hint"
-        self.assertEqual(force_text(e), expected)
+        self.assertEqual(str(e), expected)
 
     def test_printing_no_hint(self):
         e = Error("Message", obj=DummyObj())
         expected = "obj: Message"
-        self.assertEqual(force_text(e), expected)
+        self.assertEqual(str(e), expected)
 
     def test_printing_no_object(self):
         e = Error("Message", hint="Hint")
         expected = "?: Message\n\tHINT: Hint"
-        self.assertEqual(force_text(e), expected)
+        self.assertEqual(str(e), expected)
 
     def test_printing_with_given_id(self):
         e = Error("Message", hint="Hint", obj=DummyObj(), id="ID")
         expected = "obj: (ID) Message\n\tHINT: Hint"
-        self.assertEqual(force_text(e), expected)
+        self.assertEqual(str(e), expected)
 
     def test_printing_field_error(self):
         field = SimpleModel._meta.get_field('field')
         e = Error("Error", obj=field)
         expected = "check_framework.SimpleModel.field: Error"
-        self.assertEqual(force_text(e), expected)
+        self.assertEqual(str(e), expected)
 
     def test_printing_model_error(self):
         e = Error("Error", obj=SimpleModel)
         expected = "check_framework.SimpleModel: Error"
-        self.assertEqual(force_text(e), expected)
+        self.assertEqual(str(e), expected)
 
     def test_printing_manager_error(self):
         manager = SimpleModel.manager
         e = Error("Error", obj=manager)
         expected = "check_framework.SimpleModel.manager: Error"
-        self.assertEqual(force_text(e), expected)
+        self.assertEqual(str(e), expected)
 
     def test_equal_to_self(self):
         e = Error("Error", obj=SimpleModel)

+ 2 - 5
tests/contenttypes_tests/tests.py

@@ -16,7 +16,6 @@ from django.test import (
     SimpleTestCase, TestCase, TransactionTestCase, override_settings,
 )
 from django.test.utils import captured_stdout, isolate_apps
-from django.utils.encoding import force_text
 
 from .models import (
     Article, Author, ModelWithNullFKToSite, Post, SchemeIncludedURL,
@@ -134,7 +133,7 @@ class ContentTypesViewsTests(TestCase):
         ct = ContentType.objects.get_for_model(ModelCreatedOnTheFly)
         self.assertEqual(ct.app_label, 'my_great_app')
         self.assertEqual(ct.model, 'modelcreatedonthefly')
-        self.assertEqual(force_text(ct), 'modelcreatedonthefly')
+        self.assertEqual(str(ct), 'modelcreatedonthefly')
 
 
 @override_settings(SILENCED_SYSTEM_CHECKS=['fields.W342'])  # ForeignKey(unique=True)
@@ -144,9 +143,7 @@ class GenericForeignKeyTests(SimpleTestCase):
     def test_str(self):
         class Model(models.Model):
             field = GenericForeignKey()
-        expected = "contenttypes_tests.Model.field"
-        actual = force_text(Model.field)
-        self.assertEqual(expected, actual)
+        self.assertEqual(str(Model.field), "contenttypes_tests.Model.field")
 
     def test_missing_content_type_field(self):
         class TaggedItem(models.Model):

+ 2 - 3
tests/csrf_tests/test_context_processor.py

@@ -2,14 +2,13 @@ from django.http import HttpRequest
 from django.middleware.csrf import _compare_salted_tokens as equivalent_tokens
 from django.template.context_processors import csrf
 from django.test import SimpleTestCase
-from django.utils.encoding import force_text
 
 
 class TestContextProcessor(SimpleTestCase):
 
-    def test_force_text_on_token(self):
+    def test_force_token_to_string(self):
         request = HttpRequest()
         test_token = '1bcdefghij2bcdefghij3bcdefghij4bcdefghij5bcdefghij6bcdefghijABCD'
         request.META['CSRF_COOKIE'] = test_token
         token = csrf(request).get('csrf_token')
-        self.assertTrue(equivalent_tokens(force_text(token), test_token))
+        self.assertTrue(equivalent_tokens(str(token), test_token))

+ 1 - 2
tests/fixtures/tests.py

@@ -15,7 +15,6 @@ from django.core.management.commands.dumpdata import ProxyModelWarning
 from django.core.serializers.base import ProgressBar
 from django.db import IntegrityError, connection
 from django.test import TestCase, TransactionTestCase, skipUnlessDBFeature
-from django.utils.encoding import force_text
 
 from .models import (
     Article, Category, PrimaryKeyUUIDModel, ProxySpy, Spy, Tag, Visa,
@@ -584,7 +583,7 @@ class FixtureLoadingTests(DumpDataAssertMixin, TestCase):
     def test_loaddata_verbosity_three(self):
         output = StringIO()
         management.call_command('loaddata', 'fixture1.json', verbosity=3, stdout=output, stderr=output)
-        command_output = force_text(output.getvalue())
+        command_output = output.getvalue()
         self.assertIn(
             "\rProcessed 1 object(s).\rProcessed 2 object(s)."
             "\rProcessed 3 object(s).\rProcessed 4 object(s).\n",

+ 3 - 4
tests/forms_tests/tests/test_forms.py

@@ -20,7 +20,6 @@ from django.http import QueryDict
 from django.template import Context, Template
 from django.test import SimpleTestCase
 from django.utils.datastructures import MultiValueDict
-from django.utils.encoding import force_text
 from django.utils.safestring import mark_safe
 
 
@@ -3361,7 +3360,7 @@ Good luck picking a username that doesn&#39;t already exist.</p>
                 if not self:
                     return ''
                 return '<div class="errorlist">%s</div>' % ''.join(
-                    '<div class="error">%s</div>' % force_text(e) for e in self)
+                    '<div class="error">%s</div>' % e for e in self)
 
         class CommentForm(Form):
             name = CharField(max_length=50, required=False)
@@ -3471,9 +3470,9 @@ Good luck picking a username that doesn&#39;t already exist.</p>
 
         form = SimpleForm()
         self.assertTrue(hasattr(SimpleForm, '__html__'))
-        self.assertEqual(force_text(form), form.__html__())
+        self.assertEqual(str(form), form.__html__())
         self.assertTrue(hasattr(form['username'], '__html__'))
-        self.assertEqual(force_text(form['username']), form['username'].__html__())
+        self.assertEqual(str(form['username']), form['username'].__html__())
 
     def test_use_required_attribute_true(self):
         class MyForm(Form):

+ 1 - 2
tests/forms_tests/tests/test_formsets.py

@@ -9,7 +9,6 @@ from django.forms import (
 from django.forms.formsets import BaseFormSet, formset_factory
 from django.forms.utils import ErrorList
 from django.test import SimpleTestCase
-from django.utils.encoding import force_text
 
 
 class Choice(Form):
@@ -1251,7 +1250,7 @@ class FormsFormsetTestCase(SimpleTestCase):
     def test_html_safe(self):
         formset = self.make_choiceformset()
         self.assertTrue(hasattr(formset, '__html__'))
-        self.assertEqual(force_text(formset), formset.__html__())
+        self.assertEqual(str(formset), formset.__html__())
 
 
 data = {

+ 1 - 2
tests/forms_tests/tests/test_media.py

@@ -1,7 +1,6 @@
 from django.forms import CharField, Form, Media, MultiWidget, TextInput
 from django.template import Context, Template
 from django.test import SimpleTestCase, override_settings
-from django.utils.encoding import force_text
 
 
 @override_settings(
@@ -518,4 +517,4 @@ class FormsMediaTestCase(SimpleTestCase):
     def test_html_safe(self):
         media = Media(css={'all': ['/path/to/css']}, js=['/path/to/js'])
         self.assertTrue(hasattr(Media, '__html__'))
-        self.assertEqual(force_text(media), media.__html__())
+        self.assertEqual(str(media), media.__html__())

+ 2 - 3
tests/forms_tests/tests/test_utils.py

@@ -3,7 +3,6 @@ import copy
 from django.core.exceptions import ValidationError
 from django.forms.utils import ErrorDict, ErrorList, flatatt
 from django.test import SimpleTestCase
-from django.utils.encoding import force_text
 from django.utils.safestring import mark_safe
 from django.utils.translation import ugettext_lazy
 
@@ -158,9 +157,9 @@ class FormsUtilsTestCase(SimpleTestCase):
         e = ErrorDict()
         e['username'] = 'Invalid username.'
         self.assertTrue(hasattr(ErrorDict, '__html__'))
-        self.assertEqual(force_text(e), e.__html__())
+        self.assertEqual(str(e), e.__html__())
 
     def test_error_list_html_safe(self):
         e = ErrorList(['Invalid username.'])
         self.assertTrue(hasattr(ErrorList, '__html__'))
-        self.assertEqual(force_text(e), e.__html__())
+        self.assertEqual(str(e), e.__html__())

+ 5 - 6
tests/i18n/test_compilation.py

@@ -15,7 +15,6 @@ from django.core.management.utils import find_command
 from django.test import SimpleTestCase, override_settings
 from django.test.utils import captured_stderr, captured_stdout
 from django.utils import translation
-from django.utils.encoding import force_text
 from django.utils.translation import ugettext
 
 from .utils import RunInTmpDirMixin, copytree
@@ -49,7 +48,7 @@ class PoFileTests(MessageCompilationTests):
         try:
             call_command('compilemessages', locale=['en'], stderr=err_buffer, verbosity=0)
             err = err_buffer.getvalue()
-            self.assertIn("not writable location", force_text(err))
+            self.assertIn("not writable location", err)
         finally:
             os.chmod(mo_file_en, old_mode)
 
@@ -168,15 +167,15 @@ class FuzzyTranslationTest(ProjectAndAppTests):
         with override_settings(LOCALE_PATHS=[os.path.join(self.test_dir, 'locale')]):
             call_command('compilemessages', locale=[self.LOCALE], stdout=StringIO())
             with translation.override(self.LOCALE):
-                self.assertEqual(ugettext('Lenin'), force_text('Ленин'))
-                self.assertEqual(ugettext('Vodka'), force_text('Vodka'))
+                self.assertEqual(ugettext('Lenin'), 'Ленин')
+                self.assertEqual(ugettext('Vodka'), 'Vodka')
 
     def test_fuzzy_compiling(self):
         with override_settings(LOCALE_PATHS=[os.path.join(self.test_dir, 'locale')]):
             call_command('compilemessages', locale=[self.LOCALE], fuzzy=True, stdout=StringIO())
             with translation.override(self.LOCALE):
-                self.assertEqual(ugettext('Lenin'), force_text('Ленин'))
-                self.assertEqual(ugettext('Vodka'), force_text('Водка'))
+                self.assertEqual(ugettext('Lenin'), 'Ленин')
+                self.assertEqual(ugettext('Vodka'), 'Водка')
 
 
 class AppCompilationTest(ProjectAndAppTests):

+ 17 - 19
tests/i18n/test_extraction.py

@@ -16,7 +16,6 @@ from django.core.management.commands.makemessages import \
 from django.core.management.utils import find_command
 from django.test import SimpleTestCase, override_settings
 from django.test.utils import captured_stderr, captured_stdout
-from django.utils.encoding import force_text
 from django.utils.translation import TranslatorCommentWarning
 
 from .utils import POFileAssertionMixin, RunInTmpDirMixin, copytree
@@ -56,7 +55,7 @@ class ExtractorTests(POFileAssertionMixin, RunInTmpDirMixin, SimpleTestCase):
 
     def _assertPoLocComment(self, assert_presence, po_filename, line_number, *comment_parts):
         with open(po_filename, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
         if os.name == 'nt':
             # #: .\path\to\file.html:123
             cwd_prefix = '%s%s' % (os.curdir, os.sep)
@@ -82,7 +81,7 @@ class ExtractorTests(POFileAssertionMixin, RunInTmpDirMixin, SimpleTestCase):
     def _get_token_line_number(self, path, token):
         with open(path) as f:
             for line, content in enumerate(f, 1):
-                if token in force_text(content):
+                if token in content:
                     return line
         self.fail("The token '%s' could not be found in %s, please check the test config" % (token, path))
 
@@ -182,7 +181,7 @@ class BasicExtractorTests(ExtractorTests):
         management.call_command('makemessages', locale=[LOCALE], verbosity=0)
         self.assertTrue(os.path.exists(self.PO_FILE))
         with open(self.PO_FILE, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
             # should not be trimmed
             self.assertNotMsgId('Text with a few line breaks.', po_contents)
             # should be trimmed
@@ -209,8 +208,7 @@ class BasicExtractorTests(ExtractorTests):
         shutil.copyfile('./not_utf8.sample', './not_utf8.txt')
         out = StringIO()
         management.call_command('makemessages', locale=[LOCALE], stdout=out)
-        self.assertIn("UnicodeDecodeError: skipped file not_utf8.txt in .",
-                      force_text(out.getvalue()))
+        self.assertIn("UnicodeDecodeError: skipped file not_utf8.txt in .", out.getvalue())
 
     def test_unicode_file_name(self):
         open(os.path.join(self.test_dir, 'vidéo.txt'), 'a').close()
@@ -221,7 +219,7 @@ class BasicExtractorTests(ExtractorTests):
         shutil.copyfile('./code.sample', './code_sample.py')
         out = StringIO()
         management.call_command('makemessages', locale=[LOCALE], stdout=out)
-        self.assertIn("code_sample.py:4", force_text(out.getvalue()))
+        self.assertIn("code_sample.py:4", out.getvalue())
 
     def test_template_message_context_extractor(self):
         """
@@ -231,7 +229,7 @@ class BasicExtractorTests(ExtractorTests):
         management.call_command('makemessages', locale=[LOCALE], verbosity=0)
         self.assertTrue(os.path.exists(self.PO_FILE))
         with open(self.PO_FILE, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
             # {% trans %}
             self.assertIn('msgctxt "Special trans context #1"', po_contents)
             self.assertMsgId("Translatable literal #7a", po_contents)
@@ -261,7 +259,7 @@ class BasicExtractorTests(ExtractorTests):
         management.call_command('makemessages', locale=[LOCALE], verbosity=0)
         self.assertTrue(os.path.exists(self.PO_FILE))
         with open(self.PO_FILE, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
             # {% trans %}
             self.assertIn('msgctxt "Context wrapped in double quotes"', po_contents)
             self.assertIn('msgctxt "Context wrapped in single quotes"', po_contents)
@@ -301,7 +299,7 @@ class BasicExtractorTests(ExtractorTests):
         # Now test .po file contents
         self.assertTrue(os.path.exists(self.PO_FILE))
         with open(self.PO_FILE, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
 
             self.assertMsgId('Translatable literal #9a', po_contents)
             self.assertNotIn('ignored comment #1', po_contents)
@@ -390,7 +388,7 @@ class BasicExtractorTests(ExtractorTests):
         management.call_command('makemessages', locale=['pt_BR'], verbosity=0)
         self.assertTrue(os.path.exists(BR_PO_BASE + '.po'))
         with open(BR_PO_BASE + '.po', 'r', encoding='utf-8') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
             self.assertMsgStr("Größe", po_contents)
 
 
@@ -492,7 +490,7 @@ class SymlinkExtractorTests(ExtractorTests):
             management.call_command('makemessages', locale=[LOCALE], verbosity=0, symlinks=True)
             self.assertTrue(os.path.exists(self.PO_FILE))
             with open(self.PO_FILE, 'r') as fp:
-                po_contents = force_text(fp.read())
+                po_contents = fp.read()
                 self.assertMsgId('This literal should be included.', po_contents)
             self.assertLocationCommentPresent(self.PO_FILE, None, 'templates_symlinked', 'test.html')
         else:
@@ -507,7 +505,7 @@ class CopyPluralFormsExtractorTests(ExtractorTests):
         management.call_command('makemessages', locale=[LOCALE], verbosity=0)
         self.assertTrue(os.path.exists(self.PO_FILE))
         with open(self.PO_FILE, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
             self.assertIn('Plural-Forms: nplurals=2; plural=(n != 1)', po_contents)
 
     def test_override_plural_forms(self):
@@ -528,7 +526,7 @@ class CopyPluralFormsExtractorTests(ExtractorTests):
         management.call_command('makemessages', locale=[LOCALE], extensions=['html', 'djtpl'], verbosity=0)
         self.assertTrue(os.path.exists(self.PO_FILE))
         with open(self.PO_FILE, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
             self.assertNotIn("#-#-#-#-#  django.pot (PACKAGE VERSION)  #-#-#-#-#\\n", po_contents)
             self.assertMsgId('First `trans`, then `blocktrans` with a plural', po_contents)
             self.assertMsgIdPlural('Plural for a `trans` and `blocktrans` collision case', po_contents)
@@ -540,7 +538,7 @@ class NoWrapExtractorTests(ExtractorTests):
         management.call_command('makemessages', locale=[LOCALE], verbosity=0, no_wrap=True)
         self.assertTrue(os.path.exists(self.PO_FILE))
         with open(self.PO_FILE, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
             self.assertMsgId(
                 'This literal should also be included wrapped or not wrapped '
                 'depending on the use of the --no-wrap option.',
@@ -551,7 +549,7 @@ class NoWrapExtractorTests(ExtractorTests):
         management.call_command('makemessages', locale=[LOCALE], verbosity=0, no_wrap=False)
         self.assertTrue(os.path.exists(self.PO_FILE))
         with open(self.PO_FILE, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
             self.assertMsgId(
                 '""\n"This literal should also be included wrapped or not '
                 'wrapped depending on the "\n"use of the --no-wrap option."',
@@ -583,7 +581,7 @@ class LocationCommentsTests(ExtractorTests):
         management.call_command('makemessages', locale=[LOCALE], verbosity=0)
         self.assertTrue(os.path.exists(self.PO_FILE))
         with open(self.PO_FILE, 'r') as fp:
-            po_contents = force_text(fp.read())
+            po_contents = fp.read()
         self.assertMsgId('#: templates/test.html.py', po_contents)
         self.assertLocationCommentNotPresent(self.PO_FILE, None, '.html.py')
         self.assertLocationCommentPresent(self.PO_FILE, 5, 'templates', 'test.html')
@@ -695,11 +693,11 @@ class CustomLayoutExtractionTests(ExtractorTests):
             self.assertTrue(os.path.exists(app_de_locale))
 
             with open(project_de_locale, 'r') as fp:
-                po_contents = force_text(fp.read())
+                po_contents = fp.read()
                 self.assertMsgId('This app has no locale directory', po_contents)
                 self.assertMsgId('This is a project-level string', po_contents)
             with open(app_de_locale, 'r') as fp:
-                po_contents = force_text(fp.read())
+                po_contents = fp.read()
                 self.assertMsgId('This app has a locale directory', po_contents)
 
 

+ 1 - 2
tests/i18n/test_percents.py

@@ -2,7 +2,6 @@ import os
 
 from django.template import Context, Template
 from django.test import SimpleTestCase, override_settings
-from django.utils.encoding import force_text
 from django.utils.translation import activate, get_language, trans_real
 
 from .utils import POFileAssertionMixin
@@ -40,7 +39,7 @@ class ExtractingStringsWithPercentSigns(POFileAssertionMixin, FrenchTestCase):
     def setUp(self):
         super(ExtractingStringsWithPercentSigns, self).setUp()
         with open(self.PO_FILE, 'r') as fp:
-            self.po_contents = force_text(fp.read())
+            self.po_contents = fp.read()
 
     def test_trans_tag_with_percent_symbol_at_the_end(self):
         self.assertMsgId('Literal with a percent symbol at the end %%', self.po_contents)

+ 1 - 2
tests/inspectdb/tests.py

@@ -5,7 +5,6 @@ from unittest import mock, skipUnless
 from django.core.management import call_command
 from django.db import connection
 from django.test import TestCase, skipUnlessDBFeature
-from django.utils.encoding import force_text
 
 from .models import ColumnTypes
 
@@ -264,7 +263,7 @@ class InspectDBTestCase(TestCase):
         with mock.patch('django.db.backends.base.introspection.BaseDatabaseIntrospection.table_names',
                         return_value=['nonexistent']):
             call_command('inspectdb', stdout=out)
-        output = force_text(out.getvalue())
+        output = out.getvalue()
         self.assertIn("# Unable to inspect table 'nonexistent'", output)
         # The error message depends on the backend
         self.assertIn("# The error was:", output)

+ 2 - 3
tests/managers_regress/models.py

@@ -7,7 +7,6 @@ from django.contrib.contenttypes.fields import (
 )
 from django.contrib.contenttypes.models import ContentType
 from django.db import models
-from django.utils.encoding import force_text
 
 
 class OnlyFred(models.Manager):
@@ -123,7 +122,7 @@ class RelatedModel(models.Model):
     exact = models.NullBooleanField()
 
     def __str__(self):
-        return force_text(self.pk)
+        return str(self.pk)
 
 
 class RelationModel(models.Model):
@@ -136,4 +135,4 @@ class RelationModel(models.Model):
     gfk = GenericForeignKey(ct_field='gfk_ctype', fk_field='gfk_id')
 
     def __str__(self):
-        return force_text(self.pk)
+        return str(self.pk)

+ 1 - 2
tests/managers_regress/tests.py

@@ -2,7 +2,6 @@ from django.db import models
 from django.template import Context, Template
 from django.test import TestCase, override_settings
 from django.test.utils import isolate_apps
-from django.utils.encoding import force_text
 
 from .models import (
     AbstractBase1, AbstractBase2, AbstractBase3, Child1, Child2, Child3,
@@ -148,7 +147,7 @@ class ManagersRegressionTests(TestCase):
 
         self.assertEqual(
             t.render(Context({'related': related})),
-            ''.join([force_text(relation.pk)] * 3),
+            ''.join([str(relation.pk)] * 3),
         )
 
     def test_field_can_be_called_exact(self):

+ 1 - 2
tests/migrations/test_commands.py

@@ -16,7 +16,6 @@ from django.db.migrations.exceptions import (
 )
 from django.db.migrations.recorder import MigrationRecorder
 from django.test import override_settings
-from django.utils.encoding import force_text
 
 from .models import UnicodeModel, UnserializableModel
 from .routers import TestRouter
@@ -649,7 +648,7 @@ class MakeMigrationsTests(MigrationTestBase):
             self.assertTrue(os.path.exists(init_file))
 
             with open(init_file, 'r') as fp:
-                content = force_text(fp.read())
+                content = fp.read()
             self.assertEqual(content, '')
 
             # Check for existing 0001_initial.py file in migration folder

+ 2 - 3
tests/migrations/test_graph.py

@@ -5,7 +5,6 @@ from django.db.migrations.exceptions import (
 )
 from django.db.migrations.graph import RECURSION_DEPTH_WARNING, MigrationGraph
 from django.test import SimpleTestCase
-from django.utils.encoding import force_text
 
 
 class GraphTests(SimpleTestCase):
@@ -395,7 +394,7 @@ class GraphTests(SimpleTestCase):
 
     def test_stringify(self):
         graph = MigrationGraph()
-        self.assertEqual(force_text(graph), "Graph: 0 nodes, 0 edges")
+        self.assertEqual(str(graph), "Graph: 0 nodes, 0 edges")
 
         graph.add_node(("app_a", "0001"), None)
         graph.add_node(("app_a", "0002"), None)
@@ -406,5 +405,5 @@ class GraphTests(SimpleTestCase):
         graph.add_dependency("app_a.0003", ("app_a", "0003"), ("app_a", "0002"))
         graph.add_dependency("app_a.0003", ("app_a", "0003"), ("app_b", "0002"))
 
-        self.assertEqual(force_text(graph), "Graph: 5 nodes, 3 edges")
+        self.assertEqual(str(graph), "Graph: 5 nodes, 3 edges")
         self.assertEqual(repr(graph), "<MigrationGraph: nodes=5, edges=3>")

+ 1 - 2
tests/prefetch_related/tests.py

@@ -5,7 +5,6 @@ from django.db.models import Prefetch, QuerySet
 from django.db.models.query import get_prefetcher
 from django.test import TestCase, override_settings
 from django.test.utils import CaptureQueriesContext
-from django.utils.encoding import force_text
 
 from .models import (
     Author, Author2, AuthorAddress, AuthorWithAge, Bio, Book, Bookmark,
@@ -1260,7 +1259,7 @@ class Ticket21760Tests(TestCase):
     def test_bug(self):
         prefetcher = get_prefetcher(self.rooms[0], 'house', 'house')[0]
         queryset = prefetcher.get_prefetch_queryset(list(Room.objects.all()))[0]
-        self.assertNotIn(' JOIN ', force_text(queryset.query))
+        self.assertNotIn(' JOIN ', str(queryset.query))
 
 
 class Ticket25546Tests(TestCase):

+ 1 - 2
tests/sessions_tests/tests.py

@@ -33,7 +33,6 @@ from django.test import (
 )
 from django.test.utils import patch_logger
 from django.utils import timezone
-from django.utils.encoding import force_text
 
 from .models import SessionStore as CustomDatabaseSession
 
@@ -388,7 +387,7 @@ class DatabaseSessionTests(SessionTestsMixin, TestCase):
         session_key = self.session.session_key
         s = self.model.objects.get(session_key=session_key)
 
-        self.assertEqual(force_text(s), session_key)
+        self.assertEqual(str(s), session_key)
 
     def test_session_get_decoded(self):
         """

+ 1 - 2
tests/staticfiles_tests/cases.py

@@ -7,7 +7,6 @@ from django.conf import settings
 from django.core.management import call_command
 from django.template import Context, Template
 from django.test import SimpleTestCase, override_settings
-from django.utils.encoding import force_text
 
 from .settings import TEST_SETTINGS
 
@@ -20,7 +19,7 @@ class BaseStaticFilesMixin:
     def assertFileContains(self, filepath, text):
         self.assertIn(
             text,
-            self._get_file(force_text(filepath)),
+            self._get_file(filepath),
             "'%s' not in '%s'" % (text, filepath),
         )
 

+ 15 - 16
tests/staticfiles_tests/test_management.py

@@ -18,7 +18,6 @@ from django.test import override_settings
 from django.test.utils import extend_sys_path
 from django.utils import timezone
 from django.utils._os import symlinks_supported
-from django.utils.encoding import force_text
 from django.utils.functional import empty
 
 from .cases import CollectionTestCase, StaticFilesTestCase, TestDefaults
@@ -41,7 +40,7 @@ class TestFindStatic(TestDefaults, CollectionTestCase):
     """
     def _get_file(self, filepath):
         path = call_command('findstatic', filepath, all=False, verbosity=0, stdout=StringIO())
-        with codecs.open(force_text(path), "r", "utf-8") as f:
+        with codecs.open(path, "r", "utf-8") as f:
             return f.read()
 
     def test_all_files(self):
@@ -51,8 +50,8 @@ class TestFindStatic(TestDefaults, CollectionTestCase):
         result = call_command('findstatic', 'test/file.txt', verbosity=1, stdout=StringIO())
         lines = [l.strip() for l in result.split('\n')]
         self.assertEqual(len(lines), 3)  # three because there is also the "Found <file> here" line
-        self.assertIn('project', force_text(lines[1]))
-        self.assertIn('apps', force_text(lines[2]))
+        self.assertIn('project', lines[1])
+        self.assertIn('apps', lines[2])
 
     def test_all_files_less_verbose(self):
         """
@@ -61,8 +60,8 @@ class TestFindStatic(TestDefaults, CollectionTestCase):
         result = call_command('findstatic', 'test/file.txt', verbosity=0, stdout=StringIO())
         lines = [l.strip() for l in result.split('\n')]
         self.assertEqual(len(lines), 2)
-        self.assertIn('project', force_text(lines[0]))
-        self.assertIn('apps', force_text(lines[1]))
+        self.assertIn('project', lines[0])
+        self.assertIn('apps', lines[1])
 
     def test_all_files_more_verbose(self):
         """
@@ -71,10 +70,10 @@ class TestFindStatic(TestDefaults, CollectionTestCase):
         """
         result = call_command('findstatic', 'test/file.txt', verbosity=2, stdout=StringIO())
         lines = [l.strip() for l in result.split('\n')]
-        self.assertIn('project', force_text(lines[1]))
-        self.assertIn('apps', force_text(lines[2]))
-        self.assertIn("Looking in the following locations:", force_text(lines[3]))
-        searched_locations = ', '.join(force_text(x) for x in lines[4:])
+        self.assertIn('project', lines[1])
+        self.assertIn('apps', lines[2])
+        self.assertIn("Looking in the following locations:", lines[3])
+        searched_locations = ', '.join(lines[4:])
         # AppDirectoriesFinder searched locations
         self.assertIn(os.path.join('staticfiles_tests', 'apps', 'test', 'static'), searched_locations)
         self.assertIn(os.path.join('staticfiles_tests', 'apps', 'no_label', 'static'), searched_locations)
@@ -195,7 +194,7 @@ class TestInteractiveMessages(CollectionTestCase):
         with mock.patch('builtins.input', side_effect=self.mock_input(stdout)):
             call_command('collectstatic', interactive=True, clear=True, stdout=stdout)
 
-        output = force_text(stdout.getvalue())
+        output = stdout.getvalue()
         self.assertNotIn(self.overwrite_warning_msg, output)
         self.assertIn(self.delete_warning_msg, output)
 
@@ -204,7 +203,7 @@ class TestInteractiveMessages(CollectionTestCase):
         self.run_collectstatic()
         with mock.patch('builtins.input', side_effect=self.mock_input(stdout)):
             call_command('collectstatic', interactive=True, stdout=stdout)
-        output = force_text(stdout.getvalue())
+        output = stdout.getvalue()
         self.assertIn(self.overwrite_warning_msg, output)
         self.assertNotIn(self.delete_warning_msg, output)
 
@@ -212,7 +211,7 @@ class TestInteractiveMessages(CollectionTestCase):
         stdout = StringIO()
         shutil.rmtree(settings.STATIC_ROOT)
         call_command('collectstatic', interactive=True, stdout=stdout)
-        output = force_text(stdout.getvalue())
+        output = stdout.getvalue()
         self.assertNotIn(self.overwrite_warning_msg, output)
         self.assertNotIn(self.delete_warning_msg, output)
         self.assertIn(self.files_copied_msg, output)
@@ -223,7 +222,7 @@ class TestInteractiveMessages(CollectionTestCase):
         with override_settings(STATIC_ROOT=static_dir):
             call_command('collectstatic', interactive=True, stdout=stdout)
         shutil.rmtree(static_dir)
-        output = force_text(stdout.getvalue())
+        output = stdout.getvalue()
         self.assertNotIn(self.overwrite_warning_msg, output)
         self.assertNotIn(self.delete_warning_msg, output)
         self.assertIn(self.files_copied_msg, output)
@@ -349,7 +348,7 @@ class TestCollectionOverwriteWarning(CollectionTestCase):
         """
         out = StringIO()
         call_command('collectstatic', interactive=False, verbosity=3, stdout=out, **kwargs)
-        return force_text(out.getvalue())
+        return out.getvalue()
 
     def test_no_warning(self):
         """
@@ -409,7 +408,7 @@ class TestCollectionNeverCopyStorage(CollectionTestCase):
         """
         stdout = StringIO()
         self.run_collectstatic(stdout=stdout, verbosity=2)
-        output = force_text(stdout.getvalue())
+        output = stdout.getvalue()
         self.assertIn("Skipping 'test.txt' (not modified)", output)
 
 

+ 1 - 2
tests/staticfiles_tests/test_storage.py

@@ -12,7 +12,6 @@ from django.contrib.staticfiles.management.commands.collectstatic import \
 from django.core.cache.backends.base import BaseCache
 from django.core.management import call_command
 from django.test import override_settings
-from django.utils.encoding import force_text
 
 from .cases import CollectionTestCase
 from .settings import TEST_ROOT
@@ -380,7 +379,7 @@ class TestCollectionManifestStorage(TestHashedFiles, CollectionTestCase):
         manifest_content = storage.staticfiles_storage.read_manifest()
         self.assertIn(
             '"version": "%s"' % storage.staticfiles_storage.manifest_version,
-            force_text(manifest_content)
+            manifest_content
         )
 
     def test_parse_cache(self):

+ 1 - 2
tests/template_tests/filter_tests/test_slugify.py

@@ -1,6 +1,5 @@
 from django.template.defaultfilters import slugify
 from django.test import SimpleTestCase
-from django.utils.encoding import force_text
 from django.utils.functional import lazy
 from django.utils.safestring import mark_safe
 
@@ -42,7 +41,7 @@ class FunctionTests(SimpleTestCase):
         self.assertEqual(slugify(123), '123')
 
     def test_slugify_lazy_string(self):
-        lazy_str = lazy(lambda string: force_text(string), str)
+        lazy_str = lazy(lambda string: string, str)
         self.assertEqual(
             slugify(lazy_str(' Jack & Jill like numbers 1,2,3 and 4 and silly characters ?%.$!/')),
             'jack-jill-like-numbers-123-and-4-and-silly-characters',

+ 1 - 1
tests/utils_tests/test_encoding.py

@@ -24,7 +24,7 @@ class TestEncodingUtils(unittest.TestCase):
 
     def test_force_text_lazy(self):
         s = SimpleLazyObject(lambda: 'x')
-        self.assertTrue(issubclass(type(force_text(s)), str))
+        self.assertTrue(type(force_text(s)), str)
 
     def test_force_bytes_exception(self):
         """

+ 3 - 4
tests/utils_tests/test_html.py

@@ -3,7 +3,6 @@ from datetime import datetime
 
 from django.test import SimpleTestCase
 from django.utils import html, safestring
-from django.utils.encoding import force_text
 from django.utils.functional import lazystr
 
 
@@ -99,7 +98,7 @@ class TestUtilsHtml(SimpleTestCase):
         for filename in ('strip_tags1.html', 'strip_tags2.txt'):
             path = os.path.join(os.path.dirname(__file__), 'files', filename)
             with open(path, 'r') as fp:
-                content = force_text(fp.read())
+                content = fp.read()
                 start = datetime.now()
                 stripped = html.strip_tags(content)
                 elapsed = datetime.now() - start
@@ -173,7 +172,7 @@ class TestUtilsHtml(SimpleTestCase):
         html_obj = HtmlClass()
         self.assertTrue(hasattr(HtmlClass, '__html__'))
         self.assertTrue(hasattr(html_obj, '__html__'))
-        self.assertEqual(force_text(html_obj), html_obj.__html__())
+        self.assertEqual(str(html_obj), html_obj.__html__())
 
     def test_html_safe_subclass(self):
         class BaseClass:
@@ -191,7 +190,7 @@ class TestUtilsHtml(SimpleTestCase):
                 return 'some html safe content'
 
         subclass_obj = Subclass()
-        self.assertEqual(force_text(subclass_obj), subclass_obj.__html__())
+        self.assertEqual(str(subclass_obj), subclass_obj.__html__())
 
     def test_html_safe_defines_html_error(self):
         msg = "can't apply @html_safe to HtmlClass because it defines __html__()."

+ 6 - 6
tests/view_tests/tests/test_debug.py

@@ -14,7 +14,7 @@ from django.template import TemplateDoesNotExist
 from django.test import RequestFactory, SimpleTestCase, override_settings
 from django.test.utils import LoggingCaptureMixin, patch_logger
 from django.urls import reverse
-from django.utils.encoding import force_bytes, force_text
+from django.utils.encoding import force_bytes
 from django.utils.functional import SimpleLazyObject
 from django.views.debug import (
     CLEANSED_SUBSTITUTE, CallableSettingWrapper, ExceptionReporter,
@@ -740,14 +740,14 @@ class ExceptionReportTestMixin:
             email = mail.outbox[0]
 
             # Frames vars are never shown in plain text email reports.
-            body_plain = force_text(email.body)
+            body_plain = str(email.body)
             self.assertNotIn('cooked_eggs', body_plain)
             self.assertNotIn('scrambled', body_plain)
             self.assertNotIn('sauce', body_plain)
             self.assertNotIn('worcestershire', body_plain)
 
             # Frames vars are shown in html email reports.
-            body_html = force_text(email.alternatives[0][0])
+            body_html = str(email.alternatives[0][0])
             self.assertIn('cooked_eggs', body_html)
             self.assertIn('scrambled', body_html)
             self.assertIn('sauce', body_html)
@@ -773,14 +773,14 @@ class ExceptionReportTestMixin:
             email = mail.outbox[0]
 
             # Frames vars are never shown in plain text email reports.
-            body_plain = force_text(email.body)
+            body_plain = str(email.body)
             self.assertNotIn('cooked_eggs', body_plain)
             self.assertNotIn('scrambled', body_plain)
             self.assertNotIn('sauce', body_plain)
             self.assertNotIn('worcestershire', body_plain)
 
             # Frames vars are shown in html email reports.
-            body_html = force_text(email.alternatives[0][0])
+            body_html = str(email.alternatives[0][0])
             self.assertIn('cooked_eggs', body_html)
             self.assertIn('scrambled', body_html)
             self.assertIn('sauce', body_html)
@@ -812,7 +812,7 @@ class ExceptionReportTestMixin:
             self.assertEqual(len(mail.outbox), 1)
             email = mail.outbox[0]
             # Frames vars are never shown in plain text email reports.
-            body = force_text(email.body)
+            body = str(email.body)
             self.assertNotIn('cooked_eggs', body)
             self.assertNotIn('scrambled', body)
             self.assertNotIn('sauce', body)