Skip to content

Commit baf705f

Browse files
ngnpopefelixxm
authored andcommitted
Refs #34986 -- Fixed some test assertions for PyPy.
These failures were due to minor inconsistencies or implementation differences between CPython and PyPy.
1 parent 051dbb5 commit baf705f

File tree

5 files changed

+17
-6
lines changed

5 files changed

+17
-6
lines changed

tests/forms_tests/field_tests/test_emailfield.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,6 @@ def test_emailfield_strip_on_none_value(self):
7171
self.assertIsNone(f.clean(None))
7272

7373
def test_emailfield_unable_to_set_strip_kwarg(self):
74-
msg = "__init__() got multiple values for keyword argument 'strip'"
74+
msg = "got multiple values for keyword argument 'strip'"
7575
with self.assertRaisesMessage(TypeError, msg):
7676
EmailField(strip=False)

tests/forms_tests/field_tests/test_urlfield.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ def test_urlfield_strip_on_none_value(self):
136136
self.assertIsNone(f.clean(None))
137137

138138
def test_urlfield_unable_to_set_strip_kwarg(self):
139-
msg = "__init__() got multiple values for keyword argument 'strip'"
139+
msg = "got multiple values for keyword argument 'strip'"
140140
with self.assertRaisesMessage(TypeError, msg):
141141
URLField(strip=False)
142142

tests/forms_tests/widget_tests/test_selectdatewidget.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from django.test import override_settings
66
from django.utils import translation
77
from django.utils.dates import MONTHS_AP
8+
from django.utils.version import PYPY
89

910
from .base import WidgetTest
1011

@@ -611,7 +612,11 @@ def test_value_from_datadict(self):
611612
((None, "12", "1"), None),
612613
(("2000", None, "1"), None),
613614
(("2000", "12", None), None),
614-
((str(sys.maxsize + 1), "12", "1"), "0-0-0"),
615+
(
616+
(str(sys.maxsize + 1), "12", "1"),
617+
# PyPy does not raise OverflowError.
618+
f"{sys.maxsize + 1}-12-1" if PYPY else "0-0-0",
619+
),
615620
]
616621
for values, expected in tests:
617622
with self.subTest(values=values):

tests/model_forms/tests.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from django.test.utils import isolate_apps
2626
from django.utils.choices import BlankChoiceIterator
2727
from django.utils.deprecation import RemovedInDjango60Warning
28+
from django.utils.version import PYPY
2829

2930
from .models import (
3031
Article,
@@ -3017,7 +3018,10 @@ def label_from_instance(self, obj):
30173018
return ", ".join(c.name for c in obj.colours.all())
30183019

30193020
field = ColorModelChoiceField(ColourfulItem.objects.prefetch_related("colours"))
3020-
with self.assertNumQueries(3): # would be 4 if prefetch is ignored
3021+
# CPython calls ModelChoiceField.__len__() when coercing to tuple. PyPy
3022+
# doesn't call __len__() and so .count() isn't called on the QuerySet.
3023+
# The following would trigger an extra query if prefetch were ignored.
3024+
with self.assertNumQueries(2 if PYPY else 3):
30213025
self.assertEqual(
30223026
tuple(field.choices),
30233027
(

tests/utils_tests/test_encoding.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
)
2323
from django.utils.functional import SimpleLazyObject
2424
from django.utils.translation import gettext_lazy
25+
from django.utils.version import PYPY
2526

2627

2728
class TestEncodingUtils(SimpleTestCase):
@@ -43,9 +44,10 @@ def test_force_str_lazy(self):
4344
self.assertIs(type(force_str(s)), str)
4445

4546
def test_force_str_DjangoUnicodeDecodeError(self):
47+
reason = "unexpected end of data" if PYPY else "invalid start byte"
4648
msg = (
47-
"'utf-8' codec can't decode byte 0xff in position 0: invalid "
48-
"start byte. You passed in b'\\xff' (<class 'bytes'>)"
49+
f"'utf-8' codec can't decode byte 0xff in position 0: {reason}. "
50+
"You passed in b'\\xff' (<class 'bytes'>)"
4951
)
5052
with self.assertRaisesMessage(DjangoUnicodeDecodeError, msg):
5153
force_str(b"\xff")

0 commit comments

Comments
 (0)