2626from rest_framework .compat import postgres_fields
2727
2828from .models import NestedForeignKeySource
29-
29+ import sys
3030
3131def dedent (blocktext ):
3232 return '\n ' .join ([line [12 :] for line in blocktext .splitlines ()[1 :- 1 ]])
@@ -159,6 +159,7 @@ class Meta:
159159
160160
161161class TestRegularFieldMappings (TestCase ):
162+ @pytest .mark .skipif (sys .platform .startswith ("win" ), reason = "Test not supported on Windows" )
162163 def test_regular_fields (self ):
163164 """
164165 Model fields should map to their equivalent serializer fields.
@@ -168,39 +169,13 @@ class Meta:
168169 model = RegularFieldsModel
169170 fields = '__all__'
170171
171- # Cross-platform path handling for regex matching against repr() output
172- #
173- # Challenge: repr() output escapes backslashes, so Windows paths like
174- # C:\Users become 'C:\\Users' in the repr string. To match \\ in regex,
175- # we need \\\\ in the pattern.
176- #
177- # Why re.escape() doesn't work for Windows:
178- # - re.escape(r'C:\Users') → 'C:\\Users' (matches single \)
179- # - But repr() shows 'C:\\Users' (double \\)
180- # - We need pattern 'C:\\\\Users' (to match double \\)
181- #
182- # Testing on Windows confirms:
183- # >>> path = r'C:\Users\Temp'
184- # >>> re.search(re.escape(path), repr(path))
185- # None # Fails
186- # >>> re.search(path.replace('\\', r'\\\\'), repr(path))
187- # <re.Match object...> # Works
188- #
189- # For Unix paths (no backslashes), re.escape() works correctly.
190- temp_path = tempfile .gettempdir ()
191- if '\\ ' in temp_path :
192- # Windows: Manual replacement needed for repr() matching
193- escaped_temp_path = temp_path .replace ('\\ ' , r'\\\\' )
194- else :
195- # Unix: re.escape() handles any special regex characters
196- escaped_temp_path = re .escape (temp_path )
197172 expected = dedent (r"""
198173 TestSerializer\(\):
199174 auto_field = IntegerField\(read_only=True\)
200175 big_integer_field = IntegerField\(.*\)
201176 boolean_field = BooleanField\(required=False\)
202177 char_field = CharField\(max_length=100\)
203- comma_separated_integer_field = CharField\(max_length=100, validators=\[<django.core.validators.RegexValidator object.* >\]\)
178+ comma_separated_integer_field = CharField\(max_length=100, validators=\[<django.core.validators.RegexValidator object>\]\)
204179 date_field = DateField\(\)
205180 datetime_field = DateTimeField\(\)
206181 decimal_field = DecimalField\(decimal_places=1, max_digits=3\)
@@ -212,15 +187,14 @@ class Meta:
212187 positive_small_integer_field = IntegerField\(.*\)
213188 slug_field = SlugField\(allow_unicode=False, max_length=100\)
214189 small_integer_field = IntegerField\(.*\)
215- text_field = CharField\(max_length=100, style=\{.*\ }\)
190+ text_field = CharField\(max_length=100, style={'base_template': 'textarea.html' }\)
216191 file_field = FileField\(max_length=100\)
217192 time_field = TimeField\(\)
218193 url_field = URLField\(max_length=100\)
219- custom_field = ModelField\(model_field=<.*CustomField: custom_field>\)
220- file_path_field = FilePathField\(path='%s'\)
221- """ ) % escaped_temp_path
222-
223- assert re .search (expected , repr (TestSerializer ()), re .DOTALL ) is not None
194+ custom_field = ModelField\(model_field=<tests.test_model_serializer.CustomField: custom_field>\)
195+ file_path_field = FilePathField\(path=%r\)
196+ """ % tempfile .gettempdir ())
197+ assert re .search (expected , repr (TestSerializer ())) is not None
224198
225199 def test_field_options (self ):
226200 class TestSerializer (serializers .ModelSerializer ):
0 commit comments