summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJannis Leidel <jannis@leidel.info>2009-12-30 22:11:48 +0000
committerJannis Leidel <jannis@leidel.info>2009-12-30 22:11:48 +0000
commitbf33d3eb1d20157a09b4bf1f36f9c928bc1cabc7 (patch)
tree463fa22603dbfc4d3677748cd06512349eb8f626 /tests
parent6eb02fa9bbd6e68d57f6b5b6e7419271ca4fd0ab (diff)
Fixed #12444 - Date based widgets now correctly handle input values when using locale-aware formatting. Also fixes #7656.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@12029 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
-rw-r--r--tests/regressiontests/admin_widgets/models.py9
-rw-r--r--tests/regressiontests/admin_widgets/tests.py3
-rw-r--r--tests/regressiontests/forms/widgets.py36
-rw-r--r--tests/regressiontests/i18n/forms.py4
-rw-r--r--tests/regressiontests/i18n/models.py6
-rw-r--r--tests/regressiontests/i18n/tests.py27
6 files changed, 81 insertions, 4 deletions
diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py
index 0c81ed3119..b9fe67c182 100644
--- a/tests/regressiontests/admin_widgets/models.py
+++ b/tests/regressiontests/admin_widgets/models.py
@@ -77,6 +77,9 @@ __test__ = {'WIDGETS_TESTS': """
>>> from django.contrib.admin.widgets import FilteredSelectMultiple, AdminSplitDateTime
>>> from django.contrib.admin.widgets import AdminFileWidget, ForeignKeyRawIdWidget, ManyToManyRawIdWidget
>>> from django.contrib.admin.widgets import RelatedFieldWidgetWrapper
+>>> from django.utils.translation import activate, deactivate
+>>> from django.conf import settings
+
Calling conditional_escape on the output of widget.render will simulate what
happens in the template. This is easier than setting up a template and context
@@ -94,6 +97,12 @@ HTML escaped.
>>> w = AdminSplitDateTime()
>>> print conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30)))
<p class="datetime">Date: <input value="2007-12-01" type="text" class="vDateField" name="test_0" size="10" /><br />Time: <input value="09:30:00" type="text" class="vTimeField" name="test_1" size="8" /></p>
+>>> activate('de-at')
+>>> settings.USE_L10N = True
+>>> print conditional_escape(w.render('test', datetime(2007, 12, 1, 9, 30)))
+<p class="datetime">Datum: <input value="01.12.2007" type="text" class="vDateField" name="test_0" size="10" /><br />Zeit: <input value="09:30:00" type="text" class="vTimeField" name="test_1" size="8" /></p>
+>>> deactivate()
+>>> settings.USE_L10N = False
>>> band = Band.objects.create(pk=1, name='Linkin Park')
>>> album = band.album_set.create(name='Hybrid Theory', cover_art=r'albums\hybrid_theory.jpg')
diff --git a/tests/regressiontests/admin_widgets/tests.py b/tests/regressiontests/admin_widgets/tests.py
index 85651542bb..5601b49193 100644
--- a/tests/regressiontests/admin_widgets/tests.py
+++ b/tests/regressiontests/admin_widgets/tests.py
@@ -3,6 +3,7 @@ from django.contrib import admin
from django.contrib.admin import widgets
from unittest import TestCase
from django.test import TestCase as DjangoTestCase
+from django.db.models import DateField
import models
class AdminFormfieldForDBFieldTests(TestCase):
@@ -89,7 +90,7 @@ class AdminFormfieldForDBFieldTests(TestCase):
def testFormfieldOverrides(self):
self.assertFormfield(models.Event, 'start_date', forms.TextInput,
- formfield_overrides={'widget': forms.TextInput})
+ formfield_overrides={DateField: {'widget': forms.TextInput}})
def testFieldWithChoices(self):
self.assertFormfield(models.Member, 'gender', forms.Select)
diff --git a/tests/regressiontests/forms/widgets.py b/tests/regressiontests/forms/widgets.py
index 84ae61f527..6ea9298d4c 100644
--- a/tests/regressiontests/forms/widgets.py
+++ b/tests/regressiontests/forms/widgets.py
@@ -10,6 +10,8 @@ tests = r"""
... from decimal import Decimal
... except ImportError:
... from django.utils._decimal import Decimal
+>>> from django.utils.translation import activate, deactivate
+>>> from django.conf import settings
###########
# Widgets #
@@ -1082,6 +1084,13 @@ True
False
>>> w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06/05/2008', u'12:41'])
True
+>>> activate('de-at')
+>>> settings.USE_L10N = True
+>>> w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06.05.2008', u'12:41'])
+True
+>>> deactivate()
+>>> settings.USE_L10N = False
+
# DateTimeInput ###############################################################
@@ -1099,6 +1108,12 @@ u'<input type="text" name="date" value="2007-09-17 12:51:34" />'
u'<input type="text" name="date" value="2007-09-17 12:51:34" />'
>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51))
u'<input type="text" name="date" value="2007-09-17 12:51:00" />'
+>>> activate('de-at')
+>>> settings.USE_L10N = True
+>>> w.render('date', d)
+u'<input type="text" name="date" value="17.09.2007 12:51:34" />'
+>>> deactivate()
+>>> settings.USE_L10N = False
Use 'format' to change the way a value is displayed.
>>> w = DateTimeInput(format='%d/%m/%Y %H:%M')
@@ -1107,6 +1122,7 @@ u'<input type="text" name="date" value="17/09/2007 12:51" />'
>>> w._has_changed(d, '17/09/2007 12:51')
False
+
# DateInput ###################################################################
>>> w = DateInput()
@@ -1125,6 +1141,13 @@ We should be able to initialize from a unicode value.
>>> w.render('date', u'2007-09-17')
u'<input type="text" name="date" value="2007-09-17" />'
+>>> activate('de-at')
+>>> settings.USE_L10N = True
+>>> w.render('date', d)
+u'<input type="text" name="date" value="17.09.2007" />'
+>>> deactivate()
+>>> settings.USE_L10N = False
+
Use 'format' to change the way a value is displayed.
>>> w = DateInput(format='%d/%m/%Y')
>>> w.render('date', d)
@@ -1153,6 +1176,13 @@ We should be able to initialize from a unicode value.
>>> w.render('time', u'13:12:11')
u'<input type="text" name="time" value="13:12:11" />'
+>>> activate('de-at')
+>>> settings.USE_L10N = True
+>>> w.render('date', d)
+u'<input type="text" name="date" value="17.09.2007" />'
+>>> deactivate()
+>>> settings.USE_L10N = False
+
Use 'format' to change the way a value is displayed.
>>> w = TimeInput(format='%H:%M')
>>> w.render('time', t)
@@ -1176,6 +1206,12 @@ u'<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" n
u'<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:34" />'
>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51))
u'<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:00" />'
+>>> activate('de-at')
+>>> settings.USE_L10N = True
+>>> w.render('date', datetime.datetime(2007, 9, 17, 12, 51))
+u'<input type="hidden" name="date_0" value="17.09.2007" /><input type="hidden" name="date_1" value="12:51:00" />'
+>>> deactivate()
+>>> settings.USE_L10N = False
"""
diff --git a/tests/regressiontests/i18n/forms.py b/tests/regressiontests/i18n/forms.py
index b8244f6ca7..8df066c6fd 100644
--- a/tests/regressiontests/i18n/forms.py
+++ b/tests/regressiontests/i18n/forms.py
@@ -1,5 +1,6 @@
from django import template, forms
from django.forms.extras import SelectDateWidget
+from models import Company
class I18nForm(forms.Form):
decimal_field = forms.DecimalField()
@@ -11,3 +12,6 @@ class I18nForm(forms.Form):
class SelectDateForm(forms.Form):
date_field = forms.DateField(widget=SelectDateWidget)
+class CompanyForm(forms.ModelForm):
+ class Meta:
+ model = Company
diff --git a/tests/regressiontests/i18n/models.py b/tests/regressiontests/i18n/models.py
index e1eefb8477..56f158578b 100644
--- a/tests/regressiontests/i18n/models.py
+++ b/tests/regressiontests/i18n/models.py
@@ -1,12 +1,16 @@
+from datetime import datetime
from django.db import models
from django.utils.translation import ugettext_lazy as _
class TestModel(models.Model):
text = models.CharField(max_length=10, default=_('Anything'))
+class Company(models.Model):
+ name = models.CharField(max_length=50)
+ date_added = models.DateTimeField(default=datetime(1799,1,31,23,59,59,0))
+
__test__ = {'API_TESTS': '''
>>> tm = TestModel()
>>> tm.save()
'''
}
-
diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py
index 42dfe91659..a8f3d92d87 100644
--- a/tests/regressiontests/i18n/tests.py
+++ b/tests/regressiontests/i18n/tests.py
@@ -4,12 +4,13 @@ import datetime
from django.template import Template, Context
from django.conf import settings
-from django.utils.formats import get_format, date_format, number_format, localize
+from django.utils.formats import get_format, date_format, number_format, localize, localize_input
from django.utils.numberformat import format
from django.test import TestCase, client
from django.utils.translation import ugettext, ugettext_lazy, activate, deactivate, gettext_lazy
-from forms import I18nForm, SelectDateForm, SelectDateWidget
+from forms import I18nForm, SelectDateForm, SelectDateWidget, CompanyForm
+
class TranslationTests(TestCase):
@@ -323,6 +324,28 @@ class FormattingTests(TestCase):
finally:
deactivate()
+ def test_localized_input(self):
+ """
+ Tests if form input is correctly localized
+ """
+ settings.USE_L10N = True
+ activate('de-at')
+ try:
+ form6 = CompanyForm({
+ 'name': u'acme',
+ 'date_added': datetime.datetime(2009, 12, 31, 6, 0, 0),
+ })
+ form6.save()
+ self.assertEqual(True, form6.is_valid())
+ self.assertEqual(
+ form6.as_ul(),
+ u'<li><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" value="acme" maxlength="50" /></li>\n<li><label for="id_date_added">Date added:</label> <input type="text" name="date_added" value="31.12.2009 06:00:00" id="id_date_added" /></li>'
+ )
+ self.assertEqual(localize_input(datetime.datetime(2009, 12, 31, 6, 0, 0)), '31.12.2009 06:00:00')
+ self.assertEqual(datetime.datetime(2009, 12, 31, 6, 0, 0), form6.cleaned_data['date_added'])
+ finally:
+ deactivate()
+
class MiscTests(TestCase):
def test_parse_spec_http_header(self):