Fixed #22588 -- Fix RegexValidator __eq__

Compare parameters instead of re.pattern instances, and add the other
parameters to the comparison. Also add a __ne__ to make assertNotEqual
work properly.
This commit is contained in:
David Szotten 2014-05-06 21:57:37 +01:00 committed by Andrew Godwin
parent 99d9fa329a
commit 7fe60ae64a
2 changed files with 38 additions and 1 deletions

View File

@ -51,7 +51,17 @@ class RegexValidator(object):
raise ValidationError(self.message, code=self.code) raise ValidationError(self.message, code=self.code)
def __eq__(self, other): def __eq__(self, other):
return isinstance(other, RegexValidator) and (self.regex == other.regex) and (self.message == other.message) and (self.code == other.code) return (
isinstance(other, RegexValidator) and
self.regex.pattern == other.regex.pattern and
self.regex.flags == other.regex.flags and
(self.message == other.message) and
(self.code == other.code) and
(self.inverse_match == other.inverse_match)
)
def __ne__(self, other):
return not (self == other)
@deconstructible @deconstructible

View File

@ -296,6 +296,33 @@ class TestValidatorEquality(TestCase):
RegexValidator(r'^(?:[a-z0-9\.\-]*)://'), RegexValidator(r'^(?:[a-z0-9\.\-]*)://'),
) )
self.assertNotEqual(
RegexValidator('', flags=re.IGNORECASE),
RegexValidator(''),
)
self.assertNotEqual(
RegexValidator(''),
RegexValidator('', inverse_match=True),
)
def test_regex_equality_nocache(self):
pattern = r'^(?:[a-z0-9\.\-]*)://'
left = RegexValidator(pattern)
re.purge()
right = RegexValidator(pattern)
self.assertEqual(
left,
right,
)
def test_regex_equality_blank(self):
self.assertEqual(
RegexValidator(),
RegexValidator(),
)
def test_email_equality(self): def test_email_equality(self):
self.assertEqual( self.assertEqual(
EmailValidator(), EmailValidator(),