Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Began converting localflavor doctests into unittests, starting with t…

…he German ones. Also introduced a new base class to facilitate ease of testing form fields. We have always been at war with doctests. Thanks to Idan Gazit for the patch.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14626 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit a3e7ee7c4037a390d6ab24932e53682d1c394191 1 parent 59c84b4
Alex Gaynor alex authored
74 tests/regressiontests/forms/localflavor/de.py
View
@@ -1,35 +1,49 @@
-# -*- coding: utf-8 -*-
-# Tests for the contrib/localflavor/ DE form fields.
+from django.contrib.localflavor.de.forms import (DEZipCodeField, DEStateSelect,
+ DEIdentityCardNumberField)
-tests = r"""
-# DEZipCodeField ##############################################################
+from utils import LocalFlavorTestCase
->>> from django.contrib.localflavor.de.forms import DEZipCodeField
->>> f = DEZipCodeField()
->>> f.clean('99423')
-u'99423'
->>> f.clean(' 99423')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a zip code in the format XXXXX.']
-# DEStateSelect #############################################################
+class DELocalFlavorTests(LocalFlavorTestCase):
+ def test_DEStateSelect(self):
+ f = DEStateSelect()
+ out = u'''<select name="states">
+<option value="BW">Baden-Wuerttemberg</option>
+<option value="BY">Bavaria</option>
+<option value="BE">Berlin</option>
+<option value="BB">Brandenburg</option>
+<option value="HB">Bremen</option>
+<option value="HH">Hamburg</option>
+<option value="HE">Hessen</option>
+<option value="MV">Mecklenburg-Western Pomerania</option>
+<option value="NI">Lower Saxony</option>
+<option value="NW">North Rhine-Westphalia</option>
+<option value="RP">Rhineland-Palatinate</option>
+<option value="SL">Saarland</option>
+<option value="SN">Saxony</option>
+<option value="ST">Saxony-Anhalt</option>
+<option value="SH">Schleswig-Holstein</option>
+<option value="TH" selected="selected">Thuringia</option>
+</select>'''
+ self.assertEqual(f.render('states', 'TH'), out)
->>> from django.contrib.localflavor.de.forms import DEStateSelect
->>> w = DEStateSelect()
->>> w.render('states', 'TH')
-u'<select name="states">\n<option value="BW">Baden-Wuerttemberg</option>\n<option value="BY">Bavaria</option>\n<option value="BE">Berlin</option>\n<option value="BB">Brandenburg</option>\n<option value="HB">Bremen</option>\n<option value="HH">Hamburg</option>\n<option value="HE">Hessen</option>\n<option value="MV">Mecklenburg-Western Pomerania</option>\n<option value="NI">Lower Saxony</option>\n<option value="NW">North Rhine-Westphalia</option>\n<option value="RP">Rhineland-Palatinate</option>\n<option value="SL">Saarland</option>\n<option value="SN">Saxony</option>\n<option value="ST">Saxony-Anhalt</option>\n<option value="SH">Schleswig-Holstein</option>\n<option value="TH" selected="selected">Thuringia</option>\n</select>'
+ def test_DEZipCodeField(self):
+ error_format = [u'Enter a zip code in the format XXXXX.']
+ valid = {
+ '99423': '99423',
+ }
+ invalid = {
+ ' 99423': error_format,
+ }
+ self.assertFieldOutput(DEZipCodeField, valid, invalid)
-# DEIdentityCardNumberField #################################################
-
->>> from django.contrib.localflavor.de.forms import DEIdentityCardNumberField
->>> f = DEIdentityCardNumberField()
->>> f.clean('7549313035D-6004103-0903042-0')
-u'7549313035D-6004103-0903042-0'
->>> f.clean('9786324830D 6104243 0910271 2')
-u'9786324830D-6104243-0910271-2'
->>> f.clean('0434657485D-6407276-0508137-9')
-Traceback (most recent call last):
-...
-ValidationError: [u'Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.']
-"""
+ def test_DEIdentityCardNumberField(self):
+ error_format = [u'Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.']
+ valid = {
+ '7549313035D-6004103-0903042-0': '7549313035D-6004103-0903042-0',
+ '9786324830D 6104243 0910271 2': '9786324830D-6104243-0910271-2',
+ }
+ invalid = {
+ '0434657485D-6407276-0508137-9': error_format,
+ }
+ self.assertFieldOutput(DEIdentityCardNumberField, valid, invalid)
38 tests/regressiontests/forms/localflavor/utils.py
View
@@ -0,0 +1,38 @@
+from django.core.exceptions import ValidationError
+from django.core.validators import EMPTY_VALUES
+from django.utils.unittest import TestCase
+
+
+class LocalFlavorTestCase(TestCase):
+ def assertFieldOutput(self, fieldclass, valid, invalid):
+ """Asserts that a field behaves correctly with various inputs.
+
+ Args:
+ fieldclass: the class of the field to be tested.
+ valid: a dictionary mapping valid inputs to their expected
+ cleaned values.
+ invalid: a dictionary mapping invalid inputs to one or more
+ raised error messages.
+ """
+
+ required = fieldclass()
+ optional = fieldclass(required=False)
+ # test valid inputs
+ for input, output in valid.items():
+ self.assertEqual(required.clean(input), output)
+ self.assertEqual(optional.clean(input), output)
+ # test invalid inputs
+ for input, errors in invalid.items():
+ self.assertRaisesRegexp(ValidationError, unicode(errors),
+ required.clean, input
+ )
+ self.assertRaisesRegexp(ValidationError, unicode(errors),
+ optional.clean, input
+ )
+ # test required inputs
+ error_required = u'This field is required'
+ for e in EMPTY_VALUES:
+ self.assertRaisesRegexp(ValidationError, error_required,
+ required.clean, e
+ )
+ self.assertEqual(optional.clean(e), u'')
7 tests/regressiontests/forms/localflavortests.py
View
@@ -7,7 +7,7 @@
from localflavor.ch import tests as localflavor_ch_tests
from localflavor.cl import tests as localflavor_cl_tests
from localflavor.cz import tests as localflavor_cz_tests
-from localflavor.de import tests as localflavor_de_tests
+from localflavor.de import DELocalFlavorTests
from localflavor.es import tests as localflavor_es_tests
from localflavor.fi import tests as localflavor_fi_tests
from localflavor.fr import tests as localflavor_fr_tests
@@ -41,7 +41,6 @@
'localflavor_ch_tests': localflavor_ch_tests,
'localflavor_cl_tests': localflavor_cl_tests,
'localflavor_cz_tests': localflavor_cz_tests,
- 'localflavor_de_tests': localflavor_de_tests,
'localflavor_es_tests': localflavor_es_tests,
'localflavor_fi_tests': localflavor_fi_tests,
'localflavor_fr_tests': localflavor_fr_tests,
@@ -63,7 +62,3 @@
'localflavor_uy_tests': localflavor_uy_tests,
'localflavor_za_tests': localflavor_za_tests,
}
-
-if __name__ == "__main__":
- import doctest
- doctest.testmod()
4 tests/regressiontests/forms/tests/__init__.py
View
@@ -11,5 +11,5 @@
from validators import TestFieldWithValidators
from widgets import *
-from regressiontests.forms.localflavortests import __test__
-from regressiontests.forms.localflavortests import BETests, IsraelLocalFlavorTests
+from regressiontests.forms.localflavortests import (__test__, BETests,
+ DELocalFlavorTests, IsraelLocalFlavorTests)
Please sign in to comment.
Something went wrong with that request. Please try again.