Author: Alex
Date: 2010-11-19 13:34:17 -0600 (Fri, 19 Nov 2010)
New Revision: 14627
Added:
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavor/utils.py
Modified:
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavor/de.py
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavortests.py
django/branches/releases/1.2.X/tests/regressiontests/forms/tests/__init__.py
Log:
[1.2.X] Began converting localflavor doctests into unittests, starting with the
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. Backport of [14626].
Modified:
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavor/de.py
===================================================================
---
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavor/de.py
2010-11-19 19:33:07 UTC (rev 14626)
+++
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavor/de.py
2010-11-19 19:34:17 UTC (rev 14627)
@@ -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)
Added:
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavor/utils.py
===================================================================
---
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavor/utils.py
(rev 0)
+++
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavor/utils.py
2010-11-19 19:34:17 UTC (rev 14627)
@@ -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'')
Modified:
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavortests.py
===================================================================
---
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavortests.py
2010-11-19 19:33:07 UTC (rev 14626)
+++
django/branches/releases/1.2.X/tests/regressiontests/forms/localflavortests.py
2010-11-19 19:34:17 UTC (rev 14627)
@@ -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
@@ -39,7 +39,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,
@@ -61,7 +60,3 @@
'localflavor_uy_tests': localflavor_uy_tests,
'localflavor_za_tests': localflavor_za_tests,
}
-
-if __name__ == "__main__":
- import doctest
- doctest.testmod()
Modified:
django/branches/releases/1.2.X/tests/regressiontests/forms/tests/__init__.py
===================================================================
---
django/branches/releases/1.2.X/tests/regressiontests/forms/tests/__init__.py
2010-11-19 19:33:07 UTC (rev 14626)
+++
django/branches/releases/1.2.X/tests/regressiontests/forms/tests/__init__.py
2010-11-19 19:34:17 UTC (rev 14627)
@@ -11,4 +11,4 @@
from validators import TestFieldWithValidators
from widgets import *
-from regressiontests.forms.localflavortests import __test__
+from regressiontests.forms.localflavortests import __test__, DELocalFlavorTests
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.