Author: russellm
Date: 2011-08-22 19:32:37 -0700 (Mon, 22 Aug 2011)
New Revision: 16653

Removed:
   django/trunk/tests/regressiontests/forms/localflavor/utils.py
Modified:
   django/trunk/django/test/testcases.py
   django/trunk/docs/topics/testing.txt
   django/trunk/tests/regressiontests/forms/localflavor/__init__.py
   django/trunk/tests/regressiontests/forms/localflavor/ar.py
   django/trunk/tests/regressiontests/forms/localflavor/at.py
   django/trunk/tests/regressiontests/forms/localflavor/au.py
   django/trunk/tests/regressiontests/forms/localflavor/be.py
   django/trunk/tests/regressiontests/forms/localflavor/br.py
   django/trunk/tests/regressiontests/forms/localflavor/ca.py
   django/trunk/tests/regressiontests/forms/localflavor/ch.py
   django/trunk/tests/regressiontests/forms/localflavor/cl.py
   django/trunk/tests/regressiontests/forms/localflavor/cn.py
   django/trunk/tests/regressiontests/forms/localflavor/co.py
   django/trunk/tests/regressiontests/forms/localflavor/cz.py
   django/trunk/tests/regressiontests/forms/localflavor/de.py
   django/trunk/tests/regressiontests/forms/localflavor/ec.py
   django/trunk/tests/regressiontests/forms/localflavor/es.py
   django/trunk/tests/regressiontests/forms/localflavor/fi.py
   django/trunk/tests/regressiontests/forms/localflavor/fr.py
   django/trunk/tests/regressiontests/forms/localflavor/gb.py
   django/trunk/tests/regressiontests/forms/localflavor/generic.py
   django/trunk/tests/regressiontests/forms/localflavor/hr.py
   django/trunk/tests/regressiontests/forms/localflavor/id.py
   django/trunk/tests/regressiontests/forms/localflavor/ie.py
   django/trunk/tests/regressiontests/forms/localflavor/il.py
   django/trunk/tests/regressiontests/forms/localflavor/in_.py
   django/trunk/tests/regressiontests/forms/localflavor/is_.py
   django/trunk/tests/regressiontests/forms/localflavor/it.py
   django/trunk/tests/regressiontests/forms/localflavor/jp.py
   django/trunk/tests/regressiontests/forms/localflavor/kw.py
   django/trunk/tests/regressiontests/forms/localflavor/mk.py
   django/trunk/tests/regressiontests/forms/localflavor/mx.py
   django/trunk/tests/regressiontests/forms/localflavor/nl.py
   django/trunk/tests/regressiontests/forms/localflavor/pl.py
   django/trunk/tests/regressiontests/forms/localflavor/pt.py
   django/trunk/tests/regressiontests/forms/localflavor/py.py
   django/trunk/tests/regressiontests/forms/localflavor/ro.py
   django/trunk/tests/regressiontests/forms/localflavor/ru.py
   django/trunk/tests/regressiontests/forms/localflavor/se.py
   django/trunk/tests/regressiontests/forms/localflavor/sk.py
   django/trunk/tests/regressiontests/forms/localflavor/us.py
   django/trunk/tests/regressiontests/forms/localflavor/uy.py
   django/trunk/tests/regressiontests/forms/localflavor/za.py
   django/trunk/tests/regressiontests/forms/localflavortests.py
   django/trunk/tests/regressiontests/forms/tests/__init__.py
   django/trunk/tests/regressiontests/test_utils/tests.py
Log:
Fixed #15838 -- Promoted assertFieldOutput to a general test utility. Thanks to 
Ramiro Morales for the patch.

Modified: django/trunk/django/test/testcases.py
===================================================================
--- django/trunk/django/test/testcases.py       2011-08-23 01:41:47 UTC (rev 
16652)
+++ django/trunk/django/test/testcases.py       2011-08-23 02:32:37 UTC (rev 
16653)
@@ -8,11 +8,14 @@
 
 from django.conf import settings
 from django.core import mail
+from django.core.exceptions import ValidationError
 from django.core.management import call_command
 from django.core.signals import request_started
 from django.core.urlresolvers import clear_url_caches
