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.

Reply via email to