summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell Keith-Magee <russell@keith-magee.com>2011-08-23 02:32:37 +0000
committerRussell Keith-Magee <russell@keith-magee.com>2011-08-23 02:32:37 +0000
commit2664fa189614a4dbbfed5cb683148707ab568f47 (patch)
tree31a4924654e21d30b6b9f8cbc026c6771f1a79e6
parent46ef2983ba0434ee9c71385bc709b70a64b35060 (diff)
Fixed #15838 -- Promoted assertFieldOutput to a general test utility. Thanks to Ramiro Morales for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16653 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/test/testcases.py58
-rw-r--r--docs/topics/testing.txt21
-rw-r--r--tests/regressiontests/forms/localflavor/__init__.py12
-rw-r--r--tests/regressiontests/forms/localflavor/ar.py4
-rw-r--r--tests/regressiontests/forms/localflavor/at.py4
-rw-r--r--tests/regressiontests/forms/localflavor/au.py4
-rw-r--r--tests/regressiontests/forms/localflavor/be.py4
-rw-r--r--tests/regressiontests/forms/localflavor/br.py4
-rw-r--r--tests/regressiontests/forms/localflavor/ca.py4
-rw-r--r--tests/regressiontests/forms/localflavor/ch.py4
-rw-r--r--tests/regressiontests/forms/localflavor/cl.py4
-rw-r--r--tests/regressiontests/forms/localflavor/cn.py4
-rw-r--r--tests/regressiontests/forms/localflavor/co.py4
-rw-r--r--tests/regressiontests/forms/localflavor/cz.py4
-rw-r--r--tests/regressiontests/forms/localflavor/de.py4
-rw-r--r--tests/regressiontests/forms/localflavor/ec.py4
-rw-r--r--tests/regressiontests/forms/localflavor/es.py4
-rw-r--r--tests/regressiontests/forms/localflavor/fi.py4
-rw-r--r--tests/regressiontests/forms/localflavor/fr.py4
-rw-r--r--tests/regressiontests/forms/localflavor/gb.py4
-rw-r--r--tests/regressiontests/forms/localflavor/generic.py4
-rw-r--r--tests/regressiontests/forms/localflavor/hr.py4
-rw-r--r--tests/regressiontests/forms/localflavor/id.py4
-rw-r--r--tests/regressiontests/forms/localflavor/ie.py4
-rw-r--r--tests/regressiontests/forms/localflavor/il.py4
-rw-r--r--tests/regressiontests/forms/localflavor/in_.py4
-rw-r--r--tests/regressiontests/forms/localflavor/is_.py4
-rw-r--r--tests/regressiontests/forms/localflavor/it.py4
-rw-r--r--tests/regressiontests/forms/localflavor/jp.py4
-rw-r--r--tests/regressiontests/forms/localflavor/kw.py4
-rw-r--r--tests/regressiontests/forms/localflavor/mk.py4
-rw-r--r--tests/regressiontests/forms/localflavor/mx.py4
-rw-r--r--tests/regressiontests/forms/localflavor/nl.py4
-rw-r--r--tests/regressiontests/forms/localflavor/pl.py4
-rw-r--r--tests/regressiontests/forms/localflavor/pt.py4
-rw-r--r--tests/regressiontests/forms/localflavor/py.py4
-rw-r--r--tests/regressiontests/forms/localflavor/ro.py4
-rw-r--r--tests/regressiontests/forms/localflavor/ru.py4
-rw-r--r--tests/regressiontests/forms/localflavor/se.py4
-rw-r--r--tests/regressiontests/forms/localflavor/sk.py4
-rw-r--r--tests/regressiontests/forms/localflavor/us.py4
-rw-r--r--tests/regressiontests/forms/localflavor/utils.py64
-rw-r--r--tests/regressiontests/forms/localflavor/uy.py4
-rw-r--r--tests/regressiontests/forms/localflavor/za.py4
-rw-r--r--tests/regressiontests/forms/localflavortests.py1
-rw-r--r--tests/regressiontests/forms/tests/__init__.py1
-rw-r--r--tests/regressiontests/test_utils/tests.py11
47 files changed, 167 insertions, 161 deletions
diff --git a/django/test/testcases.py b/django/test/testcases.py
index 34edd15db7..4a9b0c3ee8 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -8,11 +8,14 @@ from xml.dom.minidom import parseString, Node
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 @@ class SimpleTestCase(ut2.TestCase):
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 @@ class TransactionTestCase(SimpleTestCase):
# 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 @@ class TransactionTestCase(SimpleTestCase):
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
diff --git a/docs/topics/testing.txt b/docs/topics/testing.txt
index 7bef4cb52f..eef5b138b1 100644
--- a/docs/topics/testing.txt
+++ b/docs/topics/testing.txt
@@ -1178,6 +1178,7 @@ basic functionality like:
* 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 @@ your test suite.
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
+ "a@a.com" as a valid email address, but rejects "aaa" with a reasonable
+ error message::
+
+ self.assertFieldOutput(EmailField, {'a@a.com': 'a@a.com'}, {'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
diff --git a/tests/regressiontests/forms/localflavor/__init__.py b/tests/regressiontests/forms/localflavor/__init__.py
index b324e07810..792d600548 100644
--- a/tests/regressiontests/forms/localflavor/__init__.py
+++ b/tests/regressiontests/forms/localflavor/__init__.py
@@ -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, {'a@a.com': 'a@a.com'}, {'aaa': error_invalid})
- self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'a@a.com'}, {'aaa': error_invalid + [u'Another error']})
- self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'Wrong output'}, {'aaa': error_invalid})
- self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'a@a.com'}, {'aaa': [u'Come on, gimme some well formatted data, dude.']})
+#
diff --git a/tests/regressiontests/forms/localflavor/ar.py b/tests/regressiontests/forms/localflavor/ar.py
index f0416e1a1d..fae78c9525 100644
--- a/tests/regressiontests/forms/localflavor/ar.py
+++ b/tests/regressiontests/forms/localflavor/ar.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/at.py b/tests/regressiontests/forms/localflavor/at.py
index 11e0cd4ec1..5a5b99b189 100644
--- a/tests/regressiontests/forms/localflavor/at.py
+++ b/tests/regressiontests/forms/localflavor/at.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/au.py b/tests/regressiontests/forms/localflavor/au.py
index ddf2b8eb6d..9a753d85e2 100644
--- a/tests/regressiontests/forms/localflavor/au.py
+++ b/tests/regressiontests/forms/localflavor/au.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/be.py b/tests/regressiontests/forms/localflavor/be.py
index c68bc7d6d7..2f246c9ddd 100644
--- a/tests/regressiontests/forms/localflavor/be.py
+++ b/tests/regressiontests/forms/localflavor/be.py
@@ -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 = {
diff --git a/tests/regressiontests/forms/localflavor/br.py b/tests/regressiontests/forms/localflavor/br.py
index 6ae71056a4..1281a147c2 100644
--- a/tests/regressiontests/forms/localflavor/br.py
+++ b/tests/regressiontests/forms/localflavor/br.py
@@ -2,10 +2,10 @@ from django.contrib.localflavor.br.forms import (BRZipCodeField,
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 = {
diff --git a/tests/regressiontests/forms/localflavor/ca.py b/tests/regressiontests/forms/localflavor/ca.py
index 8a17ed26e7..556328e0ef 100644
--- a/tests/regressiontests/forms/localflavor/ca.py
+++ b/tests/regressiontests/forms/localflavor/ca.py
@@ -4,10 +4,10 @@ from django.contrib.localflavor.ca.forms import (CAPostalCodeField,
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(
diff --git a/tests/regressiontests/forms/localflavor/ch.py b/tests/regressiontests/forms/localflavor/ch.py
index c67bfcfdf8..a2603666c3 100644
--- a/tests/regressiontests/forms/localflavor/ch.py
+++ b/tests/regressiontests/forms/localflavor/ch.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/cl.py b/tests/regressiontests/forms/localflavor/cl.py
index 59e4824db9..c6e75b19da 100644
--- a/tests/regressiontests/forms/localflavor/cl.py
+++ b/tests/regressiontests/forms/localflavor/cl.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/cn.py b/tests/regressiontests/forms/localflavor/cn.py
index 6579d95145..dccba9c862 100644
--- a/tests/regressiontests/forms/localflavor/cn.py
+++ b/tests/regressiontests/forms/localflavor/cn.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/co.py b/tests/regressiontests/forms/localflavor/co.py
index a6240a3146..bea7c8e137 100644
--- a/tests/regressiontests/forms/localflavor/co.py
+++ b/tests/regressiontests/forms/localflavor/co.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/cz.py b/tests/regressiontests/forms/localflavor/cz.py
index 8369de986a..56ac731ff6 100644
--- a/tests/regressiontests/forms/localflavor/cz.py
+++ b/tests/regressiontests/forms/localflavor/cz.py
@@ -4,10 +4,10 @@ from django.contrib.localflavor.cz.forms import (CZPostalCodeField,
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(
diff --git a/tests/regressiontests/forms/localflavor/de.py b/tests/regressiontests/forms/localflavor/de.py
index 7c68bcc129..99afd7194e 100644
--- a/tests/regressiontests/forms/localflavor/de.py
+++ b/tests/regressiontests/forms/localflavor/de.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/ec.py b/tests/regressiontests/forms/localflavor/ec.py
index 83537af70b..d324d0ca1e 100644
--- a/tests/regressiontests/forms/localflavor/ec.py
+++ b/tests/regressiontests/forms/localflavor/ec.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/es.py b/tests/regressiontests/forms/localflavor/es.py
index 95a94c4fa8..513c6e21a4 100644
--- a/tests/regressiontests/forms/localflavor/es.py
+++ b/tests/regressiontests/forms/localflavor/es.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/fi.py b/tests/regressiontests/forms/localflavor/fi.py
index 3ad95e6148..e664e30af6 100644
--- a/tests/regressiontests/forms/localflavor/fi.py
+++ b/tests/regressiontests/forms/localflavor/fi.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/fr.py b/tests/regressiontests/forms/localflavor/fr.py
index 96045c32a9..64f4d353ae 100644
--- a/tests/regressiontests/forms/localflavor/fr.py
+++ b/tests/regressiontests/forms/localflavor/fr.py
@@ -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 = {
diff --git a/tests/regressiontests/forms/localflavor/gb.py b/tests/regressiontests/forms/localflavor/gb.py
index 7f23ba58c9..b32162d365 100644
--- a/tests/regressiontests/forms/localflavor/gb.py
+++ b/tests/regressiontests/forms/localflavor/gb.py
@@ -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 = {
diff --git a/tests/regressiontests/forms/localflavor/generic.py b/tests/regressiontests/forms/localflavor/generic.py
index f47fc91460..12462a0ef2 100644
--- a/tests/regressiontests/forms/localflavor/generic.py
+++ b/tests/regressiontests/forms/localflavor/generic.py
@@ -2,10 +2,10 @@ import datetime
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 = {
diff --git a/tests/regressiontests/forms/localflavor/hr.py b/tests/regressiontests/forms/localflavor/hr.py
index 27d747ccc4..f3357b6405 100644
--- a/tests/regressiontests/forms/localflavor/hr.py
+++ b/tests/regressiontests/forms/localflavor/hr.py
@@ -4,9 +4,9 @@ from django.contrib.localflavor.hr.forms import (HRCountySelect,
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">
diff --git a/tests/regressiontests/forms/localflavor/id.py b/tests/regressiontests/forms/localflavor/id.py
index 71a8d9f8cf..d3c086289f 100644
--- a/tests/regressiontests/forms/localflavor/id.py
+++ b/tests/regressiontests/forms/localflavor/id.py
@@ -4,10 +4,10 @@ from django.contrib.localflavor.id.forms import (IDPhoneNumberField,
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(
diff --git a/tests/regressiontests/forms/localflavor/ie.py b/tests/regressiontests/forms/localflavor/ie.py
index fab519bfe9..24556f7d0d 100644
--- a/tests/regressiontests/forms/localflavor/ie.py
+++ b/tests/regressiontests/forms/localflavor/ie.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/il.py b/tests/regressiontests/forms/localflavor/il.py
index c7323e943c..a3b91e850e 100644
--- a/tests/regressiontests/forms/localflavor/il.py
+++ b/tests/regressiontests/forms/localflavor/il.py
@@ -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 = {
diff --git a/tests/regressiontests/forms/localflavor/in_.py b/tests/regressiontests/forms/localflavor/in_.py
index 583998283d..a0eb84c5c6 100644
--- a/tests/regressiontests/forms/localflavor/in_.py
+++ b/tests/regressiontests/forms/localflavor/in_.py
@@ -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 = {
diff --git a/tests/regressiontests/forms/localflavor/is_.py b/tests/regressiontests/forms/localflavor/is_.py
index fa6b133f16..c28750fab2 100644
--- a/tests/regressiontests/forms/localflavor/is_.py
+++ b/tests/regressiontests/forms/localflavor/is_.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/it.py b/tests/regressiontests/forms/localflavor/it.py
index 7181e25e84..456a56bf34 100644
--- a/tests/regressiontests/forms/localflavor/it.py
+++ b/tests/regressiontests/forms/localflavor/it.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/jp.py b/tests/regressiontests/forms/localflavor/jp.py
index 1f8362a092..d6b6d8c3eb 100644
--- a/tests/regressiontests/forms/localflavor/jp.py
+++ b/tests/regressiontests/forms/localflavor/jp.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/kw.py b/tests/regressiontests/forms/localflavor/kw.py
index af998bd34b..3dfeef5469 100644
--- a/tests/regressiontests/forms/localflavor/kw.py
+++ b/tests/regressiontests/forms/localflavor/kw.py
@@ -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 = {
diff --git a/tests/regressiontests/forms/localflavor/mk.py b/tests/regressiontests/forms/localflavor/mk.py
index 0a41e2001b..913dfb777d 100644
--- a/tests/regressiontests/forms/localflavor/mk.py
+++ b/tests/regressiontests/forms/localflavor/mk.py
@@ -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 '
diff --git a/tests/regressiontests/forms/localflavor/mx.py b/tests/regressiontests/forms/localflavor/mx.py
index 1ffc11c834..30937de665 100644
--- a/tests/regressiontests/forms/localflavor/mx.py
+++ b/tests/regressiontests/forms/localflavor/mx.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/nl.py b/tests/regressiontests/forms/localflavor/nl.py
index 8ef0ae981f..177a5562aa 100644
--- a/tests/regressiontests/forms/localflavor/nl.py
+++ b/tests/regressiontests/forms/localflavor/nl.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/pl.py b/tests/regressiontests/forms/localflavor/pl.py
index 7225abe87d..8c7af38397 100644
--- a/tests/regressiontests/forms/localflavor/pl.py
+++ b/tests/regressiontests/forms/localflavor/pl.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/pt.py b/tests/regressiontests/forms/localflavor/pt.py
index 333f96d3b4..29aa1781eb 100644
--- a/tests/regressiontests/forms/localflavor/pt.py
+++ b/tests/regressiontests/forms/localflavor/pt.py
@@ -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 = {
diff --git a/tests/regressiontests/forms/localflavor/py.py b/tests/regressiontests/forms/localflavor/py.py
index 4c2acf8887..c64e84919d 100644
--- a/tests/regressiontests/forms/localflavor/py.py
+++ b/tests/regressiontests/forms/localflavor/py.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/ro.py b/tests/regressiontests/forms/localflavor/ro.py
index 94e6652af8..731157ca69 100644
--- a/tests/regressiontests/forms/localflavor/ro.py
+++ b/tests/regressiontests/forms/localflavor/ro.py
@@ -3,10 +3,10 @@ from django.contrib.localflavor.ro.forms import (ROCIFField, ROCNPField,
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">
diff --git a/tests/regressiontests/forms/localflavor/ru.py b/tests/regressiontests/forms/localflavor/ru.py
index c8feba6075..aecc5598b2 100644
--- a/tests/regressiontests/forms/localflavor/ru.py
+++ b/tests/regressiontests/forms/localflavor/ru.py
@@ -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.']
diff --git a/tests/regressiontests/forms/localflavor/se.py b/tests/regressiontests/forms/localflavor/se.py
index de476d747e..50720bba55 100644
--- a/tests/regressiontests/forms/localflavor/se.py
+++ b/tests/regressiontests/forms/localflavor/se.py
@@ -4,10 +4,10 @@ from django.contrib.localflavor.se.forms import (SECountySelect,
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
diff --git a/tests/regressiontests/forms/localflavor/sk.py b/tests/regressiontests/forms/localflavor/sk.py
index a5bed6fba6..8eeefb415f 100644
--- a/tests/regressiontests/forms/localflavor/sk.py
+++ b/tests/regressiontests/forms/localflavor/sk.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/us.py b/tests/regressiontests/forms/localflavor/us.py
index 8924f0b2da..9b38db5b7c 100644
--- a/tests/regressiontests/forms/localflavor/us.py
+++ b/tests/regressiontests/forms/localflavor/us.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/utils.py b/tests/regressiontests/forms/localflavor/utils.py
deleted file mode 100644
index 0ba5b806a5..0000000000
--- a/tests/regressiontests/forms/localflavor/utils.py
+++ /dev/null
@@ -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))
diff --git a/tests/regressiontests/forms/localflavor/uy.py b/tests/regressiontests/forms/localflavor/uy.py
index 2b9e134362..ea1109e932 100644
--- a/tests/regressiontests/forms/localflavor/uy.py
+++ b/tests/regressiontests/forms/localflavor/uy.py
@@ -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">
diff --git a/tests/regressiontests/forms/localflavor/za.py b/tests/regressiontests/forms/localflavor/za.py
index c912421220..948bd7f320 100644
--- a/tests/regressiontests/forms/localflavor/za.py
+++ b/tests/regressiontests/forms/localflavor/za.py
@@ -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 = {
diff --git a/tests/regressiontests/forms/localflavortests.py b/tests/regressiontests/forms/localflavortests.py
index a4db3dba98..6a3fb2322e 100644
--- a/tests/regressiontests/forms/localflavortests.py
+++ b/tests/regressiontests/forms/localflavortests.py
@@ -1,4 +1,3 @@
-from localflavor import AssertFieldOutputTests
from localflavor.ar import ARLocalFlavorTests
from localflavor.at import ATLocalFlavorTests
from localflavor.au import AULocalFlavorTests
diff --git a/tests/regressiontests/forms/tests/__init__.py b/tests/regressiontests/forms/tests/__init__.py
index f63818d578..9570835aa9 100644
--- a/tests/regressiontests/forms/tests/__init__.py
+++ b/tests/regressiontests/forms/tests/__init__.py
@@ -53,5 +53,4 @@ from regressiontests.forms.localflavortests import (
USLocalFlavorTests,
UYLocalFlavorTests,
ZALocalFlavorTests,
- AssertFieldOutputTests,
)
diff --git a/tests/regressiontests/test_utils/tests.py b/tests/regressiontests/test_utils/tests.py
index 6d4ab02247..942aa85148 100644
--- a/tests/regressiontests/test_utils/tests.py
+++ b/tests/regressiontests/test_utils/tests.py
@@ -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 @@ class AssertRaisesMsgTest(SimpleTestCase):
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, {'a@a.com': 'a@a.com'}, {'aaa': error_invalid})
+ self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'a@a.com'}, {'aaa': error_invalid + [u'Another error']})
+ self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'Wrong output'}, {'aaa': error_invalid})
+ self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'a@a.com'}, {'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