+from django.core.validators import EMPTY_VALUES
 from django.db import (transaction, connection, connections, DEFAULT_DB_ALIAS,
     reset_queries)
+from django.forms.fields import CharField
 from django.http import QueryDict
 from django.test import _doctest as doctest
 from django.test.client import Client
@@ -271,6 +274,53 @@
         return self.assertRaisesRegexp(expected_exception,
                 re.escape(expected_message), callable_obj, *args, **kwargs)
 
+    def assertFieldOutput(self, fieldclass, valid, invalid, field_args=None,
+            field_kwargs=None, empty_value=u''):
+        """
+        Asserts that a form 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.
+            field_args: the args passed to instantiate the field
+            field_kwargs: the kwargs passed to instantiate the field
+            empty_value: the expected clean output for inputs in EMPTY_VALUES
+
+        """
+        if field_args is None:
+            field_args = []
+        if field_kwargs is None:
+            field_kwargs = {}
+        required = fieldclass(*field_args, **field_kwargs)
+        optional = fieldclass(*field_args, **dict(field_kwargs, 
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():
+            with self.assertRaises(ValidationError) as context_manager:
+                required.clean(input)
+            self.assertEqual(context_manager.exception.messages, errors)
+
+            with self.assertRaises(ValidationError) as context_manager:
+                optional.clean(input)
+            self.assertEqual(context_manager.exception.messages, errors)
+        # test required inputs
+        error_required = [u'This field is required.']
+        for e in EMPTY_VALUES:
+            with self.assertRaises(ValidationError) as context_manager:
+                required.clean(e)
+            self.assertEqual(context_manager.exception.messages, 
error_required)
+            self.assertEqual(optional.clean(e), empty_value)
+        # test that max_length and min_length are always accepted
+        if issubclass(fieldclass, CharField):
+            field_kwargs.update({'min_length':2, 'max_length':20})
+            self.assertTrue(isinstance(fieldclass(*field_args, 
**field_kwargs), fieldclass))
+
 class TransactionTestCase(SimpleTestCase):
     # The class we'll use for the test client self.client.
     # Can be overridden in derived classes.
@@ -356,8 +406,8 @@
         # be created with the wrong time).
         # To make sure this doesn't happen, get a clean connection at the
         # start of every test.
-        for connection in connections.all():
-            connection.close()
+        for conn in connections.all():
+            conn.close()
 
     def _fixture_teardown(self):
         pass
@@ -552,9 +602,9 @@
 
     def assertNumQueries(self, num, func=None, *args, **kwargs):
         using = kwargs.pop("using", DEFAULT_DB_ALIAS)
-        connection = connections[using]
+        conn = connections[using]
 
-        context = _AssertNumQueriesContext(self, num, connection)
+        context = _AssertNumQueriesContext(self, num, conn)
         if func is None:
             return context
 

Modified: django/trunk/docs/topics/testing.txt
===================================================================
--- django/trunk/docs/topics/testing.txt        2011-08-23 01:41:47 UTC (rev 
16652)
+++ django/trunk/docs/topics/testing.txt        2011-08-23 02:32:37 UTC (rev 
16653)
@@ -1178,6 +1178,7 @@
 
  * Saving and restoring the Python warning machinery state.
  * Checking that a callable :meth:`raises a certain exeception 
<TestCase.assertRaisesMessage>`.
+ * :meth:`Testing form field rendering <assertFieldOutput>`.
 
 If you need any of the other more complex and heavyweight Django-specific
 features like:
@@ -1523,6 +1524,26 @@
     failure. Similar to unittest's ``assertRaisesRegexp`` with the difference
     that ``expected_message`` isn't a regular expression.
 
+.. method:: assertFieldOutput(self, fieldclass, valid, invalid, 
field_args=None, field_kwargs=None, empty_value=u'')
+
+    Asserts that a form field behaves correctly with various inputs.
+
+    :param fieldclass: the class of the field to be tested.
+    :param valid: a dictionary mapping valid inputs to their expected cleaned
+        values.
+    :param invalid: a dictionary mapping invalid inputs to one or more raised
+        error messages.
+    :param field_args: the args passed to instantiate the field.
+    :param field_kwargs: the kwargs passed to instantiate the field.
+    :param empty_value: the expected clean output for inputs in 
``EMPTY_VALUES``.
+
+    For example, the following code tests that an ``EmailField`` accepts
+    "[email protected]" as a valid email address, but rejects "aaa" with a reasonable
+    error message::
+
+        self.assertFieldOutput(EmailField, {'[email protected]': '[email protected]'}, 
{'aaa': [u'Enter a valid e-mail address.']})
+
+
 .. method:: TestCase.assertContains(response, text, count=None, 
status_code=200, msg_prefix='')
 
     Asserts that a ``Response`` instance produced the given ``status_code`` and

Modified: django/trunk/tests/regressiontests/forms/localflavor/__init__.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/__init__.py    
2011-08-23 01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/__init__.py    
2011-08-23 02:32:37 UTC (rev 16653)
@@ -1,11 +1 @@
-from django.forms import EmailField
-from utils import LocalFlavorTestCase
-
-class AssertFieldOutputTests(LocalFlavorTestCase):
-
-    def test_assert_field_output(self):
-        error_invalid = [u'Enter a valid e-mail address.']
-        self.assertFieldOutput(EmailField, {'[email protected]': '[email protected]'}, 
{'aaa': error_invalid})
-        self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, 
{'[email protected]': '[email protected]'}, {'aaa': error_invalid + [u'Another error']})
-        self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, 
{'[email protected]': 'Wrong output'}, {'aaa': error_invalid})
-        self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, 
{'[email protected]': '[email protected]'}, {'aaa': [u'Come on, gimme some well formatted 
data, dude.']})
+#

Modified: django/trunk/tests/regressiontests/forms/localflavor/ar.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/ar.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/ar.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.ar.forms import (ARProvinceSelect,
     ARPostalCodeField, ARDNIField, ARCUITField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class ARLocalFlavorTests(LocalFlavorTestCase):
+class ARLocalFlavorTests(SimpleTestCase):
     def test_ARProvinceSelect(self):
         f = ARProvinceSelect()
         out = u'''<select name="provincias">

Modified: django/trunk/tests/regressiontests/forms/localflavor/at.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/at.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/at.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.at.forms import (ATZipCodeField, ATStateSelect,
     ATSocialSecurityNumberField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class ATLocalFlavorTests(LocalFlavorTestCase):
+class ATLocalFlavorTests(SimpleTestCase):
     def test_ATStateSelect(self):
         f = ATStateSelect()
         out = u'''<select name="bundesland">

Modified: django/trunk/tests/regressiontests/forms/localflavor/au.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/au.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/au.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.au.forms import (AUPostCodeField,
         AUPhoneNumberField, AUStateSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class AULocalFlavorTests(LocalFlavorTestCase):
+class AULocalFlavorTests(SimpleTestCase):
     def test_AUStateSelect(self):
         f = AUStateSelect()
         out = u'''<select name="state">

Modified: django/trunk/tests/regressiontests/forms/localflavor/be.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/be.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/be.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.be.forms import (BEPostalCodeField,
     BEPhoneNumberField, BERegionSelect, BEProvinceSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class BELocalFlavorTests(LocalFlavorTestCase):
+class BELocalFlavorTests(SimpleTestCase):
     def test_BEPostalCodeField(self):
         error_format = [u'Enter a valid postal code in the range and format 
1XXX - 9XXX.']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavor/br.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/br.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/br.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -2,10 +2,10 @@
     BRCNPJField, BRCPFField, BRPhoneNumberField, BRStateSelect,
     BRStateChoiceField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class BRLocalFlavorTests(LocalFlavorTestCase):
+class BRLocalFlavorTests(SimpleTestCase):
     def test_BRZipCodeField(self):
         error_format = [u'Enter a zip code in the format XXXXX-XXX.']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavor/ca.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/ca.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/ca.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -4,10 +4,10 @@
         CAPhoneNumberField, CAProvinceField, CAProvinceSelect,
         CASocialInsuranceNumberField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class CALocalFlavorTests(LocalFlavorTestCase):
+class CALocalFlavorTests(SimpleTestCase):
     def setUp(self):
         self.save_warnings_state()
         warnings.filterwarnings(

Modified: django/trunk/tests/regressiontests/forms/localflavor/ch.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/ch.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/ch.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.ch.forms import (CHZipCodeField,
     CHPhoneNumberField, CHIdentityCardNumberField, CHStateSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class CHLocalFlavorTests(LocalFlavorTestCase):
+class CHLocalFlavorTests(SimpleTestCase):
     def test_CHStateSelect(self):
         f = CHStateSelect()
         out = u'''<select name="state">

Modified: django/trunk/tests/regressiontests/forms/localflavor/cl.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/cl.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/cl.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,9 +1,9 @@
 from django.contrib.localflavor.cl.forms import CLRutField, CLRegionSelect
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class CLLocalFlavorTests(LocalFlavorTestCase):
+class CLLocalFlavorTests(SimpleTestCase):
     def test_CLRegionSelect(self):
         f = CLRegionSelect()
         out = u'''<select name="foo">

Modified: django/trunk/tests/regressiontests/forms/localflavor/cn.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/cn.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/cn.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -2,9 +2,9 @@
 
 from django.contrib.localflavor.cn.forms import (CNProvinceSelect,
         CNPostCodeField, CNIDCardField, CNPhoneNumberField, CNCellNumberField)
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
-class CNLocalFlavorTests(LocalFlavorTestCase):
+class CNLocalFlavorTests(SimpleTestCase):
     def test_CNProvinceSelect(self):
         f = CNProvinceSelect()
         correct_output = u'''<select name="provinces">

Modified: django/trunk/tests/regressiontests/forms/localflavor/co.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/co.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/co.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,8 +1,8 @@
 from django.contrib.localflavor.co.forms import CODepartmentSelect
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
-class COLocalFlavorTests(LocalFlavorTestCase):
+class COLocalFlavorTests(SimpleTestCase):
     def test_CODepartmentSelect(self):
         d = CODepartmentSelect()
         out = u"""<select name="department">

Modified: django/trunk/tests/regressiontests/forms/localflavor/cz.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/cz.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/cz.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -4,10 +4,10 @@
     CZRegionSelect, CZBirthNumberField, CZICNumberField)
 
 from django.core.exceptions import ValidationError
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class CZLocalFlavorTests(LocalFlavorTestCase):
+class CZLocalFlavorTests(SimpleTestCase):
     def setUp(self):
         self.save_warnings_state()
         warnings.filterwarnings(

Modified: django/trunk/tests/regressiontests/forms/localflavor/de.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/de.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/de.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.de.forms import (DEZipCodeField, DEStateSelect,
     DEIdentityCardNumberField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class DELocalFlavorTests(LocalFlavorTestCase):
+class DELocalFlavorTests(SimpleTestCase):
     def test_DEStateSelect(self):
         f = DEStateSelect()
         out = u'''<select name="states">

Modified: django/trunk/tests/regressiontests/forms/localflavor/ec.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/ec.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/ec.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,8 +1,8 @@
 from django.contrib.localflavor.ec.forms import ECProvinceSelect
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
-class ECLocalFlavorTests(LocalFlavorTestCase):
+class ECLocalFlavorTests(SimpleTestCase):
     def test_ECProvinceSelect(self):
         p = ECProvinceSelect()
         out = u"""<select name="province">

Modified: django/trunk/tests/regressiontests/forms/localflavor/es.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/es.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/es.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.es.forms import (ESPostalCodeField, 
ESPhoneNumberField,
     ESIdentityCardNumberField, ESCCCField, ESRegionSelect, ESProvinceSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class ESLocalFlavorTests(LocalFlavorTestCase):
+class ESLocalFlavorTests(SimpleTestCase):
     def test_ESRegionSelect(self):
         f = ESRegionSelect()
         out = u'''<select name="regions">

Modified: django/trunk/tests/regressiontests/forms/localflavor/fi.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/fi.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/fi.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.fi.forms import (FIZipCodeField,
     FISocialSecurityNumber, FIMunicipalitySelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class FILocalFlavorTests(LocalFlavorTestCase):
+class FILocalFlavorTests(SimpleTestCase):
     def test_FIMunicipalitySelect(self):
         f = FIMunicipalitySelect()
         out = u'''<select name="municipalities">

Modified: django/trunk/tests/regressiontests/forms/localflavor/fr.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/fr.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/fr.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.fr.forms import (FRZipCodeField,
         FRPhoneNumberField, FRDepartmentSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class FRLocalFlavorTests(LocalFlavorTestCase):
+class FRLocalFlavorTests(SimpleTestCase):
     def test_FRZipCodeField(self):
         error_format = [u'Enter a zip code in the format XXXXX.']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavor/gb.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/gb.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/gb.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,9 +1,9 @@
 from django.contrib.localflavor.gb.forms import GBPostcodeField
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class GBLocalFlavorTests(LocalFlavorTestCase):
+class GBLocalFlavorTests(SimpleTestCase):
     def test_GBPostcodeField(self):
         error_invalid = [u'Enter a valid postcode.']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavor/generic.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/generic.py     
2011-08-23 01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/generic.py     
2011-08-23 02:32:37 UTC (rev 16653)
@@ -2,10 +2,10 @@
 
 from django.contrib.localflavor.generic.forms import DateField, DateTimeField
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class GenericLocalFlavorTests(LocalFlavorTestCase):
+class GenericLocalFlavorTests(SimpleTestCase):
     def test_GenericDateField(self):
         error_invalid = [u'Enter a valid date.']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavor/hr.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/hr.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/hr.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -4,9 +4,9 @@
     HRLicensePlateField, HRPostalCodeField, HROIBField, HRJMBGField,
     HRJMBAGField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
-class HRLocalFlavorTests(LocalFlavorTestCase):
+class HRLocalFlavorTests(SimpleTestCase):
     def test_HRCountySelect(self):
         f = HRCountySelect()
         out = u'''<select name="county">

Modified: django/trunk/tests/regressiontests/forms/localflavor/id.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/id.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/id.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -4,10 +4,10 @@
     IDPostCodeField, IDNationalIdentityNumberField, IDLicensePlateField,
     IDProvinceSelect, IDLicensePlatePrefixSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class IDLocalFlavorTests(LocalFlavorTestCase):
+class IDLocalFlavorTests(SimpleTestCase):
     def setUp(self):
         self.save_warnings_state()
         warnings.filterwarnings(

Modified: django/trunk/tests/regressiontests/forms/localflavor/ie.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/ie.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/ie.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,9 +1,9 @@
 from django.contrib.localflavor.ie.forms import IECountySelect
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class IELocalFlavorTests(LocalFlavorTestCase):
+class IELocalFlavorTests(SimpleTestCase):
     def test_IECountySelect(self):
         f = IECountySelect()
         out = u'''<select name="counties">

Modified: django/trunk/tests/regressiontests/forms/localflavor/il.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/il.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/il.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.il.forms import (ILPostalCodeField,
     ILIDNumberField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class ILLocalFlavorTests(LocalFlavorTestCase):
+class ILLocalFlavorTests(SimpleTestCase):
     def test_ILPostalCodeField(self):
         error_format = [u'Enter a postal code in the format XXXXX']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavor/in_.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/in_.py 2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/in_.py 2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,11 +1,11 @@
 from django.contrib.localflavor.in_.forms import (INZipCodeField,
     INStateField, INStateSelect, INPhoneNumberField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
 
-class INLocalFlavorTests(LocalFlavorTestCase):
+class INLocalFlavorTests(SimpleTestCase):
     def test_INPhoneNumberField(self):
         error_format = [u'Phone numbers must be in 02X-8X or 03X-7X or 04X-6X 
format.']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavor/is_.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/is_.py 2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/is_.py 2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.is_.forms import (ISIdNumberField,
     ISPhoneNumberField, ISPostalCodeSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class ISLocalFlavorTests(LocalFlavorTestCase):
+class ISLocalFlavorTests(SimpleTestCase):
     def test_ISPostalCodeSelect(self):
         f = ISPostalCodeSelect()
         out = u'''<select name="foo">

Modified: django/trunk/tests/regressiontests/forms/localflavor/it.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/it.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/it.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.it.forms import (ITZipCodeField, 
ITRegionSelect,
     ITSocialSecurityNumberField, ITVatNumberField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class ITLocalFlavorTests(LocalFlavorTestCase):
+class ITLocalFlavorTests(SimpleTestCase):
     def test_ITRegionSelect(self):
         f = ITRegionSelect()
         out = u'''<select name="regions">

Modified: django/trunk/tests/regressiontests/forms/localflavor/jp.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/jp.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/jp.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.jp.forms import (JPPostalCodeField,
     JPPrefectureSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class JPLocalFlavorTests(LocalFlavorTestCase):
+class JPLocalFlavorTests(SimpleTestCase):
     def test_JPPrefectureSelect(self):
         f = JPPrefectureSelect()
         out = u'''<select name="prefecture">

Modified: django/trunk/tests/regressiontests/forms/localflavor/kw.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/kw.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/kw.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,9 +1,9 @@
 from django.contrib.localflavor.kw.forms import KWCivilIDNumberField
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class KWLocalFlavorTests(LocalFlavorTestCase):
+class KWLocalFlavorTests(SimpleTestCase):
     def test_KWCivilIDNumberField(self):
         error_invalid = [u'Enter a valid Kuwaiti Civil ID number']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavor/mk.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/mk.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/mk.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.mk.forms import (
     MKIdentityCardNumberField, MKMunicipalitySelect, UMCNField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class MKLocalFlavorTests(LocalFlavorTestCase):
+class MKLocalFlavorTests(SimpleTestCase):
 
     def test_MKIdentityCardNumberField(self):
         error_invalid  = [u'Identity card numbers must contain either 4 to 7 '

Modified: django/trunk/tests/regressiontests/forms/localflavor/mx.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/mx.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/mx.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -2,10 +2,10 @@
 from django.contrib.localflavor.mx.forms import (MXZipCodeField, MXRFCField,
     MXStateSelect, MXCURPField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class MXLocalFlavorTests(LocalFlavorTestCase):
+class MXLocalFlavorTests(SimpleTestCase):
     def test_MXStateSelect(self):
         f = MXStateSelect()
         out = u'''<select name="state">

Modified: django/trunk/tests/regressiontests/forms/localflavor/nl.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/nl.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/nl.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.nl.forms import (NLPhoneNumberField,
     NLZipCodeField, NLSoFiNumberField, NLProvinceSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class NLLocalFlavorTests(LocalFlavorTestCase):
+class NLLocalFlavorTests(SimpleTestCase):
     def test_NLProvinceSelect(self):
         f = NLProvinceSelect()
         out = u'''<select name="provinces">

Modified: django/trunk/tests/regressiontests/forms/localflavor/pl.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/pl.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/pl.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.pl.forms import (PLProvinceSelect,
     PLCountySelect, PLPostalCodeField, PLNIPField, PLPESELField, 
PLNationalIDCardNumberField, PLREGONField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class PLLocalFlavorTests(LocalFlavorTestCase):
+class PLLocalFlavorTests(SimpleTestCase):
     def test_PLProvinceSelect(self):
         f = PLProvinceSelect()
         out = u'''<select name="voivodeships">

Modified: django/trunk/tests/regressiontests/forms/localflavor/pt.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/pt.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/pt.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,9 +1,9 @@
 from django.contrib.localflavor.pt.forms import PTZipCodeField, 
PTPhoneNumberField
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class PTLocalFlavorTests(LocalFlavorTestCase):
+class PTLocalFlavorTests(SimpleTestCase):
     def test_PTZipCodeField(self):
         error_format = [u'Enter a zip code in the format XXXX-XXX.']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavor/py.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/py.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/py.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,9 +1,9 @@
 from django.contrib.localflavor.py.forms import (PyDepartmentSelect,
     PyNumberedDepartmentSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
-class PYLocalFlavorTests(LocalFlavorTestCase):
+class PYLocalFlavorTests(SimpleTestCase):
     def test_PyDepartmentSelect(self):
         py = PyDepartmentSelect()
         out = u'''<select name="department">

Modified: django/trunk/tests/regressiontests/forms/localflavor/ro.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/ro.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/ro.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -3,10 +3,10 @@
     ROCountyField, ROCountySelect, ROIBANField, ROPhoneNumberField,
     ROPostalCodeField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class ROLocalFlavorTests(LocalFlavorTestCase):
+class ROLocalFlavorTests(SimpleTestCase):
     def test_ROCountySelect(self):
         f = ROCountySelect()
         out = u'''<select name="county">

Modified: django/trunk/tests/regressiontests/forms/localflavor/ru.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/ru.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/ru.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,9 +1,9 @@
 from django.contrib.localflavor.ru.forms import *
  
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class RULocalFlavorTests(LocalFlavorTestCase):
+class RULocalFlavorTests(SimpleTestCase):
 
     def test_RUPassportNumberField(self):
         error = [u'Enter a passport number in the format XXXX XXXXXX.']

Modified: django/trunk/tests/regressiontests/forms/localflavor/se.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/se.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/se.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -4,10 +4,10 @@
     SEPostalCodeField)
 import datetime
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class SELocalFlavorTests(LocalFlavorTestCase):
+class SELocalFlavorTests(SimpleTestCase):
 
     def setUp(self):
         # Mocking datetime.date to make sure

Modified: django/trunk/tests/regressiontests/forms/localflavor/sk.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/sk.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/sk.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.sk.forms import (SKRegionSelect,
     SKPostalCodeField, SKDistrictSelect)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class SKLocalFlavorTests(LocalFlavorTestCase):
+class SKLocalFlavorTests(SimpleTestCase):
     def test_SKRegionSelect(self):
         f = SKRegionSelect()
         out = u'''<select name="regions">

Modified: django/trunk/tests/regressiontests/forms/localflavor/us.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/us.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/us.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.us.forms import (USZipCodeField,
     USPhoneNumberField, USStateField, USStateSelect, 
USSocialSecurityNumberField)
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class USLocalFlavorTests(LocalFlavorTestCase):
+class USLocalFlavorTests(SimpleTestCase):
     def test_USStateSelect(self):
         f = USStateSelect()
         out = u'''<select name="state">

Deleted: django/trunk/tests/regressiontests/forms/localflavor/utils.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/utils.py       
2011-08-23 01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/utils.py       
2011-08-23 02:32:37 UTC (rev 16653)
@@ -1,64 +0,0 @@
-from __future__ import with_statement
-
-from django.core.exceptions import ValidationError
-from django.core.validators import EMPTY_VALUES
-from django.forms.fields import CharField
-from django.test.utils import get_warnings_state, restore_warnings_state
-from django.utils.unittest import TestCase
-
-
-class LocalFlavorTestCase(TestCase):
-    # NOTE: These are copied from the TestCase Django uses for tests which
-    # access the database
-    def save_warnings_state(self):
-        self._warnings_state = get_warnings_state()
-
-    def restore_warnings_state(self):
-        restore_warnings_state(self._warnings_state)
-
-    def assertFieldOutput(self, fieldclass, valid, invalid, field_args=None,
-            field_kwargs=None, empty_value=u''):
-        """
-        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.
-            field_args: the args passed to instantiate the field
-            field_kwargs: the kwargs passed to instantiate the field
-            empty_value: the expected clean output for inputs in EMPTY_VALUES
-
-        """
-        if field_args is None:
-            field_args = []
-        if field_kwargs is None:
-            field_kwargs = {}
-        required = fieldclass(*field_args, **field_kwargs)
-        optional = fieldclass(*field_args, **dict(field_kwargs, 
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():
-            with self.assertRaises(ValidationError) as context_manager:
-                required.clean(input)
-            self.assertEqual(context_manager.exception.messages, errors)
-
-            with self.assertRaises(ValidationError) as context_manager:
-                optional.clean(input)
-            self.assertEqual(context_manager.exception.messages, errors)
-        # test required inputs
-        error_required = [u'This field is required.']
-        for e in EMPTY_VALUES:
-            with self.assertRaises(ValidationError) as context_manager:
-                required.clean(e)
-            self.assertEqual(context_manager.exception.messages, 
error_required)
-            self.assertEqual(optional.clean(e), empty_value)
-        # test that max_length and min_length are always accepted
-        if issubclass(fieldclass, CharField):
-            field_kwargs.update({'min_length':2, 'max_length':20})
-            self.assertTrue(isinstance(fieldclass(*field_args, 
**field_kwargs), fieldclass))

Modified: django/trunk/tests/regressiontests/forms/localflavor/uy.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/uy.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/uy.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,10 +1,10 @@
 from django.contrib.localflavor.uy.forms import UYDepartamentSelect, UYCIField
 from django.contrib.localflavor.uy.util import get_validation_digit
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class UYLocalFlavorTests(LocalFlavorTestCase):
+class UYLocalFlavorTests(SimpleTestCase):
     def test_UYDepartmentSelect(self):
         f = UYDepartamentSelect()
         out = u'''<select name="departamentos">

Modified: django/trunk/tests/regressiontests/forms/localflavor/za.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavor/za.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavor/za.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,9 +1,9 @@
 from django.contrib.localflavor.za.forms import ZAIDField, ZAPostCodeField
 
-from utils import LocalFlavorTestCase
+from django.test import SimpleTestCase
 
 
-class ZALocalFlavorTests(LocalFlavorTestCase):
+class ZALocalFlavorTests(SimpleTestCase):
     def test_ZAIDField(self):
         error_invalid = [u'Enter a valid South African ID number']
         valid = {

Modified: django/trunk/tests/regressiontests/forms/localflavortests.py
===================================================================
--- django/trunk/tests/regressiontests/forms/localflavortests.py        
2011-08-23 01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/localflavortests.py        
2011-08-23 02:32:37 UTC (rev 16653)
@@ -1,4 +1,3 @@
-from localflavor import AssertFieldOutputTests
 from localflavor.ar import ARLocalFlavorTests
 from localflavor.at import ATLocalFlavorTests
 from localflavor.au import AULocalFlavorTests

Modified: django/trunk/tests/regressiontests/forms/tests/__init__.py
===================================================================
--- django/trunk/tests/regressiontests/forms/tests/__init__.py  2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/forms/tests/__init__.py  2011-08-23 
02:32:37 UTC (rev 16653)
@@ -53,5 +53,4 @@
     USLocalFlavorTests,
     UYLocalFlavorTests,
     ZALocalFlavorTests,
-    AssertFieldOutputTests,
 )

Modified: django/trunk/tests/regressiontests/test_utils/tests.py
===================================================================
--- django/trunk/tests/regressiontests/test_utils/tests.py      2011-08-23 
01:41:47 UTC (rev 16652)
+++ django/trunk/tests/regressiontests/test_utils/tests.py      2011-08-23 
02:32:37 UTC (rev 16653)
@@ -1,5 +1,6 @@
 from __future__ import with_statement
 
+from django.forms import EmailField
 from django.test import SimpleTestCase, TestCase, skipUnlessDBFeature
 from django.utils.unittest import skip
 
@@ -139,6 +140,16 @@
         self.assertRaisesMessage(ValueError, "[.*x+]y?", func1)
 
 
+class AssertFieldOutputTests(SimpleTestCase):
+
+    def test_assert_field_output(self):
+        error_invalid = [u'Enter a valid e-mail address.']
+        self.assertFieldOutput(EmailField, {'[email protected]': '[email protected]'}, 
{'aaa': error_invalid})
+        self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, 
{'[email protected]': '[email protected]'}, {'aaa': error_invalid + [u'Another error']})
+        self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, 
{'[email protected]': 'Wrong output'}, {'aaa': error_invalid})
+        self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, 
{'[email protected]': '[email protected]'}, {'aaa': [u'Come on, gimme some well formatted 
data, dude.']})
+
+
 __test__ = {"API_TEST": r"""
 # Some checks of the doctest output normalizer.
 # Standard doctests do fairly

-- 
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