summaryrefslogtreecommitdiff
path: root/tests/regressiontests/forms/validators.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/regressiontests/forms/validators.py')
-rw-r--r--tests/regressiontests/forms/validators.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/regressiontests/forms/validators.py b/tests/regressiontests/forms/validators.py
new file mode 100644
index 0000000000..becf4e2825
--- /dev/null
+++ b/tests/regressiontests/forms/validators.py
@@ -0,0 +1,34 @@
+from unittest import TestCase
+
+from django import forms
+from django.core import validators
+from django.core.exceptions import ValidationError
+
+class AlwaysFailingValidator(validators.ComplexValidator):
+ def __call__(self, value, all_values={}, obj=None):
+ raise ValidationError('AlwaysFailingValidator')
+
+class TestFieldWithValidators(TestCase):
+ def test_all_errors_get_reported(self):
+ field = forms.CharField(
+ validators=[validators.validate_integer, validators.validate_email,]
+ )
+ self.assertRaises(ValidationError, field.clean, 'not int nor mail')
+ try:
+ field.clean('not int nor mail')
+ except ValidationError, e:
+ self.assertEqual(2, len(e.messages))
+
+class TestFormWithValidators(TestCase):
+ def test_all_complex_validators_get_run_even_if_they_fail(self):
+ class MyForm(forms.Form):
+ validator_field = forms.CharField(
+ validators=[
+ AlwaysFailingValidator(),
+ AlwaysFailingValidator(),
+ ]
+ )
+ form = MyForm({'validator_field': 'some value'})
+ self.assertFalse(form.is_valid())
+ self.assertEqual(['validator_field'], form.errors.keys())
+ self.assertEqual(['AlwaysFailingValidator', 'AlwaysFailingValidator'], form.errors['validator_field'])