summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2014-07-04 12:48:13 -0400
committerAndrew Godwin <andrew@aeracode.org>2014-07-05 16:38:34 -0700
commit2f0cc4f5fbdddbecbd9c2093baf851fd92dbe205 (patch)
tree67c10a0b29c25de19467f79c99f7942ce2074172 /tests
parent1f889800d6c3c2989c0f8c12c631967e8e3ce428 (diff)
[1.7.x] Fixed #22943 -- Correctly serialize compiled regexes.
Thanks to antialiasis at gmail dot com for the patch.
Diffstat (limited to 'tests')
-rw-r--r--tests/migrations/test_writer.py58
1 files changed, 46 insertions, 12 deletions
diff --git a/tests/migrations/test_writer.py b/tests/migrations/test_writer.py
index cce077566a..539c201a97 100644
--- a/tests/migrations/test_writer.py
+++ b/tests/migrations/test_writer.py
@@ -3,6 +3,7 @@ from __future__ import unicode_literals
import datetime
import os
+import re
import tokenize
import unittest
@@ -103,18 +104,6 @@ class WriterTests(TestCase):
string, imports = MigrationWriter.serialize(safe_datetime)
self.assertEqual(string, repr(datetime.datetime(2014, 3, 31, 16, 4, 31)))
self.assertEqual(imports, {'import datetime'})
- # Classes
- validator = RegexValidator(message="hello")
- string, imports = MigrationWriter.serialize(validator)
- self.assertEqual(string, "django.core.validators.RegexValidator(message='hello')")
- self.serialize_round_trip(validator)
- validator = EmailValidator(message="hello") # Test with a subclass.
- string, imports = MigrationWriter.serialize(validator)
- self.assertEqual(string, "django.core.validators.EmailValidator(message='hello')")
- self.serialize_round_trip(validator)
- validator = deconstructible(path="custom.EmailValidator")(EmailValidator)(message="hello")
- string, imports = MigrationWriter.serialize(validator)
- self.assertEqual(string, "custom.EmailValidator(message='hello')")
# Django fields
self.assertSerializedFieldEqual(models.CharField(max_length=255))
self.assertSerializedFieldEqual(models.TextField(null=True, blank=True))
@@ -135,6 +124,51 @@ class WriterTests(TestCase):
)
)
+ def test_serialize_compiled_regex(self):
+ """
+ Make sure compiled regex can be serialized.
+ """
+ regex = re.compile(r'^\w+$', re.U)
+ self.assertSerializedEqual(regex)
+
+ def test_serialize_class_based_validators(self):
+ """
+ Ticket #22943: Test serialization of class-based validators, including
+ compiled regexes.
+ """
+ validator = RegexValidator(message="hello")
+ string = MigrationWriter.serialize(validator)[0]
+ self.assertEqual(string, "django.core.validators.RegexValidator(message='hello')")
+ self.serialize_round_trip(validator)
+
+ # Test with a compiled regex.
+ validator = RegexValidator(regex=re.compile(r'^\w+$', re.U))
+ string = MigrationWriter.serialize(validator)[0]
+ self.assertEqual(string, "django.core.validators.RegexValidator(regex=re.compile('^\\\\w+$', 32))")
+ self.serialize_round_trip(validator)
+
+ # Test a string regex with flag
+ validator = RegexValidator(r'^[0-9]+$', flags=re.U)
+ string = MigrationWriter.serialize(validator)[0]
+ self.assertEqual(string, "django.core.validators.RegexValidator('^[0-9]+$', flags=32)")
+ self.serialize_round_trip(validator)
+
+ # Test message and code
+ validator = RegexValidator('^[-a-zA-Z0-9_]+$', 'Invalid', 'invalid')
+ string = MigrationWriter.serialize(validator)[0]
+ self.assertEqual(string, "django.core.validators.RegexValidator('^[-a-zA-Z0-9_]+$', 'Invalid', 'invalid')")
+ self.serialize_round_trip(validator)
+
+ # Test with a subclass.
+ validator = EmailValidator(message="hello")
+ string = MigrationWriter.serialize(validator)[0]
+ self.assertEqual(string, "django.core.validators.EmailValidator(message='hello')")
+ self.serialize_round_trip(validator)
+
+ validator = deconstructible(path="custom.EmailValidator")(EmailValidator)(message="hello")
+ string = MigrationWriter.serialize(validator)[0]
+ self.assertEqual(string, "custom.EmailValidator(message='hello')")
+
def test_serialize_empty_nonempty_tuple(self):
"""
Ticket #22679: makemigrations generates invalid code for (an empty