mirror of
https://github.com/django/django.git
synced 2025-11-02 04:48:33 +00:00
Fixed #18269 -- Applied unicode_literals for Python 3 compatibility.
Thanks Vinay Sajip for the support of his django3 branch and Jannis Leidel for the review.
This commit is contained in:
parent
706fd9adc0
commit
4a103086d5
401 changed files with 6647 additions and 6157 deletions
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.template.response import TemplateResponse
|
||||
|
|
@ -39,9 +39,9 @@ class AdminCustomUrlsTest(TestCase):
|
|||
A smoke test to ensure POST on add_view works.
|
||||
"""
|
||||
post_data = {
|
||||
'_popup': u'1',
|
||||
"name": u'Action added through a popup',
|
||||
"description": u"Description of added action",
|
||||
'_popup': '1',
|
||||
"name": 'Action added through a popup',
|
||||
"description": "Description of added action",
|
||||
}
|
||||
response = self.client.post('/custom_urls/admin/admin_custom_urls/action/!add/', post_data)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
|
||||
|
|
@ -9,7 +11,7 @@ class Book(models.Model):
|
|||
contributors = models.ManyToManyField(User, verbose_name="Verbose Contributors", related_name='books_contributed', blank=True, null=True)
|
||||
is_best_seller = models.NullBooleanField(default=0)
|
||||
date_registered = models.DateField(null=True)
|
||||
no = models.IntegerField(verbose_name=u'number', blank=True, null=True) # This field is intentionally 2 characters long. See #16080.
|
||||
no = models.IntegerField(verbose_name='number', blank=True, null=True) # This field is intentionally 2 characters long. See #16080.
|
||||
|
||||
def __unicode__(self):
|
||||
return self.title
|
||||
|
|
@ -27,4 +29,4 @@ class Employee(models.Model):
|
|||
name = models.CharField(max_length=100)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
return self.name
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
|
||||
|
|
@ -160,7 +160,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][4]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'date registered')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'date registered')
|
||||
choice = select_by(filterspec.choices(changelist), "display", "Today")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?date_registered__gte=%s'
|
||||
|
|
@ -181,7 +181,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][4]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'date registered')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'date registered')
|
||||
choice = select_by(filterspec.choices(changelist), "display", "This month")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?date_registered__gte=%s'
|
||||
|
|
@ -202,7 +202,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][4]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'date registered')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'date registered')
|
||||
choice = select_by(filterspec.choices(changelist), "display", "This year")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?date_registered__gte=%s'
|
||||
|
|
@ -219,7 +219,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][4]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'date registered')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'date registered')
|
||||
choice = select_by(filterspec.choices(changelist), "display", "Past 7 days")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?date_registered__gte=%s'
|
||||
|
|
@ -243,7 +243,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the last choice is None and is selected
|
||||
filterspec = changelist.get_filters(request)[0][0]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'year')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'year')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[-1]['selected'], True)
|
||||
self.assertEqual(choices[-1]['query_string'], '?year__isnull=True')
|
||||
|
|
@ -253,7 +253,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][0]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'year')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'year')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[2]['selected'], True)
|
||||
self.assertEqual(choices[2]['query_string'], '?year=2002')
|
||||
|
|
@ -270,7 +270,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the last choice is None and is selected
|
||||
filterspec = changelist.get_filters(request)[0][1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'Verbose Author')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'Verbose Author')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[-1]['selected'], True)
|
||||
self.assertEqual(choices[-1]['query_string'], '?author__isnull=True')
|
||||
|
|
@ -280,7 +280,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'Verbose Author')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'Verbose Author')
|
||||
# order of choices depends on User model, which has no order
|
||||
choice = select_by(filterspec.choices(changelist), "display", "alfred")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
|
|
@ -298,7 +298,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the last choice is None and is selected
|
||||
filterspec = changelist.get_filters(request)[0][2]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'Verbose Contributors')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'Verbose Contributors')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[-1]['selected'], True)
|
||||
self.assertEqual(choices[-1]['query_string'], '?contributors__isnull=True')
|
||||
|
|
@ -308,7 +308,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][2]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'Verbose Contributors')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'Verbose Contributors')
|
||||
choice = select_by(filterspec.choices(changelist), "display", "bob")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?contributors__id__exact=%d' % self.bob.pk)
|
||||
|
|
@ -326,7 +326,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the last choice is None and is selected
|
||||
filterspec = changelist.get_filters(request)[0][0]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'book')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'book')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[-1]['selected'], True)
|
||||
self.assertEqual(choices[-1]['query_string'], '?books_authored__isnull=True')
|
||||
|
|
@ -336,7 +336,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][0]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'book')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'book')
|
||||
choice = select_by(filterspec.choices(changelist), "display", self.bio_book.title)
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?books_authored__id__exact=%d' % self.bio_book.pk)
|
||||
|
|
@ -351,7 +351,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the last choice is None and is selected
|
||||
filterspec = changelist.get_filters(request)[0][1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'book')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'book')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[-1]['selected'], True)
|
||||
self.assertEqual(choices[-1]['query_string'], '?books_contributed__isnull=True')
|
||||
|
|
@ -361,7 +361,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'book')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'book')
|
||||
choice = select_by(filterspec.choices(changelist), "display", self.django_book.title)
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?books_contributed__id__exact=%d' % self.django_book.pk)
|
||||
|
|
@ -387,7 +387,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][3]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'is best seller')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'is best seller')
|
||||
choice = select_by(filterspec.choices(changelist), "display", "No")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?is_best_seller__exact=0')
|
||||
|
|
@ -401,7 +401,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][3]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'is best seller')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'is best seller')
|
||||
choice = select_by(filterspec.choices(changelist), "display", "Yes")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?is_best_seller__exact=1')
|
||||
|
|
@ -415,7 +415,7 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][3]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'is best seller')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'is best seller')
|
||||
choice = select_by(filterspec.choices(changelist), "display", "Unknown")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?is_best_seller__isnull=True')
|
||||
|
|
@ -434,9 +434,9 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'publication decade')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'publication decade')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[0]['display'], u'All')
|
||||
self.assertEqual(choices[0]['display'], 'All')
|
||||
self.assertEqual(choices[0]['selected'], True)
|
||||
self.assertEqual(choices[0]['query_string'], '?')
|
||||
|
||||
|
|
@ -451,9 +451,9 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'publication decade')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'publication decade')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[1]['display'], u'the 1980\'s')
|
||||
self.assertEqual(choices[1]['display'], 'the 1980\'s')
|
||||
self.assertEqual(choices[1]['selected'], True)
|
||||
self.assertEqual(choices[1]['query_string'], '?publication-decade=the+80s')
|
||||
|
||||
|
|
@ -468,9 +468,9 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'publication decade')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'publication decade')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[2]['display'], u'the 1990\'s')
|
||||
self.assertEqual(choices[2]['display'], 'the 1990\'s')
|
||||
self.assertEqual(choices[2]['selected'], True)
|
||||
self.assertEqual(choices[2]['query_string'], '?publication-decade=the+90s')
|
||||
|
||||
|
|
@ -485,9 +485,9 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'publication decade')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'publication decade')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[3]['display'], u'the 2000\'s')
|
||||
self.assertEqual(choices[3]['display'], 'the 2000\'s')
|
||||
self.assertEqual(choices[3]['selected'], True)
|
||||
self.assertEqual(choices[3]['query_string'], '?publication-decade=the+00s')
|
||||
|
||||
|
|
@ -502,14 +502,14 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choices are selected
|
||||
filterspec = changelist.get_filters(request)[0][1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'publication decade')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'publication decade')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[3]['display'], u'the 2000\'s')
|
||||
self.assertEqual(choices[3]['display'], 'the 2000\'s')
|
||||
self.assertEqual(choices[3]['selected'], True)
|
||||
self.assertEqual(choices[3]['query_string'], '?publication-decade=the+00s&author__id__exact=%s' % self.alfred.pk)
|
||||
|
||||
filterspec = changelist.get_filters(request)[0][0]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'Verbose Author')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'Verbose Author')
|
||||
choice = select_by(filterspec.choices(changelist), "display", "alfred")
|
||||
self.assertEqual(choice['selected'], True)
|
||||
self.assertEqual(choice['query_string'], '?publication-decade=the+00s&author__id__exact=%s' % self.alfred.pk)
|
||||
|
|
@ -561,19 +561,19 @@ class ListFiltersTests(TestCase):
|
|||
changelist = self.get_changelist(request, Book, modeladmin)
|
||||
|
||||
filterspec = changelist.get_filters(request)[0][0]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'publication decade')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'publication decade')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(len(choices), 3)
|
||||
|
||||
self.assertEqual(choices[0]['display'], u'All')
|
||||
self.assertEqual(choices[0]['display'], 'All')
|
||||
self.assertEqual(choices[0]['selected'], True)
|
||||
self.assertEqual(choices[0]['query_string'], '?')
|
||||
|
||||
self.assertEqual(choices[1]['display'], u'the 1990\'s')
|
||||
self.assertEqual(choices[1]['display'], 'the 1990\'s')
|
||||
self.assertEqual(choices[1]['selected'], False)
|
||||
self.assertEqual(choices[1]['query_string'], '?publication-decade=the+90s')
|
||||
|
||||
self.assertEqual(choices[2]['display'], u'the 2000\'s')
|
||||
self.assertEqual(choices[2]['display'], 'the 2000\'s')
|
||||
self.assertEqual(choices[2]['selected'], False)
|
||||
self.assertEqual(choices[2]['query_string'], '?publication-decade=the+00s')
|
||||
|
||||
|
|
@ -591,7 +591,7 @@ class ListFiltersTests(TestCase):
|
|||
self.assertEqual(list(queryset), [self.bio_book])
|
||||
|
||||
filterspec = changelist.get_filters(request)[0][-1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'number')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'number')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[2]['selected'], True)
|
||||
self.assertEqual(choices[2]['query_string'], '?no=207')
|
||||
|
|
@ -614,9 +614,9 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][0]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'publication decade')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'publication decade')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[2]['display'], u'the 1990\'s')
|
||||
self.assertEqual(choices[2]['display'], 'the 1990\'s')
|
||||
self.assertEqual(choices[2]['selected'], True)
|
||||
self.assertEqual(choices[2]['query_string'], '?decade__in=the+90s')
|
||||
|
||||
|
|
@ -631,9 +631,9 @@ class ListFiltersTests(TestCase):
|
|||
|
||||
# Make sure the correct choice is selected
|
||||
filterspec = changelist.get_filters(request)[0][0]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'publication decade')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'publication decade')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
self.assertEqual(choices[2]['display'], u'the 1990\'s')
|
||||
self.assertEqual(choices[2]['display'], 'the 1990\'s')
|
||||
self.assertEqual(choices[2]['selected'], True)
|
||||
self.assertEqual(choices[2]['query_string'], '?decade__isnull=the+90s')
|
||||
|
||||
|
|
@ -657,18 +657,18 @@ class ListFiltersTests(TestCase):
|
|||
self.assertEqual(list(queryset), [jack, john])
|
||||
|
||||
filterspec = changelist.get_filters(request)[0][-1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'department')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'department')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
|
||||
self.assertEqual(choices[0]['display'], u'All')
|
||||
self.assertEqual(choices[0]['display'], 'All')
|
||||
self.assertEqual(choices[0]['selected'], True)
|
||||
self.assertEqual(choices[0]['query_string'], '?')
|
||||
|
||||
self.assertEqual(choices[1]['display'], u'Development')
|
||||
self.assertEqual(choices[1]['display'], 'Development')
|
||||
self.assertEqual(choices[1]['selected'], False)
|
||||
self.assertEqual(choices[1]['query_string'], '?department__code__exact=DEV')
|
||||
|
||||
self.assertEqual(choices[2]['display'], u'Design')
|
||||
self.assertEqual(choices[2]['display'], 'Design')
|
||||
self.assertEqual(choices[2]['selected'], False)
|
||||
self.assertEqual(choices[2]['query_string'], '?department__code__exact=DSN')
|
||||
|
||||
|
|
@ -682,17 +682,17 @@ class ListFiltersTests(TestCase):
|
|||
self.assertEqual(list(queryset), [john])
|
||||
|
||||
filterspec = changelist.get_filters(request)[0][-1]
|
||||
self.assertEqual(force_unicode(filterspec.title), u'department')
|
||||
self.assertEqual(force_unicode(filterspec.title), 'department')
|
||||
choices = list(filterspec.choices(changelist))
|
||||
|
||||
self.assertEqual(choices[0]['display'], u'All')
|
||||
self.assertEqual(choices[0]['display'], 'All')
|
||||
self.assertEqual(choices[0]['selected'], False)
|
||||
self.assertEqual(choices[0]['query_string'], '?')
|
||||
|
||||
self.assertEqual(choices[1]['display'], u'Development')
|
||||
self.assertEqual(choices[1]['display'], 'Development')
|
||||
self.assertEqual(choices[1]['selected'], True)
|
||||
self.assertEqual(choices[1]['query_string'], '?department__code__exact=DEV')
|
||||
|
||||
self.assertEqual(choices[2]['display'], u'Design')
|
||||
self.assertEqual(choices[2]['display'], 'Design')
|
||||
self.assertEqual(choices[2]['selected'], False)
|
||||
self.assertEqual(choices[2]['query_string'], '?department__code__exact=DSN')
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
Testing of admin inline formsets.
|
||||
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.contenttypes import generic
|
||||
|
|
@ -30,7 +32,7 @@ class Child(models.Model):
|
|||
parent = generic.GenericForeignKey()
|
||||
|
||||
def __unicode__(self):
|
||||
return u'I am %s, a child of %s' % (self.name, self.parent)
|
||||
return 'I am %s, a child of %s' % (self.name, self.parent)
|
||||
|
||||
|
||||
class Book(models.Model):
|
||||
|
|
@ -145,4 +147,4 @@ class ProfileCollection(models.Model):
|
|||
class Profile(models.Model):
|
||||
collection = models.ForeignKey(ProfileCollection, blank=True, null=True)
|
||||
first_name = models.CharField(max_length=100)
|
||||
last_name = models.CharField(max_length=100)
|
||||
last_name = models.CharField(max_length=100)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.contrib.admin.tests import AdminSeleniumWebDriverTestCase
|
||||
from django.contrib.admin.helpers import InlineAdminForm
|
||||
|
|
@ -67,7 +67,7 @@ class TestInline(TestCase):
|
|||
'shoppingweakness_set-TOTAL_FORMS': 1,
|
||||
'shoppingweakness_set-INITIAL_FORMS': 0,
|
||||
'shoppingweakness_set-MAX_NUM_FORMS': 0,
|
||||
'_save': u'Save',
|
||||
'_save': 'Save',
|
||||
'person': person.id,
|
||||
'max_weight': 0,
|
||||
'shoppingweakness_set-0-item': item.id,
|
||||
|
|
@ -85,7 +85,7 @@ class TestInline(TestCase):
|
|||
'title_set-TOTAL_FORMS': 1,
|
||||
'title_set-INITIAL_FORMS': 0,
|
||||
'title_set-MAX_NUM_FORMS': 0,
|
||||
'_save': u'Save',
|
||||
'_save': 'Save',
|
||||
'title_set-0-title1': 'a title',
|
||||
'title_set-0-title2': 'a different title',
|
||||
}
|
||||
|
|
@ -235,8 +235,8 @@ class TestInlinePermissions(TestCase):
|
|||
permission = Permission.objects.get(codename='change_holder2', content_type=self.holder_ct)
|
||||
self.user.user_permissions.add(permission)
|
||||
|
||||
author = Author.objects.create(pk=1, name=u'The Author')
|
||||
book = author.books.create(name=u'The inline Book')
|
||||
author = Author.objects.create(pk=1, name='The Author')
|
||||
book = author.books.create(name='The inline Book')
|
||||
self.author_change_url = '/admin/admin_inlines/author/%i/' % author.id
|
||||
# Get the ID of the automatically created intermediate model for thw Author-Book m2m
|
||||
author_book_auto_m2m_intermediate = Author.books.through.objects.get(author=author, book=book)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.test import TestCase, RequestFactory
|
||||
from django.contrib.admin.options import ModelAdmin
|
||||
|
|
@ -42,7 +42,7 @@ class TestAdminOrdering(TestCase):
|
|||
"""
|
||||
ma = ModelAdmin(Band, None)
|
||||
names = [b.name for b in ma.queryset(request)]
|
||||
self.assertEqual([u'Aerosmith', u'Radiohead', u'Van Halen'], names)
|
||||
self.assertEqual(['Aerosmith', 'Radiohead', 'Van Halen'], names)
|
||||
|
||||
def test_specified_ordering(self):
|
||||
"""
|
||||
|
|
@ -53,7 +53,7 @@ class TestAdminOrdering(TestCase):
|
|||
ordering = ('rank',) # default ordering is ('name',)
|
||||
ma = BandAdmin(Band, None)
|
||||
names = [b.name for b in ma.queryset(request)]
|
||||
self.assertEqual([u'Radiohead', u'Van Halen', u'Aerosmith'], names)
|
||||
self.assertEqual(['Radiohead', 'Van Halen', 'Aerosmith'], names)
|
||||
|
||||
def test_dynamic_ordering(self):
|
||||
"""
|
||||
|
|
@ -65,10 +65,10 @@ class TestAdminOrdering(TestCase):
|
|||
request.user = super_user
|
||||
ma = DynOrderingBandAdmin(Band, None)
|
||||
names = [b.name for b in ma.queryset(request)]
|
||||
self.assertEqual([u'Radiohead', u'Van Halen', u'Aerosmith'], names)
|
||||
self.assertEqual(['Radiohead', 'Van Halen', 'Aerosmith'], names)
|
||||
request.user = other_user
|
||||
names = [b.name for b in ma.queryset(request)]
|
||||
self.assertEqual([u'Aerosmith', u'Radiohead', u'Van Halen'], names)
|
||||
self.assertEqual(['Aerosmith', 'Radiohead', 'Van Halen'], names)
|
||||
|
||||
|
||||
class TestInlineModelAdminOrdering(TestCase):
|
||||
|
|
@ -95,7 +95,7 @@ class TestInlineModelAdminOrdering(TestCase):
|
|||
"""
|
||||
inline = SongInlineDefaultOrdering(self.b, None)
|
||||
names = [s.name for s in inline.queryset(request)]
|
||||
self.assertEqual([u'Dude (Looks Like a Lady)', u'Jaded', u'Pink'], names)
|
||||
self.assertEqual(['Dude (Looks Like a Lady)', 'Jaded', 'Pink'], names)
|
||||
|
||||
def test_specified_ordering(self):
|
||||
"""
|
||||
|
|
@ -103,4 +103,4 @@ class TestInlineModelAdminOrdering(TestCase):
|
|||
"""
|
||||
inline = SongInlineNewOrdering(self.b, None)
|
||||
names = [s.name for s in inline.queryset(request)]
|
||||
self.assertEqual([u'Jaded', u'Pink', u'Dude (Looks Like a Lady)'], names)
|
||||
self.assertEqual(['Jaded', 'Pink', 'Dude (Looks Like a Lady)'], names)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
|
|
@ -138,7 +138,7 @@ class UtilTests(unittest.TestCase):
|
|||
# Regression test for #13071: NullBooleanField has special
|
||||
# handling.
|
||||
display_value = display_for_field(None, models.NullBooleanField())
|
||||
expected = u'<img src="%sadmin/img/icon-unknown.gif" alt="None" />' % settings.STATIC_URL
|
||||
expected = '<img src="%sadmin/img/icon-unknown.gif" alt="None" />' % settings.STATIC_URL
|
||||
self.assertEqual(display_value, expected)
|
||||
|
||||
display_value = display_for_field(None, models.DecimalField())
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import tempfile
|
||||
import os
|
||||
|
|
@ -171,12 +171,12 @@ class PersonAdmin(admin.ModelAdmin):
|
|||
|
||||
class FooAccount(Account):
|
||||
"""A service-specific account of type Foo."""
|
||||
servicename = u'foo'
|
||||
servicename = 'foo'
|
||||
|
||||
|
||||
class BarAccount(Account):
|
||||
"""A service-specific account of type Bar."""
|
||||
servicename = u'bar'
|
||||
servicename = 'bar'
|
||||
|
||||
|
||||
class FooAccountAdmin(admin.StackedInline):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import datetime
|
||||
import tempfile
|
||||
import os
|
||||
|
|
@ -40,14 +42,14 @@ class Book(models.Model):
|
|||
"""
|
||||
A simple book that has chapters.
|
||||
"""
|
||||
name = models.CharField(max_length=100, verbose_name=u'¿Name?')
|
||||
name = models.CharField(max_length=100, verbose_name='¿Name?')
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class Promo(models.Model):
|
||||
name = models.CharField(max_length=100, verbose_name=u'¿Name?')
|
||||
name = models.CharField(max_length=100, verbose_name='¿Name?')
|
||||
book = models.ForeignKey(Book)
|
||||
|
||||
def __unicode__(self):
|
||||
|
|
@ -55,7 +57,7 @@ class Promo(models.Model):
|
|||
|
||||
|
||||
class Chapter(models.Model):
|
||||
title = models.CharField(max_length=100, verbose_name=u'¿Title?')
|
||||
title = models.CharField(max_length=100, verbose_name='¿Title?')
|
||||
content = models.TextField()
|
||||
book = models.ForeignKey(Book)
|
||||
|
||||
|
|
@ -68,19 +70,19 @@ class Chapter(models.Model):
|
|||
|
||||
|
||||
class ChapterXtra1(models.Model):
|
||||
chap = models.OneToOneField(Chapter, verbose_name=u'¿Chap?')
|
||||
xtra = models.CharField(max_length=100, verbose_name=u'¿Xtra?')
|
||||
chap = models.OneToOneField(Chapter, verbose_name='¿Chap?')
|
||||
xtra = models.CharField(max_length=100, verbose_name='¿Xtra?')
|
||||
|
||||
def __unicode__(self):
|
||||
return u'¿Xtra1: %s' % self.xtra
|
||||
return '¿Xtra1: %s' % self.xtra
|
||||
|
||||
|
||||
class ChapterXtra2(models.Model):
|
||||
chap = models.OneToOneField(Chapter, verbose_name=u'¿Chap?')
|
||||
xtra = models.CharField(max_length=100, verbose_name=u'¿Xtra?')
|
||||
chap = models.OneToOneField(Chapter, verbose_name='¿Chap?')
|
||||
xtra = models.CharField(max_length=100, verbose_name='¿Xtra?')
|
||||
|
||||
def __unicode__(self):
|
||||
return u'¿Xtra2: %s' % self.xtra
|
||||
return '¿Xtra2: %s' % self.xtra
|
||||
|
||||
|
||||
class RowLevelChangePermissionModel(models.Model):
|
||||
|
|
@ -130,7 +132,7 @@ class Inquisition(models.Model):
|
|||
country = models.CharField(max_length=20)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"by %s from %s" % (self.leader, self.country)
|
||||
return "by %s from %s" % (self.leader, self.country)
|
||||
|
||||
|
||||
class Sketch(models.Model):
|
||||
|
|
@ -187,7 +189,7 @@ class Account(models.Model):
|
|||
"""
|
||||
username = models.CharField(blank=False, max_length=80)
|
||||
persona = models.ForeignKey(Persona, related_name="accounts")
|
||||
servicename = u'generic service'
|
||||
servicename = 'generic service'
|
||||
|
||||
def __unicode__(self):
|
||||
return "%s: %s" % (self.servicename, self.username)
|
||||
|
|
@ -195,12 +197,12 @@ class Account(models.Model):
|
|||
|
||||
class FooAccount(Account):
|
||||
"""A service-specific account of type Foo."""
|
||||
servicename = u'foo'
|
||||
servicename = 'foo'
|
||||
|
||||
|
||||
class BarAccount(Account):
|
||||
"""A service-specific account of type Bar."""
|
||||
servicename = u'bar'
|
||||
servicename = 'bar'
|
||||
|
||||
|
||||
class Subscriber(models.Model):
|
||||
|
|
@ -335,7 +337,7 @@ class Category(models.Model):
|
|||
ordering = ('order',)
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s:o%s' % (self.id, self.order)
|
||||
return '%s:o%s' % (self.id, self.order)
|
||||
|
||||
|
||||
class Link(models.Model):
|
||||
|
|
@ -493,14 +495,14 @@ class Reservation(models.Model):
|
|||
|
||||
|
||||
DRIVER_CHOICES = (
|
||||
(u'bill', 'Bill G'),
|
||||
(u'steve', 'Steve J'),
|
||||
('bill', 'Bill G'),
|
||||
('steve', 'Steve J'),
|
||||
)
|
||||
|
||||
RESTAURANT_CHOICES = (
|
||||
(u'indian', u'A Taste of India'),
|
||||
(u'thai', u'Thai Pography'),
|
||||
(u'pizza', u'Pizza Mama'),
|
||||
('indian', 'A Taste of India'),
|
||||
('thai', 'Thai Pography'),
|
||||
('pizza', 'Pizza Mama'),
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# coding: utf-8
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import os
|
||||
import re
|
||||
|
|
@ -119,11 +119,11 @@ class AdminViewBasicTest(TestCase):
|
|||
A smoke test to ensure POST on add_view works.
|
||||
"""
|
||||
post_data = {
|
||||
"name": u"Another Section",
|
||||
"name": "Another Section",
|
||||
# inline data
|
||||
"article_set-TOTAL_FORMS": u"3",
|
||||
"article_set-INITIAL_FORMS": u"0",
|
||||
"article_set-MAX_NUM_FORMS": u"0",
|
||||
"article_set-TOTAL_FORMS": "3",
|
||||
"article_set-INITIAL_FORMS": "0",
|
||||
"article_set-MAX_NUM_FORMS": "0",
|
||||
}
|
||||
response = self.client.post('/test_admin/%s/admin_views/section/add/' % self.urlbit, post_data)
|
||||
self.assertEqual(response.status_code, 302) # redirect somewhere
|
||||
|
|
@ -133,56 +133,56 @@ class AdminViewBasicTest(TestCase):
|
|||
Ensure http response from a popup is properly escaped.
|
||||
"""
|
||||
post_data = {
|
||||
'_popup': u'1',
|
||||
'title': u'title with a new\nline',
|
||||
'content': u'some content',
|
||||
'date_0': u'2010-09-10',
|
||||
'date_1': u'14:55:39',
|
||||
'_popup': '1',
|
||||
'title': 'title with a new\nline',
|
||||
'content': 'some content',
|
||||
'date_0': '2010-09-10',
|
||||
'date_1': '14:55:39',
|
||||
}
|
||||
response = self.client.post('/test_admin/%s/admin_views/article/add/' % self.urlbit, post_data)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertContains(response, 'dismissAddAnotherPopup')
|
||||
self.assertContains(response, 'title with a new\u000Aline')
|
||||
self.assertContains(response, 'title with a new\\u000Aline')
|
||||
|
||||
# Post data for edit inline
|
||||
inline_post_data = {
|
||||
"name": u"Test section",
|
||||
"name": "Test section",
|
||||
# inline data
|
||||
"article_set-TOTAL_FORMS": u"6",
|
||||
"article_set-INITIAL_FORMS": u"3",
|
||||
"article_set-MAX_NUM_FORMS": u"0",
|
||||
"article_set-0-id": u"1",
|
||||
"article_set-TOTAL_FORMS": "6",
|
||||
"article_set-INITIAL_FORMS": "3",
|
||||
"article_set-MAX_NUM_FORMS": "0",
|
||||
"article_set-0-id": "1",
|
||||
# there is no title in database, give one here or formset will fail.
|
||||
"article_set-0-title": u"Norske bostaver æøå skaper problemer",
|
||||
"article_set-0-content": u"<p>Middle content</p>",
|
||||
"article_set-0-date_0": u"2008-03-18",
|
||||
"article_set-0-date_1": u"11:54:58",
|
||||
"article_set-0-section": u"1",
|
||||
"article_set-1-id": u"2",
|
||||
"article_set-1-title": u"Need a title.",
|
||||
"article_set-1-content": u"<p>Oldest content</p>",
|
||||
"article_set-1-date_0": u"2000-03-18",
|
||||
"article_set-1-date_1": u"11:54:58",
|
||||
"article_set-2-id": u"3",
|
||||
"article_set-2-title": u"Need a title.",
|
||||
"article_set-2-content": u"<p>Newest content</p>",
|
||||
"article_set-2-date_0": u"2009-03-18",
|
||||
"article_set-2-date_1": u"11:54:58",
|
||||
"article_set-3-id": u"",
|
||||
"article_set-3-title": u"",
|
||||
"article_set-3-content": u"",
|
||||
"article_set-3-date_0": u"",
|
||||
"article_set-3-date_1": u"",
|
||||
"article_set-4-id": u"",
|
||||
"article_set-4-title": u"",
|
||||
"article_set-4-content": u"",
|
||||
"article_set-4-date_0": u"",
|
||||
"article_set-4-date_1": u"",
|
||||
"article_set-5-id": u"",
|
||||
"article_set-5-title": u"",
|
||||
"article_set-5-content": u"",
|
||||
"article_set-5-date_0": u"",
|
||||
"article_set-5-date_1": u"",
|
||||
"article_set-0-title": "Norske bostaver æøå skaper problemer",
|
||||
"article_set-0-content": "<p>Middle content</p>",
|
||||
"article_set-0-date_0": "2008-03-18",
|
||||
"article_set-0-date_1": "11:54:58",
|
||||
"article_set-0-section": "1",
|
||||
"article_set-1-id": "2",
|
||||
"article_set-1-title": "Need a title.",
|
||||
"article_set-1-content": "<p>Oldest content</p>",
|
||||
"article_set-1-date_0": "2000-03-18",
|
||||
"article_set-1-date_1": "11:54:58",
|
||||
"article_set-2-id": "3",
|
||||
"article_set-2-title": "Need a title.",
|
||||
"article_set-2-content": "<p>Newest content</p>",
|
||||
"article_set-2-date_0": "2009-03-18",
|
||||
"article_set-2-date_1": "11:54:58",
|
||||
"article_set-3-id": "",
|
||||
"article_set-3-title": "",
|
||||
"article_set-3-content": "",
|
||||
"article_set-3-date_0": "",
|
||||
"article_set-3-date_1": "",
|
||||
"article_set-4-id": "",
|
||||
"article_set-4-title": "",
|
||||
"article_set-4-content": "",
|
||||
"article_set-4-date_0": "",
|
||||
"article_set-4-date_1": "",
|
||||
"article_set-5-id": "",
|
||||
"article_set-5-title": "",
|
||||
"article_set-5-content": "",
|
||||
"article_set-5-date_0": "",
|
||||
"article_set-5-date_1": "",
|
||||
}
|
||||
|
||||
def testBasicEditPost(self):
|
||||
|
|
@ -198,12 +198,12 @@ class AdminViewBasicTest(TestCase):
|
|||
"""
|
||||
post_data = self.inline_post_data.copy()
|
||||
post_data.update({
|
||||
'_saveasnew': u'Save+as+new',
|
||||
"article_set-1-section": u"1",
|
||||
"article_set-2-section": u"1",
|
||||
"article_set-3-section": u"1",
|
||||
"article_set-4-section": u"1",
|
||||
"article_set-5-section": u"1",
|
||||
'_saveasnew': 'Save+as+new',
|
||||
"article_set-1-section": "1",
|
||||
"article_set-2-section": "1",
|
||||
"article_set-3-section": "1",
|
||||
"article_set-4-section": "1",
|
||||
"article_set-5-section": "1",
|
||||
})
|
||||
response = self.client.post('/test_admin/%s/admin_views/section/1/' % self.urlbit, post_data)
|
||||
self.assertEqual(response.status_code, 302) # redirect somewhere
|
||||
|
|
@ -1029,14 +1029,13 @@ class AdminViewPermissionsTest(TestCase):
|
|||
# one error in form should produce singular error message, multiple errors plural
|
||||
change_dict['title'] = ''
|
||||
post = self.client.post('/test_admin/admin/admin_views/article/1/', change_dict)
|
||||
self.assertEqual(request.status_code, 200)
|
||||
self.assertTrue('Please correct the error below.' in post.content,
|
||||
'Singular error message not found in response to post with one error.')
|
||||
self.assertContains(post, 'Please correct the error below.',
|
||||
msg_prefix='Singular error message not found in response to post with one error')
|
||||
|
||||
change_dict['content'] = ''
|
||||
post = self.client.post('/test_admin/admin/admin_views/article/1/', change_dict)
|
||||
self.assertEqual(request.status_code, 200)
|
||||
self.assertTrue('Please correct the errors below.' in post.content,
|
||||
'Plural error message not found in response to post with multiple errors.')
|
||||
self.assertContains(post, 'Please correct the errors below.',
|
||||
msg_prefix='Plural error message not found in response to post with multiple errors')
|
||||
self.client.get('/test_admin/admin/logout/')
|
||||
|
||||
# Test redirection when using row-level change permissions. Refs #11513.
|
||||
|
|
@ -1167,7 +1166,7 @@ class AdminViewPermissionsTest(TestCase):
|
|||
self.assertEqual(mail.outbox[0].subject, 'Greetings from a deleted object')
|
||||
article_ct = ContentType.objects.get_for_model(Article)
|
||||
logged = LogEntry.objects.get(content_type=article_ct, action_flag=DELETION)
|
||||
self.assertEqual(logged.object_id, u'1')
|
||||
self.assertEqual(logged.object_id, '1')
|
||||
self.client.get('/test_admin/admin/logout/')
|
||||
|
||||
def testDisabledPermissionsWhenLoggedIn(self):
|
||||
|
|
@ -1601,29 +1600,29 @@ class AdminViewUnicodeTest(TestCase):
|
|||
A test to ensure that POST on edit_view handles non-ascii characters.
|
||||
"""
|
||||
post_data = {
|
||||
"name": u"Test lærdommer",
|
||||
"name": "Test lærdommer",
|
||||
# inline data
|
||||
"chapter_set-TOTAL_FORMS": u"6",
|
||||
"chapter_set-INITIAL_FORMS": u"3",
|
||||
"chapter_set-MAX_NUM_FORMS": u"0",
|
||||
"chapter_set-0-id": u"1",
|
||||
"chapter_set-0-title": u"Norske bostaver æøå skaper problemer",
|
||||
"chapter_set-0-content": u"<p>Svært frustrerende med UnicodeDecodeError</p>",
|
||||
"chapter_set-1-id": u"2",
|
||||
"chapter_set-1-title": u"Kjærlighet.",
|
||||
"chapter_set-1-content": u"<p>La kjærligheten til de lidende seire.</p>",
|
||||
"chapter_set-2-id": u"3",
|
||||
"chapter_set-2-title": u"Need a title.",
|
||||
"chapter_set-2-content": u"<p>Newest content</p>",
|
||||
"chapter_set-3-id": u"",
|
||||
"chapter_set-3-title": u"",
|
||||
"chapter_set-3-content": u"",
|
||||
"chapter_set-4-id": u"",
|
||||
"chapter_set-4-title": u"",
|
||||
"chapter_set-4-content": u"",
|
||||
"chapter_set-5-id": u"",
|
||||
"chapter_set-5-title": u"",
|
||||
"chapter_set-5-content": u"",
|
||||
"chapter_set-TOTAL_FORMS": "6",
|
||||
"chapter_set-INITIAL_FORMS": "3",
|
||||
"chapter_set-MAX_NUM_FORMS": "0",
|
||||
"chapter_set-0-id": "1",
|
||||
"chapter_set-0-title": "Norske bostaver æøå skaper problemer",
|
||||
"chapter_set-0-content": "<p>Svært frustrerende med UnicodeDecodeError</p>",
|
||||
"chapter_set-1-id": "2",
|
||||
"chapter_set-1-title": "Kjærlighet.",
|
||||
"chapter_set-1-content": "<p>La kjærligheten til de lidende seire.</p>",
|
||||
"chapter_set-2-id": "3",
|
||||
"chapter_set-2-title": "Need a title.",
|
||||
"chapter_set-2-content": "<p>Newest content</p>",
|
||||
"chapter_set-3-id": "",
|
||||
"chapter_set-3-title": "",
|
||||
"chapter_set-3-content": "",
|
||||
"chapter_set-4-id": "",
|
||||
"chapter_set-4-title": "",
|
||||
"chapter_set-4-content": "",
|
||||
"chapter_set-5-id": "",
|
||||
"chapter_set-5-title": "",
|
||||
"chapter_set-5-content": "",
|
||||
}
|
||||
|
||||
response = self.client.post('/test_admin/admin/admin_views/book/1/', post_data)
|
||||
|
|
@ -1940,8 +1939,8 @@ class AdminViewListEditable(TestCase):
|
|||
"form-2-id": "3",
|
||||
|
||||
"index": "0",
|
||||
"_selected_action": [u'3'],
|
||||
"action": [u'', u'delete_selected'],
|
||||
"_selected_action": ['3'],
|
||||
"action": ['', 'delete_selected'],
|
||||
}
|
||||
self.client.post('/test_admin/admin/admin_views/person/', data)
|
||||
|
||||
|
|
@ -1967,8 +1966,8 @@ class AdminViewListEditable(TestCase):
|
|||
"form-2-id": "3",
|
||||
|
||||
"_save": "Save",
|
||||
"_selected_action": [u'1'],
|
||||
"action": [u'', u'delete_selected'],
|
||||
"_selected_action": ['1'],
|
||||
"action": ['', 'delete_selected'],
|
||||
}
|
||||
self.client.post('/test_admin/admin/admin_views/person/', data)
|
||||
|
||||
|
|
@ -2077,8 +2076,8 @@ class AdminInheritedInlinesTest(TestCase):
|
|||
def testInline(self):
|
||||
"Ensure that inline models which inherit from a common parent are correctly handled by admin."
|
||||
|
||||
foo_user = u"foo username"
|
||||
bar_user = u"bar username"
|
||||
foo_user = "foo username"
|
||||
bar_user = "bar username"
|
||||
|
||||
name_re = re.compile('name="(.*?)"')
|
||||
|
||||
|
|
@ -2090,15 +2089,15 @@ class AdminInheritedInlinesTest(TestCase):
|
|||
|
||||
# test the add case
|
||||
post_data = {
|
||||
"name": u"Test Name",
|
||||
"name": "Test Name",
|
||||
# inline data
|
||||
"accounts-TOTAL_FORMS": u"1",
|
||||
"accounts-INITIAL_FORMS": u"0",
|
||||
"accounts-MAX_NUM_FORMS": u"0",
|
||||
"accounts-TOTAL_FORMS": "1",
|
||||
"accounts-INITIAL_FORMS": "0",
|
||||
"accounts-MAX_NUM_FORMS": "0",
|
||||
"accounts-0-username": foo_user,
|
||||
"accounts-2-TOTAL_FORMS": u"1",
|
||||
"accounts-2-INITIAL_FORMS": u"0",
|
||||
"accounts-2-MAX_NUM_FORMS": u"0",
|
||||
"accounts-2-TOTAL_FORMS": "1",
|
||||
"accounts-2-INITIAL_FORMS": "0",
|
||||
"accounts-2-MAX_NUM_FORMS": "0",
|
||||
"accounts-2-0-username": bar_user,
|
||||
}
|
||||
|
||||
|
|
@ -2123,19 +2122,19 @@ class AdminInheritedInlinesTest(TestCase):
|
|||
self.assertEqual(len(names), len(set(names)))
|
||||
|
||||
post_data = {
|
||||
"name": u"Test Name",
|
||||
"name": "Test Name",
|
||||
|
||||
"accounts-TOTAL_FORMS": "2",
|
||||
"accounts-INITIAL_FORMS": u"1",
|
||||
"accounts-MAX_NUM_FORMS": u"0",
|
||||
"accounts-INITIAL_FORMS": "1",
|
||||
"accounts-MAX_NUM_FORMS": "0",
|
||||
|
||||
"accounts-0-username": "%s-1" % foo_user,
|
||||
"accounts-0-account_ptr": str(foo_id),
|
||||
"accounts-0-persona": str(persona_id),
|
||||
|
||||
"accounts-2-TOTAL_FORMS": u"2",
|
||||
"accounts-2-INITIAL_FORMS": u"1",
|
||||
"accounts-2-MAX_NUM_FORMS": u"0",
|
||||
"accounts-2-TOTAL_FORMS": "2",
|
||||
"accounts-2-INITIAL_FORMS": "1",
|
||||
"accounts-2-MAX_NUM_FORMS": "0",
|
||||
|
||||
"accounts-2-0-username": "%s-1" % bar_user,
|
||||
"accounts-2-0-account_ptr": str(bar_id),
|
||||
|
|
@ -2387,7 +2386,7 @@ class TestCustomChangeList(TestCase):
|
|||
Validate that a custom ChangeList class can be used (#9749)
|
||||
"""
|
||||
# Insert some data
|
||||
post_data = {"name": u"First Gadget"}
|
||||
post_data = {"name": "First Gadget"}
|
||||
response = self.client.post('/test_admin/%s/admin_views/gadget/add/' % self.urlbit, post_data)
|
||||
self.assertEqual(response.status_code, 302) # redirect somewhere
|
||||
# Hit the page once to get messages out of the queue message list
|
||||
|
|
@ -2444,12 +2443,12 @@ class AdminCustomQuerysetTest(TestCase):
|
|||
|
||||
def test_add_model_modeladmin_only_qs(self):
|
||||
# only() is used in ModelAdmin.queryset()
|
||||
p = Paper.objects.create(title=u"My Paper Title")
|
||||
p = Paper.objects.create(title="My Paper Title")
|
||||
self.assertEqual(Paper.objects.count(), 1)
|
||||
response = self.client.get('/test_admin/admin/admin_views/paper/%s/' % p.pk)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
post_data = {
|
||||
"title": u"My Modified Paper Title",
|
||||
"title": "My Modified Paper Title",
|
||||
"_save": "Save",
|
||||
}
|
||||
response = self.client.post('/test_admin/admin/admin_views/paper/%s/' % p.pk,
|
||||
|
|
@ -2459,12 +2458,12 @@ class AdminCustomQuerysetTest(TestCase):
|
|||
self.assertContains(response, '<li class="info">The paper "Paper_Deferred_author object" was changed successfully.</li>', html=True)
|
||||
|
||||
# defer() is used in ModelAdmin.queryset()
|
||||
cl = CoverLetter.objects.create(author=u"John Doe")
|
||||
cl = CoverLetter.objects.create(author="John Doe")
|
||||
self.assertEqual(CoverLetter.objects.count(), 1)
|
||||
response = self.client.get('/test_admin/admin/admin_views/coverletter/%s/' % cl.pk)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
post_data = {
|
||||
"author": u"John Doe II",
|
||||
"author": "John Doe II",
|
||||
"_save": "Save",
|
||||
}
|
||||
response = self.client.post('/test_admin/admin/admin_views/coverletter/%s/' % cl.pk,
|
||||
|
|
@ -2503,10 +2502,10 @@ class AdminInlineFileUploadTest(TestCase):
|
|||
Test that inline file uploads correctly display prior data (#10002).
|
||||
"""
|
||||
post_data = {
|
||||
"name": u"Test Gallery",
|
||||
"pictures-TOTAL_FORMS": u"2",
|
||||
"pictures-INITIAL_FORMS": u"1",
|
||||
"pictures-MAX_NUM_FORMS": u"0",
|
||||
"name": "Test Gallery",
|
||||
"pictures-TOTAL_FORMS": "2",
|
||||
"pictures-INITIAL_FORMS": "1",
|
||||
"pictures-MAX_NUM_FORMS": "0",
|
||||
"pictures-0-id": unicode(self.picture.id),
|
||||
"pictures-0-gallery": unicode(self.gallery.id),
|
||||
"pictures-0-name": "Test Picture",
|
||||
|
|
@ -2527,11 +2526,11 @@ class AdminInlineTests(TestCase):
|
|||
|
||||
def setUp(self):
|
||||
self.post_data = {
|
||||
"name": u"Test Name",
|
||||
"name": "Test Name",
|
||||
|
||||
"widget_set-TOTAL_FORMS": "3",
|
||||
"widget_set-INITIAL_FORMS": u"0",
|
||||
"widget_set-MAX_NUM_FORMS": u"0",
|
||||
"widget_set-INITIAL_FORMS": "0",
|
||||
"widget_set-MAX_NUM_FORMS": "0",
|
||||
"widget_set-0-id": "",
|
||||
"widget_set-0-owner": "1",
|
||||
"widget_set-0-name": "",
|
||||
|
|
@ -2543,8 +2542,8 @@ class AdminInlineTests(TestCase):
|
|||
"widget_set-2-name": "",
|
||||
|
||||
"doohickey_set-TOTAL_FORMS": "3",
|
||||
"doohickey_set-INITIAL_FORMS": u"0",
|
||||
"doohickey_set-MAX_NUM_FORMS": u"0",
|
||||
"doohickey_set-INITIAL_FORMS": "0",
|
||||
"doohickey_set-MAX_NUM_FORMS": "0",
|
||||
"doohickey_set-0-owner": "1",
|
||||
"doohickey_set-0-code": "",
|
||||
"doohickey_set-0-name": "",
|
||||
|
|
@ -2556,8 +2555,8 @@ class AdminInlineTests(TestCase):
|
|||
"doohickey_set-2-name": "",
|
||||
|
||||
"grommet_set-TOTAL_FORMS": "3",
|
||||
"grommet_set-INITIAL_FORMS": u"0",
|
||||
"grommet_set-MAX_NUM_FORMS": u"0",
|
||||
"grommet_set-INITIAL_FORMS": "0",
|
||||
"grommet_set-MAX_NUM_FORMS": "0",
|
||||
"grommet_set-0-code": "",
|
||||
"grommet_set-0-owner": "1",
|
||||
"grommet_set-0-name": "",
|
||||
|
|
@ -2569,8 +2568,8 @@ class AdminInlineTests(TestCase):
|
|||
"grommet_set-2-name": "",
|
||||
|
||||
"whatsit_set-TOTAL_FORMS": "3",
|
||||
"whatsit_set-INITIAL_FORMS": u"0",
|
||||
"whatsit_set-MAX_NUM_FORMS": u"0",
|
||||
"whatsit_set-INITIAL_FORMS": "0",
|
||||
"whatsit_set-MAX_NUM_FORMS": "0",
|
||||
"whatsit_set-0-owner": "1",
|
||||
"whatsit_set-0-index": "",
|
||||
"whatsit_set-0-name": "",
|
||||
|
|
@ -2582,8 +2581,8 @@ class AdminInlineTests(TestCase):
|
|||
"whatsit_set-2-name": "",
|
||||
|
||||
"fancydoodad_set-TOTAL_FORMS": "3",
|
||||
"fancydoodad_set-INITIAL_FORMS": u"0",
|
||||
"fancydoodad_set-MAX_NUM_FORMS": u"0",
|
||||
"fancydoodad_set-INITIAL_FORMS": "0",
|
||||
"fancydoodad_set-MAX_NUM_FORMS": "0",
|
||||
"fancydoodad_set-0-doodad_ptr": "",
|
||||
"fancydoodad_set-0-owner": "1",
|
||||
"fancydoodad_set-0-name": "",
|
||||
|
|
@ -2969,7 +2968,7 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase):
|
|||
# Main form ----------------------------------------------------------
|
||||
self.selenium.find_element_by_css_selector('#id_pubdate').send_keys('2012-02-18')
|
||||
self.get_select_option('#id_status', 'option two').click()
|
||||
self.selenium.find_element_by_css_selector('#id_name').send_keys(u' this is the mAin nÀMë and it\'s awεšome')
|
||||
self.selenium.find_element_by_css_selector('#id_name').send_keys(' this is the mAin nÀMë and it\'s awεšome')
|
||||
slug1 = self.selenium.find_element_by_css_selector('#id_slug1').get_attribute('value')
|
||||
slug2 = self.selenium.find_element_by_css_selector('#id_slug2').get_attribute('value')
|
||||
self.assertEqual(slug1, 'main-name-and-its-awesome-2012-02-18')
|
||||
|
|
@ -2979,7 +2978,7 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase):
|
|||
# Initial inline
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-0-pubdate').send_keys('2011-12-17')
|
||||
self.get_select_option('#id_relatedprepopulated_set-0-status', 'option one').click()
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-0-name').send_keys(u' here is a sŤāÇkeð inline ! ')
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-0-name').send_keys(' here is a sŤāÇkeð inline ! ')
|
||||
slug1 = self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-0-slug1').get_attribute('value')
|
||||
slug2 = self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-0-slug2').get_attribute('value')
|
||||
self.assertEqual(slug1, 'here-stacked-inline-2011-12-17')
|
||||
|
|
@ -2989,7 +2988,7 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase):
|
|||
self.selenium.find_elements_by_link_text('Add another Related Prepopulated')[0].click()
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-1-pubdate').send_keys('1999-01-25')
|
||||
self.get_select_option('#id_relatedprepopulated_set-1-status', 'option two').click()
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-1-name').send_keys(u' now you haVe anöther sŤāÇkeð inline with a very ... loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog text... ')
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-1-name').send_keys(' now you haVe anöther sŤāÇkeð inline with a very ... loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooog text... ')
|
||||
slug1 = self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-1-slug1').get_attribute('value')
|
||||
slug2 = self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-1-slug2').get_attribute('value')
|
||||
self.assertEqual(slug1, 'now-you-have-another-stacked-inline-very-loooooooo') # 50 characters maximum for slug1 field
|
||||
|
|
@ -2999,7 +2998,7 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase):
|
|||
# Initial inline
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-0-pubdate').send_keys('1234-12-07')
|
||||
self.get_select_option('#id_relatedprepopulated_set-2-0-status', 'option two').click()
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-0-name').send_keys(u'And now, with a tÃbűlaŘ inline !!!')
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-0-name').send_keys('And now, with a tÃbűlaŘ inline !!!')
|
||||
slug1 = self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-0-slug1').get_attribute('value')
|
||||
slug2 = self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-0-slug2').get_attribute('value')
|
||||
self.assertEqual(slug1, 'and-now-tabular-inline-1234-12-07')
|
||||
|
|
@ -3009,7 +3008,7 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase):
|
|||
self.selenium.find_elements_by_link_text('Add another Related Prepopulated')[1].click()
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-1-pubdate').send_keys('1981-08-22')
|
||||
self.get_select_option('#id_relatedprepopulated_set-2-1-status', 'option one').click()
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-1-name').send_keys(u'a tÃbűlaŘ inline with ignored ;"&*^\%$#@-/`~ characters')
|
||||
self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-1-name').send_keys('a tÃbűlaŘ inline with ignored ;"&*^\%$#@-/`~ characters')
|
||||
slug1 = self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-1-slug1').get_attribute('value')
|
||||
slug2 = self.selenium.find_element_by_css_selector('#id_relatedprepopulated_set-2-1-slug2').get_attribute('value')
|
||||
self.assertEqual(slug1, 'tabular-inline-ignored-characters-1981-08-22')
|
||||
|
|
@ -3029,7 +3028,7 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase):
|
|||
|
||||
self.assertEqual(MainPrepopulated.objects.all().count(), 1)
|
||||
MainPrepopulated.objects.get(
|
||||
name=u' this is the mAin nÀMë and it\'s awεšome',
|
||||
name=' this is the mAin nÀMë and it\'s awεšome',
|
||||
pubdate='2012-02-18',
|
||||
status='option two',
|
||||
slug1='main-name-and-its-awesome-2012-02-18',
|
||||
|
|
@ -3037,28 +3036,28 @@ class SeleniumPrePopulatedFirefoxTests(AdminSeleniumWebDriverTestCase):
|
|||
)
|
||||
self.assertEqual(RelatedPrepopulated.objects.all().count(), 4)
|
||||
RelatedPrepopulated.objects.get(
|
||||
name=u' here is a sŤāÇkeð inline ! ',
|
||||
name=' here is a sŤāÇkeð inline ! ',
|
||||
pubdate='2011-12-17',
|
||||
status='option one',
|
||||
slug1='here-stacked-inline-2011-12-17',
|
||||
slug2='option-one-here-stacked-inline',
|
||||
)
|
||||
RelatedPrepopulated.objects.get(
|
||||
name=u' now you haVe anöther sŤāÇkeð inline with a very ... loooooooooooooooooo', # 75 characters in name field
|
||||
name=' now you haVe anöther sŤāÇkeð inline with a very ... loooooooooooooooooo', # 75 characters in name field
|
||||
pubdate='1999-01-25',
|
||||
status='option two',
|
||||
slug1='now-you-have-another-stacked-inline-very-loooooooo',
|
||||
slug2='option-two-now-you-have-another-stacked-inline-very-looooooo',
|
||||
)
|
||||
RelatedPrepopulated.objects.get(
|
||||
name=u'And now, with a tÃbűlaŘ inline !!!',
|
||||
name='And now, with a tÃbűlaŘ inline !!!',
|
||||
pubdate='1234-12-07',
|
||||
status='option two',
|
||||
slug1='and-now-tabular-inline-1234-12-07',
|
||||
slug2='option-two-and-now-tabular-inline',
|
||||
)
|
||||
RelatedPrepopulated.objects.get(
|
||||
name=u'a tÃbűlaŘ inline with ignored ;"&*^\%$#@-/`~ characters',
|
||||
name='a tÃbűlaŘ inline with ignored ;"&*^\%$#@-/`~ characters',
|
||||
pubdate='1981-08-22',
|
||||
status='option one',
|
||||
slug1='tabular-inline-ignored-characters-1981-08-22',
|
||||
|
|
@ -3230,7 +3229,7 @@ class UserAdminTest(TestCase):
|
|||
adminform = response.context['adminform']
|
||||
self.assertTrue('password' not in adminform.form.errors)
|
||||
self.assertEqual(adminform.form.errors['password2'],
|
||||
[u"The two password fields didn't match."])
|
||||
["The two password fields didn't match."])
|
||||
|
||||
def test_user_fk_popup(self):
|
||||
"""Quick user addition in a FK popup shouldn't invoke view for further user customization"""
|
||||
|
|
@ -3569,7 +3568,7 @@ class AdminCustomSaveRelatedTests(TestCase):
|
|||
children_names = list(Child.objects.order_by('name').values_list('name', flat=True))
|
||||
|
||||
self.assertEqual('Josh Stone', Parent.objects.latest('id').name)
|
||||
self.assertEqual([u'Catherine Stone', u'Paul Stone'], children_names)
|
||||
self.assertEqual(['Catherine Stone', 'Paul Stone'], children_names)
|
||||
|
||||
def test_should_be_able_to_edit_related_objects_on_change_view(self):
|
||||
parent = Parent.objects.create(name='Josh Stone')
|
||||
|
|
@ -3589,7 +3588,7 @@ class AdminCustomSaveRelatedTests(TestCase):
|
|||
children_names = list(Child.objects.order_by('name').values_list('name', flat=True))
|
||||
|
||||
self.assertEqual('Josh Stone', Parent.objects.latest('id').name)
|
||||
self.assertEqual([u'Catherine Stone', u'Paul Stone'], children_names)
|
||||
self.assertEqual(['Catherine Stone', 'Paul Stone'], children_names)
|
||||
|
||||
def test_should_be_able_to_edit_related_objects_on_changelist_view(self):
|
||||
parent = Parent.objects.create(name='Josh Rock')
|
||||
|
|
@ -3608,7 +3607,7 @@ class AdminCustomSaveRelatedTests(TestCase):
|
|||
children_names = list(Child.objects.order_by('name').values_list('name', flat=True))
|
||||
|
||||
self.assertEqual('Josh Stone', Parent.objects.latest('id').name)
|
||||
self.assertEqual([u'Catherine Stone', u'Paul Stone'], children_names)
|
||||
self.assertEqual(['Catherine Stone', 'Paul Stone'], children_names)
|
||||
|
||||
|
||||
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
|
@ -60,7 +62,7 @@ class Car(models.Model):
|
|||
model = models.CharField(max_length=30)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s %s" % (self.make, self.model)
|
||||
return "%s %s" % (self.make, self.model)
|
||||
|
||||
class CarTire(models.Model):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# encoding: utf-8
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
|
|
@ -169,7 +169,7 @@ class AdminForeignKeyRawIdWidget(DjangoTestCase):
|
|||
pk = band.pk
|
||||
band.delete()
|
||||
post_data = {
|
||||
"band": u'%s' % pk,
|
||||
"band": '%s' % pk,
|
||||
}
|
||||
# Try posting with a non-existent pk in a raw id field: this
|
||||
# should result in an error message, not a server exception.
|
||||
|
|
@ -379,10 +379,10 @@ class ManyToManyRawIdWidgetTest(DjangoTestCase):
|
|||
|
||||
self.assertEqual(w._has_changed(None, None), False)
|
||||
self.assertEqual(w._has_changed([], None), False)
|
||||
self.assertEqual(w._has_changed(None, [u'1']), True)
|
||||
self.assertEqual(w._has_changed([1, 2], [u'1', u'2']), False)
|
||||
self.assertEqual(w._has_changed([1, 2], [u'1']), True)
|
||||
self.assertEqual(w._has_changed([1, 2], [u'1', u'3']), True)
|
||||
self.assertEqual(w._has_changed(None, ['1']), True)
|
||||
self.assertEqual(w._has_changed([1, 2], ['1', '2']), False)
|
||||
self.assertEqual(w._has_changed([1, 2], ['1']), True)
|
||||
self.assertEqual(w._has_changed([1, 2], ['1', '3']), True)
|
||||
|
||||
def test_m2m_related_model_not_in_admin(self):
|
||||
# M2M relationship with model not registered with admin site. Raw ID
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
import pickle
|
||||
|
|
@ -119,7 +119,7 @@ class AggregationTests(TestCase):
|
|||
self.assertObjectAttrs(obj,
|
||||
contact_id=3,
|
||||
id=2,
|
||||
isbn=u'067232959',
|
||||
isbn='067232959',
|
||||
mean_auth_age=45.0,
|
||||
name='Sams Teach Yourself Django in 24 Hours',
|
||||
pages=528,
|
||||
|
|
@ -136,9 +136,9 @@ class AggregationTests(TestCase):
|
|||
self.assertObjectAttrs(obj,
|
||||
contact_id=3,
|
||||
id=2,
|
||||
isbn=u'067232959',
|
||||
isbn='067232959',
|
||||
mean_auth_age=45.0,
|
||||
name=u'Sams Teach Yourself Django in 24 Hours',
|
||||
name='Sams Teach Yourself Django in 24 Hours',
|
||||
pages=528,
|
||||
price=Decimal("23.09"),
|
||||
pubdate=datetime.date(2008, 3, 3),
|
||||
|
|
@ -156,9 +156,9 @@ class AggregationTests(TestCase):
|
|||
self.assertEqual(obj, {
|
||||
"contact_id": 3,
|
||||
"id": 2,
|
||||
"isbn": u"067232959",
|
||||
"isbn": "067232959",
|
||||
"mean_auth_age": 45.0,
|
||||
"name": u"Sams Teach Yourself Django in 24 Hours",
|
||||
"name": "Sams Teach Yourself Django in 24 Hours",
|
||||
"pages": 528,
|
||||
"price": Decimal("23.09"),
|
||||
"pubdate": datetime.date(2008, 3, 3),
|
||||
|
|
@ -175,9 +175,9 @@ class AggregationTests(TestCase):
|
|||
self.assertEqual(obj, {
|
||||
'contact_id': 3,
|
||||
'id': 2,
|
||||
'isbn': u'067232959',
|
||||
'isbn': '067232959',
|
||||
'mean_auth_age': 45.0,
|
||||
'name': u'Sams Teach Yourself Django in 24 Hours',
|
||||
'name': 'Sams Teach Yourself Django in 24 Hours',
|
||||
'pages': 528,
|
||||
'price': Decimal("23.09"),
|
||||
'pubdate': datetime.date(2008, 3, 3),
|
||||
|
|
@ -189,13 +189,13 @@ class AggregationTests(TestCase):
|
|||
# unless it is explicitly named
|
||||
obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(select={'price_per_page' : 'price / pages'}).values('name').get(pk=1)
|
||||
self.assertEqual(obj, {
|
||||
"name": u'The Definitive Guide to Django: Web Development Done Right',
|
||||
"name": 'The Definitive Guide to Django: Web Development Done Right',
|
||||
})
|
||||
|
||||
obj = Book.objects.annotate(mean_auth_age=Avg('authors__age')).extra(select={'price_per_page' : 'price / pages'}).values('name','mean_auth_age').get(pk=1)
|
||||
self.assertEqual(obj, {
|
||||
'mean_auth_age': 34.5,
|
||||
'name': u'The Definitive Guide to Django: Web Development Done Right',
|
||||
'name': 'The Definitive Guide to Django: Web Development Done Right',
|
||||
})
|
||||
|
||||
# If an annotation isn't included in the values, it can still be used
|
||||
|
|
@ -203,7 +203,7 @@ class AggregationTests(TestCase):
|
|||
qs = Book.objects.annotate(n_authors=Count('authors')).values('name').filter(n_authors__gt=2)
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
{"name": u'Python Web Development with Django'}
|
||||
{"name": 'Python Web Development with Django'}
|
||||
],
|
||||
lambda b: b,
|
||||
)
|
||||
|
|
@ -213,7 +213,7 @@ class AggregationTests(TestCase):
|
|||
obj = Book.objects.values('name').annotate(mean_auth_age=Avg('authors__age')).extra(select={'price_per_page' : 'price / pages'}).get(pk=1)
|
||||
self.assertEqual(obj, {
|
||||
'mean_auth_age': 34.5,
|
||||
'name': u'The Definitive Guide to Django: Web Development Done Right',
|
||||
'name': 'The Definitive Guide to Django: Web Development Done Right',
|
||||
})
|
||||
|
||||
# Check that all of the objects are getting counted (allow_nulls) and
|
||||
|
|
@ -298,8 +298,8 @@ class AggregationTests(TestCase):
|
|||
self.assertEqual(obj, {
|
||||
'contact_id': 8,
|
||||
'id': 5,
|
||||
'isbn': u'013790395',
|
||||
'name': u'Artificial Intelligence: A Modern Approach',
|
||||
'isbn': '013790395',
|
||||
'name': 'Artificial Intelligence: A Modern Approach',
|
||||
'num_authors': 2,
|
||||
'pages': 1132,
|
||||
'price': Decimal("82.8"),
|
||||
|
|
@ -338,8 +338,8 @@ class AggregationTests(TestCase):
|
|||
qs = Publisher.objects.annotate(num_books=Count('book')).filter(num_books__lt=F('num_awards')/2).order_by('name').values('name','num_books','num_awards')
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
{'num_books': 1, 'name': u'Morgan Kaufmann', 'num_awards': 9},
|
||||
{'num_books': 2, 'name': u'Prentice Hall', 'num_awards': 7}
|
||||
{'num_books': 1, 'name': 'Morgan Kaufmann', 'num_awards': 9},
|
||||
{'num_books': 2, 'name': 'Prentice Hall', 'num_awards': 7}
|
||||
],
|
||||
lambda p: p,
|
||||
)
|
||||
|
|
@ -347,9 +347,9 @@ class AggregationTests(TestCase):
|
|||
qs = Publisher.objects.annotate(num_books=Count('book')).exclude(num_books__lt=F('num_awards')/2).order_by('name').values('name','num_books','num_awards')
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
{'num_books': 2, 'name': u'Apress', 'num_awards': 3},
|
||||
{'num_books': 0, 'name': u"Jonno's House of Books", 'num_awards': 0},
|
||||
{'num_books': 1, 'name': u'Sams', 'num_awards': 1}
|
||||
{'num_books': 2, 'name': 'Apress', 'num_awards': 3},
|
||||
{'num_books': 0, 'name': "Jonno's House of Books", 'num_awards': 0},
|
||||
{'num_books': 1, 'name': 'Sams', 'num_awards': 1}
|
||||
],
|
||||
lambda p: p,
|
||||
)
|
||||
|
|
@ -358,8 +358,8 @@ class AggregationTests(TestCase):
|
|||
qs = Publisher.objects.annotate(num_books=Count('book')).filter(num_awards__gt=2*F('num_books')).order_by('name').values('name','num_books','num_awards')
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
{'num_books': 1, 'name': u'Morgan Kaufmann', 'num_awards': 9},
|
||||
{'num_books': 2, 'name': u'Prentice Hall', 'num_awards': 7}
|
||||
{'num_books': 1, 'name': 'Morgan Kaufmann', 'num_awards': 9},
|
||||
{'num_books': 2, 'name': 'Prentice Hall', 'num_awards': 7}
|
||||
],
|
||||
lambda p: p,
|
||||
)
|
||||
|
|
@ -367,9 +367,9 @@ class AggregationTests(TestCase):
|
|||
qs = Publisher.objects.annotate(num_books=Count('book')).exclude(num_books__lt=F('num_awards')/2).order_by('name').values('name','num_books','num_awards')
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
{'num_books': 2, 'name': u'Apress', 'num_awards': 3},
|
||||
{'num_books': 0, 'name': u"Jonno's House of Books", 'num_awards': 0},
|
||||
{'num_books': 1, 'name': u'Sams', 'num_awards': 1}
|
||||
{'num_books': 2, 'name': 'Apress', 'num_awards': 3},
|
||||
{'num_books': 0, 'name': "Jonno's House of Books", 'num_awards': 0},
|
||||
{'num_books': 1, 'name': 'Sams', 'num_awards': 1}
|
||||
],
|
||||
lambda p: p,
|
||||
)
|
||||
|
|
@ -399,7 +399,7 @@ class AggregationTests(TestCase):
|
|||
qs = Publisher.objects.filter(pk=5).annotate(num_authors=Count('book__authors'), avg_authors=Avg('book__authors'), max_authors=Max('book__authors'), max_price=Max('book__price'), max_rating=Max('book__rating')).values()
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
{'max_authors': None, 'name': u"Jonno's House of Books", 'num_awards': 0, 'max_price': None, 'num_authors': 0, 'max_rating': None, 'id': 5, 'avg_authors': None}
|
||||
{'max_authors': None, 'name': "Jonno's House of Books", 'num_awards': 0, 'max_price': None, 'num_authors': 0, 'max_rating': None, 'id': 5, 'avg_authors': None}
|
||||
],
|
||||
lambda p: p
|
||||
)
|
||||
|
|
@ -424,10 +424,10 @@ class AggregationTests(TestCase):
|
|||
qs = Book.objects.filter(rating__lt=4.5).select_related().annotate(Avg('authors__age'))
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
(u'Artificial Intelligence: A Modern Approach', 51.5, u'Prentice Hall', u'Peter Norvig'),
|
||||
(u'Practical Django Projects', 29.0, u'Apress', u'James Bennett'),
|
||||
(u'Python Web Development with Django', Approximate(30.333, places=2), u'Prentice Hall', u'Jeffrey Forcier'),
|
||||
(u'Sams Teach Yourself Django in 24 Hours', 45.0, u'Sams', u'Brad Dayley')
|
||||
('Artificial Intelligence: A Modern Approach', 51.5, 'Prentice Hall', 'Peter Norvig'),
|
||||
('Practical Django Projects', 29.0, 'Apress', 'James Bennett'),
|
||||
('Python Web Development with Django', Approximate(30.333, places=2), 'Prentice Hall', 'Jeffrey Forcier'),
|
||||
('Sams Teach Yourself Django in 24 Hours', 45.0, 'Sams', 'Brad Dayley')
|
||||
],
|
||||
lambda b: (b.name, b.authors__age__avg, b.publisher.name, b.contact.name)
|
||||
)
|
||||
|
|
@ -491,19 +491,19 @@ class AggregationTests(TestCase):
|
|||
# But age isn't included in the ValuesQuerySet, so it is.
|
||||
results = Author.objects.values('name').annotate(age=Count('book_contact_set')).order_by('name')
|
||||
self.assertEqual(len(results), 9)
|
||||
self.assertEqual(results[0]['name'], u'Adrian Holovaty')
|
||||
self.assertEqual(results[0]['name'], 'Adrian Holovaty')
|
||||
self.assertEqual(results[0]['age'], 1)
|
||||
|
||||
# Same problem, but aggregating over m2m fields
|
||||
results = Author.objects.values('name').annotate(age=Avg('friends__age')).order_by('name')
|
||||
self.assertEqual(len(results), 9)
|
||||
self.assertEqual(results[0]['name'], u'Adrian Holovaty')
|
||||
self.assertEqual(results[0]['name'], 'Adrian Holovaty')
|
||||
self.assertEqual(results[0]['age'], 32.0)
|
||||
|
||||
# Same problem, but colliding with an m2m field
|
||||
results = Author.objects.values('name').annotate(friends=Count('friends')).order_by('name')
|
||||
self.assertEqual(len(results), 9)
|
||||
self.assertEqual(results[0]['name'], u'Adrian Holovaty')
|
||||
self.assertEqual(results[0]['name'], 'Adrian Holovaty')
|
||||
self.assertEqual(results[0]['friends'], 2)
|
||||
|
||||
def test_reverse_relation_name_conflict(self):
|
||||
|
|
@ -531,12 +531,12 @@ class AggregationTests(TestCase):
|
|||
books.aggregate(Avg("authors__age"))
|
||||
self.assertQuerysetEqual(
|
||||
books.all(), [
|
||||
u'Artificial Intelligence: A Modern Approach',
|
||||
u'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp',
|
||||
u'Practical Django Projects',
|
||||
u'Python Web Development with Django',
|
||||
u'Sams Teach Yourself Django in 24 Hours',
|
||||
u'The Definitive Guide to Django: Web Development Done Right'
|
||||
'Artificial Intelligence: A Modern Approach',
|
||||
'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp',
|
||||
'Practical Django Projects',
|
||||
'Python Web Development with Django',
|
||||
'Sams Teach Yourself Django in 24 Hours',
|
||||
'The Definitive Guide to Django: Web Development Done Right'
|
||||
],
|
||||
lambda b: b.name
|
||||
)
|
||||
|
|
@ -632,8 +632,8 @@ class AggregationTests(TestCase):
|
|||
qs = HardbackBook.objects.annotate(n_authors=Count('book_ptr__authors')).values('name', 'n_authors')
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
{'n_authors': 2, 'name': u'Artificial Intelligence: A Modern Approach'},
|
||||
{'n_authors': 1, 'name': u'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp'}
|
||||
{'n_authors': 2, 'name': 'Artificial Intelligence: A Modern Approach'},
|
||||
{'n_authors': 1, 'name': 'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp'}
|
||||
],
|
||||
lambda h: h
|
||||
)
|
||||
|
|
@ -641,8 +641,8 @@ class AggregationTests(TestCase):
|
|||
qs = HardbackBook.objects.annotate(n_authors=Count('authors')).values('name', 'n_authors')
|
||||
self.assertQuerysetEqual(
|
||||
qs, [
|
||||
{'n_authors': 2, 'name': u'Artificial Intelligence: A Modern Approach'},
|
||||
{'n_authors': 1, 'name': u'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp'}
|
||||
{'n_authors': 2, 'name': 'Artificial Intelligence: A Modern Approach'},
|
||||
{'n_authors': 1, 'name': 'Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp'}
|
||||
],
|
||||
lambda h: h,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.contenttypes import generic
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import models, connection
|
||||
|
|
@ -16,7 +18,7 @@ class Person(models.Model):
|
|||
last_name = models.CharField(max_length=20)
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s %s' % (self.first_name, self.last_name)
|
||||
return '%s %s' % (self.first_name, self.last_name)
|
||||
|
||||
|
||||
class SchoolClass(models.Model):
|
||||
|
|
@ -58,7 +60,7 @@ class Reporter(models.Model):
|
|||
last_name = models.CharField(max_length=30)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s %s" % (self.first_name, self.last_name)
|
||||
return "%s %s" % (self.first_name, self.last_name)
|
||||
|
||||
|
||||
class Article(models.Model):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Unit and doctests for specific database backends.
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
import threading
|
||||
|
|
@ -393,9 +393,9 @@ class BackendTestCase(TestCase):
|
|||
qn(f3.column)))
|
||||
cursor = connection.cursor()
|
||||
cursor.execute(query2)
|
||||
self.assertEqual(cursor.fetchone(), (u'Clark', u'Kent'))
|
||||
self.assertEqual(list(cursor.fetchmany(2)), [(u'Jane', u'Doe'), (u'John', u'Doe')])
|
||||
self.assertEqual(list(cursor.fetchall()), [(u'Mary', u'Agnelline'), (u'Peter', u'Parker')])
|
||||
self.assertEqual(cursor.fetchone(), ('Clark', 'Kent'))
|
||||
self.assertEqual(list(cursor.fetchmany(2)), [('Jane', 'Doe'), ('John', 'Doe')])
|
||||
self.assertEqual(list(cursor.fetchall()), [('Mary', 'Agnelline'), ('Peter', 'Parker')])
|
||||
|
||||
def test_database_operations_helper_class(self):
|
||||
# Ticket #13630
|
||||
|
|
|
|||
22
tests/regressiontests/cache/tests.py
vendored
22
tests/regressiontests/cache/tests.py
vendored
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
# Unit tests for cache framework
|
||||
# Uses whatever cache backend is set in the test settings file.
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import hashlib
|
||||
import os
|
||||
|
|
@ -139,10 +139,10 @@ class DummyCacheTests(unittest.TestCase):
|
|||
def test_unicode(self):
|
||||
"Unicode values are ignored by the dummy cache"
|
||||
stuff = {
|
||||
u'ascii': u'ascii_value',
|
||||
u'unicode_ascii': u'Iñtërnâtiônàlizætiøn1',
|
||||
u'Iñtërnâtiônàlizætiøn': u'Iñtërnâtiônàlizætiøn2',
|
||||
u'ascii2': {u'x' : 1 }
|
||||
'ascii': 'ascii_value',
|
||||
'unicode_ascii': 'Iñtërnâtiônàlizætiøn1',
|
||||
'Iñtërnâtiônàlizætiøn': 'Iñtërnâtiônàlizætiøn2',
|
||||
'ascii2': {'x' : 1 }
|
||||
}
|
||||
for (key, value) in stuff.items():
|
||||
self.cache.set(key, value)
|
||||
|
|
@ -337,10 +337,10 @@ class BaseCacheTests(object):
|
|||
def test_unicode(self):
|
||||
# Unicode values can be cached
|
||||
stuff = {
|
||||
u'ascii': u'ascii_value',
|
||||
u'unicode_ascii': u'Iñtërnâtiônàlizætiøn1',
|
||||
u'Iñtërnâtiônàlizætiøn': u'Iñtërnâtiônàlizætiøn2',
|
||||
u'ascii2': {u'x' : 1 }
|
||||
'ascii': 'ascii_value',
|
||||
'unicode_ascii': 'Iñtërnâtiônàlizætiøn1',
|
||||
'Iñtërnâtiônàlizætiøn': 'Iñtërnâtiônàlizætiøn2',
|
||||
'ascii2': {'x' : 1 }
|
||||
}
|
||||
# Test `set`
|
||||
for (key, value) in stuff.items():
|
||||
|
|
@ -1337,12 +1337,12 @@ class CacheI18nTest(TestCase):
|
|||
request = self._get_request()
|
||||
response = HttpResponse()
|
||||
with timezone.override(CustomTzName()):
|
||||
CustomTzName.name = 'Hora estándar de Argentina' # UTF-8 string
|
||||
CustomTzName.name = 'Hora estándar de Argentina'.encode('UTF-8') # UTF-8 string
|
||||
sanitized_name = 'Hora_estndar_de_Argentina'
|
||||
self.assertIn(sanitized_name, learn_cache_key(request, response),
|
||||
"Cache keys should include the time zone name when time zones are active")
|
||||
|
||||
CustomTzName.name = u'Hora estándar de Argentina' # unicode
|
||||
CustomTzName.name = 'Hora estándar de Argentina' # unicode
|
||||
sanitized_name = 'Hora_estndar_de_Argentina'
|
||||
self.assertIn(sanitized_name, learn_cache_key(request, response),
|
||||
"Cache keys should include the time zone name when time zones are active")
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import re
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ class CommentViewTests(CommentTestCase):
|
|||
a = Article.objects.get(pk=1)
|
||||
data = self.getValidData(a)
|
||||
data["comment"] = "This is another comment"
|
||||
data["object_pk"] = u'\ufffd'
|
||||
data["object_pk"] = '\ufffd'
|
||||
response = self.client.post("/post/", data)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
|
||||
|
|
@ -258,7 +258,7 @@ class CommentViewTests(CommentTestCase):
|
|||
data["comment"] = "This is another comment"
|
||||
response = self.client.post("/post/", data)
|
||||
location = response["Location"]
|
||||
broken_location = location + u"\ufffd"
|
||||
broken_location = location + "\ufffd"
|
||||
response = self.client.get(broken_location)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.context_processors import csrf
|
||||
|
|
@ -11,7 +12,7 @@ from django.views.decorators.csrf import csrf_exempt, requires_csrf_token, ensur
|
|||
|
||||
# Response/views used for CsrfResponseMiddleware and CsrfViewMiddleware tests
|
||||
def post_form_response():
|
||||
resp = HttpResponse(content=u"""
|
||||
resp = HttpResponse(content="""
|
||||
<html><body><h1>\u00a1Unicode!<form method="post"><input type="text" /></form></body></html>
|
||||
""", mimetype="text/html")
|
||||
return resp
|
||||
|
|
@ -215,18 +216,18 @@ class CsrfViewMiddlewareTest(TestCase):
|
|||
"""
|
||||
req = self._get_GET_no_csrf_cookie_request()
|
||||
resp = token_view(req)
|
||||
self.assertEqual(u"", resp.content)
|
||||
self.assertEqual("", resp.content)
|
||||
|
||||
def test_token_node_empty_csrf_cookie(self):
|
||||
"""
|
||||
Check that we get a new token if the csrf_cookie is the empty string
|
||||
"""
|
||||
req = self._get_GET_no_csrf_cookie_request()
|
||||
req.COOKIES[settings.CSRF_COOKIE_NAME] = ""
|
||||
req.COOKIES[settings.CSRF_COOKIE_NAME] = b""
|
||||
CsrfViewMiddleware().process_view(req, token_view, (), {})
|
||||
resp = token_view(req)
|
||||
|
||||
self.assertNotEqual(u"", resp.content)
|
||||
self.assertNotEqual("", resp.content)
|
||||
|
||||
def test_token_node_with_csrf_cookie(self):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ Checks some pathological column naming to make sure it doesn't break
|
|||
table creation or queries.
|
||||
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
|
@ -27,7 +28,7 @@ class Author(models.Model):
|
|||
last_name = models.CharField(max_length=30, db_column='last name')
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s %s' % (self.first_name, self.last_name)
|
||||
return '%s %s' % (self.first_name, self.last_name)
|
||||
|
||||
class Meta:
|
||||
db_table = 'my author table'
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
|
||||
|
|
@ -62,7 +62,7 @@ class DataTypesTestCase(TestCase):
|
|||
d2 = Donut.objects.create(name='Apple Fritter',
|
||||
consumed_at = datetime.datetime(year=2007, month=4, day=20, hour=16, minute=19, second=59))
|
||||
|
||||
self.assertEqual([u'Apple Fritter', u'Date Test 2007'],
|
||||
self.assertEqual(['Apple Fritter', 'Date Test 2007'],
|
||||
list(Donut.objects.filter(consumed_at__year=2007).order_by('name').values_list('name', flat=True)))
|
||||
|
||||
self.assertEqual(0, Donut.objects.filter(consumed_at__year=2005).count())
|
||||
|
|
@ -71,7 +71,7 @@ class DataTypesTestCase(TestCase):
|
|||
def test_textfields_unicode(self):
|
||||
"""Regression test for #10238: TextField values returned from the
|
||||
database should be unicode."""
|
||||
d = Donut.objects.create(name=u'Jelly Donut', review=u'Outstanding')
|
||||
d = Donut.objects.create(name='Jelly Donut', review='Outstanding')
|
||||
newd = Donut.objects.get(id=d.id)
|
||||
self.assertTrue(isinstance(newd.review, unicode))
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import datetime
|
||||
import decimal
|
||||
|
|
@ -12,39 +13,39 @@ from django.utils.safestring import SafeData
|
|||
class DefaultFiltersTests(TestCase):
|
||||
|
||||
def test_floatformat(self):
|
||||
self.assertEqual(floatformat(7.7), u'7.7')
|
||||
self.assertEqual(floatformat(7.0), u'7')
|
||||
self.assertEqual(floatformat(0.7), u'0.7')
|
||||
self.assertEqual(floatformat(0.07), u'0.1')
|
||||
self.assertEqual(floatformat(0.007), u'0.0')
|
||||
self.assertEqual(floatformat(0.0), u'0')
|
||||
self.assertEqual(floatformat(7.7, 3), u'7.700')
|
||||
self.assertEqual(floatformat(6.000000, 3), u'6.000')
|
||||
self.assertEqual(floatformat(6.200000, 3), u'6.200')
|
||||
self.assertEqual(floatformat(6.200000, -3), u'6.200')
|
||||
self.assertEqual(floatformat(13.1031, -3), u'13.103')
|
||||
self.assertEqual(floatformat(11.1197, -2), u'11.12')
|
||||
self.assertEqual(floatformat(11.0000, -2), u'11')
|
||||
self.assertEqual(floatformat(11.000001, -2), u'11.00')
|
||||
self.assertEqual(floatformat(8.2798, 3), u'8.280')
|
||||
self.assertEqual(floatformat(5555.555, 2), u'5555.56')
|
||||
self.assertEqual(floatformat(001.3000, 2), u'1.30')
|
||||
self.assertEqual(floatformat(0.12345, 2), u'0.12')
|
||||
self.assertEqual(floatformat(decimal.Decimal('555.555'), 2), u'555.56')
|
||||
self.assertEqual(floatformat(decimal.Decimal('09.000')), u'9')
|
||||
self.assertEqual(floatformat(u'foo'), u'')
|
||||
self.assertEqual(floatformat(13.1031, u'bar'), u'13.1031')
|
||||
self.assertEqual(floatformat(18.125, 2), u'18.13')
|
||||
self.assertEqual(floatformat(u'foo', u'bar'), u'')
|
||||
self.assertEqual(floatformat(u'¿Cómo esta usted?'), u'')
|
||||
self.assertEqual(floatformat(None), u'')
|
||||
self.assertEqual(floatformat(7.7), '7.7')
|
||||
self.assertEqual(floatformat(7.0), '7')
|
||||
self.assertEqual(floatformat(0.7), '0.7')
|
||||
self.assertEqual(floatformat(0.07), '0.1')
|
||||
self.assertEqual(floatformat(0.007), '0.0')
|
||||
self.assertEqual(floatformat(0.0), '0')
|
||||
self.assertEqual(floatformat(7.7, 3), '7.700')
|
||||
self.assertEqual(floatformat(6.000000, 3), '6.000')
|
||||
self.assertEqual(floatformat(6.200000, 3), '6.200')
|
||||
self.assertEqual(floatformat(6.200000, -3), '6.200')
|
||||
self.assertEqual(floatformat(13.1031, -3), '13.103')
|
||||
self.assertEqual(floatformat(11.1197, -2), '11.12')
|
||||
self.assertEqual(floatformat(11.0000, -2), '11')
|
||||
self.assertEqual(floatformat(11.000001, -2), '11.00')
|
||||
self.assertEqual(floatformat(8.2798, 3), '8.280')
|
||||
self.assertEqual(floatformat(5555.555, 2), '5555.56')
|
||||
self.assertEqual(floatformat(001.3000, 2), '1.30')
|
||||
self.assertEqual(floatformat(0.12345, 2), '0.12')
|
||||
self.assertEqual(floatformat(decimal.Decimal('555.555'), 2), '555.56')
|
||||
self.assertEqual(floatformat(decimal.Decimal('09.000')), '9')
|
||||
self.assertEqual(floatformat('foo'), '')
|
||||
self.assertEqual(floatformat(13.1031, 'bar'), '13.1031')
|
||||
self.assertEqual(floatformat(18.125, 2), '18.13')
|
||||
self.assertEqual(floatformat('foo', 'bar'), '')
|
||||
self.assertEqual(floatformat('¿Cómo esta usted?'), '')
|
||||
self.assertEqual(floatformat(None), '')
|
||||
|
||||
# Check that we're not converting to scientific notation.
|
||||
self.assertEqual(floatformat(0, 6), u'0.000000')
|
||||
self.assertEqual(floatformat(0, 7), u'0.0000000')
|
||||
self.assertEqual(floatformat(0, 10), u'0.0000000000')
|
||||
self.assertEqual(floatformat(0, 6), '0.000000')
|
||||
self.assertEqual(floatformat(0, 7), '0.0000000')
|
||||
self.assertEqual(floatformat(0, 10), '0.0000000000')
|
||||
self.assertEqual(floatformat(0.000000000000000000015, 20),
|
||||
u'0.00000000000000000002')
|
||||
'0.00000000000000000002')
|
||||
|
||||
pos_inf = float(1e30000)
|
||||
self.assertEqual(floatformat(pos_inf), unicode(pos_inf))
|
||||
|
|
@ -61,18 +62,18 @@ class DefaultFiltersTests(TestCase):
|
|||
def __float__(self):
|
||||
return self.value
|
||||
|
||||
self.assertEqual(floatformat(FloatWrapper(11.000001), -2), u'11.00')
|
||||
self.assertEqual(floatformat(FloatWrapper(11.000001), -2), '11.00')
|
||||
|
||||
# Regression for #15789
|
||||
decimal_ctx = decimal.getcontext()
|
||||
old_prec, decimal_ctx.prec = decimal_ctx.prec, 2
|
||||
try:
|
||||
self.assertEqual(floatformat(1.2345, 2), u'1.23')
|
||||
self.assertEqual(floatformat(15.2042, -3), u'15.204')
|
||||
self.assertEqual(floatformat(1.2345, '2'), u'1.23')
|
||||
self.assertEqual(floatformat(15.2042, '-3'), u'15.204')
|
||||
self.assertEqual(floatformat(decimal.Decimal('1.2345'), 2), u'1.23')
|
||||
self.assertEqual(floatformat(decimal.Decimal('15.2042'), -3), u'15.204')
|
||||
self.assertEqual(floatformat(1.2345, 2), '1.23')
|
||||
self.assertEqual(floatformat(15.2042, -3), '15.204')
|
||||
self.assertEqual(floatformat(1.2345, '2'), '1.23')
|
||||
self.assertEqual(floatformat(15.2042, '-3'), '15.204')
|
||||
self.assertEqual(floatformat(decimal.Decimal('1.2345'), 2), '1.23')
|
||||
self.assertEqual(floatformat(decimal.Decimal('15.2042'), -3), '15.204')
|
||||
finally:
|
||||
decimal_ctx.prec = old_prec
|
||||
|
||||
|
|
@ -82,290 +83,290 @@ class DefaultFiltersTests(TestCase):
|
|||
# unicode or Decimal.
|
||||
@unittest.expectedFailure
|
||||
def test_floatformat_fail(self):
|
||||
self.assertEqual(floatformat(1.00000000000000015, 16), u'1.0000000000000002')
|
||||
self.assertEqual(floatformat(1.00000000000000015, 16), '1.0000000000000002')
|
||||
|
||||
def test_addslashes(self):
|
||||
self.assertEqual(addslashes(u'"double quotes" and \'single quotes\''),
|
||||
u'\\"double quotes\\" and \\\'single quotes\\\'')
|
||||
self.assertEqual(addslashes('"double quotes" and \'single quotes\''),
|
||||
'\\"double quotes\\" and \\\'single quotes\\\'')
|
||||
|
||||
self.assertEqual(addslashes(ur'\ : backslashes, too'),
|
||||
u'\\\\ : backslashes, too')
|
||||
self.assertEqual(addslashes(r'\ : backslashes, too'),
|
||||
'\\\\ : backslashes, too')
|
||||
|
||||
def test_capfirst(self):
|
||||
self.assertEqual(capfirst(u'hello world'), u'Hello world')
|
||||
self.assertEqual(capfirst('hello world'), 'Hello world')
|
||||
|
||||
def test_escapejs(self):
|
||||
self.assertEqual(escapejs_filter(u'"double quotes" and \'single quotes\''),
|
||||
u'\\u0022double quotes\\u0022 and \\u0027single quotes\\u0027')
|
||||
self.assertEqual(escapejs_filter(ur'\ : backslashes, too'),
|
||||
u'\\u005C : backslashes, too')
|
||||
self.assertEqual(escapejs_filter(u'and lots of whitespace: \r\n\t\v\f\b'),
|
||||
u'and lots of whitespace: \\u000D\\u000A\\u0009\\u000B\\u000C\\u0008')
|
||||
self.assertEqual(escapejs_filter(ur'<script>and this</script>'),
|
||||
u'\\u003Cscript\\u003Eand this\\u003C/script\\u003E')
|
||||
self.assertEqual(escapejs_filter('"double quotes" and \'single quotes\''),
|
||||
'\\u0022double quotes\\u0022 and \\u0027single quotes\\u0027')
|
||||
self.assertEqual(escapejs_filter(r'\ : backslashes, too'),
|
||||
'\\u005C : backslashes, too')
|
||||
self.assertEqual(escapejs_filter('and lots of whitespace: \r\n\t\v\f\b'),
|
||||
'and lots of whitespace: \\u000D\\u000A\\u0009\\u000B\\u000C\\u0008')
|
||||
self.assertEqual(escapejs_filter(r'<script>and this</script>'),
|
||||
'\\u003Cscript\\u003Eand this\\u003C/script\\u003E')
|
||||
self.assertEqual(
|
||||
escapejs_filter(u'paragraph separator:\u2029and line separator:\u2028'),
|
||||
u'paragraph separator:\\u2029and line separator:\\u2028')
|
||||
escapejs_filter('paragraph separator:\u2029and line separator:\u2028'),
|
||||
'paragraph separator:\\u2029and line separator:\\u2028')
|
||||
|
||||
def test_fix_ampersands(self):
|
||||
self.assertEqual(fix_ampersands_filter(u'Jack & Jill & Jeroboam'),
|
||||
u'Jack & Jill & Jeroboam')
|
||||
self.assertEqual(fix_ampersands_filter('Jack & Jill & Jeroboam'),
|
||||
'Jack & Jill & Jeroboam')
|
||||
|
||||
def test_linenumbers(self):
|
||||
self.assertEqual(linenumbers(u'line 1\nline 2'),
|
||||
u'1. line 1\n2. line 2')
|
||||
self.assertEqual(linenumbers(u'\n'.join([u'x'] * 10)),
|
||||
u'01. x\n02. x\n03. x\n04. x\n05. x\n06. x\n07. '\
|
||||
u'x\n08. x\n09. x\n10. x')
|
||||
self.assertEqual(linenumbers('line 1\nline 2'),
|
||||
'1. line 1\n2. line 2')
|
||||
self.assertEqual(linenumbers('\n'.join(['x'] * 10)),
|
||||
'01. x\n02. x\n03. x\n04. x\n05. x\n06. x\n07. '\
|
||||
'x\n08. x\n09. x\n10. x')
|
||||
|
||||
def test_lower(self):
|
||||
self.assertEqual(lower('TEST'), u'test')
|
||||
self.assertEqual(lower('TEST'), 'test')
|
||||
|
||||
# uppercase E umlaut
|
||||
self.assertEqual(lower(u'\xcb'), u'\xeb')
|
||||
self.assertEqual(lower('\xcb'), '\xeb')
|
||||
|
||||
def test_make_list(self):
|
||||
self.assertEqual(make_list('abc'), [u'a', u'b', u'c'])
|
||||
self.assertEqual(make_list(1234), [u'1', u'2', u'3', u'4'])
|
||||
self.assertEqual(make_list('abc'), ['a', 'b', 'c'])
|
||||
self.assertEqual(make_list(1234), ['1', '2', '3', '4'])
|
||||
|
||||
def test_slugify(self):
|
||||
self.assertEqual(slugify(' Jack & Jill like numbers 1,2,3 and 4 and'\
|
||||
' silly characters ?%.$!/'),
|
||||
u'jack-jill-like-numbers-123-and-4-and-silly-characters')
|
||||
'jack-jill-like-numbers-123-and-4-and-silly-characters')
|
||||
|
||||
self.assertEqual(slugify(u"Un \xe9l\xe9phant \xe0 l'or\xe9e du bois"),
|
||||
u'un-elephant-a-loree-du-bois')
|
||||
self.assertEqual(slugify("Un \xe9l\xe9phant \xe0 l'or\xe9e du bois"),
|
||||
'un-elephant-a-loree-du-bois')
|
||||
|
||||
def test_stringformat(self):
|
||||
self.assertEqual(stringformat(1, u'03d'), u'001')
|
||||
self.assertEqual(stringformat(1, u'z'), u'')
|
||||
self.assertEqual(stringformat(1, '03d'), '001')
|
||||
self.assertEqual(stringformat(1, 'z'), '')
|
||||
|
||||
def test_title(self):
|
||||
self.assertEqual(title('a nice title, isn\'t it?'),
|
||||
u"A Nice Title, Isn't It?")
|
||||
self.assertEqual(title(u'discoth\xe8que'), u'Discoth\xe8que')
|
||||
"A Nice Title, Isn't It?")
|
||||
self.assertEqual(title('discoth\xe8que'), 'Discoth\xe8que')
|
||||
|
||||
def test_truncatewords(self):
|
||||
self.assertEqual(
|
||||
truncatewords(u'A sentence with a few words in it', 1), u'A ...')
|
||||
truncatewords('A sentence with a few words in it', 1), 'A ...')
|
||||
self.assertEqual(
|
||||
truncatewords(u'A sentence with a few words in it', 5),
|
||||
u'A sentence with a few ...')
|
||||
truncatewords('A sentence with a few words in it', 5),
|
||||
'A sentence with a few ...')
|
||||
self.assertEqual(
|
||||
truncatewords(u'A sentence with a few words in it', 100),
|
||||
u'A sentence with a few words in it')
|
||||
truncatewords('A sentence with a few words in it', 100),
|
||||
'A sentence with a few words in it')
|
||||
self.assertEqual(
|
||||
truncatewords(u'A sentence with a few words in it',
|
||||
'not a number'), u'A sentence with a few words in it')
|
||||
truncatewords('A sentence with a few words in it',
|
||||
'not a number'), 'A sentence with a few words in it')
|
||||
|
||||
def test_truncatewords_html(self):
|
||||
self.assertEqual(truncatewords_html(
|
||||
u'<p>one <a href="#">two - three <br>four</a> five</p>', 0), u'')
|
||||
self.assertEqual(truncatewords_html(u'<p>one <a href="#">two - '\
|
||||
u'three <br>four</a> five</p>', 2),
|
||||
u'<p>one <a href="#">two ...</a></p>')
|
||||
'<p>one <a href="#">two - three <br>four</a> five</p>', 0), '')
|
||||
self.assertEqual(truncatewords_html('<p>one <a href="#">two - '\
|
||||
'three <br>four</a> five</p>', 2),
|
||||
'<p>one <a href="#">two ...</a></p>')
|
||||
self.assertEqual(truncatewords_html(
|
||||
u'<p>one <a href="#">two - three <br>four</a> five</p>', 4),
|
||||
u'<p>one <a href="#">two - three <br>four ...</a></p>')
|
||||
'<p>one <a href="#">two - three <br>four</a> five</p>', 4),
|
||||
'<p>one <a href="#">two - three <br>four ...</a></p>')
|
||||
self.assertEqual(truncatewords_html(
|
||||
u'<p>one <a href="#">two - three <br>four</a> five</p>', 5),
|
||||
u'<p>one <a href="#">two - three <br>four</a> five</p>')
|
||||
'<p>one <a href="#">two - three <br>four</a> five</p>', 5),
|
||||
'<p>one <a href="#">two - three <br>four</a> five</p>')
|
||||
self.assertEqual(truncatewords_html(
|
||||
u'<p>one <a href="#">two - three <br>four</a> five</p>', 100),
|
||||
u'<p>one <a href="#">two - three <br>four</a> five</p>')
|
||||
'<p>one <a href="#">two - three <br>four</a> five</p>', 100),
|
||||
'<p>one <a href="#">two - three <br>four</a> five</p>')
|
||||
self.assertEqual(truncatewords_html(
|
||||
u'\xc5ngstr\xf6m was here', 1), u'\xc5ngstr\xf6m ...')
|
||||
'\xc5ngstr\xf6m was here', 1), '\xc5ngstr\xf6m ...')
|
||||
|
||||
def test_upper(self):
|
||||
self.assertEqual(upper(u'Mixed case input'), u'MIXED CASE INPUT')
|
||||
self.assertEqual(upper('Mixed case input'), 'MIXED CASE INPUT')
|
||||
# lowercase e umlaut
|
||||
self.assertEqual(upper(u'\xeb'), u'\xcb')
|
||||
self.assertEqual(upper('\xeb'), '\xcb')
|
||||
|
||||
def test_urlencode(self):
|
||||
self.assertEqual(urlencode(u'fran\xe7ois & jill'),
|
||||
u'fran%C3%A7ois%20%26%20jill')
|
||||
self.assertEqual(urlencode(1), u'1')
|
||||
self.assertEqual(urlencode('fran\xe7ois & jill'),
|
||||
'fran%C3%A7ois%20%26%20jill')
|
||||
self.assertEqual(urlencode(1), '1')
|
||||
|
||||
def test_iriencode(self):
|
||||
self.assertEqual(iriencode(u'S\xf8r-Tr\xf8ndelag'),
|
||||
u'S%C3%B8r-Tr%C3%B8ndelag')
|
||||
self.assertEqual(iriencode(urlencode(u'fran\xe7ois & jill')),
|
||||
u'fran%C3%A7ois%20%26%20jill')
|
||||
self.assertEqual(iriencode('S\xf8r-Tr\xf8ndelag'),
|
||||
'S%C3%B8r-Tr%C3%B8ndelag')
|
||||
self.assertEqual(iriencode(urlencode('fran\xe7ois & jill')),
|
||||
'fran%C3%A7ois%20%26%20jill')
|
||||
|
||||
def test_urlizetrunc(self):
|
||||
self.assertEqual(urlizetrunc(u'http://short.com/', 20), u'<a href='\
|
||||
u'"http://short.com/" rel="nofollow">http://short.com/</a>')
|
||||
|
||||
self.assertEqual(urlizetrunc(u'http://www.google.co.uk/search?hl=en'\
|
||||
u'&q=some+long+url&btnG=Search&meta=', 20), u'<a href="http://'\
|
||||
u'www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&'\
|
||||
u'meta=" rel="nofollow">http://www.google...</a>')
|
||||
self.assertEqual(urlizetrunc('http://short.com/', 20), '<a href='\
|
||||
'"http://short.com/" rel="nofollow">http://short.com/</a>')
|
||||
|
||||
self.assertEqual(urlizetrunc('http://www.google.co.uk/search?hl=en'\
|
||||
u'&q=some+long+url&btnG=Search&meta=', 20), u'<a href="http://'\
|
||||
u'www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search'\
|
||||
u'&meta=" rel="nofollow">http://www.google...</a>')
|
||||
'&q=some+long+url&btnG=Search&meta=', 20), '<a href="http://'\
|
||||
'www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&'\
|
||||
'meta=" rel="nofollow">http://www.google...</a>')
|
||||
|
||||
self.assertEqual(urlizetrunc('http://www.google.co.uk/search?hl=en'\
|
||||
'&q=some+long+url&btnG=Search&meta=', 20), '<a href="http://'\
|
||||
'www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search'\
|
||||
'&meta=" rel="nofollow">http://www.google...</a>')
|
||||
|
||||
# Check truncating of URIs which are the exact length
|
||||
uri = 'http://31characteruri.com/test/'
|
||||
self.assertEqual(len(uri), 31)
|
||||
|
||||
self.assertEqual(urlizetrunc(uri, 31),
|
||||
u'<a href="http://31characteruri.com/test/" rel="nofollow">'\
|
||||
u'http://31characteruri.com/test/</a>')
|
||||
'<a href="http://31characteruri.com/test/" rel="nofollow">'\
|
||||
'http://31characteruri.com/test/</a>')
|
||||
|
||||
self.assertEqual(urlizetrunc(uri, 30),
|
||||
u'<a href="http://31characteruri.com/test/" rel="nofollow">'\
|
||||
u'http://31characteruri.com/t...</a>')
|
||||
'<a href="http://31characteruri.com/test/" rel="nofollow">'\
|
||||
'http://31characteruri.com/t...</a>')
|
||||
|
||||
self.assertEqual(urlizetrunc(uri, 2),
|
||||
u'<a href="http://31characteruri.com/test/"'\
|
||||
u' rel="nofollow">...</a>')
|
||||
'<a href="http://31characteruri.com/test/"'\
|
||||
' rel="nofollow">...</a>')
|
||||
|
||||
def test_urlize(self):
|
||||
# Check normal urlize
|
||||
self.assertEqual(urlize('http://google.com'),
|
||||
u'<a href="http://google.com" rel="nofollow">http://google.com</a>')
|
||||
'<a href="http://google.com" rel="nofollow">http://google.com</a>')
|
||||
self.assertEqual(urlize('http://google.com/'),
|
||||
u'<a href="http://google.com/" rel="nofollow">http://google.com/</a>')
|
||||
'<a href="http://google.com/" rel="nofollow">http://google.com/</a>')
|
||||
self.assertEqual(urlize('www.google.com'),
|
||||
u'<a href="http://www.google.com" rel="nofollow">www.google.com</a>')
|
||||
'<a href="http://www.google.com" rel="nofollow">www.google.com</a>')
|
||||
self.assertEqual(urlize('djangoproject.org'),
|
||||
u'<a href="http://djangoproject.org" rel="nofollow">djangoproject.org</a>')
|
||||
'<a href="http://djangoproject.org" rel="nofollow">djangoproject.org</a>')
|
||||
self.assertEqual(urlize('info@djangoproject.org'),
|
||||
u'<a href="mailto:info@djangoproject.org">info@djangoproject.org</a>')
|
||||
'<a href="mailto:info@djangoproject.org">info@djangoproject.org</a>')
|
||||
|
||||
# Check urlize with https addresses
|
||||
self.assertEqual(urlize('https://google.com'),
|
||||
u'<a href="https://google.com" rel="nofollow">https://google.com</a>')
|
||||
'<a href="https://google.com" rel="nofollow">https://google.com</a>')
|
||||
|
||||
# Check urlize doesn't overquote already quoted urls - see #9655
|
||||
self.assertEqual(urlize('http://hi.baidu.com/%D6%D8%D0%C2%BF'),
|
||||
u'<a href="http://hi.baidu.com/%D6%D8%D0%C2%BF" rel="nofollow">'
|
||||
u'http://hi.baidu.com/%D6%D8%D0%C2%BF</a>')
|
||||
'<a href="http://hi.baidu.com/%D6%D8%D0%C2%BF" rel="nofollow">'
|
||||
'http://hi.baidu.com/%D6%D8%D0%C2%BF</a>')
|
||||
self.assertEqual(urlize('www.mystore.com/30%OffCoupons!'),
|
||||
u'<a href="http://www.mystore.com/30%25OffCoupons!" rel="nofollow">'
|
||||
u'www.mystore.com/30%OffCoupons!</a>')
|
||||
'<a href="http://www.mystore.com/30%25OffCoupons!" rel="nofollow">'
|
||||
'www.mystore.com/30%OffCoupons!</a>')
|
||||
self.assertEqual(urlize('http://en.wikipedia.org/wiki/Caf%C3%A9'),
|
||||
u'<a href="http://en.wikipedia.org/wiki/Caf%C3%A9" rel="nofollow">'
|
||||
u'http://en.wikipedia.org/wiki/Caf%C3%A9</a>')
|
||||
'<a href="http://en.wikipedia.org/wiki/Caf%C3%A9" rel="nofollow">'
|
||||
'http://en.wikipedia.org/wiki/Caf%C3%A9</a>')
|
||||
self.assertEqual(urlize('http://en.wikipedia.org/wiki/Café'),
|
||||
u'<a href="http://en.wikipedia.org/wiki/Caf%C3%A9" rel="nofollow">'
|
||||
u'http://en.wikipedia.org/wiki/Café</a>')
|
||||
'<a href="http://en.wikipedia.org/wiki/Caf%C3%A9" rel="nofollow">'
|
||||
'http://en.wikipedia.org/wiki/Café</a>')
|
||||
|
||||
# Check urlize keeps balanced parentheses - see #11911
|
||||
self.assertEqual(urlize('http://en.wikipedia.org/wiki/Django_(web_framework)'),
|
||||
u'<a href="http://en.wikipedia.org/wiki/Django_(web_framework)" rel="nofollow">'
|
||||
u'http://en.wikipedia.org/wiki/Django_(web_framework)</a>')
|
||||
'<a href="http://en.wikipedia.org/wiki/Django_(web_framework)" rel="nofollow">'
|
||||
'http://en.wikipedia.org/wiki/Django_(web_framework)</a>')
|
||||
self.assertEqual(urlize('(see http://en.wikipedia.org/wiki/Django_(web_framework))'),
|
||||
u'(see <a href="http://en.wikipedia.org/wiki/Django_(web_framework)" rel="nofollow">'
|
||||
u'http://en.wikipedia.org/wiki/Django_(web_framework)</a>)')
|
||||
'(see <a href="http://en.wikipedia.org/wiki/Django_(web_framework)" rel="nofollow">'
|
||||
'http://en.wikipedia.org/wiki/Django_(web_framework)</a>)')
|
||||
|
||||
# Check urlize adds nofollow properly - see #12183
|
||||
self.assertEqual(urlize('foo@bar.com or www.bar.com'),
|
||||
u'<a href="mailto:foo@bar.com">foo@bar.com</a> or '
|
||||
u'<a href="http://www.bar.com" rel="nofollow">www.bar.com</a>')
|
||||
'<a href="mailto:foo@bar.com">foo@bar.com</a> or '
|
||||
'<a href="http://www.bar.com" rel="nofollow">www.bar.com</a>')
|
||||
|
||||
# Check urlize handles IDN correctly - see #13704
|
||||
self.assertEqual(urlize('http://c✶.ws'),
|
||||
u'<a href="http://xn--c-lgq.ws" rel="nofollow">http://c✶.ws</a>')
|
||||
'<a href="http://xn--c-lgq.ws" rel="nofollow">http://c✶.ws</a>')
|
||||
self.assertEqual(urlize('www.c✶.ws'),
|
||||
u'<a href="http://www.xn--c-lgq.ws" rel="nofollow">www.c✶.ws</a>')
|
||||
'<a href="http://www.xn--c-lgq.ws" rel="nofollow">www.c✶.ws</a>')
|
||||
self.assertEqual(urlize('c✶.org'),
|
||||
u'<a href="http://xn--c-lgq.org" rel="nofollow">c✶.org</a>')
|
||||
'<a href="http://xn--c-lgq.org" rel="nofollow">c✶.org</a>')
|
||||
self.assertEqual(urlize('info@c✶.org'),
|
||||
u'<a href="mailto:info@xn--c-lgq.org">info@c✶.org</a>')
|
||||
'<a href="mailto:info@xn--c-lgq.org">info@c✶.org</a>')
|
||||
|
||||
# Check urlize doesn't highlight malformed URIs - see #16395
|
||||
self.assertEqual(urlize('http:///www.google.com'),
|
||||
u'http:///www.google.com')
|
||||
'http:///www.google.com')
|
||||
self.assertEqual(urlize('http://.google.com'),
|
||||
u'http://.google.com')
|
||||
'http://.google.com')
|
||||
self.assertEqual(urlize('http://@foo.com'),
|
||||
u'http://@foo.com')
|
||||
'http://@foo.com')
|
||||
|
||||
# Check urlize accepts more TLDs - see #16656
|
||||
self.assertEqual(urlize('usa.gov'),
|
||||
u'<a href="http://usa.gov" rel="nofollow">usa.gov</a>')
|
||||
'<a href="http://usa.gov" rel="nofollow">usa.gov</a>')
|
||||
|
||||
# Check urlize don't crash on invalid email with dot-starting domain - see #17592
|
||||
self.assertEqual(urlize('email@.stream.ru'),
|
||||
u'email@.stream.ru')
|
||||
'email@.stream.ru')
|
||||
|
||||
# Check urlize accepts uppercased URL schemes - see #18071
|
||||
self.assertEqual(urlize('HTTPS://github.com/'),
|
||||
u'<a href="https://github.com/" rel="nofollow">HTTPS://github.com/</a>')
|
||||
'<a href="https://github.com/" rel="nofollow">HTTPS://github.com/</a>')
|
||||
|
||||
def test_wordcount(self):
|
||||
self.assertEqual(wordcount(''), 0)
|
||||
self.assertEqual(wordcount(u'oneword'), 1)
|
||||
self.assertEqual(wordcount(u'lots of words'), 3)
|
||||
self.assertEqual(wordcount('oneword'), 1)
|
||||
self.assertEqual(wordcount('lots of words'), 3)
|
||||
|
||||
self.assertEqual(wordwrap(u'this is a long paragraph of text that '\
|
||||
u'really needs to be wrapped I\'m afraid', 14),
|
||||
u"this is a long\nparagraph of\ntext that\nreally needs\nto be "\
|
||||
u"wrapped\nI'm afraid")
|
||||
self.assertEqual(wordwrap('this is a long paragraph of text that '\
|
||||
'really needs to be wrapped I\'m afraid', 14),
|
||||
"this is a long\nparagraph of\ntext that\nreally needs\nto be "\
|
||||
"wrapped\nI'm afraid")
|
||||
|
||||
self.assertEqual(wordwrap(u'this is a short paragraph of text.\n '\
|
||||
u'But this line should be indented', 14),
|
||||
u'this is a\nshort\nparagraph of\ntext.\n But this\nline '\
|
||||
u'should be\nindented')
|
||||
self.assertEqual(wordwrap('this is a short paragraph of text.\n '\
|
||||
'But this line should be indented', 14),
|
||||
'this is a\nshort\nparagraph of\ntext.\n But this\nline '\
|
||||
'should be\nindented')
|
||||
|
||||
self.assertEqual(wordwrap(u'this is a short paragraph of text.\n '\
|
||||
u'But this line should be indented',15), u'this is a short\n'\
|
||||
u'paragraph of\ntext.\n But this line\nshould be\nindented')
|
||||
self.assertEqual(wordwrap('this is a short paragraph of text.\n '\
|
||||
'But this line should be indented',15), 'this is a short\n'\
|
||||
'paragraph of\ntext.\n But this line\nshould be\nindented')
|
||||
|
||||
def test_rjust(self):
|
||||
self.assertEqual(ljust(u'test', 10), u'test ')
|
||||
self.assertEqual(ljust(u'test', 3), u'test')
|
||||
self.assertEqual(rjust(u'test', 10), u' test')
|
||||
self.assertEqual(rjust(u'test', 3), u'test')
|
||||
self.assertEqual(ljust('test', 10), 'test ')
|
||||
self.assertEqual(ljust('test', 3), 'test')
|
||||
self.assertEqual(rjust('test', 10), ' test')
|
||||
self.assertEqual(rjust('test', 3), 'test')
|
||||
|
||||
def test_center(self):
|
||||
self.assertEqual(center(u'test', 6), u' test ')
|
||||
self.assertEqual(center('test', 6), ' test ')
|
||||
|
||||
def test_cut(self):
|
||||
self.assertEqual(cut(u'a string to be mangled', 'a'),
|
||||
u' string to be mngled')
|
||||
self.assertEqual(cut(u'a string to be mangled', 'ng'),
|
||||
u'a stri to be maled')
|
||||
self.assertEqual(cut(u'a string to be mangled', 'strings'),
|
||||
u'a string to be mangled')
|
||||
self.assertEqual(cut('a string to be mangled', 'a'),
|
||||
' string to be mngled')
|
||||
self.assertEqual(cut('a string to be mangled', 'ng'),
|
||||
'a stri to be maled')
|
||||
self.assertEqual(cut('a string to be mangled', 'strings'),
|
||||
'a string to be mangled')
|
||||
|
||||
def test_force_escape(self):
|
||||
escaped = force_escape(u'<some html & special characters > here')
|
||||
escaped = force_escape('<some html & special characters > here')
|
||||
self.assertEqual(
|
||||
escaped, u'<some html & special characters > here')
|
||||
escaped, '<some html & special characters > here')
|
||||
self.assertTrue(isinstance(escaped, SafeData))
|
||||
self.assertEqual(
|
||||
force_escape(u'<some html & special characters > here ĐÅ€£'),
|
||||
u'<some html & special characters > here'\
|
||||
u' \u0110\xc5\u20ac\xa3')
|
||||
force_escape('<some html & special characters > here ĐÅ€£'),
|
||||
'<some html & special characters > here'\
|
||||
' \u0110\xc5\u20ac\xa3')
|
||||
|
||||
def test_linebreaks(self):
|
||||
self.assertEqual(linebreaks_filter(u'line 1'), u'<p>line 1</p>')
|
||||
self.assertEqual(linebreaks_filter(u'line 1\nline 2'),
|
||||
u'<p>line 1<br />line 2</p>')
|
||||
self.assertEqual(linebreaks_filter(u'line 1\rline 2'),
|
||||
u'<p>line 1<br />line 2</p>')
|
||||
self.assertEqual(linebreaks_filter(u'line 1\r\nline 2'),
|
||||
u'<p>line 1<br />line 2</p>')
|
||||
self.assertEqual(linebreaks_filter('line 1'), '<p>line 1</p>')
|
||||
self.assertEqual(linebreaks_filter('line 1\nline 2'),
|
||||
'<p>line 1<br />line 2</p>')
|
||||
self.assertEqual(linebreaks_filter('line 1\rline 2'),
|
||||
'<p>line 1<br />line 2</p>')
|
||||
self.assertEqual(linebreaks_filter('line 1\r\nline 2'),
|
||||
'<p>line 1<br />line 2</p>')
|
||||
|
||||
def test_linebreaksbr(self):
|
||||
self.assertEqual(linebreaksbr(u'line 1\nline 2'),
|
||||
u'line 1<br />line 2')
|
||||
self.assertEqual(linebreaksbr(u'line 1\rline 2'),
|
||||
u'line 1<br />line 2')
|
||||
self.assertEqual(linebreaksbr(u'line 1\r\nline 2'),
|
||||
u'line 1<br />line 2')
|
||||
self.assertEqual(linebreaksbr('line 1\nline 2'),
|
||||
'line 1<br />line 2')
|
||||
self.assertEqual(linebreaksbr('line 1\rline 2'),
|
||||
'line 1<br />line 2')
|
||||
self.assertEqual(linebreaksbr('line 1\r\nline 2'),
|
||||
'line 1<br />line 2')
|
||||
|
||||
def test_removetags(self):
|
||||
self.assertEqual(removetags(u'some <b>html</b> with <script>alert'\
|
||||
u'("You smell")</script> disallowed <img /> tags', 'script img'),
|
||||
u'some <b>html</b> with alert("You smell") disallowed tags')
|
||||
self.assertEqual(striptags(u'some <b>html</b> with <script>alert'\
|
||||
u'("You smell")</script> disallowed <img /> tags'),
|
||||
u'some html with alert("You smell") disallowed tags')
|
||||
self.assertEqual(removetags('some <b>html</b> with <script>alert'\
|
||||
'("You smell")</script> disallowed <img /> tags', 'script img'),
|
||||
'some <b>html</b> with alert("You smell") disallowed tags')
|
||||
self.assertEqual(striptags('some <b>html</b> with <script>alert'\
|
||||
'("You smell")</script> disallowed <img /> tags'),
|
||||
'some html with alert("You smell") disallowed tags')
|
||||
|
||||
def test_dictsort(self):
|
||||
sorted_dicts = dictsort([{'age': 23, 'name': 'Barbara-Ann'},
|
||||
|
|
@ -404,81 +405,81 @@ class DefaultFiltersTests(TestCase):
|
|||
|
||||
def test_first(self):
|
||||
self.assertEqual(first([0,1,2]), 0)
|
||||
self.assertEqual(first(u''), u'')
|
||||
self.assertEqual(first(u'test'), u't')
|
||||
self.assertEqual(first(''), '')
|
||||
self.assertEqual(first('test'), 't')
|
||||
|
||||
def test_join(self):
|
||||
self.assertEqual(join([0,1,2], u'glue'), u'0glue1glue2')
|
||||
self.assertEqual(join([0,1,2], 'glue'), '0glue1glue2')
|
||||
|
||||
def test_length(self):
|
||||
self.assertEqual(length(u'1234'), 4)
|
||||
self.assertEqual(length('1234'), 4)
|
||||
self.assertEqual(length([1,2,3,4]), 4)
|
||||
self.assertEqual(length_is([], 0), True)
|
||||
self.assertEqual(length_is([], 1), False)
|
||||
self.assertEqual(length_is('a', 1), True)
|
||||
self.assertEqual(length_is(u'a', 10), False)
|
||||
self.assertEqual(length_is('a', 10), False)
|
||||
|
||||
def test_slice(self):
|
||||
self.assertEqual(slice_filter(u'abcdefg', u'0'), u'')
|
||||
self.assertEqual(slice_filter(u'abcdefg', u'1'), u'a')
|
||||
self.assertEqual(slice_filter(u'abcdefg', u'-1'), u'abcdef')
|
||||
self.assertEqual(slice_filter(u'abcdefg', u'1:2'), u'b')
|
||||
self.assertEqual(slice_filter(u'abcdefg', u'1:3'), u'bc')
|
||||
self.assertEqual(slice_filter(u'abcdefg', u'0::2'), u'aceg')
|
||||
self.assertEqual(slice_filter('abcdefg', '0'), '')
|
||||
self.assertEqual(slice_filter('abcdefg', '1'), 'a')
|
||||
self.assertEqual(slice_filter('abcdefg', '-1'), 'abcdef')
|
||||
self.assertEqual(slice_filter('abcdefg', '1:2'), 'b')
|
||||
self.assertEqual(slice_filter('abcdefg', '1:3'), 'bc')
|
||||
self.assertEqual(slice_filter('abcdefg', '0::2'), 'aceg')
|
||||
|
||||
def test_unordered_list(self):
|
||||
self.assertEqual(unordered_list([u'item 1', u'item 2']),
|
||||
u'\t<li>item 1</li>\n\t<li>item 2</li>')
|
||||
self.assertEqual(unordered_list([u'item 1', [u'item 1.1']]),
|
||||
u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>')
|
||||
self.assertEqual(unordered_list(['item 1', 'item 2']),
|
||||
'\t<li>item 1</li>\n\t<li>item 2</li>')
|
||||
self.assertEqual(unordered_list(['item 1', ['item 1.1']]),
|
||||
'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>')
|
||||
|
||||
self.assertEqual(
|
||||
unordered_list([u'item 1', [u'item 1.1', u'item1.2'], u'item 2']),
|
||||
u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item1.2'\
|
||||
u'</li>\n\t</ul>\n\t</li>\n\t<li>item 2</li>')
|
||||
unordered_list(['item 1', ['item 1.1', 'item1.2'], 'item 2']),
|
||||
'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t\t<li>item1.2'\
|
||||
'</li>\n\t</ul>\n\t</li>\n\t<li>item 2</li>')
|
||||
|
||||
self.assertEqual(
|
||||
unordered_list([u'item 1', [u'item 1.1', [u'item 1.1.1',
|
||||
[u'item 1.1.1.1']]]]),
|
||||
u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1\n\t\t<ul>\n\t\t\t<li>'\
|
||||
u'item 1.1.1\n\t\t\t<ul>\n\t\t\t\t<li>item 1.1.1.1</li>\n\t\t\t'\
|
||||
u'</ul>\n\t\t\t</li>\n\t\t</ul>\n\t\t</li>\n\t</ul>\n\t</li>')
|
||||
unordered_list(['item 1', ['item 1.1', ['item 1.1.1',
|
||||
['item 1.1.1.1']]]]),
|
||||
'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1\n\t\t<ul>\n\t\t\t<li>'\
|
||||
'item 1.1.1\n\t\t\t<ul>\n\t\t\t\t<li>item 1.1.1.1</li>\n\t\t\t'\
|
||||
'</ul>\n\t\t\t</li>\n\t\t</ul>\n\t\t</li>\n\t</ul>\n\t</li>')
|
||||
|
||||
self.assertEqual(unordered_list(
|
||||
['States', ['Kansas', ['Lawrence', 'Topeka'], 'Illinois']]),
|
||||
u'\t<li>States\n\t<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>'\
|
||||
u'Lawrence</li>\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>'\
|
||||
u'\n\t\t<li>Illinois</li>\n\t</ul>\n\t</li>')
|
||||
'\t<li>States\n\t<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>'\
|
||||
'Lawrence</li>\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>'\
|
||||
'\n\t\t<li>Illinois</li>\n\t</ul>\n\t</li>')
|
||||
|
||||
class ULItem(object):
|
||||
def __init__(self, title):
|
||||
self.title = title
|
||||
def __unicode__(self):
|
||||
return u'ulitem-%s' % str(self.title)
|
||||
return 'ulitem-%s' % str(self.title)
|
||||
|
||||
a = ULItem('a')
|
||||
b = ULItem('b')
|
||||
self.assertEqual(unordered_list([a,b]),
|
||||
u'\t<li>ulitem-a</li>\n\t<li>ulitem-b</li>')
|
||||
'\t<li>ulitem-a</li>\n\t<li>ulitem-b</li>')
|
||||
|
||||
# Old format for unordered lists should still work
|
||||
self.assertEqual(unordered_list([u'item 1', []]), u'\t<li>item 1</li>')
|
||||
self.assertEqual(unordered_list(['item 1', []]), '\t<li>item 1</li>')
|
||||
|
||||
self.assertEqual(unordered_list([u'item 1', [[u'item 1.1', []]]]),
|
||||
u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>')
|
||||
self.assertEqual(unordered_list(['item 1', [['item 1.1', []]]]),
|
||||
'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1</li>\n\t</ul>\n\t</li>')
|
||||
|
||||
self.assertEqual(unordered_list([u'item 1', [[u'item 1.1', []],
|
||||
[u'item 1.2', []]]]), u'\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1'\
|
||||
u'</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>')
|
||||
self.assertEqual(unordered_list(['item 1', [['item 1.1', []],
|
||||
['item 1.2', []]]]), '\t<li>item 1\n\t<ul>\n\t\t<li>item 1.1'\
|
||||
'</li>\n\t\t<li>item 1.2</li>\n\t</ul>\n\t</li>')
|
||||
|
||||
self.assertEqual(unordered_list(['States', [['Kansas', [['Lawrence',
|
||||
[]], ['Topeka', []]]], ['Illinois', []]]]), u'\t<li>States\n\t'\
|
||||
u'<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>Lawrence</li>'\
|
||||
u'\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>\n\t\t<li>'\
|
||||
u'Illinois</li>\n\t</ul>\n\t</li>')
|
||||
[]], ['Topeka', []]]], ['Illinois', []]]]), '\t<li>States\n\t'\
|
||||
'<ul>\n\t\t<li>Kansas\n\t\t<ul>\n\t\t\t<li>Lawrence</li>'\
|
||||
'\n\t\t\t<li>Topeka</li>\n\t\t</ul>\n\t\t</li>\n\t\t<li>'\
|
||||
'Illinois</li>\n\t</ul>\n\t</li>')
|
||||
|
||||
def test_add(self):
|
||||
self.assertEqual(add(u'1', u'2'), 3)
|
||||
self.assertEqual(add('1', '2'), 3)
|
||||
|
||||
def test_get_digit(self):
|
||||
self.assertEqual(get_digit(123, 1), 3)
|
||||
|
|
@ -486,148 +487,148 @@ class DefaultFiltersTests(TestCase):
|
|||
self.assertEqual(get_digit(123, 3), 1)
|
||||
self.assertEqual(get_digit(123, 4), 0)
|
||||
self.assertEqual(get_digit(123, 0), 123)
|
||||
self.assertEqual(get_digit(u'xyz', 0), u'xyz')
|
||||
self.assertEqual(get_digit('xyz', 0), 'xyz')
|
||||
|
||||
def test_date(self):
|
||||
# real testing of date() is in dateformat.py
|
||||
self.assertEqual(date(datetime.datetime(2005, 12, 29), u"d F Y"),
|
||||
u'29 December 2005')
|
||||
self.assertEqual(date(datetime.datetime(2005, 12, 29), ur'jS \o\f F'),
|
||||
u'29th of December')
|
||||
self.assertEqual(date(datetime.datetime(2005, 12, 29), "d F Y"),
|
||||
'29 December 2005')
|
||||
self.assertEqual(date(datetime.datetime(2005, 12, 29), r'jS \o\f F'),
|
||||
'29th of December')
|
||||
|
||||
def test_time(self):
|
||||
# real testing of time() is done in dateformat.py
|
||||
self.assertEqual(time(datetime.time(13), u"h"), u'01')
|
||||
self.assertEqual(time(datetime.time(0), u"h"), u'12')
|
||||
self.assertEqual(time(datetime.time(13), "h"), '01')
|
||||
self.assertEqual(time(datetime.time(0), "h"), '12')
|
||||
|
||||
def test_timesince(self):
|
||||
# real testing is done in timesince.py, where we can provide our own 'now'
|
||||
self.assertEqual(
|
||||
timesince_filter(datetime.datetime.now() - datetime.timedelta(1)),
|
||||
u'1 day')
|
||||
'1 day')
|
||||
|
||||
self.assertEqual(
|
||||
timesince_filter(datetime.datetime(2005, 12, 29),
|
||||
datetime.datetime(2005, 12, 30)),
|
||||
u'1 day')
|
||||
'1 day')
|
||||
|
||||
def test_timeuntil(self):
|
||||
self.assertEqual(
|
||||
timeuntil_filter(datetime.datetime.now() + datetime.timedelta(1, 1)),
|
||||
u'1 day')
|
||||
'1 day')
|
||||
|
||||
self.assertEqual(
|
||||
timeuntil_filter(datetime.datetime(2005, 12, 30),
|
||||
datetime.datetime(2005, 12, 29)),
|
||||
u'1 day')
|
||||
'1 day')
|
||||
|
||||
def test_default(self):
|
||||
self.assertEqual(default(u"val", u"default"), u'val')
|
||||
self.assertEqual(default(None, u"default"), u'default')
|
||||
self.assertEqual(default(u'', u"default"), u'default')
|
||||
self.assertEqual(default("val", "default"), 'val')
|
||||
self.assertEqual(default(None, "default"), 'default')
|
||||
self.assertEqual(default('', "default"), 'default')
|
||||
|
||||
def test_if_none(self):
|
||||
self.assertEqual(default_if_none(u"val", u"default"), u'val')
|
||||
self.assertEqual(default_if_none(None, u"default"), u'default')
|
||||
self.assertEqual(default_if_none(u'', u"default"), u'')
|
||||
self.assertEqual(default_if_none("val", "default"), 'val')
|
||||
self.assertEqual(default_if_none(None, "default"), 'default')
|
||||
self.assertEqual(default_if_none('', "default"), '')
|
||||
|
||||
def test_divisibleby(self):
|
||||
self.assertEqual(divisibleby(4, 2), True)
|
||||
self.assertEqual(divisibleby(4, 3), False)
|
||||
|
||||
def test_yesno(self):
|
||||
self.assertEqual(yesno(True), u'yes')
|
||||
self.assertEqual(yesno(False), u'no')
|
||||
self.assertEqual(yesno(None), u'maybe')
|
||||
self.assertEqual(yesno(True, u'certainly,get out of town,perhaps'),
|
||||
u'certainly')
|
||||
self.assertEqual(yesno(False, u'certainly,get out of town,perhaps'),
|
||||
u'get out of town')
|
||||
self.assertEqual(yesno(None, u'certainly,get out of town,perhaps'),
|
||||
u'perhaps')
|
||||
self.assertEqual(yesno(None, u'certainly,get out of town'),
|
||||
u'get out of town')
|
||||
self.assertEqual(yesno(True), 'yes')
|
||||
self.assertEqual(yesno(False), 'no')
|
||||
self.assertEqual(yesno(None), 'maybe')
|
||||
self.assertEqual(yesno(True, 'certainly,get out of town,perhaps'),
|
||||
'certainly')
|
||||
self.assertEqual(yesno(False, 'certainly,get out of town,perhaps'),
|
||||
'get out of town')
|
||||
self.assertEqual(yesno(None, 'certainly,get out of town,perhaps'),
|
||||
'perhaps')
|
||||
self.assertEqual(yesno(None, 'certainly,get out of town'),
|
||||
'get out of town')
|
||||
|
||||
def test_filesizeformat(self):
|
||||
self.assertEqual(filesizeformat(1023), u'1023 bytes')
|
||||
self.assertEqual(filesizeformat(1024), u'1.0 KB')
|
||||
self.assertEqual(filesizeformat(10*1024), u'10.0 KB')
|
||||
self.assertEqual(filesizeformat(1024*1024-1), u'1024.0 KB')
|
||||
self.assertEqual(filesizeformat(1024*1024), u'1.0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*50), u'50.0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024-1), u'1024.0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024), u'1.0 GB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024*1024), u'1.0 TB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024*1024*1024), u'1.0 PB')
|
||||
self.assertEqual(filesizeformat(1023), '1023 bytes')
|
||||
self.assertEqual(filesizeformat(1024), '1.0 KB')
|
||||
self.assertEqual(filesizeformat(10*1024), '10.0 KB')
|
||||
self.assertEqual(filesizeformat(1024*1024-1), '1024.0 KB')
|
||||
self.assertEqual(filesizeformat(1024*1024), '1.0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*50), '50.0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024-1), '1024.0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024), '1.0 GB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024*1024), '1.0 TB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024*1024*1024), '1.0 PB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024*1024*1024*2000),
|
||||
u'2000.0 PB')
|
||||
self.assertEqual(filesizeformat(complex(1,-1)), u'0 bytes')
|
||||
self.assertEqual(filesizeformat(""), u'0 bytes')
|
||||
self.assertEqual(filesizeformat(u"\N{GREEK SMALL LETTER ALPHA}"),
|
||||
u'0 bytes')
|
||||
'2000.0 PB')
|
||||
self.assertEqual(filesizeformat(complex(1,-1)), '0 bytes')
|
||||
self.assertEqual(filesizeformat(""), '0 bytes')
|
||||
self.assertEqual(filesizeformat("\N{GREEK SMALL LETTER ALPHA}"),
|
||||
'0 bytes')
|
||||
|
||||
def test_localized_filesizeformat(self):
|
||||
with self.settings(USE_L10N=True):
|
||||
with translation.override('de', deactivate=True):
|
||||
self.assertEqual(filesizeformat(1023), u'1023 Bytes')
|
||||
self.assertEqual(filesizeformat(1024), u'1,0 KB')
|
||||
self.assertEqual(filesizeformat(10*1024), u'10,0 KB')
|
||||
self.assertEqual(filesizeformat(1024*1024-1), u'1024,0 KB')
|
||||
self.assertEqual(filesizeformat(1024*1024), u'1,0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*50), u'50,0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024-1), u'1024,0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024), u'1,0 GB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024*1024), u'1,0 TB')
|
||||
self.assertEqual(filesizeformat(1023), '1023 Bytes')
|
||||
self.assertEqual(filesizeformat(1024), '1,0 KB')
|
||||
self.assertEqual(filesizeformat(10*1024), '10,0 KB')
|
||||
self.assertEqual(filesizeformat(1024*1024-1), '1024,0 KB')
|
||||
self.assertEqual(filesizeformat(1024*1024), '1,0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*50), '50,0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024-1), '1024,0 MB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024), '1,0 GB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024*1024), '1,0 TB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024*1024*1024),
|
||||
u'1,0 PB')
|
||||
'1,0 PB')
|
||||
self.assertEqual(filesizeformat(1024*1024*1024*1024*1024*2000),
|
||||
u'2000,0 PB')
|
||||
self.assertEqual(filesizeformat(complex(1,-1)), u'0 Bytes')
|
||||
self.assertEqual(filesizeformat(""), u'0 Bytes')
|
||||
self.assertEqual(filesizeformat(u"\N{GREEK SMALL LETTER ALPHA}"),
|
||||
u'0 Bytes')
|
||||
'2000,0 PB')
|
||||
self.assertEqual(filesizeformat(complex(1,-1)), '0 Bytes')
|
||||
self.assertEqual(filesizeformat(""), '0 Bytes')
|
||||
self.assertEqual(filesizeformat("\N{GREEK SMALL LETTER ALPHA}"),
|
||||
'0 Bytes')
|
||||
|
||||
def test_pluralize(self):
|
||||
self.assertEqual(pluralize(1), u'')
|
||||
self.assertEqual(pluralize(0), u's')
|
||||
self.assertEqual(pluralize(2), u's')
|
||||
self.assertEqual(pluralize([1]), u'')
|
||||
self.assertEqual(pluralize([]), u's')
|
||||
self.assertEqual(pluralize([1,2,3]), u's')
|
||||
self.assertEqual(pluralize(1,u'es'), u'')
|
||||
self.assertEqual(pluralize(0,u'es'), u'es')
|
||||
self.assertEqual(pluralize(2,u'es'), u'es')
|
||||
self.assertEqual(pluralize(1,u'y,ies'), u'y')
|
||||
self.assertEqual(pluralize(0,u'y,ies'), u'ies')
|
||||
self.assertEqual(pluralize(2,u'y,ies'), u'ies')
|
||||
self.assertEqual(pluralize(0,u'y,ies,error'), u'')
|
||||
self.assertEqual(pluralize(1), '')
|
||||
self.assertEqual(pluralize(0), 's')
|
||||
self.assertEqual(pluralize(2), 's')
|
||||
self.assertEqual(pluralize([1]), '')
|
||||
self.assertEqual(pluralize([]), 's')
|
||||
self.assertEqual(pluralize([1,2,3]), 's')
|
||||
self.assertEqual(pluralize(1,'es'), '')
|
||||
self.assertEqual(pluralize(0,'es'), 'es')
|
||||
self.assertEqual(pluralize(2,'es'), 'es')
|
||||
self.assertEqual(pluralize(1,'y,ies'), 'y')
|
||||
self.assertEqual(pluralize(0,'y,ies'), 'ies')
|
||||
self.assertEqual(pluralize(2,'y,ies'), 'ies')
|
||||
self.assertEqual(pluralize(0,'y,ies,error'), '')
|
||||
|
||||
def test_phone2numeric(self):
|
||||
self.assertEqual(phone2numeric_filter(u'0800 flowers'), u'0800 3569377')
|
||||
self.assertEqual(phone2numeric_filter('0800 flowers'), '0800 3569377')
|
||||
|
||||
def test_non_string_input(self):
|
||||
# Filters shouldn't break if passed non-strings
|
||||
self.assertEqual(addslashes(123), u'123')
|
||||
self.assertEqual(linenumbers(123), u'1. 123')
|
||||
self.assertEqual(lower(123), u'123')
|
||||
self.assertEqual(make_list(123), [u'1', u'2', u'3'])
|
||||
self.assertEqual(slugify(123), u'123')
|
||||
self.assertEqual(title(123), u'123')
|
||||
self.assertEqual(truncatewords(123, 2), u'123')
|
||||
self.assertEqual(upper(123), u'123')
|
||||
self.assertEqual(urlencode(123), u'123')
|
||||
self.assertEqual(urlize(123), u'123')
|
||||
self.assertEqual(urlizetrunc(123, 1), u'123')
|
||||
self.assertEqual(addslashes(123), '123')
|
||||
self.assertEqual(linenumbers(123), '1. 123')
|
||||
self.assertEqual(lower(123), '123')
|
||||
self.assertEqual(make_list(123), ['1', '2', '3'])
|
||||
self.assertEqual(slugify(123), '123')
|
||||
self.assertEqual(title(123), '123')
|
||||
self.assertEqual(truncatewords(123, 2), '123')
|
||||
self.assertEqual(upper(123), '123')
|
||||
self.assertEqual(urlencode(123), '123')
|
||||
self.assertEqual(urlize(123), '123')
|
||||
self.assertEqual(urlizetrunc(123, 1), '123')
|
||||
self.assertEqual(wordcount(123), 1)
|
||||
self.assertEqual(wordwrap(123, 2), u'123')
|
||||
self.assertEqual(ljust('123', 4), u'123 ')
|
||||
self.assertEqual(rjust('123', 4), u' 123')
|
||||
self.assertEqual(center('123', 5), u' 123 ')
|
||||
self.assertEqual(center('123', 6), u' 123 ')
|
||||
self.assertEqual(cut(123, '2'), u'13')
|
||||
self.assertEqual(escape(123), u'123')
|
||||
self.assertEqual(linebreaks_filter(123), u'<p>123</p>')
|
||||
self.assertEqual(linebreaksbr(123), u'123')
|
||||
self.assertEqual(removetags(123, 'a'), u'123')
|
||||
self.assertEqual(striptags(123), u'123')
|
||||
self.assertEqual(wordwrap(123, 2), '123')
|
||||
self.assertEqual(ljust('123', 4), '123 ')
|
||||
self.assertEqual(rjust('123', 4), ' 123')
|
||||
self.assertEqual(center('123', 5), ' 123 ')
|
||||
self.assertEqual(center('123', 6), ' 123 ')
|
||||
self.assertEqual(cut(123, '2'), '13')
|
||||
self.assertEqual(escape(123), '123')
|
||||
self.assertEqual(linebreaks_filter(123), '<p>123</p>')
|
||||
self.assertEqual(linebreaksbr(123), '123')
|
||||
self.assertEqual(removetags(123, 'a'), '123')
|
||||
self.assertEqual(striptags(123), '123')
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
from __future__ import unicode_literals
|
||||
"""
|
||||
Model for testing arithmetic expressions.
|
||||
"""
|
||||
|
|
@ -9,7 +10,7 @@ class Number(models.Model):
|
|||
float = models.FloatField(null=True, db_column='the_float')
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%i, %.3f' % (self.integer, self.float)
|
||||
return '%i, %.3f' % (self.integer, self.float)
|
||||
|
||||
class Experiment(models.Model):
|
||||
name = models.CharField(max_length=24)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import copy
|
||||
import datetime
|
||||
|
||||
|
|
@ -11,7 +13,7 @@ class RevisionableModel(models.Model):
|
|||
when = models.DateTimeField(default=datetime.datetime.now)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s (%s, %s)" % (self.title, self.id, self.base.id)
|
||||
return "%s (%s, %s)" % (self.title, self.id, self.base.id)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(RevisionableModel, self).save(*args, **kwargs)
|
||||
|
|
@ -36,5 +38,5 @@ class TestObject(models.Model):
|
|||
third = models.CharField(max_length=20)
|
||||
|
||||
def __unicode__(self):
|
||||
return u'TestObject: %s,%s,%s' % (self.first,self.second,self.third)
|
||||
return 'TestObject: %s,%s,%s' % (self.first,self.second,self.third)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
|
||||
|
|
@ -178,100 +178,100 @@ class ExtraRegressTests(TestCase):
|
|||
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values()),
|
||||
[{'bar': u'second', 'third': u'third', 'second': u'second', 'whiz': u'third', 'foo': u'first', 'id': obj.pk, 'first': u'first'}]
|
||||
[{'bar': 'second', 'third': 'third', 'second': 'second', 'whiz': 'third', 'foo': 'first', 'id': obj.pk, 'first': 'first'}]
|
||||
)
|
||||
|
||||
# Extra clauses after an empty values clause are still included
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.values().extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third'))))),
|
||||
[{'bar': u'second', 'third': u'third', 'second': u'second', 'whiz': u'third', 'foo': u'first', 'id': obj.pk, 'first': u'first'}]
|
||||
[{'bar': 'second', 'third': 'third', 'second': 'second', 'whiz': 'third', 'foo': 'first', 'id': obj.pk, 'first': 'first'}]
|
||||
)
|
||||
|
||||
# Extra columns are ignored if not mentioned in the values() clause
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values('first', 'second')),
|
||||
[{'second': u'second', 'first': u'first'}]
|
||||
[{'second': 'second', 'first': 'first'}]
|
||||
)
|
||||
|
||||
# Extra columns after a non-empty values() clause are ignored
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.values('first', 'second').extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third'))))),
|
||||
[{'second': u'second', 'first': u'first'}]
|
||||
[{'second': 'second', 'first': 'first'}]
|
||||
)
|
||||
|
||||
# Extra columns can be partially returned
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values('first', 'second', 'foo')),
|
||||
[{'second': u'second', 'foo': u'first', 'first': u'first'}]
|
||||
[{'second': 'second', 'foo': 'first', 'first': 'first'}]
|
||||
)
|
||||
|
||||
# Also works if only extra columns are included
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values('foo', 'whiz')),
|
||||
[{'foo': u'first', 'whiz': u'third'}]
|
||||
[{'foo': 'first', 'whiz': 'third'}]
|
||||
)
|
||||
|
||||
# Values list works the same way
|
||||
# All columns are returned for an empty values_list()
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list()),
|
||||
[(u'first', u'second', u'third', obj.pk, u'first', u'second', u'third')]
|
||||
[('first', 'second', 'third', obj.pk, 'first', 'second', 'third')]
|
||||
)
|
||||
|
||||
# Extra columns after an empty values_list() are still included
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.values_list().extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third'))))),
|
||||
[(u'first', u'second', u'third', obj.pk, u'first', u'second', u'third')]
|
||||
[('first', 'second', 'third', obj.pk, 'first', 'second', 'third')]
|
||||
)
|
||||
|
||||
# Extra columns ignored completely if not mentioned in values_list()
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('first', 'second')),
|
||||
[(u'first', u'second')]
|
||||
[('first', 'second')]
|
||||
)
|
||||
|
||||
# Extra columns after a non-empty values_list() clause are ignored completely
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.values_list('first', 'second').extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third'))))),
|
||||
[(u'first', u'second')]
|
||||
[('first', 'second')]
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('second', flat=True)),
|
||||
[u'second']
|
||||
['second']
|
||||
)
|
||||
|
||||
# Only the extra columns specified in the values_list() are returned
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('first', 'second', 'whiz')),
|
||||
[(u'first', u'second', u'third')]
|
||||
[('first', 'second', 'third')]
|
||||
)
|
||||
|
||||
# ...also works if only extra columns are included
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('foo','whiz')),
|
||||
[(u'first', u'third')]
|
||||
[('first', 'third')]
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('whiz', flat=True)),
|
||||
[u'third']
|
||||
['third']
|
||||
)
|
||||
|
||||
# ... and values are returned in the order they are specified
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('whiz','foo')),
|
||||
[(u'third', u'first')]
|
||||
[('third', 'first')]
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('first','id')),
|
||||
[(u'first', obj.pk)]
|
||||
[('first', obj.pk)]
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
list(TestObject.objects.extra(select=SortedDict((('foo','first'), ('bar','second'), ('whiz','third')))).values_list('whiz', 'first', 'bar', 'id')),
|
||||
[(u'third', u'first', u'second', obj.pk)]
|
||||
[('third', 'first', 'second', obj.pk)]
|
||||
)
|
||||
|
||||
def test_regression_10847(self):
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import errno
|
||||
import os
|
||||
|
|
@ -251,9 +251,9 @@ class FileStorageTests(unittest.TestCase):
|
|||
os.mkdir(os.path.join(self.temp_dir, 'storage_dir_1'))
|
||||
|
||||
dirs, files = self.storage.listdir('')
|
||||
self.assertEqual(set(dirs), set([u'storage_dir_1']))
|
||||
self.assertEqual(set(dirs), set(['storage_dir_1']))
|
||||
self.assertEqual(set(files),
|
||||
set([u'storage_test_1', u'storage_test_2']))
|
||||
set(['storage_test_1', 'storage_test_2']))
|
||||
|
||||
self.storage.delete('storage_test_1')
|
||||
self.storage.delete('storage_test_2')
|
||||
|
|
@ -388,7 +388,7 @@ class UnicodeFileNameTests(unittest.TestCase):
|
|||
out the encoding situation between doctest and this file, but the actual
|
||||
repr doesn't matter; it just shouldn't return a unicode object.
|
||||
"""
|
||||
uf = UploadedFile(name=u'¿Cómo?',content_type='text')
|
||||
uf = UploadedFile(name='¿Cómo?',content_type='text')
|
||||
self.assertEqual(type(uf.__repr__()), str)
|
||||
|
||||
# Tests for a race condition on file saving (#4948).
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
#! -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import base64
|
||||
import errno
|
||||
|
|
@ -20,7 +19,7 @@ from . import uploadhandler
|
|||
from .models import FileModel, temp_storage, UPLOAD_TO
|
||||
|
||||
|
||||
UNICODE_FILENAME = u'test-0123456789_中文_Orléans.jpg'
|
||||
UNICODE_FILENAME = 'test-0123456789_中文_Orléans.jpg'
|
||||
|
||||
class FileUploadTests(TestCase):
|
||||
def test_simple_upload(self):
|
||||
|
|
@ -71,7 +70,7 @@ class FileUploadTests(TestCase):
|
|||
base64.b64encode(test_string),
|
||||
'--' + client.BOUNDARY + '--',
|
||||
'',
|
||||
])
|
||||
]).encode('utf-8')
|
||||
r = {
|
||||
'CONTENT_LENGTH': len(payload),
|
||||
'CONTENT_TYPE': client.MULTIPART_CONTENT,
|
||||
|
|
@ -140,7 +139,7 @@ class FileUploadTests(TestCase):
|
|||
'',
|
||||
])
|
||||
|
||||
payload = "\r\n".join(payload)
|
||||
payload = "\r\n".join(payload).encode('utf-8')
|
||||
r = {
|
||||
'CONTENT_LENGTH': len(payload),
|
||||
'CONTENT_TYPE': client.MULTIPART_CONTENT,
|
||||
|
|
@ -167,7 +166,7 @@ class FileUploadTests(TestCase):
|
|||
'Oops.'
|
||||
'--' + client.BOUNDARY + '--',
|
||||
'',
|
||||
])
|
||||
]).encode('utf-8')
|
||||
r = {
|
||||
'CONTENT_LENGTH': len(payload),
|
||||
'CONTENT_TYPE': client.MULTIPART_CONTENT,
|
||||
|
|
@ -192,7 +191,7 @@ class FileUploadTests(TestCase):
|
|||
'file contents'
|
||||
'--' + client.BOUNDARY + '--',
|
||||
'',
|
||||
])
|
||||
]).encode('utf-8')
|
||||
payload = payload[:-10]
|
||||
r = {
|
||||
'CONTENT_LENGTH': len(payload),
|
||||
|
|
@ -268,11 +267,11 @@ class FileUploadTests(TestCase):
|
|||
|
||||
response = self.client.post('/file_uploads/getlist_count/', {
|
||||
'file1': file1,
|
||||
'field1': u'test',
|
||||
'field2': u'test3',
|
||||
'field3': u'test5',
|
||||
'field4': u'test6',
|
||||
'field5': u'test7',
|
||||
'field1': 'test',
|
||||
'field2': 'test3',
|
||||
'field3': 'test5',
|
||||
'field4': 'test6',
|
||||
'field5': 'test7',
|
||||
'file2': (file2, file2a)
|
||||
})
|
||||
got = json.loads(response.content)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
|
|
@ -67,7 +67,7 @@ def file_upload_unicode_name(request):
|
|||
# through file save.
|
||||
uni_named_file = request.FILES['file_unicode']
|
||||
obj = FileModel.objects.create(testfile=uni_named_file)
|
||||
full_name = u'%s/%s' % (UPLOAD_TO, uni_named_file.name)
|
||||
full_name = '%s/%s' % (UPLOAD_TO, uni_named_file.name)
|
||||
if not os.path.exists(full_name):
|
||||
response = HttpResponseServerError()
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
|
|
@ -29,7 +29,7 @@ class Stuff(models.Model):
|
|||
owner = models.ForeignKey(User, null=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return unicode(self.name) + u' is owned by ' + unicode(self.owner)
|
||||
return unicode(self.name) + ' is owned by ' + unicode(self.owner)
|
||||
|
||||
|
||||
class Absolute(models.Model):
|
||||
|
|
@ -128,7 +128,7 @@ class Book(models.Model):
|
|||
ordering = ('name',)
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s by %s (available at %s)' % (
|
||||
return '%s by %s (available at %s)' % (
|
||||
self.name,
|
||||
self.author.name,
|
||||
', '.join(s.name for s in self.stores.all())
|
||||
|
|
@ -148,7 +148,7 @@ class NKChild(Parent):
|
|||
return self.data
|
||||
|
||||
def __unicode__(self):
|
||||
return u'NKChild %s:%s' % (self.name, self.data)
|
||||
return 'NKChild %s:%s' % (self.name, self.data)
|
||||
|
||||
|
||||
class RefToNKChild(models.Model):
|
||||
|
|
@ -157,7 +157,7 @@ class RefToNKChild(models.Model):
|
|||
nk_m2m = models.ManyToManyField(NKChild, related_name='ref_m2ms')
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s: Reference to %s [%s]' % (
|
||||
return '%s: Reference to %s [%s]' % (
|
||||
self.text,
|
||||
self.nk_fk,
|
||||
', '.join(str(o) for o in self.nk_m2m.all())
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Unittests for fixtures.
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import os
|
||||
import re
|
||||
|
|
@ -85,7 +85,7 @@ class TestFixtures(TestCase):
|
|||
verbosity=0,
|
||||
commit=False
|
||||
)
|
||||
self.assertEqual(Stuff.objects.all()[0].name, u'')
|
||||
self.assertEqual(Stuff.objects.all()[0].name, '')
|
||||
self.assertEqual(Stuff.objects.all()[0].owner, None)
|
||||
|
||||
def test_absolute_path(self):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
import datetime
|
||||
import tempfile
|
||||
|
|
@ -43,7 +45,7 @@ class ChoiceOptionModel(models.Model):
|
|||
ordering = ('name',)
|
||||
|
||||
def __unicode__(self):
|
||||
return u'ChoiceOption %d' % self.pk
|
||||
return 'ChoiceOption %d' % self.pk
|
||||
|
||||
|
||||
class ChoiceFieldModel(models.Model):
|
||||
|
|
@ -68,7 +70,7 @@ class Group(models.Model):
|
|||
name = models.CharField(max_length=10)
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s' % self.name
|
||||
return '%s' % self.name
|
||||
|
||||
|
||||
class Cheese(models.Model):
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.forms import *
|
||||
|
|
@ -24,9 +23,9 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'max_length': 'LENGTH %(show_value)s, MAX LENGTH %(limit_value)s',
|
||||
}
|
||||
f = CharField(min_length=5, max_length=10, error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'LENGTH 4, MIN LENGTH 5'], f.clean, '1234')
|
||||
self.assertFormErrors([u'LENGTH 11, MAX LENGTH 10'], f.clean, '12345678901')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['LENGTH 4, MIN LENGTH 5'], f.clean, '1234')
|
||||
self.assertFormErrors(['LENGTH 11, MAX LENGTH 10'], f.clean, '12345678901')
|
||||
|
||||
def test_integerfield(self):
|
||||
e = {
|
||||
|
|
@ -36,10 +35,10 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'max_value': 'MAX VALUE IS %(limit_value)s',
|
||||
}
|
||||
f = IntegerField(min_value=5, max_value=10, error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors([u'MIN VALUE IS 5'], f.clean, '4')
|
||||
self.assertFormErrors([u'MAX VALUE IS 10'], f.clean, '11')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors(['MIN VALUE IS 5'], f.clean, '4')
|
||||
self.assertFormErrors(['MAX VALUE IS 10'], f.clean, '11')
|
||||
|
||||
def test_floatfield(self):
|
||||
e = {
|
||||
|
|
@ -49,10 +48,10 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'max_value': 'MAX VALUE IS %(limit_value)s',
|
||||
}
|
||||
f = FloatField(min_value=5, max_value=10, error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors([u'MIN VALUE IS 5'], f.clean, '4')
|
||||
self.assertFormErrors([u'MAX VALUE IS 10'], f.clean, '11')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors(['MIN VALUE IS 5'], f.clean, '4')
|
||||
self.assertFormErrors(['MAX VALUE IS 10'], f.clean, '11')
|
||||
|
||||
def test_decimalfield(self):
|
||||
e = {
|
||||
|
|
@ -65,15 +64,15 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'max_whole_digits': 'MAX DIGITS BEFORE DP IS %s',
|
||||
}
|
||||
f = DecimalField(min_value=5, max_value=10, error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors([u'MIN VALUE IS 5'], f.clean, '4')
|
||||
self.assertFormErrors([u'MAX VALUE IS 10'], f.clean, '11')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors(['MIN VALUE IS 5'], f.clean, '4')
|
||||
self.assertFormErrors(['MAX VALUE IS 10'], f.clean, '11')
|
||||
|
||||
f2 = DecimalField(max_digits=4, decimal_places=2, error_messages=e)
|
||||
self.assertFormErrors([u'MAX DIGITS IS 4'], f2.clean, '123.45')
|
||||
self.assertFormErrors([u'MAX DP IS 2'], f2.clean, '1.234')
|
||||
self.assertFormErrors([u'MAX DIGITS BEFORE DP IS 2'], f2.clean, '123.4')
|
||||
self.assertFormErrors(['MAX DIGITS IS 4'], f2.clean, '123.45')
|
||||
self.assertFormErrors(['MAX DP IS 2'], f2.clean, '1.234')
|
||||
self.assertFormErrors(['MAX DIGITS BEFORE DP IS 2'], f2.clean, '123.4')
|
||||
|
||||
def test_datefield(self):
|
||||
e = {
|
||||
|
|
@ -81,8 +80,8 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid': 'INVALID',
|
||||
}
|
||||
f = DateField(error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abc')
|
||||
|
||||
def test_timefield(self):
|
||||
e = {
|
||||
|
|
@ -90,8 +89,8 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid': 'INVALID',
|
||||
}
|
||||
f = TimeField(error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abc')
|
||||
|
||||
def test_datetimefield(self):
|
||||
e = {
|
||||
|
|
@ -99,8 +98,8 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid': 'INVALID',
|
||||
}
|
||||
f = DateTimeField(error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abc')
|
||||
|
||||
def test_regexfield(self):
|
||||
e = {
|
||||
|
|
@ -110,10 +109,10 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'max_length': 'LENGTH %(show_value)s, MAX LENGTH %(limit_value)s',
|
||||
}
|
||||
f = RegexField(r'^\d+$', min_length=5, max_length=10, error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abcde')
|
||||
self.assertFormErrors([u'LENGTH 4, MIN LENGTH 5'], f.clean, '1234')
|
||||
self.assertFormErrors([u'LENGTH 11, MAX LENGTH 10'], f.clean, '12345678901')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abcde')
|
||||
self.assertFormErrors(['LENGTH 4, MIN LENGTH 5'], f.clean, '1234')
|
||||
self.assertFormErrors(['LENGTH 11, MAX LENGTH 10'], f.clean, '12345678901')
|
||||
|
||||
def test_emailfield(self):
|
||||
e = {
|
||||
|
|
@ -123,10 +122,10 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'max_length': 'LENGTH %(show_value)s, MAX LENGTH %(limit_value)s',
|
||||
}
|
||||
f = EmailField(min_length=8, max_length=10, error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abcdefgh')
|
||||
self.assertFormErrors([u'LENGTH 7, MIN LENGTH 8'], f.clean, 'a@b.com')
|
||||
self.assertFormErrors([u'LENGTH 11, MAX LENGTH 10'], f.clean, 'aye@bee.com')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abcdefgh')
|
||||
self.assertFormErrors(['LENGTH 7, MIN LENGTH 8'], f.clean, 'a@b.com')
|
||||
self.assertFormErrors(['LENGTH 11, MAX LENGTH 10'], f.clean, 'aye@bee.com')
|
||||
|
||||
def test_filefield(self):
|
||||
e = {
|
||||
|
|
@ -136,10 +135,10 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'empty': 'EMPTY FILE',
|
||||
}
|
||||
f = FileField(error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors([u'EMPTY FILE'], f.clean, SimpleUploadedFile('name', None))
|
||||
self.assertFormErrors([u'EMPTY FILE'], f.clean, SimpleUploadedFile('name', ''))
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abc')
|
||||
self.assertFormErrors(['EMPTY FILE'], f.clean, SimpleUploadedFile('name', None))
|
||||
self.assertFormErrors(['EMPTY FILE'], f.clean, SimpleUploadedFile('name', ''))
|
||||
|
||||
def test_urlfield(self):
|
||||
e = {
|
||||
|
|
@ -147,15 +146,15 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid': 'INVALID',
|
||||
}
|
||||
f = URLField(error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID'], f.clean, 'abc.c')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID'], f.clean, 'abc.c')
|
||||
|
||||
def test_booleanfield(self):
|
||||
e = {
|
||||
'required': 'REQUIRED',
|
||||
}
|
||||
f = BooleanField(error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
|
||||
def test_choicefield(self):
|
||||
e = {
|
||||
|
|
@ -163,8 +162,8 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid_choice': '%(value)s IS INVALID CHOICE',
|
||||
}
|
||||
f = ChoiceField(choices=[('a', 'aye')], error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'b IS INVALID CHOICE'], f.clean, 'b')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['b IS INVALID CHOICE'], f.clean, 'b')
|
||||
|
||||
def test_multiplechoicefield(self):
|
||||
e = {
|
||||
|
|
@ -173,9 +172,9 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid_list': 'NOT A LIST',
|
||||
}
|
||||
f = MultipleChoiceField(choices=[('a', 'aye')], error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'NOT A LIST'], f.clean, 'b')
|
||||
self.assertFormErrors([u'b IS INVALID CHOICE'], f.clean, ['b'])
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['NOT A LIST'], f.clean, 'b')
|
||||
self.assertFormErrors(['b IS INVALID CHOICE'], f.clean, ['b'])
|
||||
|
||||
def test_splitdatetimefield(self):
|
||||
e = {
|
||||
|
|
@ -184,8 +183,8 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid_time': 'INVALID TIME',
|
||||
}
|
||||
f = SplitDateTimeField(error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID DATE', u'INVALID TIME'], f.clean, ['a', 'b'])
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID DATE', 'INVALID TIME'], f.clean, ['a', 'b'])
|
||||
|
||||
def test_ipaddressfield(self):
|
||||
e = {
|
||||
|
|
@ -193,8 +192,8 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid': 'INVALID IP ADDRESS',
|
||||
}
|
||||
f = IPAddressField(error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID IP ADDRESS'], f.clean, '127.0.0')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID IP ADDRESS'], f.clean, '127.0.0')
|
||||
|
||||
def test_generic_ipaddressfield(self):
|
||||
e = {
|
||||
|
|
@ -202,8 +201,8 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid': 'INVALID IP ADDRESS',
|
||||
}
|
||||
f = GenericIPAddressField(error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID IP ADDRESS'], f.clean, '127.0.0')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID IP ADDRESS'], f.clean, '127.0.0')
|
||||
|
||||
def test_subclassing_errorlist(self):
|
||||
class TestForm(Form):
|
||||
|
|
@ -219,8 +218,8 @@ class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
return self.as_divs()
|
||||
|
||||
def as_divs(self):
|
||||
if not self: return u''
|
||||
return mark_safe(u'<div class="error">%s</div>' % ''.join([u'<p>%s</p>' % e for e in self]))
|
||||
if not self: return ''
|
||||
return mark_safe('<div class="error">%s</div>' % ''.join(['<p>%s</p>' % e for e in self]))
|
||||
|
||||
# This form should print errors the default way.
|
||||
form1 = TestForm({'first_name': 'John'})
|
||||
|
|
@ -247,8 +246,8 @@ class ModelChoiceFieldErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'invalid_choice': 'INVALID CHOICE',
|
||||
}
|
||||
f = ModelChoiceField(queryset=ChoiceModel.objects.all(), error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'INVALID CHOICE'], f.clean, '4')
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['INVALID CHOICE'], f.clean, '4')
|
||||
|
||||
# ModelMultipleChoiceField
|
||||
e = {
|
||||
|
|
@ -257,6 +256,6 @@ class ModelChoiceFieldErrorMessagesTestCase(TestCase, AssertFormErrorsMixin):
|
|||
'list': 'NOT A LIST OF VALUES',
|
||||
}
|
||||
f = ModelMultipleChoiceField(queryset=ChoiceModel.objects.all(), error_messages=e)
|
||||
self.assertFormErrors([u'REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors([u'NOT A LIST OF VALUES'], f.clean, '3')
|
||||
self.assertFormErrors([u'4 IS INVALID CHOICE'], f.clean, ['4'])
|
||||
self.assertFormErrors(['REQUIRED'], f.clean, '')
|
||||
self.assertFormErrors(['NOT A LIST OF VALUES'], f.clean, '3')
|
||||
self.assertFormErrors(['4 IS INVALID CHOICE'], f.clean, ['4'])
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
|
||||
|
|
@ -366,7 +365,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
|||
# Invalid dates shouldn't be allowed
|
||||
c = GetDate({'mydate_month':'2', 'mydate_day':'31', 'mydate_year':'2010'})
|
||||
self.assertFalse(c.is_valid())
|
||||
self.assertEqual(c.errors, {'mydate': [u'Enter a valid date.']})
|
||||
self.assertEqual(c.errors, {'mydate': ['Enter a valid date.']})
|
||||
|
||||
# label tag is correctly associated with month dropdown
|
||||
d = GetDate({'mydate_month':'1', 'mydate_day':'1', 'mydate_year':'2010'})
|
||||
|
|
@ -395,7 +394,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
|||
return [None, None, None]
|
||||
|
||||
def format_output(self, rendered_widgets):
|
||||
return u'\n'.join(rendered_widgets)
|
||||
return '\n'.join(rendered_widgets)
|
||||
|
||||
w = ComplexMultiWidget()
|
||||
self.assertHTMLEqual(w.render('name', 'some text,JP,2007-04-25 06:24:00'), """<input type="text" name="name_0" value="some text" />
|
||||
|
|
@ -422,11 +421,11 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
|||
return None
|
||||
|
||||
f = ComplexField(widget=w)
|
||||
self.assertEqual(f.clean(['some text', ['J','P'], ['2007-04-25','6:24:00']]), u'some text,JP,2007-04-25 06:24:00')
|
||||
self.assertFormErrors([u'Select a valid choice. X is not one of the available choices.'], f.clean, ['some text',['X'], ['2007-04-25','6:24:00']])
|
||||
self.assertEqual(f.clean(['some text', ['J','P'], ['2007-04-25','6:24:00']]), 'some text,JP,2007-04-25 06:24:00')
|
||||
self.assertFormErrors(['Select a valid choice. X is not one of the available choices.'], f.clean, ['some text',['X'], ['2007-04-25','6:24:00']])
|
||||
|
||||
# If insufficient data is provided, None is substituted
|
||||
self.assertFormErrors([u'This field is required.'], f.clean, ['some text',['JP']])
|
||||
self.assertFormErrors(['This field is required.'], f.clean, ['some text',['JP']])
|
||||
|
||||
class ComplexFieldForm(Form):
|
||||
field1 = ComplexField(widget=w)
|
||||
|
|
@ -451,26 +450,26 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
|||
</select>
|
||||
<input type="text" name="field1_2_0" value="2007-04-25" id="id_field1_2_0" /><input type="text" name="field1_2_1" value="06:24:00" id="id_field1_2_1" /></td></tr>""")
|
||||
|
||||
self.assertEqual(f.cleaned_data['field1'], u'some text,JP,2007-04-25 06:24:00')
|
||||
self.assertEqual(f.cleaned_data['field1'], 'some text,JP,2007-04-25 06:24:00')
|
||||
|
||||
def test_ipaddress(self):
|
||||
f = IPAddressField()
|
||||
self.assertFormErrors([u'This field is required.'], f.clean, '')
|
||||
self.assertFormErrors([u'This field is required.'], f.clean, None)
|
||||
self.assertEqual(f.clean('127.0.0.1'), u'127.0.0.1')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
|
||||
self.assertFormErrors(['This field is required.'], f.clean, '')
|
||||
self.assertFormErrors(['This field is required.'], f.clean, None)
|
||||
self.assertEqual(f.clean('127.0.0.1'), '127.0.0.1')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
|
||||
|
||||
f = IPAddressField(required=False)
|
||||
self.assertEqual(f.clean(''), u'')
|
||||
self.assertEqual(f.clean(None), u'')
|
||||
self.assertEqual(f.clean('127.0.0.1'), u'127.0.0.1')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
|
||||
self.assertEqual(f.clean(''), '')
|
||||
self.assertEqual(f.clean(None), '')
|
||||
self.assertEqual(f.clean('127.0.0.1'), '127.0.0.1')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
|
||||
|
||||
def test_generic_ipaddress_invalid_arguments(self):
|
||||
self.assertRaises(ValueError, GenericIPAddressField, protocol="hamster")
|
||||
|
|
@ -480,93 +479,93 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
|||
# The edge cases of the IPv6 validation code are not deeply tested
|
||||
# here, they are covered in the tests for django.utils.ipv6
|
||||
f = GenericIPAddressField()
|
||||
self.assertFormErrors([u'This field is required.'], f.clean, '')
|
||||
self.assertFormErrors([u'This field is required.'], f.clean, None)
|
||||
self.assertEqual(f.clean('127.0.0.1'), u'127.0.0.1')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '256.125.1.5')
|
||||
self.assertEqual(f.clean('fe80::223:6cff:fe8a:2e8a'), u'fe80::223:6cff:fe8a:2e8a')
|
||||
self.assertEqual(f.clean('2a02::223:6cff:fe8a:2e8a'), u'2a02::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '12345:2:3:4')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '1::2:3::4')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, 'foo::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '1::2:3:4:5:6:7:8')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '1:2')
|
||||
self.assertFormErrors(['This field is required.'], f.clean, '')
|
||||
self.assertFormErrors(['This field is required.'], f.clean, None)
|
||||
self.assertEqual(f.clean('127.0.0.1'), '127.0.0.1')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '256.125.1.5')
|
||||
self.assertEqual(f.clean('fe80::223:6cff:fe8a:2e8a'), 'fe80::223:6cff:fe8a:2e8a')
|
||||
self.assertEqual(f.clean('2a02::223:6cff:fe8a:2e8a'), '2a02::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '12345:2:3:4')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '1::2:3::4')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, 'foo::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '1::2:3:4:5:6:7:8')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '1:2')
|
||||
|
||||
def test_generic_ipaddress_as_ipv4_only(self):
|
||||
f = GenericIPAddressField(protocol="IPv4")
|
||||
self.assertFormErrors([u'This field is required.'], f.clean, '')
|
||||
self.assertFormErrors([u'This field is required.'], f.clean, None)
|
||||
self.assertEqual(f.clean('127.0.0.1'), u'127.0.0.1')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, 'fe80::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 address.'], f.clean, '2a02::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors(['This field is required.'], f.clean, '')
|
||||
self.assertFormErrors(['This field is required.'], f.clean, None)
|
||||
self.assertEqual(f.clean('127.0.0.1'), '127.0.0.1')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '256.125.1.5')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, 'fe80::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors(['Enter a valid IPv4 address.'], f.clean, '2a02::223:6cff:fe8a:2e8a')
|
||||
|
||||
def test_generic_ipaddress_as_ipv6_only(self):
|
||||
f = GenericIPAddressField(protocol="IPv6")
|
||||
self.assertFormErrors([u'This field is required.'], f.clean, '')
|
||||
self.assertFormErrors([u'This field is required.'], f.clean, None)
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, '127.0.0.1')
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, '256.125.1.5')
|
||||
self.assertEqual(f.clean('fe80::223:6cff:fe8a:2e8a'), u'fe80::223:6cff:fe8a:2e8a')
|
||||
self.assertEqual(f.clean('2a02::223:6cff:fe8a:2e8a'), u'2a02::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, '12345:2:3:4')
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, '1::2:3::4')
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, 'foo::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, '1::2:3:4:5:6:7:8')
|
||||
self.assertFormErrors([u'Enter a valid IPv6 address.'], f.clean, '1:2')
|
||||
self.assertFormErrors(['This field is required.'], f.clean, '')
|
||||
self.assertFormErrors(['This field is required.'], f.clean, None)
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, '127.0.0.1')
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, '256.125.1.5')
|
||||
self.assertEqual(f.clean('fe80::223:6cff:fe8a:2e8a'), 'fe80::223:6cff:fe8a:2e8a')
|
||||
self.assertEqual(f.clean('2a02::223:6cff:fe8a:2e8a'), '2a02::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, '12345:2:3:4')
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, '1::2:3::4')
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, 'foo::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, '1::2:3:4:5:6:7:8')
|
||||
self.assertFormErrors(['Enter a valid IPv6 address.'], f.clean, '1:2')
|
||||
|
||||
def test_generic_ipaddress_as_generic_not_required(self):
|
||||
f = GenericIPAddressField(required=False)
|
||||
self.assertEqual(f.clean(''), u'')
|
||||
self.assertEqual(f.clean(None), u'')
|
||||
self.assertEqual(f.clean('127.0.0.1'), u'127.0.0.1')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '256.125.1.5')
|
||||
self.assertEqual(f.clean('fe80::223:6cff:fe8a:2e8a'), u'fe80::223:6cff:fe8a:2e8a')
|
||||
self.assertEqual(f.clean('2a02::223:6cff:fe8a:2e8a'), u'2a02::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '12345:2:3:4')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '1::2:3::4')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, 'foo::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '1::2:3:4:5:6:7:8')
|
||||
self.assertFormErrors([u'Enter a valid IPv4 or IPv6 address.'], f.clean, '1:2')
|
||||
self.assertEqual(f.clean(''), '')
|
||||
self.assertEqual(f.clean(None), '')
|
||||
self.assertEqual(f.clean('127.0.0.1'), '127.0.0.1')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, 'foo')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '127.0.0.')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '1.2.3.4.5')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '256.125.1.5')
|
||||
self.assertEqual(f.clean('fe80::223:6cff:fe8a:2e8a'), 'fe80::223:6cff:fe8a:2e8a')
|
||||
self.assertEqual(f.clean('2a02::223:6cff:fe8a:2e8a'), '2a02::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '12345:2:3:4')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '1::2:3::4')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, 'foo::223:6cff:fe8a:2e8a')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '1::2:3:4:5:6:7:8')
|
||||
self.assertFormErrors(['Enter a valid IPv4 or IPv6 address.'], f.clean, '1:2')
|
||||
|
||||
def test_generic_ipaddress_normalization(self):
|
||||
# Test the normalising code
|
||||
f = GenericIPAddressField()
|
||||
self.assertEqual(f.clean('::ffff:0a0a:0a0a'), u'::ffff:10.10.10.10')
|
||||
self.assertEqual(f.clean('::ffff:10.10.10.10'), u'::ffff:10.10.10.10')
|
||||
self.assertEqual(f.clean('2001:000:a:0000:0:fe:fe:beef'), u'2001:0:a::fe:fe:beef')
|
||||
self.assertEqual(f.clean('2001::a:0000:0:fe:fe:beef'), u'2001:0:a::fe:fe:beef')
|
||||
self.assertEqual(f.clean('::ffff:0a0a:0a0a'), '::ffff:10.10.10.10')
|
||||
self.assertEqual(f.clean('::ffff:10.10.10.10'), '::ffff:10.10.10.10')
|
||||
self.assertEqual(f.clean('2001:000:a:0000:0:fe:fe:beef'), '2001:0:a::fe:fe:beef')
|
||||
self.assertEqual(f.clean('2001::a:0000:0:fe:fe:beef'), '2001:0:a::fe:fe:beef')
|
||||
|
||||
f = GenericIPAddressField(unpack_ipv4=True)
|
||||
self.assertEqual(f.clean('::ffff:0a0a:0a0a'), u'10.10.10.10')
|
||||
self.assertEqual(f.clean('::ffff:0a0a:0a0a'), '10.10.10.10')
|
||||
|
||||
def test_smart_unicode(self):
|
||||
class Test:
|
||||
def __str__(self):
|
||||
return 'ŠĐĆŽćžšđ'
|
||||
return b'ŠĐĆŽćžšđ'
|
||||
|
||||
class TestU:
|
||||
def __str__(self):
|
||||
return 'Foo'
|
||||
def __unicode__(self):
|
||||
return u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'
|
||||
return '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'
|
||||
|
||||
self.assertEqual(smart_unicode(Test()), u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
|
||||
self.assertEqual(smart_unicode(TestU()), u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
|
||||
self.assertEqual(smart_unicode(1), u'1')
|
||||
self.assertEqual(smart_unicode('foo'), u'foo')
|
||||
self.assertEqual(smart_unicode(Test()), '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
|
||||
self.assertEqual(smart_unicode(TestU()), '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
|
||||
self.assertEqual(smart_unicode(1), '1')
|
||||
self.assertEqual(smart_unicode('foo'), 'foo')
|
||||
|
||||
def test_accessing_clean(self):
|
||||
class UserForm(Form):
|
||||
|
|
@ -583,7 +582,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
|||
|
||||
f = UserForm({'username': 'SirRobin', 'password': 'blue'})
|
||||
self.assertTrue(f.is_valid())
|
||||
self.assertEqual(f.cleaned_data['username'], u'sirrobin')
|
||||
self.assertEqual(f.cleaned_data['username'], 'sirrobin')
|
||||
|
||||
def test_overriding_errorlist(self):
|
||||
class DivErrorList(ErrorList):
|
||||
|
|
@ -591,8 +590,8 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
|
|||
return self.as_divs()
|
||||
|
||||
def as_divs(self):
|
||||
if not self: return u''
|
||||
return u'<div class="errorlist">%s</div>' % ''.join([u'<div class="error">%s</div>' % force_unicode(e) for e in self])
|
||||
if not self: return ''
|
||||
return '<div class="errorlist">%s</div>' % ''.join(['<div class="error">%s</div>' % force_unicode(e) for e in self])
|
||||
|
||||
class CommentForm(Form):
|
||||
name = CharField(max_length=50, required=False)
|
||||
|
|
@ -774,7 +773,7 @@ class FormsExtraL10NTestCase(TestCase):
|
|||
a = GetDate({'mydate_month':'2', 'mydate_day':'31', 'mydate_year':'2010'})
|
||||
self.assertFalse(a.is_valid())
|
||||
# 'Geef een geldige datum op.' = 'Enter a valid date.'
|
||||
self.assertEqual(a.errors, {'mydate': [u'Geef een geldige datum op.']})
|
||||
self.assertEqual(a.errors, {'mydate': ['Geef een geldige datum op.']})
|
||||
|
||||
def test_form_label_association(self):
|
||||
# label tag is correctly associated with first rendered dropdown
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ Each Field's __init__() takes at least these parameters:
|
|||
Other than that, the Field subclasses have class-specific options for
|
||||
__init__(). For example, CharField has a max_length option.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import datetime
|
||||
import pickle
|
||||
import re
|
||||
|
|
@ -56,47 +58,47 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_charfield_1(self):
|
||||
f = CharField()
|
||||
self.assertEqual(u'1', f.clean(1))
|
||||
self.assertEqual(u'hello', f.clean('hello'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertEqual(u'[1, 2, 3]', f.clean([1, 2, 3]))
|
||||
self.assertEqual('1', f.clean(1))
|
||||
self.assertEqual('hello', f.clean('hello'))
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertEqual('[1, 2, 3]', f.clean([1, 2, 3]))
|
||||
self.assertEqual(f.max_length, None)
|
||||
self.assertEqual(f.min_length, None)
|
||||
|
||||
def test_charfield_2(self):
|
||||
f = CharField(required=False)
|
||||
self.assertEqual(u'1', f.clean(1))
|
||||
self.assertEqual(u'hello', f.clean('hello'))
|
||||
self.assertEqual(u'', f.clean(None))
|
||||
self.assertEqual(u'', f.clean(''))
|
||||
self.assertEqual(u'[1, 2, 3]', f.clean([1, 2, 3]))
|
||||
self.assertEqual('1', f.clean(1))
|
||||
self.assertEqual('hello', f.clean('hello'))
|
||||
self.assertEqual('', f.clean(None))
|
||||
self.assertEqual('', f.clean(''))
|
||||
self.assertEqual('[1, 2, 3]', f.clean([1, 2, 3]))
|
||||
self.assertEqual(f.max_length, None)
|
||||
self.assertEqual(f.min_length, None)
|
||||
|
||||
def test_charfield_3(self):
|
||||
f = CharField(max_length=10, required=False)
|
||||
self.assertEqual(u'12345', f.clean('12345'))
|
||||
self.assertEqual(u'1234567890', f.clean('1234567890'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at most 10 characters (it has 11).']", f.clean, '1234567890a')
|
||||
self.assertEqual('12345', f.clean('12345'))
|
||||
self.assertEqual('1234567890', f.clean('1234567890'))
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at most 10 characters (it has 11).'", f.clean, '1234567890a')
|
||||
self.assertEqual(f.max_length, 10)
|
||||
self.assertEqual(f.min_length, None)
|
||||
|
||||
def test_charfield_4(self):
|
||||
f = CharField(min_length=10, required=False)
|
||||
self.assertEqual(u'', f.clean(''))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at least 10 characters (it has 5).']", f.clean, '12345')
|
||||
self.assertEqual(u'1234567890', f.clean('1234567890'))
|
||||
self.assertEqual(u'1234567890a', f.clean('1234567890a'))
|
||||
self.assertEqual('', f.clean(''))
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 10 characters (it has 5).'", f.clean, '12345')
|
||||
self.assertEqual('1234567890', f.clean('1234567890'))
|
||||
self.assertEqual('1234567890a', f.clean('1234567890a'))
|
||||
self.assertEqual(f.max_length, None)
|
||||
self.assertEqual(f.min_length, 10)
|
||||
|
||||
def test_charfield_5(self):
|
||||
f = CharField(min_length=10, required=True)
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at least 10 characters (it has 5).']", f.clean, '12345')
|
||||
self.assertEqual(u'1234567890', f.clean('1234567890'))
|
||||
self.assertEqual(u'1234567890a', f.clean('1234567890a'))
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 10 characters (it has 5).'", f.clean, '12345')
|
||||
self.assertEqual('1234567890', f.clean('1234567890'))
|
||||
self.assertEqual('1234567890a', f.clean('1234567890a'))
|
||||
self.assertEqual(f.max_length, None)
|
||||
self.assertEqual(f.min_length, 10)
|
||||
|
||||
|
|
@ -121,18 +123,18 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_integerfield_1(self):
|
||||
f = IntegerField()
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertEqual(1, f.clean('1'))
|
||||
self.assertEqual(True, isinstance(f.clean('1'), int))
|
||||
self.assertEqual(23, f.clean('23'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a whole number.']", f.clean, 'a')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a whole number.'", f.clean, 'a')
|
||||
self.assertEqual(42, f.clean(42))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a whole number.']", f.clean, 3.14)
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a whole number.'", f.clean, 3.14)
|
||||
self.assertEqual(1, f.clean('1 '))
|
||||
self.assertEqual(1, f.clean(' 1'))
|
||||
self.assertEqual(1, f.clean(' 1 '))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a whole number.']", f.clean, '1a')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a whole number.'", f.clean, '1a')
|
||||
self.assertEqual(f.max_value, None)
|
||||
self.assertEqual(f.min_value, None)
|
||||
|
||||
|
|
@ -145,29 +147,29 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(1, f.clean('1'))
|
||||
self.assertEqual(True, isinstance(f.clean('1'), int))
|
||||
self.assertEqual(23, f.clean('23'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a whole number.']", f.clean, 'a')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a whole number.'", f.clean, 'a')
|
||||
self.assertEqual(1, f.clean('1 '))
|
||||
self.assertEqual(1, f.clean(' 1'))
|
||||
self.assertEqual(1, f.clean(' 1 '))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a whole number.']", f.clean, '1a')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a whole number.'", f.clean, '1a')
|
||||
self.assertEqual(f.max_value, None)
|
||||
self.assertEqual(f.min_value, None)
|
||||
|
||||
def test_integerfield_3(self):
|
||||
f = IntegerField(max_value=10)
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertEqual(1, f.clean(1))
|
||||
self.assertEqual(10, f.clean(10))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value is less than or equal to 10.']", f.clean, 11)
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value is less than or equal to 10.'", f.clean, 11)
|
||||
self.assertEqual(10, f.clean('10'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value is less than or equal to 10.']", f.clean, '11')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value is less than or equal to 10.'", f.clean, '11')
|
||||
self.assertEqual(f.max_value, 10)
|
||||
self.assertEqual(f.min_value, None)
|
||||
|
||||
def test_integerfield_4(self):
|
||||
f = IntegerField(min_value=10)
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value is greater than or equal to 10.']", f.clean, 1)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value is greater than or equal to 10.'", f.clean, 1)
|
||||
self.assertEqual(10, f.clean(10))
|
||||
self.assertEqual(11, f.clean(11))
|
||||
self.assertEqual(10, f.clean('10'))
|
||||
|
|
@ -177,14 +179,14 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_integerfield_5(self):
|
||||
f = IntegerField(min_value=10, max_value=20)
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value is greater than or equal to 10.']", f.clean, 1)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value is greater than or equal to 10.'", f.clean, 1)
|
||||
self.assertEqual(10, f.clean(10))
|
||||
self.assertEqual(11, f.clean(11))
|
||||
self.assertEqual(10, f.clean('10'))
|
||||
self.assertEqual(11, f.clean('11'))
|
||||
self.assertEqual(20, f.clean(20))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value is less than or equal to 20.']", f.clean, 21)
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value is less than or equal to 20.'", f.clean, 21)
|
||||
self.assertEqual(f.max_value, 20)
|
||||
self.assertEqual(f.min_value, 10)
|
||||
|
||||
|
|
@ -192,19 +194,19 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_floatfield_1(self):
|
||||
f = FloatField()
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertEqual(1.0, f.clean('1'))
|
||||
self.assertEqual(True, isinstance(f.clean('1'), float))
|
||||
self.assertEqual(23.0, f.clean('23'))
|
||||
self.assertEqual(3.1400000000000001, f.clean('3.14'))
|
||||
self.assertEqual(3.1400000000000001, f.clean(3.14))
|
||||
self.assertEqual(42.0, f.clean(42))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a number.']", f.clean, 'a')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, 'a')
|
||||
self.assertEqual(1.0, f.clean('1.0 '))
|
||||
self.assertEqual(1.0, f.clean(' 1.0'))
|
||||
self.assertEqual(1.0, f.clean(' 1.0 '))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a number.']", f.clean, '1.0a')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, '1.0a')
|
||||
self.assertEqual(f.max_value, None)
|
||||
self.assertEqual(f.min_value, None)
|
||||
|
||||
|
|
@ -218,8 +220,8 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_floatfield_3(self):
|
||||
f = FloatField(max_value=1.5, min_value=0.5)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value is less than or equal to 1.5.']", f.clean, '1.6')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value is greater than or equal to 0.5.']", f.clean, '0.4')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value is less than or equal to 1.5.'", f.clean, '1.6')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value is greater than or equal to 0.5.'", f.clean, '0.4')
|
||||
self.assertEqual(1.5, f.clean('1.5'))
|
||||
self.assertEqual(0.5, f.clean('0.5'))
|
||||
self.assertEqual(f.max_value, 1.5)
|
||||
|
|
@ -229,34 +231,34 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_decimalfield_1(self):
|
||||
f = DecimalField(max_digits=4, decimal_places=2)
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertEqual(f.clean('1'), Decimal("1"))
|
||||
self.assertEqual(True, isinstance(f.clean('1'), Decimal))
|
||||
self.assertEqual(f.clean('23'), Decimal("23"))
|
||||
self.assertEqual(f.clean('3.14'), Decimal("3.14"))
|
||||
self.assertEqual(f.clean(3.14), Decimal("3.14"))
|
||||
self.assertEqual(f.clean(Decimal('3.14')), Decimal("3.14"))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a number.']", f.clean, 'NaN')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a number.']", f.clean, 'Inf')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a number.']", f.clean, '-Inf')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a number.']", f.clean, 'a')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a number.']", f.clean, u'łąść')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, 'NaN')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, 'Inf')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, '-Inf')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, 'a')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, 'łąść')
|
||||
self.assertEqual(f.clean('1.0 '), Decimal("1.0"))
|
||||
self.assertEqual(f.clean(' 1.0'), Decimal("1.0"))
|
||||
self.assertEqual(f.clean(' 1.0 '), Decimal("1.0"))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a number.']", f.clean, '1.0a')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure that there are no more than 4 digits in total.']", f.clean, '123.45')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure that there are no more than 2 decimal places.']", f.clean, '1.234')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure that there are no more than 2 digits before the decimal point.']", f.clean, '123.4')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, '1.0a')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure that there are no more than 4 digits in total.'", f.clean, '123.45')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure that there are no more than 2 decimal places.'", f.clean, '1.234')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure that there are no more than 2 digits before the decimal point.'", f.clean, '123.4')
|
||||
self.assertEqual(f.clean('-12.34'), Decimal("-12.34"))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure that there are no more than 4 digits in total.']", f.clean, '-123.45')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure that there are no more than 4 digits in total.'", f.clean, '-123.45')
|
||||
self.assertEqual(f.clean('-.12'), Decimal("-0.12"))
|
||||
self.assertEqual(f.clean('-00.12'), Decimal("-0.12"))
|
||||
self.assertEqual(f.clean('-000.12'), Decimal("-0.12"))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure that there are no more than 2 decimal places.']", f.clean, '-000.123')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure that there are no more than 4 digits in total.']", f.clean, '-000.12345')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a number.']", f.clean, '--0.12')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure that there are no more than 2 decimal places.'", f.clean, '-000.123')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure that there are no more than 4 digits in total.'", f.clean, '-000.12345')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a number.'", f.clean, '--0.12')
|
||||
self.assertEqual(f.max_digits, 4)
|
||||
self.assertEqual(f.decimal_places, 2)
|
||||
self.assertEqual(f.max_value, None)
|
||||
|
|
@ -274,8 +276,8 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_decimalfield_3(self):
|
||||
f = DecimalField(max_digits=4, decimal_places=2, max_value=Decimal('1.5'), min_value=Decimal('0.5'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value is less than or equal to 1.5.']", f.clean, '1.6')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value is greater than or equal to 0.5.']", f.clean, '0.4')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value is less than or equal to 1.5.'", f.clean, '1.6')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value is greater than or equal to 0.5.'", f.clean, '0.4')
|
||||
self.assertEqual(f.clean('1.5'), Decimal("1.5"))
|
||||
self.assertEqual(f.clean('0.5'), Decimal("0.5"))
|
||||
self.assertEqual(f.clean('.5'), Decimal("0.5"))
|
||||
|
|
@ -287,7 +289,7 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_decimalfield_4(self):
|
||||
f = DecimalField(decimal_places=2)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure that there are no more than 2 decimal places.']", f.clean, '0.00000001')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure that there are no more than 2 decimal places.'", f.clean, '0.00000001')
|
||||
|
||||
def test_decimalfield_5(self):
|
||||
f = DecimalField(max_digits=3)
|
||||
|
|
@ -297,13 +299,13 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(f.clean('0000000.100'), Decimal("0.100"))
|
||||
# Only leading whole zeros "collapse" to one digit.
|
||||
self.assertEqual(f.clean('000000.02'), Decimal('0.02'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure that there are no more than 3 digits in total.']", f.clean, '000000.0002')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure that there are no more than 3 digits in total.'", f.clean, '000000.0002')
|
||||
self.assertEqual(f.clean('.002'), Decimal("0.002"))
|
||||
|
||||
def test_decimalfield_6(self):
|
||||
f = DecimalField(max_digits=2, decimal_places=2)
|
||||
self.assertEqual(f.clean('.01'), Decimal(".01"))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure that there are no more than 0 digits before the decimal point.']", f.clean, '1.1')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure that there are no more than 0 digits before the decimal point.'", f.clean, '1.1')
|
||||
|
||||
# DateField ###################################################################
|
||||
|
||||
|
|
@ -321,10 +323,10 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(datetime.date(2006, 10, 25), f.clean('October 25, 2006'))
|
||||
self.assertEqual(datetime.date(2006, 10, 25), f.clean('25 October 2006'))
|
||||
self.assertEqual(datetime.date(2006, 10, 25), f.clean('25 October, 2006'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '2006-4-31')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '200a-10-25')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '25/10/06')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, '2006-4-31')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, '200a-10-25')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, '25/10/06')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
|
||||
def test_datefield_2(self):
|
||||
f = DateField(required=False)
|
||||
|
|
@ -338,9 +340,9 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(datetime.date(2006, 10, 25), f.clean(datetime.date(2006, 10, 25)))
|
||||
self.assertEqual(datetime.date(2006, 10, 25), f.clean(datetime.datetime(2006, 10, 25, 14, 30)))
|
||||
self.assertEqual(datetime.date(2006, 10, 25), f.clean('2006 10 25'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '2006-10-25')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '10/25/2006')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, '10/25/06')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, '2006-10-25')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, '10/25/2006')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, '10/25/06')
|
||||
|
||||
def test_datefield_4(self):
|
||||
# Test whitespace stripping behavior (#5714)
|
||||
|
|
@ -351,7 +353,7 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(datetime.date(2006, 10, 25), f.clean(' October 25 2006 '))
|
||||
self.assertEqual(datetime.date(2006, 10, 25), f.clean(' October 25, 2006 '))
|
||||
self.assertEqual(datetime.date(2006, 10, 25), f.clean(' 25 October 2006 '))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, ' ')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, ' ')
|
||||
|
||||
# TimeField ###################################################################
|
||||
|
||||
|
|
@ -361,8 +363,8 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(datetime.time(14, 25, 59), f.clean(datetime.time(14, 25, 59)))
|
||||
self.assertEqual(datetime.time(14, 25), f.clean('14:25'))
|
||||
self.assertEqual(datetime.time(14, 25, 59), f.clean('14:25:59'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid time.']", f.clean, 'hello')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid time.']", f.clean, '1:24 p.m.')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid time.'", f.clean, 'hello')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid time.'", f.clean, '1:24 p.m.')
|
||||
|
||||
def test_timefield_2(self):
|
||||
f = TimeField(input_formats=['%I:%M %p'])
|
||||
|
|
@ -370,14 +372,14 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(datetime.time(14, 25, 59), f.clean(datetime.time(14, 25, 59)))
|
||||
self.assertEqual(datetime.time(4, 25), f.clean('4:25 AM'))
|
||||
self.assertEqual(datetime.time(16, 25), f.clean('4:25 PM'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid time.']", f.clean, '14:30:45')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid time.'", f.clean, '14:30:45')
|
||||
|
||||
def test_timefield_3(self):
|
||||
f = TimeField()
|
||||
# Test whitespace stripping behavior (#5714)
|
||||
self.assertEqual(datetime.time(14, 25), f.clean(' 14:25 '))
|
||||
self.assertEqual(datetime.time(14, 25, 59), f.clean(' 14:25:59 '))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid time.']", f.clean, ' ')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid time.'", f.clean, ' ')
|
||||
|
||||
# DateTimeField ###############################################################
|
||||
|
||||
|
|
@ -403,8 +405,8 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('10/25/06 14:30:00'))
|
||||
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('10/25/06 14:30'))
|
||||
self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0), f.clean('10/25/06'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date/time.']", f.clean, 'hello')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date/time.']", f.clean, '2006-10-25 4:30 p.m.')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date/time.'", f.clean, 'hello')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date/time.'", f.clean, '2006-10-25 4:30 p.m.')
|
||||
|
||||
def test_datetimefield_2(self):
|
||||
f = DateTimeField(input_formats=['%Y %m %d %I:%M %p'])
|
||||
|
|
@ -413,7 +415,7 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 59), f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59)))
|
||||
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 59, 200), f.clean(datetime.datetime(2006, 10, 25, 14, 30, 59, 200)))
|
||||
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30), f.clean('2006 10 25 2:30 PM'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date/time.']", f.clean, '2006-10-25 14:30:45')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date/time.'", f.clean, '2006-10-25 14:30:45')
|
||||
|
||||
def test_datetimefield_3(self):
|
||||
f = DateTimeField(required=False)
|
||||
|
|
@ -432,51 +434,51 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0), f.clean(' 10/25/2006 '))
|
||||
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45), f.clean(' 10/25/06 14:30:45 '))
|
||||
self.assertEqual(datetime.datetime(2006, 10, 25, 0, 0), f.clean(' 10/25/06 '))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date/time.']", f.clean, ' ')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date/time.'", f.clean, ' ')
|
||||
|
||||
def test_datetimefield_5(self):
|
||||
f = DateTimeField(input_formats=[u'%Y.%m.%d %H:%M:%S.%f'])
|
||||
f = DateTimeField(input_formats=['%Y.%m.%d %H:%M:%S.%f'])
|
||||
self.assertEqual(datetime.datetime(2006, 10, 25, 14, 30, 45, 200), f.clean('2006.10.25 14:30:45.0002'))
|
||||
# RegexField ##################################################################
|
||||
|
||||
def test_regexfield_1(self):
|
||||
f = RegexField('^\d[A-F]\d$')
|
||||
self.assertEqual(u'2A2', f.clean('2A2'))
|
||||
self.assertEqual(u'3F3', f.clean('3F3'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '3G3')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid value.']", f.clean, ' 2A2')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '2A2 ')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertEqual('2A2', f.clean('2A2'))
|
||||
self.assertEqual('3F3', f.clean('3F3'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, '3G3')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, ' 2A2')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, '2A2 ')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
|
||||
def test_regexfield_2(self):
|
||||
f = RegexField('^\d[A-F]\d$', required=False)
|
||||
self.assertEqual(u'2A2', f.clean('2A2'))
|
||||
self.assertEqual(u'3F3', f.clean('3F3'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '3G3')
|
||||
self.assertEqual(u'', f.clean(''))
|
||||
self.assertEqual('2A2', f.clean('2A2'))
|
||||
self.assertEqual('3F3', f.clean('3F3'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, '3G3')
|
||||
self.assertEqual('', f.clean(''))
|
||||
|
||||
def test_regexfield_3(self):
|
||||
f = RegexField(re.compile('^\d[A-F]\d$'))
|
||||
self.assertEqual(u'2A2', f.clean('2A2'))
|
||||
self.assertEqual(u'3F3', f.clean('3F3'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '3G3')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid value.']", f.clean, ' 2A2')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '2A2 ')
|
||||
self.assertEqual('2A2', f.clean('2A2'))
|
||||
self.assertEqual('3F3', f.clean('3F3'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, '3G3')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, ' 2A2')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, '2A2 ')
|
||||
|
||||
def test_regexfield_4(self):
|
||||
f = RegexField('^\d\d\d\d$', error_message='Enter a four-digit number.')
|
||||
self.assertEqual(u'1234', f.clean('1234'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a four-digit number.']", f.clean, '123')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a four-digit number.']", f.clean, 'abcd')
|
||||
self.assertEqual('1234', f.clean('1234'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a four-digit number.'", f.clean, '123')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a four-digit number.'", f.clean, 'abcd')
|
||||
|
||||
def test_regexfield_5(self):
|
||||
f = RegexField('^\d+$', min_length=5, max_length=10)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at least 5 characters (it has 3).']", f.clean, '123')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at least 5 characters (it has 3).', u'Enter a valid value.']", f.clean, 'abc')
|
||||
self.assertEqual(u'12345', f.clean('12345'))
|
||||
self.assertEqual(u'1234567890', f.clean('1234567890'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at most 10 characters (it has 11).']", f.clean, '12345678901')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid value.']", f.clean, '12345a')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 5 characters (it has 3).'", f.clean, '123')
|
||||
self.assertRaisesRegexp(ValidationError, "'Ensure this value has at least 5 characters \(it has 3\)\.', u?'Enter a valid value\.'", f.clean, 'abc')
|
||||
self.assertEqual('12345', f.clean('12345'))
|
||||
self.assertEqual('1234567890', f.clean('1234567890'))
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at most 10 characters (it has 11).'", f.clean, '12345678901')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, '12345a')
|
||||
|
||||
def test_regexfield_6(self):
|
||||
"""
|
||||
|
|
@ -489,27 +491,27 @@ class FieldsTests(SimpleTestCase):
|
|||
def test_change_regex_after_init(self):
|
||||
f = RegexField('^[a-z]+$')
|
||||
f.regex = '^\d+$'
|
||||
self.assertEqual(u'1234', f.clean('1234'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid value.']", f.clean, 'abcd')
|
||||
self.assertEqual('1234', f.clean('1234'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid value.'", f.clean, 'abcd')
|
||||
|
||||
# EmailField ##################################################################
|
||||
|
||||
def test_emailfield_1(self):
|
||||
f = EmailField()
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertEqual(u'person@example.com', f.clean('person@example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo@')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo@bar')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@invalid-.com')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@-invalid.com')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@inv-.alid-.com')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@inv-.-alid.com')
|
||||
self.assertEqual(u'example@valid-----hyphens.com', f.clean('example@valid-----hyphens.com'))
|
||||
self.assertEqual(u'example@valid-with-hyphens.com', f.clean('example@valid-with-hyphens.com'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'example@.com')
|
||||
self.assertEqual(u'local@domain.with.idn.xyz\xe4\xf6\xfc\xdfabc.part.com', f.clean('local@domain.with.idn.xyzäöüßabc.part.com'))
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertEqual('person@example.com', f.clean('person@example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'foo')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'foo@')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'foo@bar')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'example@invalid-.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'example@-invalid.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'example@inv-.alid-.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'example@inv-.-alid.com')
|
||||
self.assertEqual('example@valid-----hyphens.com', f.clean('example@valid-----hyphens.com'))
|
||||
self.assertEqual('example@valid-with-hyphens.com', f.clean('example@valid-with-hyphens.com'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'example@.com')
|
||||
self.assertEqual('local@domain.with.idn.xyz\xe4\xf6\xfc\xdfabc.part.com', f.clean('local@domain.with.idn.xyzäöüßabc.part.com'))
|
||||
|
||||
def test_email_regexp_for_performance(self):
|
||||
f = EmailField()
|
||||
|
|
@ -517,50 +519,50 @@ class FieldsTests(SimpleTestCase):
|
|||
# if the security fix isn't in place.
|
||||
self.assertRaisesMessage(
|
||||
ValidationError,
|
||||
"[u'Enter a valid e-mail address.']",
|
||||
"'Enter a valid e-mail address.'",
|
||||
f.clean,
|
||||
'viewx3dtextx26qx3d@yahoo.comx26latlngx3d15854521645943074058'
|
||||
)
|
||||
|
||||
def test_emailfield_2(self):
|
||||
f = EmailField(required=False)
|
||||
self.assertEqual(u'', f.clean(''))
|
||||
self.assertEqual(u'', f.clean(None))
|
||||
self.assertEqual(u'person@example.com', f.clean('person@example.com'))
|
||||
self.assertEqual(u'example@example.com', f.clean(' example@example.com \t \t '))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo@')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'foo@bar')
|
||||
self.assertEqual('', f.clean(''))
|
||||
self.assertEqual('', f.clean(None))
|
||||
self.assertEqual('person@example.com', f.clean('person@example.com'))
|
||||
self.assertEqual('example@example.com', f.clean(' example@example.com \t \t '))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'foo')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'foo@')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'foo@bar')
|
||||
|
||||
def test_emailfield_3(self):
|
||||
f = EmailField(min_length=10, max_length=15)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at least 10 characters (it has 9).']", f.clean, 'a@foo.com')
|
||||
self.assertEqual(u'alf@foo.com', f.clean('alf@foo.com'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at most 15 characters (it has 20).']", f.clean, 'alf123456788@foo.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 10 characters (it has 9).'", f.clean, 'a@foo.com')
|
||||
self.assertEqual('alf@foo.com', f.clean('alf@foo.com'))
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at most 15 characters (it has 20).'", f.clean, 'alf123456788@foo.com')
|
||||
|
||||
# FileField ##################################################################
|
||||
|
||||
def test_filefield_1(self):
|
||||
f = FileField()
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '', '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '', '')
|
||||
self.assertEqual('files/test1.pdf', f.clean('', 'files/test1.pdf'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None, '')
|
||||
self.assertEqual('files/test2.pdf', f.clean(None, 'files/test2.pdf'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'No file was submitted. Check the encoding type on the form.']", f.clean, SimpleUploadedFile('', b''))
|
||||
self.assertRaisesMessage(ValidationError, "[u'No file was submitted. Check the encoding type on the form.']", f.clean, SimpleUploadedFile('', b''), '')
|
||||
self.assertRaisesMessage(ValidationError, "'No file was submitted. Check the encoding type on the form.'", f.clean, SimpleUploadedFile('', b''))
|
||||
self.assertRaisesMessage(ValidationError, "'No file was submitted. Check the encoding type on the form.'", f.clean, SimpleUploadedFile('', b''), '')
|
||||
self.assertEqual('files/test3.pdf', f.clean(None, 'files/test3.pdf'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'No file was submitted. Check the encoding type on the form.']", f.clean, 'some content that is not a file')
|
||||
self.assertRaisesMessage(ValidationError, "[u'The submitted file is empty.']", f.clean, SimpleUploadedFile('name', None))
|
||||
self.assertRaisesMessage(ValidationError, "[u'The submitted file is empty.']", f.clean, SimpleUploadedFile('name', b''))
|
||||
self.assertRaisesMessage(ValidationError, "'No file was submitted. Check the encoding type on the form.'", f.clean, 'some content that is not a file')
|
||||
self.assertRaisesMessage(ValidationError, "'The submitted file is empty.'", f.clean, SimpleUploadedFile('name', None))
|
||||
self.assertRaisesMessage(ValidationError, "'The submitted file is empty.'", f.clean, SimpleUploadedFile('name', b''))
|
||||
self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('name', b'Some File Content'))))
|
||||
self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('我隻氣墊船裝滿晒鱔.txt', u'मेरी मँडराने वाली नाव सर्पमीनों से भरी ह'.encode('utf-8')))))
|
||||
self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('我隻氣墊船裝滿晒鱔.txt', 'मेरी मँडराने वाली नाव सर्पमीनों से भरी ह'.encode('utf-8')))))
|
||||
self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('name', b'Some File Content'), 'files/test4.pdf')))
|
||||
|
||||
def test_filefield_2(self):
|
||||
f = FileField(max_length = 5)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this filename has at most 5 characters (it has 18).']", f.clean, SimpleUploadedFile('test_maxlength.txt', b'hello world'))
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this filename has at most 5 characters (it has 18).'", f.clean, SimpleUploadedFile('test_maxlength.txt', b'hello world'))
|
||||
self.assertEqual('files/test1.pdf', f.clean('', 'files/test1.pdf'))
|
||||
self.assertEqual('files/test2.pdf', f.clean(None, 'files/test2.pdf'))
|
||||
self.assertEqual(SimpleUploadedFile, type(f.clean(SimpleUploadedFile('name', b'Some File Content'))))
|
||||
|
|
@ -574,92 +576,92 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_urlfield_1(self):
|
||||
f = URLField()
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertEqual(u'http://localhost/', f.clean('http://localhost'))
|
||||
self.assertEqual(u'http://example.com/', f.clean('http://example.com'))
|
||||
self.assertEqual(u'http://example.com./', f.clean('http://example.com.'))
|
||||
self.assertEqual(u'http://www.example.com/', f.clean('http://www.example.com'))
|
||||
self.assertEqual(u'http://www.example.com:8000/test', f.clean('http://www.example.com:8000/test'))
|
||||
self.assertEqual(u'http://valid-with-hyphens.com/', f.clean('valid-with-hyphens.com'))
|
||||
self.assertEqual(u'http://subdomain.domain.com/', f.clean('subdomain.domain.com'))
|
||||
self.assertEqual(u'http://200.8.9.10/', f.clean('http://200.8.9.10'))
|
||||
self.assertEqual(u'http://200.8.9.10:8000/test', f.clean('http://200.8.9.10:8000/test'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'foo')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example.')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'com.')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, '.')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://.com')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://invalid-.com')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://-invalid.com')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://inv-.alid-.com')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://inv-.-alid.com')
|
||||
self.assertEqual(u'http://valid-----hyphens.com/', f.clean('http://valid-----hyphens.com'))
|
||||
self.assertEqual(u'http://some.idn.xyz\xe4\xf6\xfc\xdfabc.domain.com:123/blah', f.clean('http://some.idn.xyzäöüßabc.domain.com:123/blah'))
|
||||
self.assertEqual(u'http://www.example.com/s/http://code.djangoproject.com/ticket/13804', f.clean('www.example.com/s/http://code.djangoproject.com/ticket/13804'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, '[a')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://[a')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertEqual('http://localhost/', f.clean('http://localhost'))
|
||||
self.assertEqual('http://example.com/', f.clean('http://example.com'))
|
||||
self.assertEqual('http://example.com./', f.clean('http://example.com.'))
|
||||
self.assertEqual('http://www.example.com/', f.clean('http://www.example.com'))
|
||||
self.assertEqual('http://www.example.com:8000/test', f.clean('http://www.example.com:8000/test'))
|
||||
self.assertEqual('http://valid-with-hyphens.com/', f.clean('valid-with-hyphens.com'))
|
||||
self.assertEqual('http://subdomain.domain.com/', f.clean('subdomain.domain.com'))
|
||||
self.assertEqual('http://200.8.9.10/', f.clean('http://200.8.9.10'))
|
||||
self.assertEqual('http://200.8.9.10:8000/test', f.clean('http://200.8.9.10:8000/test'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'foo')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://example')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://example.')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'com.')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, '.')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://invalid-.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://-invalid.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://inv-.alid-.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://inv-.-alid.com')
|
||||
self.assertEqual('http://valid-----hyphens.com/', f.clean('http://valid-----hyphens.com'))
|
||||
self.assertEqual('http://some.idn.xyz\xe4\xf6\xfc\xdfabc.domain.com:123/blah', f.clean('http://some.idn.xyzäöüßabc.domain.com:123/blah'))
|
||||
self.assertEqual('http://www.example.com/s/http://code.djangoproject.com/ticket/13804', f.clean('www.example.com/s/http://code.djangoproject.com/ticket/13804'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, '[a')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://[a')
|
||||
|
||||
def test_url_regex_ticket11198(self):
|
||||
f = URLField()
|
||||
# hangs "forever" if catastrophic backtracking in ticket:#11198 not fixed
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://%s' % ("X"*200,))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://%s' % ("X"*200,))
|
||||
|
||||
# a second test, to make sure the problem is really addressed, even on
|
||||
# domains that don't fail the domain label length check in the regex
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://%s' % ("X"*60,))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://%s' % ("X"*60,))
|
||||
|
||||
def test_urlfield_2(self):
|
||||
f = URLField(required=False)
|
||||
self.assertEqual(u'', f.clean(''))
|
||||
self.assertEqual(u'', f.clean(None))
|
||||
self.assertEqual(u'http://example.com/', f.clean('http://example.com'))
|
||||
self.assertEqual(u'http://www.example.com/', f.clean('http://www.example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'foo')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://example.')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 'http://.com')
|
||||
self.assertEqual('', f.clean(''))
|
||||
self.assertEqual('', f.clean(None))
|
||||
self.assertEqual('http://example.com/', f.clean('http://example.com'))
|
||||
self.assertEqual('http://www.example.com/', f.clean('http://www.example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'foo')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://example')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://example.')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 'http://.com')
|
||||
|
||||
def test_urlfield_5(self):
|
||||
f = URLField(min_length=15, max_length=20)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at least 15 characters (it has 13).']", f.clean, 'http://f.com')
|
||||
self.assertEqual(u'http://example.com/', f.clean('http://example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at most 20 characters (it has 38).']", f.clean, 'http://abcdefghijklmnopqrstuvwxyz.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 15 characters (it has 13).'", f.clean, 'http://f.com')
|
||||
self.assertEqual('http://example.com/', f.clean('http://example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at most 20 characters (it has 38).'", f.clean, 'http://abcdefghijklmnopqrstuvwxyz.com')
|
||||
|
||||
def test_urlfield_6(self):
|
||||
f = URLField(required=False)
|
||||
self.assertEqual(u'http://example.com/', f.clean('example.com'))
|
||||
self.assertEqual(u'', f.clean(''))
|
||||
self.assertEqual(u'https://example.com/', f.clean('https://example.com'))
|
||||
self.assertEqual('http://example.com/', f.clean('example.com'))
|
||||
self.assertEqual('', f.clean(''))
|
||||
self.assertEqual('https://example.com/', f.clean('https://example.com'))
|
||||
|
||||
def test_urlfield_7(self):
|
||||
f = URLField()
|
||||
self.assertEqual(u'http://example.com/', f.clean('http://example.com'))
|
||||
self.assertEqual(u'http://example.com/test', f.clean('http://example.com/test'))
|
||||
self.assertEqual('http://example.com/', f.clean('http://example.com'))
|
||||
self.assertEqual('http://example.com/test', f.clean('http://example.com/test'))
|
||||
|
||||
def test_urlfield_8(self):
|
||||
# ticket #11826
|
||||
f = URLField()
|
||||
self.assertEqual(u'http://example.com/?some_param=some_value', f.clean('http://example.com?some_param=some_value'))
|
||||
self.assertEqual('http://example.com/?some_param=some_value', f.clean('http://example.com?some_param=some_value'))
|
||||
|
||||
def test_urlfield_9(self):
|
||||
f = URLField()
|
||||
urls = (
|
||||
u'http://עברית.idn.icann.org/',
|
||||
u'http://sãopaulo.com/',
|
||||
u'http://sãopaulo.com.br/',
|
||||
u'http://пример.испытание/',
|
||||
u'http://مثال.إختبار/',
|
||||
u'http://例子.测试/',
|
||||
u'http://例子.測試/',
|
||||
u'http://उदाहरण.परीक्षा/',
|
||||
u'http://例え.テスト/',
|
||||
u'http://مثال.آزمایشی/',
|
||||
u'http://실례.테스트/',
|
||||
u'http://العربية.idn.icann.org/',
|
||||
'http://עברית.idn.icann.org/',
|
||||
'http://sãopaulo.com/',
|
||||
'http://sãopaulo.com.br/',
|
||||
'http://пример.испытание/',
|
||||
'http://مثال.إختبار/',
|
||||
'http://例子.测试/',
|
||||
'http://例子.測試/',
|
||||
'http://उदाहरण.परीक्षा/',
|
||||
'http://例え.テスト/',
|
||||
'http://مثال.آزمایشی/',
|
||||
'http://실례.테스트/',
|
||||
'http://العربية.idn.icann.org/',
|
||||
)
|
||||
for url in urls:
|
||||
# Valid IDN
|
||||
|
|
@ -667,21 +669,21 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_urlfield_not_string(self):
|
||||
f = URLField(required=False)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid URL.']", f.clean, 23)
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid URL.'", f.clean, 23)
|
||||
|
||||
# BooleanField ################################################################
|
||||
|
||||
def test_booleanfield_1(self):
|
||||
f = BooleanField()
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertEqual(True, f.clean(True))
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, False)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, False)
|
||||
self.assertEqual(True, f.clean(1))
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, 0)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, 0)
|
||||
self.assertEqual(True, f.clean('Django rocks'))
|
||||
self.assertEqual(True, f.clean('True'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, 'False')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, 'False')
|
||||
|
||||
def test_booleanfield_2(self):
|
||||
f = BooleanField(required=False)
|
||||
|
|
@ -705,34 +707,34 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_choicefield_1(self):
|
||||
f = ChoiceField(choices=[('1', 'One'), ('2', 'Two')])
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertEqual(u'1', f.clean(1))
|
||||
self.assertEqual(u'1', f.clean('1'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 3 is not one of the available choices.']", f.clean, '3')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertEqual('1', f.clean(1))
|
||||
self.assertEqual('1', f.clean('1'))
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 3 is not one of the available choices.'", f.clean, '3')
|
||||
|
||||
def test_choicefield_2(self):
|
||||
f = ChoiceField(choices=[('1', 'One'), ('2', 'Two')], required=False)
|
||||
self.assertEqual(u'', f.clean(''))
|
||||
self.assertEqual(u'', f.clean(None))
|
||||
self.assertEqual(u'1', f.clean(1))
|
||||
self.assertEqual(u'1', f.clean('1'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 3 is not one of the available choices.']", f.clean, '3')
|
||||
self.assertEqual('', f.clean(''))
|
||||
self.assertEqual('', f.clean(None))
|
||||
self.assertEqual('1', f.clean(1))
|
||||
self.assertEqual('1', f.clean('1'))
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 3 is not one of the available choices.'", f.clean, '3')
|
||||
|
||||
def test_choicefield_3(self):
|
||||
f = ChoiceField(choices=[('J', 'John'), ('P', 'Paul')])
|
||||
self.assertEqual(u'J', f.clean('J'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. John is not one of the available choices.']", f.clean, 'John')
|
||||
self.assertEqual('J', f.clean('J'))
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. John is not one of the available choices.'", f.clean, 'John')
|
||||
|
||||
def test_choicefield_4(self):
|
||||
f = ChoiceField(choices=[('Numbers', (('1', 'One'), ('2', 'Two'))), ('Letters', (('3','A'),('4','B'))), ('5','Other')])
|
||||
self.assertEqual(u'1', f.clean(1))
|
||||
self.assertEqual(u'1', f.clean('1'))
|
||||
self.assertEqual(u'3', f.clean(3))
|
||||
self.assertEqual(u'3', f.clean('3'))
|
||||
self.assertEqual(u'5', f.clean(5))
|
||||
self.assertEqual(u'5', f.clean('5'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 6 is not one of the available choices.']", f.clean, '6')
|
||||
self.assertEqual('1', f.clean(1))
|
||||
self.assertEqual('1', f.clean('1'))
|
||||
self.assertEqual('3', f.clean(3))
|
||||
self.assertEqual('3', f.clean('3'))
|
||||
self.assertEqual('5', f.clean(5))
|
||||
self.assertEqual('5', f.clean('5'))
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 6 is not one of the available choices.'", f.clean, '6')
|
||||
|
||||
# TypedChoiceField ############################################################
|
||||
# TypedChoiceField is just like ChoiceField, except that coerced types will
|
||||
|
|
@ -741,7 +743,7 @@ class FieldsTests(SimpleTestCase):
|
|||
def test_typedchoicefield_1(self):
|
||||
f = TypedChoiceField(choices=[(1, "+1"), (-1, "-1")], coerce=int)
|
||||
self.assertEqual(1, f.clean('1'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 2 is not one of the available choices.']", f.clean, '2')
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 2 is not one of the available choices.'", f.clean, '2')
|
||||
|
||||
def test_typedchoicefield_2(self):
|
||||
# Different coercion, same validation.
|
||||
|
|
@ -755,11 +757,11 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_typedchoicefield_4(self):
|
||||
# Even more weirdness: if you have a valid choice but your coercion function
|
||||
# can't coerce, you'll still get a validation error. Don't do this!
|
||||
# can't coerce, yo'll still get a validation error. Don't do this!
|
||||
f = TypedChoiceField(choices=[('A', 'A'), ('B', 'B')], coerce=int)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. B is not one of the available choices.']", f.clean, 'B')
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. B is not one of the available choices.'", f.clean, 'B')
|
||||
# Required fields require values
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
|
||||
def test_typedchoicefield_5(self):
|
||||
# Non-required fields aren't required
|
||||
|
|
@ -821,42 +823,42 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_multiplechoicefield_1(self):
|
||||
f = MultipleChoiceField(choices=[('1', 'One'), ('2', 'Two')])
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertEqual([u'1'], f.clean([1]))
|
||||
self.assertEqual([u'1'], f.clean(['1']))
|
||||
self.assertEqual([u'1', u'2'], f.clean(['1', '2']))
|
||||
self.assertEqual([u'1', u'2'], f.clean([1, '2']))
|
||||
self.assertEqual([u'1', u'2'], f.clean((1, '2')))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a list of values.']", f.clean, 'hello')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, [])
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, ())
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 3 is not one of the available choices.']", f.clean, ['3'])
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertEqual(['1'], f.clean([1]))
|
||||
self.assertEqual(['1'], f.clean(['1']))
|
||||
self.assertEqual(['1', '2'], f.clean(['1', '2']))
|
||||
self.assertEqual(['1', '2'], f.clean([1, '2']))
|
||||
self.assertEqual(['1', '2'], f.clean((1, '2')))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a list of values.'", f.clean, 'hello')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, [])
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, ())
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 3 is not one of the available choices.'", f.clean, ['3'])
|
||||
|
||||
def test_multiplechoicefield_2(self):
|
||||
f = MultipleChoiceField(choices=[('1', 'One'), ('2', 'Two')], required=False)
|
||||
self.assertEqual([], f.clean(''))
|
||||
self.assertEqual([], f.clean(None))
|
||||
self.assertEqual([u'1'], f.clean([1]))
|
||||
self.assertEqual([u'1'], f.clean(['1']))
|
||||
self.assertEqual([u'1', u'2'], f.clean(['1', '2']))
|
||||
self.assertEqual([u'1', u'2'], f.clean([1, '2']))
|
||||
self.assertEqual([u'1', u'2'], f.clean((1, '2')))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a list of values.']", f.clean, 'hello')
|
||||
self.assertEqual(['1'], f.clean([1]))
|
||||
self.assertEqual(['1'], f.clean(['1']))
|
||||
self.assertEqual(['1', '2'], f.clean(['1', '2']))
|
||||
self.assertEqual(['1', '2'], f.clean([1, '2']))
|
||||
self.assertEqual(['1', '2'], f.clean((1, '2')))
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a list of values.'", f.clean, 'hello')
|
||||
self.assertEqual([], f.clean([]))
|
||||
self.assertEqual([], f.clean(()))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 3 is not one of the available choices.']", f.clean, ['3'])
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 3 is not one of the available choices.'", f.clean, ['3'])
|
||||
|
||||
def test_multiplechoicefield_3(self):
|
||||
f = MultipleChoiceField(choices=[('Numbers', (('1', 'One'), ('2', 'Two'))), ('Letters', (('3','A'),('4','B'))), ('5','Other')])
|
||||
self.assertEqual([u'1'], f.clean([1]))
|
||||
self.assertEqual([u'1'], f.clean(['1']))
|
||||
self.assertEqual([u'1', u'5'], f.clean([1, 5]))
|
||||
self.assertEqual([u'1', u'5'], f.clean([1, '5']))
|
||||
self.assertEqual([u'1', u'5'], f.clean(['1', 5]))
|
||||
self.assertEqual([u'1', u'5'], f.clean(['1', '5']))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 6 is not one of the available choices.']", f.clean, ['6'])
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 6 is not one of the available choices.']", f.clean, ['1','6'])
|
||||
self.assertEqual(['1'], f.clean([1]))
|
||||
self.assertEqual(['1'], f.clean(['1']))
|
||||
self.assertEqual(['1', '5'], f.clean([1, 5]))
|
||||
self.assertEqual(['1', '5'], f.clean([1, '5']))
|
||||
self.assertEqual(['1', '5'], f.clean(['1', 5]))
|
||||
self.assertEqual(['1', '5'], f.clean(['1', '5']))
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 6 is not one of the available choices.'", f.clean, ['6'])
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 6 is not one of the available choices.'", f.clean, ['1','6'])
|
||||
|
||||
# TypedMultipleChoiceField ############################################################
|
||||
# TypedMultipleChoiceField is just like MultipleChoiceField, except that coerced types
|
||||
|
|
@ -865,7 +867,7 @@ class FieldsTests(SimpleTestCase):
|
|||
def test_typedmultiplechoicefield_1(self):
|
||||
f = TypedMultipleChoiceField(choices=[(1, "+1"), (-1, "-1")], coerce=int)
|
||||
self.assertEqual([1], f.clean(['1']))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 2 is not one of the available choices.']", f.clean, ['2'])
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 2 is not one of the available choices.'", f.clean, ['2'])
|
||||
|
||||
def test_typedmultiplechoicefield_2(self):
|
||||
# Different coercion, same validation.
|
||||
|
|
@ -880,15 +882,15 @@ class FieldsTests(SimpleTestCase):
|
|||
def test_typedmultiplechoicefield_4(self):
|
||||
f = TypedMultipleChoiceField(choices=[(1, "+1"), (-1, "-1")], coerce=int)
|
||||
self.assertEqual([1, -1], f.clean(['1','-1']))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. 2 is not one of the available choices.']", f.clean, ['1','2'])
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. 2 is not one of the available choices.'", f.clean, ['1','2'])
|
||||
|
||||
def test_typedmultiplechoicefield_5(self):
|
||||
# Even more weirdness: if you have a valid choice but your coercion function
|
||||
# can't coerce, you'll still get a validation error. Don't do this!
|
||||
f = TypedMultipleChoiceField(choices=[('A', 'A'), ('B', 'B')], coerce=int)
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. B is not one of the available choices.']", f.clean, ['B'])
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. B is not one of the available choices.'", f.clean, ['B'])
|
||||
# Required fields require values
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, [])
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, [])
|
||||
|
||||
def test_typedmultiplechoicefield_6(self):
|
||||
# Non-required fields aren't required
|
||||
|
|
@ -904,19 +906,19 @@ class FieldsTests(SimpleTestCase):
|
|||
|
||||
def test_combofield_1(self):
|
||||
f = ComboField(fields=[CharField(max_length=20), EmailField()])
|
||||
self.assertEqual(u'test@example.com', f.clean('test@example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at most 20 characters (it has 28).']", f.clean, 'longemailaddress@example.com')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'not an e-mail')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertEqual('test@example.com', f.clean('test@example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at most 20 characters (it has 28).'", f.clean, 'longemailaddress@example.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'not an e-mail')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
|
||||
def test_combofield_2(self):
|
||||
f = ComboField(fields=[CharField(max_length=20), EmailField()], required=False)
|
||||
self.assertEqual(u'test@example.com', f.clean('test@example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at most 20 characters (it has 28).']", f.clean, 'longemailaddress@example.com')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid e-mail address.']", f.clean, 'not an e-mail')
|
||||
self.assertEqual(u'', f.clean(''))
|
||||
self.assertEqual(u'', f.clean(None))
|
||||
self.assertEqual('test@example.com', f.clean('test@example.com'))
|
||||
self.assertRaisesMessage(ValidationError, "'Ensure this value has at most 20 characters (it has 28).'", f.clean, 'longemailaddress@example.com')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid e-mail address.'", f.clean, 'not an e-mail')
|
||||
self.assertEqual('', f.clean(''))
|
||||
self.assertEqual('', f.clean(None))
|
||||
|
||||
# FilePathField ###############################################################
|
||||
|
||||
|
|
@ -943,7 +945,7 @@ class FieldsTests(SimpleTestCase):
|
|||
for exp, got in zip(expected, fix_os_paths(f.choices)):
|
||||
self.assertEqual(exp[1], got[1])
|
||||
self.assertTrue(got[0].endswith(exp[0]))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Select a valid choice. fields.py is not one of the available choices.']", f.clean, 'fields.py')
|
||||
self.assertRaisesMessage(ValidationError, "'Select a valid choice. fields.py is not one of the available choices.'", f.clean, 'fields.py')
|
||||
assert fix_os_paths(f.clean(path + 'fields.py')).endswith('/django/forms/fields.py')
|
||||
|
||||
def test_filepathfield_3(self):
|
||||
|
|
@ -1018,12 +1020,12 @@ class FieldsTests(SimpleTestCase):
|
|||
f = SplitDateTimeField()
|
||||
assert isinstance(f.widget, SplitDateTimeWidget)
|
||||
self.assertEqual(datetime.datetime(2006, 1, 10, 7, 30), f.clean([datetime.date(2006, 1, 10), datetime.time(7, 30)]))
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "[u'This field is required.']", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a list of values.']", f.clean, 'hello')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.', u'Enter a valid time.']", f.clean, ['hello', 'there'])
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid time.']", f.clean, ['2006-01-10', 'there'])
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, ['hello', '07:30'])
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, None)
|
||||
self.assertRaisesMessage(ValidationError, "'This field is required.'", f.clean, '')
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a list of values.'", f.clean, 'hello')
|
||||
self.assertRaisesRegexp(ValidationError, "'Enter a valid date\.', u?'Enter a valid time\.'", f.clean, ['hello', 'there'])
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid time.'", f.clean, ['2006-01-10', 'there'])
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, ['hello', '07:30'])
|
||||
|
||||
def test_splitdatetimefield_2(self):
|
||||
f = SplitDateTimeField(required=False)
|
||||
|
|
@ -1033,10 +1035,10 @@ class FieldsTests(SimpleTestCase):
|
|||
self.assertEqual(None, f.clean(''))
|
||||
self.assertEqual(None, f.clean(['']))
|
||||
self.assertEqual(None, f.clean(['', '']))
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a list of values.']", f.clean, 'hello')
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.', u'Enter a valid time.']", f.clean, ['hello', 'there'])
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid time.']", f.clean, ['2006-01-10', 'there'])
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, ['hello', '07:30'])
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid time.']", f.clean, ['2006-01-10', ''])
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid time.']", f.clean, ['2006-01-10'])
|
||||
self.assertRaisesMessage(ValidationError, "[u'Enter a valid date.']", f.clean, ['', '07:30'])
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a list of values.'", f.clean, 'hello')
|
||||
self.assertRaisesRegexp(ValidationError, "'Enter a valid date\.', u?'Enter a valid time\.'", f.clean, ['hello', 'there'])
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid time.'", f.clean, ['2006-01-10', 'there'])
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, ['hello', '07:30'])
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid time.'", f.clean, ['2006-01-10', ''])
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid time.'", f.clean, ['2006-01-10'])
|
||||
self.assertRaisesMessage(ValidationError, "'Enter a valid date.'", f.clean, ['', '07:30'])
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import datetime
|
||||
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
|
|
@ -6,6 +8,7 @@ from django.forms import *
|
|||
from django.http import QueryDict
|
||||
from django.template import Template, Context
|
||||
from django.test import TestCase
|
||||
from django.test.utils import str_prefix
|
||||
from django.utils.datastructures import MultiValueDict, MergeDict
|
||||
from django.utils.safestring import mark_safe
|
||||
|
||||
|
|
@ -29,15 +32,15 @@ class FormsTestCase(TestCase):
|
|||
|
||||
def test_form(self):
|
||||
# Pass a dictionary to a Form's __init__().
|
||||
p = Person({'first_name': u'John', 'last_name': u'Lennon', 'birthday': u'1940-10-9'})
|
||||
p = Person({'first_name': 'John', 'last_name': 'Lennon', 'birthday': '1940-10-9'})
|
||||
|
||||
self.assertTrue(p.is_bound)
|
||||
self.assertEqual(p.errors, {})
|
||||
self.assertTrue(p.is_valid())
|
||||
self.assertHTMLEqual(p.errors.as_ul(), u'')
|
||||
self.assertEqual(p.errors.as_text(), u'')
|
||||
self.assertEqual(p.cleaned_data["first_name"], u'John')
|
||||
self.assertEqual(p.cleaned_data["last_name"], u'Lennon')
|
||||
self.assertHTMLEqual(p.errors.as_ul(), '')
|
||||
self.assertEqual(p.errors.as_text(), '')
|
||||
self.assertEqual(p.cleaned_data["first_name"], 'John')
|
||||
self.assertEqual(p.cleaned_data["last_name"], 'Lennon')
|
||||
self.assertEqual(p.cleaned_data["birthday"], datetime.date(1940, 10, 9))
|
||||
self.assertHTMLEqual(str(p['first_name']), '<input type="text" name="first_name" value="John" id="id_first_name" />')
|
||||
self.assertHTMLEqual(str(p['last_name']), '<input type="text" name="last_name" value="Lennon" id="id_last_name" />')
|
||||
|
|
@ -63,9 +66,9 @@ class FormsTestCase(TestCase):
|
|||
form_output.append([boundfield.label, boundfield.data])
|
||||
|
||||
self.assertEqual(form_output, [
|
||||
['First name', u'John'],
|
||||
['Last name', u'Lennon'],
|
||||
['Birthday', u'1940-10-9']
|
||||
['First name', 'John'],
|
||||
['Last name', 'Lennon'],
|
||||
['Birthday', '1940-10-9']
|
||||
])
|
||||
self.assertHTMLEqual(str(p), """<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" value="John" id="id_first_name" /></td></tr>
|
||||
<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" value="Lennon" id="id_last_name" /></td></tr>
|
||||
|
|
@ -75,9 +78,9 @@ class FormsTestCase(TestCase):
|
|||
# Empty dictionaries are valid, too.
|
||||
p = Person({})
|
||||
self.assertTrue(p.is_bound)
|
||||
self.assertEqual(p.errors['first_name'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['last_name'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['birthday'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['first_name'], ['This field is required.'])
|
||||
self.assertEqual(p.errors['last_name'], ['This field is required.'])
|
||||
self.assertEqual(p.errors['birthday'], ['This field is required.'])
|
||||
self.assertFalse(p.is_valid())
|
||||
try:
|
||||
p.cleaned_data
|
||||
|
|
@ -128,16 +131,16 @@ class FormsTestCase(TestCase):
|
|||
|
||||
def test_unicode_values(self):
|
||||
# Unicode values are handled properly.
|
||||
p = Person({'first_name': u'John', 'last_name': u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111', 'birthday': '1940-10-9'})
|
||||
self.assertHTMLEqual(p.as_table(), u'<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" value="John" id="id_first_name" /></td></tr>\n<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></td></tr>\n<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></td></tr>')
|
||||
self.assertHTMLEqual(p.as_ul(), u'<li><label for="id_first_name">First name:</label> <input type="text" name="first_name" value="John" id="id_first_name" /></li>\n<li><label for="id_last_name">Last name:</label> <input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></li>\n<li><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></li>')
|
||||
self.assertHTMLEqual(p.as_p(), u'<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" value="John" id="id_first_name" /></p>\n<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></p>\n<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></p>')
|
||||
p = Person({'first_name': 'John', 'last_name': '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111', 'birthday': '1940-10-9'})
|
||||
self.assertHTMLEqual(p.as_table(), '<tr><th><label for="id_first_name">First name:</label></th><td><input type="text" name="first_name" value="John" id="id_first_name" /></td></tr>\n<tr><th><label for="id_last_name">Last name:</label></th><td><input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></td></tr>\n<tr><th><label for="id_birthday">Birthday:</label></th><td><input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></td></tr>')
|
||||
self.assertHTMLEqual(p.as_ul(), '<li><label for="id_first_name">First name:</label> <input type="text" name="first_name" value="John" id="id_first_name" /></li>\n<li><label for="id_last_name">Last name:</label> <input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></li>\n<li><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></li>')
|
||||
self.assertHTMLEqual(p.as_p(), '<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" value="John" id="id_first_name" /></p>\n<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" id="id_last_name" /></p>\n<p><label for="id_birthday">Birthday:</label> <input type="text" name="birthday" value="1940-10-9" id="id_birthday" /></p>')
|
||||
|
||||
p = Person({'last_name': u'Lennon'})
|
||||
self.assertEqual(p.errors['first_name'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['birthday'], [u'This field is required.'])
|
||||
p = Person({'last_name': 'Lennon'})
|
||||
self.assertEqual(p.errors['first_name'], ['This field is required.'])
|
||||
self.assertEqual(p.errors['birthday'], ['This field is required.'])
|
||||
self.assertFalse(p.is_valid())
|
||||
self.assertHTMLEqual(p.errors.as_ul(), u'<ul class="errorlist"><li>first_name<ul class="errorlist"><li>This field is required.</li></ul></li><li>birthday<ul class="errorlist"><li>This field is required.</li></ul></li></ul>')
|
||||
self.assertHTMLEqual(p.errors.as_ul(), '<ul class="errorlist"><li>first_name<ul class="errorlist"><li>This field is required.</li></ul></li><li>birthday<ul class="errorlist"><li>This field is required.</li></ul></li></ul>')
|
||||
self.assertEqual(p.errors.as_text(), """* first_name
|
||||
* This field is required.
|
||||
* birthday
|
||||
|
|
@ -147,9 +150,9 @@ class FormsTestCase(TestCase):
|
|||
self.fail('Attempts to access cleaned_data when validation fails should fail.')
|
||||
except AttributeError:
|
||||
pass
|
||||
self.assertEqual(p['first_name'].errors, [u'This field is required.'])
|
||||
self.assertHTMLEqual(p['first_name'].errors.as_ul(), u'<ul class="errorlist"><li>This field is required.</li></ul>')
|
||||
self.assertEqual(p['first_name'].errors.as_text(), u'* This field is required.')
|
||||
self.assertEqual(p['first_name'].errors, ['This field is required.'])
|
||||
self.assertHTMLEqual(p['first_name'].errors.as_ul(), '<ul class="errorlist"><li>This field is required.</li></ul>')
|
||||
self.assertEqual(p['first_name'].errors.as_text(), '* This field is required.')
|
||||
|
||||
p = Person()
|
||||
self.assertHTMLEqual(str(p['first_name']), '<input type="text" name="first_name" id="id_first_name" />')
|
||||
|
|
@ -161,11 +164,11 @@ class FormsTestCase(TestCase):
|
|||
# Form, even if you pass extra data when you define the Form. In this
|
||||
# example, we pass a bunch of extra fields to the form constructor,
|
||||
# but cleaned_data contains only the form's fields.
|
||||
data = {'first_name': u'John', 'last_name': u'Lennon', 'birthday': u'1940-10-9', 'extra1': 'hello', 'extra2': 'hello'}
|
||||
data = {'first_name': 'John', 'last_name': 'Lennon', 'birthday': '1940-10-9', 'extra1': 'hello', 'extra2': 'hello'}
|
||||
p = Person(data)
|
||||
self.assertTrue(p.is_valid())
|
||||
self.assertEqual(p.cleaned_data['first_name'], u'John')
|
||||
self.assertEqual(p.cleaned_data['last_name'], u'Lennon')
|
||||
self.assertEqual(p.cleaned_data['first_name'], 'John')
|
||||
self.assertEqual(p.cleaned_data['last_name'], 'Lennon')
|
||||
self.assertEqual(p.cleaned_data['birthday'], datetime.date(1940, 10, 9))
|
||||
|
||||
def test_optional_data(self):
|
||||
|
|
@ -179,12 +182,12 @@ class FormsTestCase(TestCase):
|
|||
last_name = CharField()
|
||||
nick_name = CharField(required=False)
|
||||
|
||||
data = {'first_name': u'John', 'last_name': u'Lennon'}
|
||||
data = {'first_name': 'John', 'last_name': 'Lennon'}
|
||||
f = OptionalPersonForm(data)
|
||||
self.assertTrue(f.is_valid())
|
||||
self.assertEqual(f.cleaned_data['nick_name'], u'')
|
||||
self.assertEqual(f.cleaned_data['first_name'], u'John')
|
||||
self.assertEqual(f.cleaned_data['last_name'], u'Lennon')
|
||||
self.assertEqual(f.cleaned_data['nick_name'], '')
|
||||
self.assertEqual(f.cleaned_data['first_name'], 'John')
|
||||
self.assertEqual(f.cleaned_data['last_name'], 'Lennon')
|
||||
|
||||
# For DateFields, it's set to None.
|
||||
class OptionalPersonForm(Form):
|
||||
|
|
@ -192,12 +195,12 @@ class FormsTestCase(TestCase):
|
|||
last_name = CharField()
|
||||
birth_date = DateField(required=False)
|
||||
|
||||
data = {'first_name': u'John', 'last_name': u'Lennon'}
|
||||
data = {'first_name': 'John', 'last_name': 'Lennon'}
|
||||
f = OptionalPersonForm(data)
|
||||
self.assertTrue(f.is_valid())
|
||||
self.assertEqual(f.cleaned_data['birth_date'], None)
|
||||
self.assertEqual(f.cleaned_data['first_name'], u'John')
|
||||
self.assertEqual(f.cleaned_data['last_name'], u'Lennon')
|
||||
self.assertEqual(f.cleaned_data['first_name'], 'John')
|
||||
self.assertEqual(f.cleaned_data['last_name'], 'Lennon')
|
||||
|
||||
def test_auto_id(self):
|
||||
# "auto_id" tells the Form to add an "id" attribute to each form element.
|
||||
|
|
@ -286,9 +289,9 @@ class FormsTestCase(TestCase):
|
|||
|
||||
# as_textarea(), as_text() and as_hidden() are shortcuts for changing the output
|
||||
# widget type:
|
||||
self.assertHTMLEqual(f['subject'].as_textarea(), u'<textarea name="subject" rows="10" cols="40"></textarea>')
|
||||
self.assertHTMLEqual(f['message'].as_text(), u'<input type="text" name="message" />')
|
||||
self.assertHTMLEqual(f['message'].as_hidden(), u'<input type="hidden" name="message" />')
|
||||
self.assertHTMLEqual(f['subject'].as_textarea(), '<textarea name="subject" rows="10" cols="40"></textarea>')
|
||||
self.assertHTMLEqual(f['message'].as_text(), '<input type="text" name="message" />')
|
||||
self.assertHTMLEqual(f['message'].as_hidden(), '<input type="hidden" name="message" />')
|
||||
|
||||
# The 'widget' parameter to a Field can also be an instance:
|
||||
class ContactForm(Form):
|
||||
|
|
@ -300,11 +303,11 @@ class FormsTestCase(TestCase):
|
|||
|
||||
# Instance-level attrs are *not* carried over to as_textarea(), as_text() and
|
||||
# as_hidden():
|
||||
self.assertHTMLEqual(f['message'].as_text(), u'<input type="text" name="message" />')
|
||||
self.assertHTMLEqual(f['message'].as_text(), '<input type="text" name="message" />')
|
||||
f = ContactForm({'subject': 'Hello', 'message': 'I love you.'}, auto_id=False)
|
||||
self.assertHTMLEqual(f['subject'].as_textarea(), u'<textarea rows="10" cols="40" name="subject">Hello</textarea>')
|
||||
self.assertHTMLEqual(f['message'].as_text(), u'<input type="text" name="message" value="I love you." />')
|
||||
self.assertHTMLEqual(f['message'].as_hidden(), u'<input type="hidden" name="message" value="I love you." />')
|
||||
self.assertHTMLEqual(f['subject'].as_textarea(), '<textarea rows="10" cols="40" name="subject">Hello</textarea>')
|
||||
self.assertHTMLEqual(f['message'].as_text(), '<input type="text" name="message" value="I love you." />')
|
||||
self.assertHTMLEqual(f['message'].as_hidden(), '<input type="hidden" name="message" value="I love you." />')
|
||||
|
||||
def test_forms_with_choices(self):
|
||||
# For a form with a <select>, use ChoiceField:
|
||||
|
|
@ -454,7 +457,7 @@ class FormsTestCase(TestCase):
|
|||
name = CharField()
|
||||
|
||||
f = BeatleForm(auto_id=False)
|
||||
self.assertHTMLEqual('\n'.join([str(bf) for bf in f['name']]), u'<input type="text" name="name" />')
|
||||
self.assertHTMLEqual('\n'.join([str(bf) for bf in f['name']]), '<input type="text" name="name" />')
|
||||
|
||||
def test_forms_with_multiple_choice(self):
|
||||
# MultipleChoiceField is a special case, as its data is required to be a list:
|
||||
|
|
@ -582,15 +585,15 @@ class FormsTestCase(TestCase):
|
|||
# When using CheckboxSelectMultiple, the framework expects a list of input and
|
||||
# returns a list of input.
|
||||
f = SongForm({'name': 'Yesterday'}, auto_id=False)
|
||||
self.assertEqual(f.errors['composers'], [u'This field is required.'])
|
||||
self.assertEqual(f.errors['composers'], ['This field is required.'])
|
||||
f = SongForm({'name': 'Yesterday', 'composers': ['J']}, auto_id=False)
|
||||
self.assertEqual(f.errors, {})
|
||||
self.assertEqual(f.cleaned_data['composers'], [u'J'])
|
||||
self.assertEqual(f.cleaned_data['name'], u'Yesterday')
|
||||
self.assertEqual(f.cleaned_data['composers'], ['J'])
|
||||
self.assertEqual(f.cleaned_data['name'], 'Yesterday')
|
||||
f = SongForm({'name': 'Yesterday', 'composers': ['J', 'P']}, auto_id=False)
|
||||
self.assertEqual(f.errors, {})
|
||||
self.assertEqual(f.cleaned_data['composers'], [u'J', u'P'])
|
||||
self.assertEqual(f.cleaned_data['name'], u'Yesterday')
|
||||
self.assertEqual(f.cleaned_data['composers'], ['J', 'P'])
|
||||
self.assertEqual(f.cleaned_data['name'], 'Yesterday')
|
||||
|
||||
def test_escaping(self):
|
||||
# Validation errors are HTML-escaped when output as HTML.
|
||||
|
|
@ -629,23 +632,23 @@ class FormsTestCase(TestCase):
|
|||
|
||||
def clean_password2(self):
|
||||
if self.cleaned_data.get('password1') and self.cleaned_data.get('password2') and self.cleaned_data['password1'] != self.cleaned_data['password2']:
|
||||
raise ValidationError(u'Please make sure your passwords match.')
|
||||
raise ValidationError('Please make sure your passwords match.')
|
||||
|
||||
return self.cleaned_data['password2']
|
||||
|
||||
f = UserRegistration(auto_id=False)
|
||||
self.assertEqual(f.errors, {})
|
||||
f = UserRegistration({}, auto_id=False)
|
||||
self.assertEqual(f.errors['username'], [u'This field is required.'])
|
||||
self.assertEqual(f.errors['password1'], [u'This field is required.'])
|
||||
self.assertEqual(f.errors['password2'], [u'This field is required.'])
|
||||
self.assertEqual(f.errors['username'], ['This field is required.'])
|
||||
self.assertEqual(f.errors['password1'], ['This field is required.'])
|
||||
self.assertEqual(f.errors['password2'], ['This field is required.'])
|
||||
f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)
|
||||
self.assertEqual(f.errors['password2'], [u'Please make sure your passwords match.'])
|
||||
self.assertEqual(f.errors['password2'], ['Please make sure your passwords match.'])
|
||||
f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'foo'}, auto_id=False)
|
||||
self.assertEqual(f.errors, {})
|
||||
self.assertEqual(f.cleaned_data['username'], u'adrian')
|
||||
self.assertEqual(f.cleaned_data['password1'], u'foo')
|
||||
self.assertEqual(f.cleaned_data['password2'], u'foo')
|
||||
self.assertEqual(f.cleaned_data['username'], 'adrian')
|
||||
self.assertEqual(f.cleaned_data['password1'], 'foo')
|
||||
self.assertEqual(f.cleaned_data['password2'], 'foo')
|
||||
|
||||
# Another way of doing multiple-field validation is by implementing the
|
||||
# Form's clean() method. If you do this, any ValidationError raised by that
|
||||
|
|
@ -661,7 +664,7 @@ class FormsTestCase(TestCase):
|
|||
|
||||
def clean(self):
|
||||
if self.cleaned_data.get('password1') and self.cleaned_data.get('password2') and self.cleaned_data['password1'] != self.cleaned_data['password2']:
|
||||
raise ValidationError(u'Please make sure your passwords match.')
|
||||
raise ValidationError('Please make sure your passwords match.')
|
||||
|
||||
return self.cleaned_data
|
||||
|
||||
|
|
@ -671,11 +674,11 @@ class FormsTestCase(TestCase):
|
|||
self.assertHTMLEqual(f.as_table(), """<tr><th>Username:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="username" maxlength="10" /></td></tr>
|
||||
<tr><th>Password1:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="password" name="password1" /></td></tr>
|
||||
<tr><th>Password2:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="password" name="password2" /></td></tr>""")
|
||||
self.assertEqual(f.errors['username'], [u'This field is required.'])
|
||||
self.assertEqual(f.errors['password1'], [u'This field is required.'])
|
||||
self.assertEqual(f.errors['password2'], [u'This field is required.'])
|
||||
self.assertEqual(f.errors['username'], ['This field is required.'])
|
||||
self.assertEqual(f.errors['password1'], ['This field is required.'])
|
||||
self.assertEqual(f.errors['password2'], ['This field is required.'])
|
||||
f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'bar'}, auto_id=False)
|
||||
self.assertEqual(f.errors['__all__'], [u'Please make sure your passwords match.'])
|
||||
self.assertEqual(f.errors['__all__'], ['Please make sure your passwords match.'])
|
||||
self.assertHTMLEqual(f.as_table(), """<tr><td colspan="2"><ul class="errorlist"><li>Please make sure your passwords match.</li></ul></td></tr>
|
||||
<tr><th>Username:</th><td><input type="text" name="username" value="adrian" maxlength="10" /></td></tr>
|
||||
<tr><th>Password1:</th><td><input type="password" name="password1" /></td></tr>
|
||||
|
|
@ -686,9 +689,9 @@ class FormsTestCase(TestCase):
|
|||
<li>Password2: <input type="password" name="password2" /></li>""")
|
||||
f = UserRegistration({'username': 'adrian', 'password1': 'foo', 'password2': 'foo'}, auto_id=False)
|
||||
self.assertEqual(f.errors, {})
|
||||
self.assertEqual(f.cleaned_data['username'], u'adrian')
|
||||
self.assertEqual(f.cleaned_data['password1'], u'foo')
|
||||
self.assertEqual(f.cleaned_data['password2'], u'foo')
|
||||
self.assertEqual(f.cleaned_data['username'], 'adrian')
|
||||
self.assertEqual(f.cleaned_data['password1'], 'foo')
|
||||
self.assertEqual(f.cleaned_data['password2'], 'foo')
|
||||
|
||||
def test_dynamic_construction(self):
|
||||
# It's possible to construct a Form dynamically by adding to the self.fields
|
||||
|
|
@ -985,10 +988,10 @@ class FormsTestCase(TestCase):
|
|||
# A label can be a Unicode object or a bytestring with special characters.
|
||||
class UserRegistration(Form):
|
||||
username = CharField(max_length=10, label='ŠĐĆŽćžšđ')
|
||||
password = CharField(widget=PasswordInput, label=u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
|
||||
password = CharField(widget=PasswordInput, label='\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
|
||||
|
||||
p = UserRegistration(auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), u'<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="text" name="username" maxlength="10" /></li>\n<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="password" name="password" /></li>')
|
||||
self.assertHTMLEqual(p.as_ul(), '<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="text" name="username" maxlength="10" /></li>\n<li>\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111: <input type="password" name="password" /></li>')
|
||||
|
||||
# If a label is set to the empty string for a field, that field won't get a label.
|
||||
class UserRegistration(Form):
|
||||
|
|
@ -1034,8 +1037,8 @@ class FormsTestCase(TestCase):
|
|||
f = FavoriteForm(auto_id=False, label_suffix='')
|
||||
self.assertHTMLEqual(f.as_ul(), """<li>Favorite color? <input type="text" name="color" /></li>
|
||||
<li>Favorite animal <input type="text" name="animal" /></li>""")
|
||||
f = FavoriteForm(auto_id=False, label_suffix=u'\u2192')
|
||||
self.assertHTMLEqual(f.as_ul(), u'<li>Favorite color? <input type="text" name="color" /></li>\n<li>Favorite animal\u2192 <input type="text" name="animal" /></li>')
|
||||
f = FavoriteForm(auto_id=False, label_suffix='\u2192')
|
||||
self.assertHTMLEqual(f.as_ul(), '<li>Favorite color? <input type="text" name="color" /></li>\n<li>Favorite animal\u2192 <input type="text" name="animal" /></li>')
|
||||
|
||||
def test_initial_data(self):
|
||||
# You can specify initial data for a field by using the 'initial' argument to a
|
||||
|
|
@ -1056,10 +1059,10 @@ class FormsTestCase(TestCase):
|
|||
p = UserRegistration({}, auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
|
||||
p = UserRegistration({'username': u''}, auto_id=False)
|
||||
p = UserRegistration({'username': ''}, auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
|
||||
p = UserRegistration({'username': u'foo'}, auto_id=False)
|
||||
p = UserRegistration({'username': 'foo'}, auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
|
||||
|
||||
|
|
@ -1067,7 +1070,7 @@ class FormsTestCase(TestCase):
|
|||
# example, we don't provide a value for 'username', and the form raises a
|
||||
# validation error rather than using the initial value for 'username'.
|
||||
p = UserRegistration({'password': 'secret'})
|
||||
self.assertEqual(p.errors['username'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['username'], ['This field is required.'])
|
||||
self.assertFalse(p.is_valid())
|
||||
|
||||
def test_dynamic_initial_data(self):
|
||||
|
|
@ -1092,10 +1095,10 @@ class FormsTestCase(TestCase):
|
|||
p = UserRegistration({}, initial={'username': 'django'}, auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
|
||||
p = UserRegistration({'username': u''}, initial={'username': 'django'}, auto_id=False)
|
||||
p = UserRegistration({'username': ''}, initial={'username': 'django'}, auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
|
||||
p = UserRegistration({'username': u'foo'}, initial={'username': 'django'}, auto_id=False)
|
||||
p = UserRegistration({'username': 'foo'}, initial={'username': 'django'}, auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>""")
|
||||
|
||||
|
|
@ -1103,7 +1106,7 @@ class FormsTestCase(TestCase):
|
|||
# In this example, we don't provide a value for 'username', and the form raises a
|
||||
# validation error rather than using the initial value for 'username'.
|
||||
p = UserRegistration({'password': 'secret'}, initial={'username': 'django'})
|
||||
self.assertEqual(p.errors['username'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['username'], ['This field is required.'])
|
||||
self.assertFalse(p.is_valid())
|
||||
|
||||
# If a Form defines 'initial' *and* 'initial' is passed as a parameter to Form(),
|
||||
|
|
@ -1156,7 +1159,7 @@ class FormsTestCase(TestCase):
|
|||
<option value="b">bar</option>
|
||||
<option value="w">whiz</option>
|
||||
</select></li>""")
|
||||
p = UserRegistration({'username': u''}, initial={'username': initial_django}, auto_id=False)
|
||||
p = UserRegistration({'username': ''}, initial={'username': initial_django}, auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), """<li><ul class="errorlist"><li>This field is required.</li></ul>Username: <input type="text" name="username" maxlength="10" /></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Options: <select multiple="multiple" name="options">
|
||||
|
|
@ -1164,7 +1167,7 @@ class FormsTestCase(TestCase):
|
|||
<option value="b">bar</option>
|
||||
<option value="w">whiz</option>
|
||||
</select></li>""")
|
||||
p = UserRegistration({'username': u'foo', 'options':['f','b']}, initial={'username': initial_django}, auto_id=False)
|
||||
p = UserRegistration({'username': 'foo', 'options':['f','b']}, initial={'username': initial_django}, auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /></li>
|
||||
<li>Options: <select multiple="multiple" name="options">
|
||||
|
|
@ -1177,7 +1180,7 @@ class FormsTestCase(TestCase):
|
|||
# In this example, we don't provide a value for 'username', and the form raises a
|
||||
# validation error rather than using the initial value for 'username'.
|
||||
p = UserRegistration({'password': 'secret'}, initial={'username': initial_django, 'options': initial_options})
|
||||
self.assertEqual(p.errors['username'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['username'], ['This field is required.'])
|
||||
self.assertFalse(p.is_valid())
|
||||
|
||||
# If a Form defines 'initial' *and* 'initial' is passed as a parameter to Form(),
|
||||
|
|
@ -1234,7 +1237,7 @@ class FormsTestCase(TestCase):
|
|||
<tr><th>Password:</th><td><input type="password" name="password" /><br /><span class="helptext">Choose wisely.</span></td></tr>""")
|
||||
|
||||
# The help text is displayed whether or not data is provided for the form.
|
||||
p = UserRegistration({'username': u'foo'}, auto_id=False)
|
||||
p = UserRegistration({'username': 'foo'}, auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" value="foo" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></li>
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Password: <input type="password" name="password" /> <span class="helptext">Choose wisely.</span></li>""")
|
||||
|
||||
|
|
@ -1254,7 +1257,7 @@ class FormsTestCase(TestCase):
|
|||
username = CharField(max_length=10, help_text='ŠĐĆŽćžšđ')
|
||||
|
||||
p = UserRegistration(auto_id=False)
|
||||
self.assertHTMLEqual(p.as_ul(), u'<li>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</span></li>')
|
||||
self.assertHTMLEqual(p.as_ul(), '<li>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</span></li>')
|
||||
|
||||
def test_subclassing_forms(self):
|
||||
# You can subclass a Form to add fields. The resulting form subclass will have
|
||||
|
|
@ -1312,9 +1315,9 @@ class FormsTestCase(TestCase):
|
|||
birthday = DateField()
|
||||
|
||||
data = {
|
||||
'person1-first_name': u'John',
|
||||
'person1-last_name': u'Lennon',
|
||||
'person1-birthday': u'1940-10-9'
|
||||
'person1-first_name': 'John',
|
||||
'person1-last_name': 'Lennon',
|
||||
'person1-birthday': '1940-10-9'
|
||||
}
|
||||
p = Person(data, prefix='person1')
|
||||
self.assertHTMLEqual(p.as_ul(), """<li><label for="id_person1-first_name">First name:</label> <input type="text" name="person1-first_name" value="John" id="id_person1-first_name" /></li>
|
||||
|
|
@ -1325,22 +1328,22 @@ class FormsTestCase(TestCase):
|
|||
self.assertHTMLEqual(str(p['birthday']), '<input type="text" name="person1-birthday" value="1940-10-9" id="id_person1-birthday" />')
|
||||
self.assertEqual(p.errors, {})
|
||||
self.assertTrue(p.is_valid())
|
||||
self.assertEqual(p.cleaned_data['first_name'], u'John')
|
||||
self.assertEqual(p.cleaned_data['last_name'], u'Lennon')
|
||||
self.assertEqual(p.cleaned_data['first_name'], 'John')
|
||||
self.assertEqual(p.cleaned_data['last_name'], 'Lennon')
|
||||
self.assertEqual(p.cleaned_data['birthday'], datetime.date(1940, 10, 9))
|
||||
|
||||
# Let's try submitting some bad data to make sure form.errors and field.errors
|
||||
# work as expected.
|
||||
data = {
|
||||
'person1-first_name': u'',
|
||||
'person1-last_name': u'',
|
||||
'person1-birthday': u''
|
||||
'person1-first_name': '',
|
||||
'person1-last_name': '',
|
||||
'person1-birthday': ''
|
||||
}
|
||||
p = Person(data, prefix='person1')
|
||||
self.assertEqual(p.errors['first_name'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['last_name'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['birthday'], [u'This field is required.'])
|
||||
self.assertEqual(p['first_name'].errors, [u'This field is required.'])
|
||||
self.assertEqual(p.errors['first_name'], ['This field is required.'])
|
||||
self.assertEqual(p.errors['last_name'], ['This field is required.'])
|
||||
self.assertEqual(p.errors['birthday'], ['This field is required.'])
|
||||
self.assertEqual(p['first_name'].errors, ['This field is required.'])
|
||||
try:
|
||||
p['person1-first_name'].errors
|
||||
self.fail('Attempts to access non-existent fields should fail.')
|
||||
|
|
@ -1350,34 +1353,34 @@ class FormsTestCase(TestCase):
|
|||
# In this example, the data doesn't have a prefix, but the form requires it, so
|
||||
# the form doesn't "see" the fields.
|
||||
data = {
|
||||
'first_name': u'John',
|
||||
'last_name': u'Lennon',
|
||||
'birthday': u'1940-10-9'
|
||||
'first_name': 'John',
|
||||
'last_name': 'Lennon',
|
||||
'birthday': '1940-10-9'
|
||||
}
|
||||
p = Person(data, prefix='person1')
|
||||
self.assertEqual(p.errors['first_name'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['last_name'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['birthday'], [u'This field is required.'])
|
||||
self.assertEqual(p.errors['first_name'], ['This field is required.'])
|
||||
self.assertEqual(p.errors['last_name'], ['This field is required.'])
|
||||
self.assertEqual(p.errors['birthday'], ['This field is required.'])
|
||||
|
||||
# With prefixes, a single data dictionary can hold data for multiple instances
|
||||
# of the same form.
|
||||
data = {
|
||||
'person1-first_name': u'John',
|
||||
'person1-last_name': u'Lennon',
|
||||
'person1-birthday': u'1940-10-9',
|
||||
'person2-first_name': u'Jim',
|
||||
'person2-last_name': u'Morrison',
|
||||
'person2-birthday': u'1943-12-8'
|
||||
'person1-first_name': 'John',
|
||||
'person1-last_name': 'Lennon',
|
||||
'person1-birthday': '1940-10-9',
|
||||
'person2-first_name': 'Jim',
|
||||
'person2-last_name': 'Morrison',
|
||||
'person2-birthday': '1943-12-8'
|
||||
}
|
||||
p1 = Person(data, prefix='person1')
|
||||
self.assertTrue(p1.is_valid())
|
||||
self.assertEqual(p1.cleaned_data['first_name'], u'John')
|
||||
self.assertEqual(p1.cleaned_data['last_name'], u'Lennon')
|
||||
self.assertEqual(p1.cleaned_data['first_name'], 'John')
|
||||
self.assertEqual(p1.cleaned_data['last_name'], 'Lennon')
|
||||
self.assertEqual(p1.cleaned_data['birthday'], datetime.date(1940, 10, 9))
|
||||
p2 = Person(data, prefix='person2')
|
||||
self.assertTrue(p2.is_valid())
|
||||
self.assertEqual(p2.cleaned_data['first_name'], u'Jim')
|
||||
self.assertEqual(p2.cleaned_data['last_name'], u'Morrison')
|
||||
self.assertEqual(p2.cleaned_data['first_name'], 'Jim')
|
||||
self.assertEqual(p2.cleaned_data['last_name'], 'Morrison')
|
||||
self.assertEqual(p2.cleaned_data['birthday'], datetime.date(1943, 12, 8))
|
||||
|
||||
# By default, forms append a hyphen between the prefix and the field name, but a
|
||||
|
|
@ -1397,14 +1400,14 @@ class FormsTestCase(TestCase):
|
|||
<li><label for="id_foo-prefix-last_name">Last name:</label> <input type="text" name="foo-prefix-last_name" id="id_foo-prefix-last_name" /></li>
|
||||
<li><label for="id_foo-prefix-birthday">Birthday:</label> <input type="text" name="foo-prefix-birthday" id="id_foo-prefix-birthday" /></li>""")
|
||||
data = {
|
||||
'foo-prefix-first_name': u'John',
|
||||
'foo-prefix-last_name': u'Lennon',
|
||||
'foo-prefix-birthday': u'1940-10-9'
|
||||
'foo-prefix-first_name': 'John',
|
||||
'foo-prefix-last_name': 'Lennon',
|
||||
'foo-prefix-birthday': '1940-10-9'
|
||||
}
|
||||
p = Person(data, prefix='foo')
|
||||
self.assertTrue(p.is_valid())
|
||||
self.assertEqual(p.cleaned_data['first_name'], u'John')
|
||||
self.assertEqual(p.cleaned_data['last_name'], u'Lennon')
|
||||
self.assertEqual(p.cleaned_data['first_name'], 'John')
|
||||
self.assertEqual(p.cleaned_data['last_name'], 'Lennon')
|
||||
self.assertEqual(p.cleaned_data['birthday'], datetime.date(1940, 10, 9))
|
||||
|
||||
def test_forms_with_null_boolean(self):
|
||||
|
|
@ -1414,37 +1417,37 @@ class FormsTestCase(TestCase):
|
|||
name = CharField()
|
||||
is_cool = NullBooleanField()
|
||||
|
||||
p = Person({'name': u'Joe'}, auto_id=False)
|
||||
p = Person({'name': 'Joe'}, auto_id=False)
|
||||
self.assertHTMLEqual(str(p['is_cool']), """<select name="is_cool">
|
||||
<option value="1" selected="selected">Unknown</option>
|
||||
<option value="2">Yes</option>
|
||||
<option value="3">No</option>
|
||||
</select>""")
|
||||
p = Person({'name': u'Joe', 'is_cool': u'1'}, auto_id=False)
|
||||
p = Person({'name': 'Joe', 'is_cool': '1'}, auto_id=False)
|
||||
self.assertHTMLEqual(str(p['is_cool']), """<select name="is_cool">
|
||||
<option value="1" selected="selected">Unknown</option>
|
||||
<option value="2">Yes</option>
|
||||
<option value="3">No</option>
|
||||
</select>""")
|
||||
p = Person({'name': u'Joe', 'is_cool': u'2'}, auto_id=False)
|
||||
p = Person({'name': 'Joe', 'is_cool': '2'}, auto_id=False)
|
||||
self.assertHTMLEqual(str(p['is_cool']), """<select name="is_cool">
|
||||
<option value="1">Unknown</option>
|
||||
<option value="2" selected="selected">Yes</option>
|
||||
<option value="3">No</option>
|
||||
</select>""")
|
||||
p = Person({'name': u'Joe', 'is_cool': u'3'}, auto_id=False)
|
||||
p = Person({'name': 'Joe', 'is_cool': '3'}, auto_id=False)
|
||||
self.assertHTMLEqual(str(p['is_cool']), """<select name="is_cool">
|
||||
<option value="1">Unknown</option>
|
||||
<option value="2">Yes</option>
|
||||
<option value="3" selected="selected">No</option>
|
||||
</select>""")
|
||||
p = Person({'name': u'Joe', 'is_cool': True}, auto_id=False)
|
||||
p = Person({'name': 'Joe', 'is_cool': True}, auto_id=False)
|
||||
self.assertHTMLEqual(str(p['is_cool']), """<select name="is_cool">
|
||||
<option value="1">Unknown</option>
|
||||
<option value="2" selected="selected">Yes</option>
|
||||
<option value="3">No</option>
|
||||
</select>""")
|
||||
p = Person({'name': u'Joe', 'is_cool': False}, auto_id=False)
|
||||
p = Person({'name': 'Joe', 'is_cool': False}, auto_id=False)
|
||||
self.assertHTMLEqual(str(p['is_cool']), """<select name="is_cool">
|
||||
<option value="1">Unknown</option>
|
||||
<option value="2">Yes</option>
|
||||
|
|
@ -1473,7 +1476,7 @@ class FormsTestCase(TestCase):
|
|||
self.assertHTMLEqual(f.as_table(), '<tr><th>File1:</th><td><input type="file" name="file1" /></td></tr>')
|
||||
self.assertTrue(f.is_valid())
|
||||
|
||||
f = FileForm(data={}, files={'file1': SimpleUploadedFile('我隻氣墊船裝滿晒鱔.txt', u'मेरी मँडराने वाली नाव सर्पमीनों से भरी ह'.encode('utf-8'))}, auto_id=False)
|
||||
f = FileForm(data={}, files={'file1': SimpleUploadedFile('我隻氣墊船裝滿晒鱔.txt', 'मेरी मँडराने वाली नाव सर्पमीनों से भरी ह'.encode('utf-8'))}, auto_id=False)
|
||||
self.assertHTMLEqual(f.as_table(), '<tr><th>File1:</th><td><input type="file" name="file1" /></td></tr>')
|
||||
|
||||
def test_basic_processing_in_view(self):
|
||||
|
|
@ -1484,7 +1487,7 @@ class FormsTestCase(TestCase):
|
|||
|
||||
def clean(self):
|
||||
if self.cleaned_data.get('password1') and self.cleaned_data.get('password2') and self.cleaned_data['password1'] != self.cleaned_data['password2']:
|
||||
raise ValidationError(u'Please make sure your passwords match.')
|
||||
raise ValidationError('Please make sure your passwords match.')
|
||||
|
||||
return self.cleaned_data
|
||||
|
||||
|
|
@ -1520,7 +1523,7 @@ class FormsTestCase(TestCase):
|
|||
<input type="submit" />
|
||||
</form>""")
|
||||
# Case 3: POST with valid data (the success message).)
|
||||
self.assertHTMLEqual(my_function('POST', {'username': 'adrian', 'password1': 'secret', 'password2': 'secret'}), "VALID: {'username': u'adrian', 'password1': u'secret', 'password2': u'secret'}")
|
||||
self.assertHTMLEqual(my_function('POST', {'username': 'adrian', 'password1': 'secret', 'password2': 'secret'}), str_prefix("VALID: {'username': %(_)s'adrian', 'password1': %(_)s'secret', 'password2': %(_)s'secret'}"))
|
||||
|
||||
def test_templates_with_forms(self):
|
||||
class UserRegistration(Form):
|
||||
|
|
@ -1530,7 +1533,7 @@ class FormsTestCase(TestCase):
|
|||
|
||||
def clean(self):
|
||||
if self.cleaned_data.get('password1') and self.cleaned_data.get('password2') and self.cleaned_data['password1'] != self.cleaned_data['password2']:
|
||||
raise ValidationError(u'Please make sure your passwords match.')
|
||||
raise ValidationError('Please make sure your passwords match.')
|
||||
|
||||
return self.cleaned_data
|
||||
|
||||
|
|
@ -1612,7 +1615,7 @@ class FormsTestCase(TestCase):
|
|||
<p>Password2: <input type="password" name="password2" /></p>
|
||||
<input type="submit" />
|
||||
</form>""")
|
||||
self.assertEqual(Template('{{ form.password1.help_text }}').render(Context({'form': UserRegistration(auto_id=False)})), u'')
|
||||
self.assertEqual(Template('{{ form.password1.help_text }}').render(Context({'form': UserRegistration(auto_id=False)})), '')
|
||||
|
||||
# The label_tag() method takes an optional attrs argument: a dictionary of HTML
|
||||
# attributes to add to the <label> tag.
|
||||
|
|
@ -1674,7 +1677,7 @@ class FormsTestCase(TestCase):
|
|||
data = {'artist': '', 'song': ''}
|
||||
form = SongForm(data, empty_permitted=False)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.errors, {'name': [u'This field is required.'], 'artist': [u'This field is required.']})
|
||||
self.assertEqual(form.errors, {'name': ['This field is required.'], 'artist': ['This field is required.']})
|
||||
try:
|
||||
form.cleaned_data
|
||||
self.fail('Attempts to access cleaned_data when validation fails should fail.')
|
||||
|
|
@ -1692,7 +1695,7 @@ class FormsTestCase(TestCase):
|
|||
data = {'artist': 'The Doors', 'song': ''}
|
||||
form = SongForm(data, empty_permitted=False)
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.errors, {'name': [u'This field is required.']})
|
||||
self.assertEqual(form.errors, {'name': ['This field is required.']})
|
||||
try:
|
||||
form.cleaned_data
|
||||
self.fail('Attempts to access cleaned_data when validation fails should fail.')
|
||||
|
|
@ -1777,7 +1780,7 @@ class FormsTestCase(TestCase):
|
|||
happened_at = SplitDateTimeField(widget=widgets.SplitHiddenDateTimeWidget)
|
||||
|
||||
form = EventForm()
|
||||
self.assertHTMLEqual(form.as_ul(), u'<input type="hidden" name="happened_at_0" id="id_happened_at_0" /><input type="hidden" name="happened_at_1" id="id_happened_at_1" />')
|
||||
self.assertHTMLEqual(form.as_ul(), '<input type="hidden" name="happened_at_0" id="id_happened_at_0" /><input type="hidden" name="happened_at_1" id="id_happened_at_1" />')
|
||||
|
||||
def test_multivalue_field_validation(self):
|
||||
def bad_names(value):
|
||||
|
|
@ -1799,11 +1802,11 @@ class FormsTestCase(TestCase):
|
|||
form = NameForm(data={'name' : ['bad', 'value']})
|
||||
form.full_clean()
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.errors, {'name': [u'bad value not allowed']})
|
||||
self.assertEqual(form.errors, {'name': ['bad value not allowed']})
|
||||
form = NameForm(data={'name' : ['should be overly', 'long for the field names']})
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.errors, {'name': [u'Ensure this value has at most 10 characters (it has 16).',
|
||||
u'Ensure this value has at most 10 characters (it has 24).']})
|
||||
self.assertEqual(form.errors, {'name': ['Ensure this value has at most 10 characters (it has 16).',
|
||||
'Ensure this value has at most 10 characters (it has 24).']})
|
||||
form = NameForm(data={'name' : ['fname', 'lname']})
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertEqual(form.cleaned_data, {'name' : 'fname lname'})
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.forms import Form, CharField, IntegerField, ValidationError, DateField
|
||||
from django.forms.formsets import formset_factory, BaseFormSet
|
||||
from django.test import TestCase
|
||||
|
|
@ -71,7 +73,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertTrue(formset.is_valid())
|
||||
self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': u'Calexico'}])
|
||||
self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': 'Calexico'}])
|
||||
|
||||
# If a FormSet was not passed any data, its is_valid and has_changed
|
||||
# methods should return False.
|
||||
|
|
@ -93,7 +95,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertFalse(formset.is_valid())
|
||||
self.assertEqual(formset.errors, [{'votes': [u'This field is required.']}])
|
||||
self.assertEqual(formset.errors, [{'votes': ['This field is required.']}])
|
||||
|
||||
def test_formset_has_changed(self):
|
||||
# FormSet instances has_changed method will be True if any data is
|
||||
|
|
@ -125,7 +127,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
# argument to the constructor. ``initial`` should be a list of dicts. By default,
|
||||
# an extra blank form is included.
|
||||
|
||||
initial = [{'choice': u'Calexico', 'votes': 100}]
|
||||
initial = [{'choice': 'Calexico', 'votes': 100}]
|
||||
formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
|
||||
form_output = []
|
||||
|
||||
|
|
@ -151,7 +153,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertTrue(formset.is_valid())
|
||||
self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': u'Calexico'}, {}])
|
||||
self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': 'Calexico'}, {}])
|
||||
|
||||
def test_second_form_partially_filled(self):
|
||||
# But the second form was blank! Shouldn't we get some errors? No. If we display
|
||||
|
|
@ -172,7 +174,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertFalse(formset.is_valid())
|
||||
self.assertEqual(formset.errors, [{}, {'votes': [u'This field is required.']}])
|
||||
self.assertEqual(formset.errors, [{}, {'votes': ['This field is required.']}])
|
||||
|
||||
def test_delete_prefilled_data(self):
|
||||
# If we delete data that was pre-filled, we should get an error. Simply removing
|
||||
|
|
@ -191,7 +193,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertFalse(formset.is_valid())
|
||||
self.assertEqual(formset.errors, [{'votes': [u'This field is required.'], 'choice': [u'This field is required.']}, {}])
|
||||
self.assertEqual(formset.errors, [{'votes': ['This field is required.'], 'choice': ['This field is required.']}, {}])
|
||||
|
||||
def test_displaying_more_than_one_blank_form(self):
|
||||
# Displaying more than 1 blank form ###########################################
|
||||
|
|
@ -250,7 +252,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
ChoiceFormSet = formset_factory(Choice, extra=3)
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertTrue(formset.is_valid())
|
||||
self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': u'Calexico'}, {}, {}])
|
||||
self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'choice': 'Calexico'}, {}, {}])
|
||||
|
||||
def test_second_form_partially_filled_2(self):
|
||||
# And once again, if we try to partially complete a form, validation will fail.
|
||||
|
|
@ -270,7 +272,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
ChoiceFormSet = formset_factory(Choice, extra=3)
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertFalse(formset.is_valid())
|
||||
self.assertEqual(formset.errors, [{}, {'votes': [u'This field is required.']}, {}])
|
||||
self.assertEqual(formset.errors, [{}, {'votes': ['This field is required.']}, {}])
|
||||
|
||||
def test_more_initial_data(self):
|
||||
# The extra argument also works when the formset is pre-filled with initial
|
||||
|
|
@ -288,7 +290,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
'choices-2-votes': '',
|
||||
}
|
||||
|
||||
initial = [{'choice': u'Calexico', 'votes': 100}]
|
||||
initial = [{'choice': 'Calexico', 'votes': 100}]
|
||||
ChoiceFormSet = formset_factory(Choice, extra=3)
|
||||
formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
|
||||
form_output = []
|
||||
|
|
@ -319,7 +321,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
|
||||
ChoiceFormSet = formset_factory(Choice, can_delete=True)
|
||||
|
||||
initial = [{'choice': u'Calexico', 'votes': 100}, {'choice': u'Fergie', 'votes': 900}]
|
||||
initial = [{'choice': 'Calexico', 'votes': 100}, {'choice': 'Fergie', 'votes': 900}]
|
||||
formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
|
||||
form_output = []
|
||||
|
||||
|
|
@ -356,8 +358,8 @@ class FormsFormsetTestCase(TestCase):
|
|||
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertTrue(formset.is_valid())
|
||||
self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'DELETE': False, 'choice': u'Calexico'}, {'votes': 900, 'DELETE': True, 'choice': u'Fergie'}, {}])
|
||||
self.assertEqual([form.cleaned_data for form in formset.deleted_forms], [{'votes': 900, 'DELETE': True, 'choice': u'Fergie'}])
|
||||
self.assertEqual([form.cleaned_data for form in formset.forms], [{'votes': 100, 'DELETE': False, 'choice': 'Calexico'}, {'votes': 900, 'DELETE': True, 'choice': 'Fergie'}, {}])
|
||||
self.assertEqual([form.cleaned_data for form in formset.deleted_forms], [{'votes': 900, 'DELETE': True, 'choice': 'Fergie'}])
|
||||
|
||||
# If we fill a form with something and then we check the can_delete checkbox for
|
||||
# that form, that form's errors should not make the entire formset invalid since
|
||||
|
|
@ -397,7 +399,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
can_delete=True)
|
||||
|
||||
p = PeopleForm(
|
||||
{'form-0-name': u'', 'form-0-DELETE': u'on', # no name!
|
||||
{'form-0-name': '', 'form-0-DELETE': 'on', # no name!
|
||||
'form-TOTAL_FORMS': 1, 'form-INITIAL_FORMS': 1,
|
||||
'form-MAX_NUM_FORMS': 1})
|
||||
|
||||
|
|
@ -416,7 +418,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
|
||||
ChoiceFormSet = formset_factory(Choice, can_order=True)
|
||||
|
||||
initial = [{'choice': u'Calexico', 'votes': 100}, {'choice': u'Fergie', 'votes': 900}]
|
||||
initial = [{'choice': 'Calexico', 'votes': 100}, {'choice': 'Fergie', 'votes': 900}]
|
||||
formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
|
||||
form_output = []
|
||||
|
||||
|
|
@ -456,9 +458,9 @@ class FormsFormsetTestCase(TestCase):
|
|||
form_output.append(form.cleaned_data)
|
||||
|
||||
self.assertEqual(form_output, [
|
||||
{'votes': 500, 'ORDER': 0, 'choice': u'The Decemberists'},
|
||||
{'votes': 100, 'ORDER': 1, 'choice': u'Calexico'},
|
||||
{'votes': 900, 'ORDER': 2, 'choice': u'Fergie'},
|
||||
{'votes': 500, 'ORDER': 0, 'choice': 'The Decemberists'},
|
||||
{'votes': 100, 'ORDER': 1, 'choice': 'Calexico'},
|
||||
{'votes': 900, 'ORDER': 2, 'choice': 'Fergie'},
|
||||
])
|
||||
|
||||
def test_empty_ordered_fields(self):
|
||||
|
|
@ -492,10 +494,10 @@ class FormsFormsetTestCase(TestCase):
|
|||
form_output.append(form.cleaned_data)
|
||||
|
||||
self.assertEqual(form_output, [
|
||||
{'votes': 100, 'ORDER': 1, 'choice': u'Calexico'},
|
||||
{'votes': 900, 'ORDER': 2, 'choice': u'Fergie'},
|
||||
{'votes': 500, 'ORDER': None, 'choice': u'The Decemberists'},
|
||||
{'votes': 50, 'ORDER': None, 'choice': u'Basia Bulat'},
|
||||
{'votes': 100, 'ORDER': 1, 'choice': 'Calexico'},
|
||||
{'votes': 900, 'ORDER': 2, 'choice': 'Fergie'},
|
||||
{'votes': 500, 'ORDER': None, 'choice': 'The Decemberists'},
|
||||
{'votes': 50, 'ORDER': None, 'choice': 'Basia Bulat'},
|
||||
])
|
||||
|
||||
def test_ordering_blank_fieldsets(self):
|
||||
|
|
@ -524,9 +526,9 @@ class FormsFormsetTestCase(TestCase):
|
|||
ChoiceFormSet = formset_factory(Choice, can_order=True, can_delete=True)
|
||||
|
||||
initial = [
|
||||
{'choice': u'Calexico', 'votes': 100},
|
||||
{'choice': u'Fergie', 'votes': 900},
|
||||
{'choice': u'The Decemberists', 'votes': 500},
|
||||
{'choice': 'Calexico', 'votes': 100},
|
||||
{'choice': 'Fergie', 'votes': 900},
|
||||
{'choice': 'The Decemberists', 'votes': 500},
|
||||
]
|
||||
formset = ChoiceFormSet(initial=initial, auto_id=False, prefix='choices')
|
||||
form_output = []
|
||||
|
|
@ -583,10 +585,10 @@ class FormsFormsetTestCase(TestCase):
|
|||
form_output.append(form.cleaned_data)
|
||||
|
||||
self.assertEqual(form_output, [
|
||||
{'votes': 500, 'DELETE': False, 'ORDER': 0, 'choice': u'The Decemberists'},
|
||||
{'votes': 100, 'DELETE': False, 'ORDER': 1, 'choice': u'Calexico'},
|
||||
{'votes': 500, 'DELETE': False, 'ORDER': 0, 'choice': 'The Decemberists'},
|
||||
{'votes': 100, 'DELETE': False, 'ORDER': 1, 'choice': 'Calexico'},
|
||||
])
|
||||
self.assertEqual([form.cleaned_data for form in formset.deleted_forms], [{'votes': 900, 'DELETE': True, 'ORDER': 2, 'choice': u'Fergie'}])
|
||||
self.assertEqual([form.cleaned_data for form in formset.deleted_forms], [{'votes': 900, 'DELETE': True, 'ORDER': 2, 'choice': 'Fergie'}])
|
||||
|
||||
def test_invalid_deleted_form_with_ordering(self):
|
||||
# Should be able to get ordered forms from a valid formset even if a
|
||||
|
|
@ -598,8 +600,8 @@ class FormsFormsetTestCase(TestCase):
|
|||
PeopleForm = formset_factory(form=Person, can_delete=True, can_order=True)
|
||||
|
||||
p = PeopleForm({
|
||||
'form-0-name': u'',
|
||||
'form-0-DELETE': u'on', # no name!
|
||||
'form-0-name': '',
|
||||
'form-0-DELETE': 'on', # no name!
|
||||
'form-TOTAL_FORMS': 1,
|
||||
'form-INITIAL_FORMS': 1,
|
||||
'form-MAX_NUM_FORMS': 1
|
||||
|
|
@ -797,7 +799,7 @@ class FormsFormsetTestCase(TestCase):
|
|||
|
||||
formset = FavoriteDrinksFormSet(data, prefix='drinks')
|
||||
self.assertFalse(formset.is_valid())
|
||||
self.assertEqual(formset.non_form_errors(), [u'You may only specify a drink once.'])
|
||||
self.assertEqual(formset.non_form_errors(), ['You may only specify a drink once.'])
|
||||
|
||||
def test_formset_iteration(self):
|
||||
# Regression tests for #16455 -- formset instances are iterable
|
||||
|
|
@ -892,8 +894,8 @@ class TestIsBoundBehavior(TestCase):
|
|||
|
||||
def test_with_management_data_attrs_work_fine(self):
|
||||
data = {
|
||||
'form-TOTAL_FORMS': u'1',
|
||||
'form-INITIAL_FORMS': u'0',
|
||||
'form-TOTAL_FORMS': '1',
|
||||
'form-INITIAL_FORMS': '0',
|
||||
}
|
||||
formset = ArticleFormSet(data)
|
||||
self.assertEqual(0, formset.initial_form_count())
|
||||
|
|
@ -907,23 +909,23 @@ class TestIsBoundBehavior(TestCase):
|
|||
|
||||
def test_form_errors_are_cought_by_formset(self):
|
||||
data = {
|
||||
'form-TOTAL_FORMS': u'2',
|
||||
'form-INITIAL_FORMS': u'0',
|
||||
'form-0-title': u'Test',
|
||||
'form-0-pub_date': u'1904-06-16',
|
||||
'form-1-title': u'Test',
|
||||
'form-1-pub_date': u'', # <-- this date is missing but required
|
||||
'form-TOTAL_FORMS': '2',
|
||||
'form-INITIAL_FORMS': '0',
|
||||
'form-0-title': 'Test',
|
||||
'form-0-pub_date': '1904-06-16',
|
||||
'form-1-title': 'Test',
|
||||
'form-1-pub_date': '', # <-- this date is missing but required
|
||||
}
|
||||
formset = ArticleFormSet(data)
|
||||
self.assertFalse(formset.is_valid())
|
||||
self.assertEqual([{}, {'pub_date': [u'This field is required.']}], formset.errors)
|
||||
self.assertEqual([{}, {'pub_date': ['This field is required.']}], formset.errors)
|
||||
|
||||
def test_empty_forms_are_unbound(self):
|
||||
data = {
|
||||
'form-TOTAL_FORMS': u'1',
|
||||
'form-INITIAL_FORMS': u'0',
|
||||
'form-0-title': u'Test',
|
||||
'form-0-pub_date': u'1904-06-16',
|
||||
'form-TOTAL_FORMS': '1',
|
||||
'form-INITIAL_FORMS': '0',
|
||||
'form-0-title': 'Test',
|
||||
'form-0-pub_date': '1904-06-16',
|
||||
}
|
||||
unbound_formset = ArticleFormSet()
|
||||
bound_formset = ArticleFormSet(data)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
|
||||
|
|
@ -106,11 +106,11 @@ class ModelFormCallableModelDefault(TestCase):
|
|||
class FormsModelTestCase(TestCase):
|
||||
def test_unicode_filename(self):
|
||||
# FileModel with unicode filename and data #########################
|
||||
f = FileForm(data={}, files={'file1': SimpleUploadedFile('我隻氣墊船裝滿晒鱔.txt', u'मेरी मँडराने वाली नाव सर्पमीनों से भरी ह'.encode('utf-8'))}, auto_id=False)
|
||||
f = FileForm(data={}, files={'file1': SimpleUploadedFile('我隻氣墊船裝滿晒鱔.txt', 'मेरी मँडराने वाली नाव सर्पमीनों से भरी ह'.encode('utf-8'))}, auto_id=False)
|
||||
self.assertTrue(f.is_valid())
|
||||
self.assertTrue('file1' in f.cleaned_data)
|
||||
m = FileModel.objects.create(file=f.cleaned_data['file1'])
|
||||
self.assertEqual(m.file.name, u'tests/\u6211\u96bb\u6c23\u588a\u8239\u88dd\u6eff\u6652\u9c54.txt')
|
||||
self.assertEqual(m.file.name, 'tests/\u6211\u96bb\u6c23\u588a\u8239\u88dd\u6eff\u6652\u9c54.txt')
|
||||
m.delete()
|
||||
|
||||
def test_boundary_conditions(self):
|
||||
|
|
@ -134,7 +134,7 @@ class FormsModelTestCase(TestCase):
|
|||
class Meta:
|
||||
model = Defaults
|
||||
|
||||
self.assertEqual(DefaultsForm().fields['name'].initial, u'class default value')
|
||||
self.assertEqual(DefaultsForm().fields['name'].initial, 'class default value')
|
||||
self.assertEqual(DefaultsForm().fields['def_date'].initial, datetime.date(1980, 1, 1))
|
||||
self.assertEqual(DefaultsForm().fields['value'].initial, 42)
|
||||
r1 = DefaultsForm()['callable_default'].as_widget()
|
||||
|
|
@ -143,9 +143,9 @@ class FormsModelTestCase(TestCase):
|
|||
|
||||
# In a ModelForm that is passed an instance, the initial values come from the
|
||||
# instance's values, not the model's defaults.
|
||||
foo_instance = Defaults(name=u'instance value', def_date=datetime.date(1969, 4, 4), value=12)
|
||||
foo_instance = Defaults(name='instance value', def_date=datetime.date(1969, 4, 4), value=12)
|
||||
instance_form = DefaultsForm(instance=foo_instance)
|
||||
self.assertEqual(instance_form.initial['name'], u'instance value')
|
||||
self.assertEqual(instance_form.initial['name'], 'instance value')
|
||||
self.assertEqual(instance_form.initial['def_date'], datetime.date(1969, 4, 4))
|
||||
self.assertEqual(instance_form.initial['value'], 12)
|
||||
|
||||
|
|
@ -158,11 +158,11 @@ class FormsModelTestCase(TestCase):
|
|||
model = Defaults
|
||||
exclude = ['name', 'callable_default']
|
||||
|
||||
f = ExcludingForm({'name': u'Hello', 'value': 99, 'def_date': datetime.date(1999, 3, 2)})
|
||||
f = ExcludingForm({'name': 'Hello', 'value': 99, 'def_date': datetime.date(1999, 3, 2)})
|
||||
self.assertTrue(f.is_valid())
|
||||
self.assertEqual(f.cleaned_data['name'], u'Hello')
|
||||
self.assertEqual(f.cleaned_data['name'], 'Hello')
|
||||
obj = f.save()
|
||||
self.assertEqual(obj.name, u'class default value')
|
||||
self.assertEqual(obj.name, 'class default value')
|
||||
self.assertEqual(obj.value, 99)
|
||||
self.assertEqual(obj.def_date, datetime.date(1999, 3, 2))
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from warnings import catch_warnings
|
||||
|
||||
from django.forms import *
|
||||
from django.test import TestCase
|
||||
from django.utils.translation import ugettext_lazy, override
|
||||
|
|
@ -15,7 +19,7 @@ class FormsRegressionsTestCase(TestCase):
|
|||
f1 = CharField(max_length=10, widget=TextInput(attrs=extra_attrs))
|
||||
f2 = CharField(widget=TextInput(attrs=extra_attrs))
|
||||
|
||||
self.assertHTMLEqual(TestForm(auto_id=False).as_p(), u'<p>F1: <input type="text" class="special" name="f1" maxlength="10" /></p>\n<p>F2: <input type="text" class="special" name="f2" /></p>')
|
||||
self.assertHTMLEqual(TestForm(auto_id=False).as_p(), '<p>F1: <input type="text" class="special" name="f1" maxlength="10" /></p>\n<p>F2: <input type="text" class="special" name="f2" /></p>')
|
||||
|
||||
def test_regression_3600(self):
|
||||
# Tests for form i18n #
|
||||
|
|
@ -31,7 +35,7 @@ class FormsRegressionsTestCase(TestCase):
|
|||
with override('de'):
|
||||
self.assertHTMLEqual(f.as_p(), '<p><label for="id_username">Benutzername:</label> <input id="id_username" type="text" name="username" maxlength="10" /></p>')
|
||||
with override('pl', deactivate=True):
|
||||
self.assertHTMLEqual(f.as_p(), u'<p><label for="id_username">Nazwa u\u017cytkownika:</label> <input id="id_username" type="text" name="username" maxlength="10" /></p>')
|
||||
self.assertHTMLEqual(f.as_p(), '<p><label for="id_username">Nazwa u\u017cytkownika:</label> <input id="id_username" type="text" name="username" maxlength="10" /></p>')
|
||||
|
||||
def test_regression_5216(self):
|
||||
# There was some problems with form translations in #5216
|
||||
|
|
@ -44,26 +48,28 @@ class FormsRegressionsTestCase(TestCase):
|
|||
self.assertHTMLEqual(f['field_2'].label_tag(), '<label for="field_2_id">field_2</label>')
|
||||
|
||||
# Unicode decoding problems...
|
||||
GENDERS = ((u'\xc5', u'En tied\xe4'), (u'\xf8', u'Mies'), (u'\xdf', u'Nainen'))
|
||||
GENDERS = (('\xc5', 'En tied\xe4'), ('\xf8', 'Mies'), ('\xdf', 'Nainen'))
|
||||
|
||||
class SomeForm(Form):
|
||||
somechoice = ChoiceField(choices=GENDERS, widget=RadioSelect(), label=u'\xc5\xf8\xdf')
|
||||
somechoice = ChoiceField(choices=GENDERS, widget=RadioSelect(), label='\xc5\xf8\xdf')
|
||||
|
||||
f = SomeForm()
|
||||
self.assertHTMLEqual(f.as_p(), u'<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label> <ul>\n<li><label for="id_somechoice_0"><input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" /> En tied\xe4</label></li>\n<li><label for="id_somechoice_1"><input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" /> Mies</label></li>\n<li><label for="id_somechoice_2"><input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" /> Nainen</label></li>\n</ul></p>')
|
||||
self.assertHTMLEqual(f.as_p(), '<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label> <ul>\n<li><label for="id_somechoice_0"><input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" /> En tied\xe4</label></li>\n<li><label for="id_somechoice_1"><input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" /> Mies</label></li>\n<li><label for="id_somechoice_2"><input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" /> Nainen</label></li>\n</ul></p>')
|
||||
|
||||
# Testing choice validation with UTF-8 bytestrings as input (these are the
|
||||
# Russian abbreviations "мес." and "шт.".
|
||||
UNITS = ((b'\xd0\xbc\xd0\xb5\xd1\x81.', b'\xd0\xbc\xd0\xb5\xd1\x81.'),
|
||||
(b'\xd1\x88\xd1\x82.', b'\xd1\x88\xd1\x82.'))
|
||||
f = ChoiceField(choices=UNITS)
|
||||
self.assertEqual(f.clean(u'\u0448\u0442.'), u'\u0448\u0442.')
|
||||
self.assertEqual(f.clean(b'\xd1\x88\xd1\x82.'), u'\u0448\u0442.')
|
||||
self.assertEqual(f.clean('\u0448\u0442.'), '\u0448\u0442.')
|
||||
with catch_warnings(record=True):
|
||||
# Ignore UnicodeWarning
|
||||
self.assertEqual(f.clean(b'\xd1\x88\xd1\x82.'), '\u0448\u0442.')
|
||||
|
||||
# Translated error messages used to be buggy.
|
||||
with override('ru'):
|
||||
f = SomeForm({})
|
||||
self.assertHTMLEqual(f.as_p(), u'<ul class="errorlist"><li>\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435.</li></ul>\n<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label> <ul>\n<li><label for="id_somechoice_0"><input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" /> En tied\xe4</label></li>\n<li><label for="id_somechoice_1"><input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" /> Mies</label></li>\n<li><label for="id_somechoice_2"><input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" /> Nainen</label></li>\n</ul></p>')
|
||||
self.assertHTMLEqual(f.as_p(), '<ul class="errorlist"><li>\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435.</li></ul>\n<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label> <ul>\n<li><label for="id_somechoice_0"><input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" /> En tied\xe4</label></li>\n<li><label for="id_somechoice_1"><input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" /> Mies</label></li>\n<li><label for="id_somechoice_2"><input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" /> Nainen</label></li>\n</ul></p>')
|
||||
|
||||
# Deep copying translated text shouldn't raise an error)
|
||||
from django.utils.translation import gettext_lazy
|
||||
|
|
@ -81,15 +87,15 @@ class FormsRegressionsTestCase(TestCase):
|
|||
|
||||
f = DataForm({'data': 'xyzzy'})
|
||||
self.assertTrue(f.is_valid())
|
||||
self.assertEqual(f.cleaned_data, {'data': u'xyzzy'})
|
||||
self.assertEqual(f.cleaned_data, {'data': 'xyzzy'})
|
||||
|
||||
# A form with *only* hidden fields that has errors is going to be very unusual.
|
||||
class HiddenForm(Form):
|
||||
data = IntegerField(widget=HiddenInput)
|
||||
|
||||
f = HiddenForm({})
|
||||
self.assertHTMLEqual(f.as_p(), u'<ul class="errorlist"><li>(Hidden field data) This field is required.</li></ul>\n<p> <input type="hidden" name="data" id="id_data" /></p>')
|
||||
self.assertHTMLEqual(f.as_table(), u'<tr><td colspan="2"><ul class="errorlist"><li>(Hidden field data) This field is required.</li></ul><input type="hidden" name="data" id="id_data" /></td></tr>')
|
||||
self.assertHTMLEqual(f.as_p(), '<ul class="errorlist"><li>(Hidden field data) This field is required.</li></ul>\n<p> <input type="hidden" name="data" id="id_data" /></p>')
|
||||
self.assertHTMLEqual(f.as_table(), '<tr><td colspan="2"><ul class="errorlist"><li>(Hidden field data) This field is required.</li></ul><input type="hidden" name="data" id="id_data" /></td></tr>')
|
||||
|
||||
def test_xss_error_messages(self):
|
||||
###################################################
|
||||
|
|
@ -107,13 +113,13 @@ class FormsRegressionsTestCase(TestCase):
|
|||
field = ChoiceField(choices=[('one', 'One')])
|
||||
|
||||
f = SomeForm({'field': '<script>'})
|
||||
self.assertHTMLEqual(t.render(Context({'form': f})), u'<ul class="errorlist"><li>field<ul class="errorlist"><li>Select a valid choice. <script> is not one of the available choices.</li></ul></li></ul>')
|
||||
self.assertHTMLEqual(t.render(Context({'form': f})), '<ul class="errorlist"><li>field<ul class="errorlist"><li>Select a valid choice. <script> is not one of the available choices.</li></ul></li></ul>')
|
||||
|
||||
class SomeForm(Form):
|
||||
field = MultipleChoiceField(choices=[('one', 'One')])
|
||||
|
||||
f = SomeForm({'field': ['<script>']})
|
||||
self.assertHTMLEqual(t.render(Context({'form': f})), u'<ul class="errorlist"><li>field<ul class="errorlist"><li>Select a valid choice. <script> is not one of the available choices.</li></ul></li></ul>')
|
||||
self.assertHTMLEqual(t.render(Context({'form': f})), '<ul class="errorlist"><li>field<ul class="errorlist"><li>Select a valid choice. <script> is not one of the available choices.</li></ul></li></ul>')
|
||||
|
||||
from regressiontests.forms.models import ChoiceModel
|
||||
|
||||
|
|
@ -121,7 +127,7 @@ class FormsRegressionsTestCase(TestCase):
|
|||
field = ModelMultipleChoiceField(ChoiceModel.objects.all())
|
||||
|
||||
f = SomeForm({'field': ['<script>']})
|
||||
self.assertHTMLEqual(t.render(Context({'form': f})), u'<ul class="errorlist"><li>field<ul class="errorlist"><li>"<script>" is not a valid value for a primary key.</li></ul></li></ul>')
|
||||
self.assertHTMLEqual(t.render(Context({'form': f})), '<ul class="errorlist"><li>field<ul class="errorlist"><li>"<script>" is not a valid value for a primary key.</li></ul></li></ul>')
|
||||
|
||||
def test_regression_14234(self):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.forms.util import flatatt, ErrorDict, ErrorList
|
||||
from django.test import TestCase
|
||||
|
|
@ -14,9 +16,9 @@ class FormsUtilTestCase(TestCase):
|
|||
# flatatt #
|
||||
###########
|
||||
|
||||
self.assertEqual(flatatt({'id': "header"}), u' id="header"')
|
||||
self.assertEqual(flatatt({'class': "news", 'title': "Read this"}), u' class="news" title="Read this"')
|
||||
self.assertEqual(flatatt({}), u'')
|
||||
self.assertEqual(flatatt({'id': "header"}), ' id="header"')
|
||||
self.assertEqual(flatatt({'class': "news", 'title': "Read this"}), ' class="news" title="Read this"')
|
||||
self.assertEqual(flatatt({}), '')
|
||||
|
||||
def test_validation_error(self):
|
||||
###################
|
||||
|
|
@ -28,8 +30,8 @@ class FormsUtilTestCase(TestCase):
|
|||
'<ul class="errorlist"><li>There was an error.</li></ul>')
|
||||
|
||||
# Can take a unicode string.
|
||||
self.assertHTMLEqual(unicode(ErrorList(ValidationError(u"Not \u03C0.").messages)),
|
||||
u'<ul class="errorlist"><li>Not π.</li></ul>')
|
||||
self.assertHTMLEqual(unicode(ErrorList(ValidationError("Not \u03C0.").messages)),
|
||||
'<ul class="errorlist"><li>Not π.</li></ul>')
|
||||
|
||||
# Can take a lazy string.
|
||||
self.assertHTMLEqual(str(ErrorList(ValidationError(ugettext_lazy("Error.")).messages)),
|
||||
|
|
@ -40,11 +42,11 @@ class FormsUtilTestCase(TestCase):
|
|||
'<ul class="errorlist"><li>Error one.</li><li>Error two.</li></ul>')
|
||||
|
||||
# Can take a mixture in a list.
|
||||
self.assertHTMLEqual(str(ErrorList(ValidationError(["First error.", u"Not \u03C0.", ugettext_lazy("Error.")]).messages)),
|
||||
self.assertHTMLEqual(str(ErrorList(ValidationError(["First error.", "Not \u03C0.", ugettext_lazy("Error.")]).messages)),
|
||||
'<ul class="errorlist"><li>First error.</li><li>Not π.</li><li>Error.</li></ul>')
|
||||
|
||||
class VeryBadError:
|
||||
def __unicode__(self): return u"A very bad error."
|
||||
def __unicode__(self): return "A very bad error."
|
||||
|
||||
# Can take a non-string.
|
||||
self.assertHTMLEqual(str(ErrorList(ValidationError(VeryBadError()).messages)),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import copy
|
||||
import datetime
|
||||
|
|
@ -19,127 +20,127 @@ class FormsWidgetTestCase(TestCase):
|
|||
# validation.
|
||||
def test_textinput(self):
|
||||
w = TextInput()
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input type="text" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), u'<input type="text" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com'), u'<input type="text" name="email" value="test@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', 'some "quoted" & ampersanded value'), u'<input type="text" name="email" value="some "quoted" & ampersanded value" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), u'<input type="text" name="email" value="test@example.com" class="fun" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input type="text" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), '<input type="text" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com'), '<input type="text" name="email" value="test@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', 'some "quoted" & ampersanded value'), '<input type="text" name="email" value="some "quoted" & ampersanded value" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), '<input type="text" name="email" value="test@example.com" class="fun" />')
|
||||
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<input type="text" name="email" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" class="fun" />')
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), '<input type="text" name="email" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" class="fun" />')
|
||||
|
||||
# You can also pass 'attrs' to the constructor:
|
||||
w = TextInput(attrs={'class': 'fun'})
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input type="text" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'foo@example.com'), u'<input type="text" class="fun" value="foo@example.com" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input type="text" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'foo@example.com'), '<input type="text" class="fun" value="foo@example.com" name="email" />')
|
||||
|
||||
# 'attrs' passed to render() get precedence over those passed to the constructor:
|
||||
w = TextInput(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('email', '', attrs={'class': 'special'}), u'<input type="text" class="special" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', '', attrs={'class': 'special'}), '<input type="text" class="special" name="email" />')
|
||||
|
||||
# 'attrs' can be safe-strings if needed)
|
||||
w = TextInput(attrs={'onBlur': mark_safe("function('foo')")})
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input onBlur="function(\'foo\')" type="text" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input onBlur="function(\'foo\')" type="text" name="email" />')
|
||||
|
||||
def test_passwordinput(self):
|
||||
w = PasswordInput()
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input type="password" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), u'<input type="password" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'secret'), u'<input type="password" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input type="password" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), '<input type="password" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'secret'), '<input type="password" name="email" />')
|
||||
|
||||
# The render_value argument lets you specify whether the widget should render
|
||||
# its value. For security reasons, this is off by default.
|
||||
w = PasswordInput(render_value=True)
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input type="password" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), u'<input type="password" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com'), u'<input type="password" name="email" value="test@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', 'some "quoted" & ampersanded value'), u'<input type="password" name="email" value="some "quoted" & ampersanded value" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), u'<input type="password" name="email" value="test@example.com" class="fun" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input type="password" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), '<input type="password" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com'), '<input type="password" name="email" value="test@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', 'some "quoted" & ampersanded value'), '<input type="password" name="email" value="some "quoted" & ampersanded value" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), '<input type="password" name="email" value="test@example.com" class="fun" />')
|
||||
|
||||
# You can also pass 'attrs' to the constructor:
|
||||
w = PasswordInput(attrs={'class': 'fun'}, render_value=True)
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input type="password" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'foo@example.com'), u'<input type="password" class="fun" value="foo@example.com" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input type="password" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'foo@example.com'), '<input type="password" class="fun" value="foo@example.com" name="email" />')
|
||||
|
||||
# 'attrs' passed to render() get precedence over those passed to the constructor:
|
||||
w = PasswordInput(attrs={'class': 'pretty'}, render_value=True)
|
||||
self.assertHTMLEqual(w.render('email', '', attrs={'class': 'special'}), u'<input type="password" class="special" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', '', attrs={'class': 'special'}), '<input type="password" class="special" name="email" />')
|
||||
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<input type="password" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), '<input type="password" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />')
|
||||
|
||||
def test_hiddeninput(self):
|
||||
w = HiddenInput()
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input type="hidden" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), u'<input type="hidden" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com'), u'<input type="hidden" name="email" value="test@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', 'some "quoted" & ampersanded value'), u'<input type="hidden" name="email" value="some "quoted" & ampersanded value" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), u'<input type="hidden" name="email" value="test@example.com" class="fun" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input type="hidden" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), '<input type="hidden" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com'), '<input type="hidden" name="email" value="test@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', 'some "quoted" & ampersanded value'), '<input type="hidden" name="email" value="some "quoted" & ampersanded value" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), '<input type="hidden" name="email" value="test@example.com" class="fun" />')
|
||||
|
||||
# You can also pass 'attrs' to the constructor:
|
||||
w = HiddenInput(attrs={'class': 'fun'})
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input type="hidden" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'foo@example.com'), u'<input type="hidden" class="fun" value="foo@example.com" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input type="hidden" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'foo@example.com'), '<input type="hidden" class="fun" value="foo@example.com" name="email" />')
|
||||
|
||||
# 'attrs' passed to render() get precedence over those passed to the constructor:
|
||||
w = HiddenInput(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('email', '', attrs={'class': 'special'}), u'<input type="hidden" class="special" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', '', attrs={'class': 'special'}), '<input type="hidden" class="special" name="email" />')
|
||||
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), '<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />')
|
||||
|
||||
# 'attrs' passed to render() get precedence over those passed to the constructor:
|
||||
w = HiddenInput(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('email', '', attrs={'class': 'special'}), u'<input type="hidden" class="special" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', '', attrs={'class': 'special'}), '<input type="hidden" class="special" name="email" />')
|
||||
|
||||
# Boolean values are rendered to their string forms ("True" and "False").
|
||||
w = HiddenInput()
|
||||
self.assertHTMLEqual(w.render('get_spam', False), u'<input type="hidden" name="get_spam" value="False" />')
|
||||
self.assertHTMLEqual(w.render('get_spam', True), u'<input type="hidden" name="get_spam" value="True" />')
|
||||
self.assertHTMLEqual(w.render('get_spam', False), '<input type="hidden" name="get_spam" value="False" />')
|
||||
self.assertHTMLEqual(w.render('get_spam', True), '<input type="hidden" name="get_spam" value="True" />')
|
||||
|
||||
def test_multiplehiddeninput(self):
|
||||
w = MultipleHiddenInput()
|
||||
self.assertHTMLEqual(w.render('email', []), u'')
|
||||
self.assertHTMLEqual(w.render('email', None), u'')
|
||||
self.assertHTMLEqual(w.render('email', ['test@example.com']), u'<input type="hidden" name="email" value="test@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', ['some "quoted" & ampersanded value']), u'<input type="hidden" name="email" value="some "quoted" & ampersanded value" />')
|
||||
self.assertHTMLEqual(w.render('email', ['test@example.com', 'foo@example.com']), u'<input type="hidden" name="email" value="test@example.com" />\n<input type="hidden" name="email" value="foo@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', ['test@example.com'], attrs={'class': 'fun'}), u'<input type="hidden" name="email" value="test@example.com" class="fun" />')
|
||||
self.assertHTMLEqual(w.render('email', ['test@example.com', 'foo@example.com'], attrs={'class': 'fun'}), u'<input type="hidden" name="email" value="test@example.com" class="fun" />\n<input type="hidden" name="email" value="foo@example.com" class="fun" />')
|
||||
self.assertHTMLEqual(w.render('email', []), '')
|
||||
self.assertHTMLEqual(w.render('email', None), '')
|
||||
self.assertHTMLEqual(w.render('email', ['test@example.com']), '<input type="hidden" name="email" value="test@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', ['some "quoted" & ampersanded value']), '<input type="hidden" name="email" value="some "quoted" & ampersanded value" />')
|
||||
self.assertHTMLEqual(w.render('email', ['test@example.com', 'foo@example.com']), '<input type="hidden" name="email" value="test@example.com" />\n<input type="hidden" name="email" value="foo@example.com" />')
|
||||
self.assertHTMLEqual(w.render('email', ['test@example.com'], attrs={'class': 'fun'}), '<input type="hidden" name="email" value="test@example.com" class="fun" />')
|
||||
self.assertHTMLEqual(w.render('email', ['test@example.com', 'foo@example.com'], attrs={'class': 'fun'}), '<input type="hidden" name="email" value="test@example.com" class="fun" />\n<input type="hidden" name="email" value="foo@example.com" class="fun" />')
|
||||
|
||||
# You can also pass 'attrs' to the constructor:
|
||||
w = MultipleHiddenInput(attrs={'class': 'fun'})
|
||||
self.assertHTMLEqual(w.render('email', []), u'')
|
||||
self.assertHTMLEqual(w.render('email', ['foo@example.com']), u'<input type="hidden" class="fun" value="foo@example.com" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ['foo@example.com', 'test@example.com']), u'<input type="hidden" class="fun" value="foo@example.com" name="email" />\n<input type="hidden" class="fun" value="test@example.com" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', []), '')
|
||||
self.assertHTMLEqual(w.render('email', ['foo@example.com']), '<input type="hidden" class="fun" value="foo@example.com" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ['foo@example.com', 'test@example.com']), '<input type="hidden" class="fun" value="foo@example.com" name="email" />\n<input type="hidden" class="fun" value="test@example.com" name="email" />')
|
||||
|
||||
# 'attrs' passed to render() get precedence over those passed to the constructor:
|
||||
w = MultipleHiddenInput(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('email', ['foo@example.com'], attrs={'class': 'special'}), u'<input type="hidden" class="special" value="foo@example.com" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ['foo@example.com'], attrs={'class': 'special'}), '<input type="hidden" class="special" value="foo@example.com" name="email" />')
|
||||
|
||||
self.assertHTMLEqual(w.render('email', ['ŠĐĆŽćžšđ'], attrs={'class': 'fun'}), u'<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ['ŠĐĆŽćžšđ'], attrs={'class': 'fun'}), '<input type="hidden" class="fun" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" name="email" />')
|
||||
|
||||
# 'attrs' passed to render() get precedence over those passed to the constructor:
|
||||
w = MultipleHiddenInput(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('email', ['foo@example.com'], attrs={'class': 'special'}), u'<input type="hidden" class="special" value="foo@example.com" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ['foo@example.com'], attrs={'class': 'special'}), '<input type="hidden" class="special" value="foo@example.com" name="email" />')
|
||||
|
||||
# Each input gets a separate ID.
|
||||
w = MultipleHiddenInput()
|
||||
self.assertHTMLEqual(w.render('letters', list('abc'), attrs={'id': 'hideme'}), u'<input type="hidden" name="letters" value="a" id="hideme_0" />\n<input type="hidden" name="letters" value="b" id="hideme_1" />\n<input type="hidden" name="letters" value="c" id="hideme_2" />')
|
||||
self.assertHTMLEqual(w.render('letters', list('abc'), attrs={'id': 'hideme'}), '<input type="hidden" name="letters" value="a" id="hideme_0" />\n<input type="hidden" name="letters" value="b" id="hideme_1" />\n<input type="hidden" name="letters" value="c" id="hideme_2" />')
|
||||
|
||||
def test_fileinput(self):
|
||||
# FileInput widgets don't ever show the value, because the old value is of no use
|
||||
# if you are updating the form or if the provided file generated an error.
|
||||
w = FileInput()
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input type="file" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), u'<input type="file" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com'), u'<input type="file" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'some "quoted" & ampersanded value'), u'<input type="file" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), u'<input type="file" name="email" class="fun" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input type="file" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', None), '<input type="file" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com'), '<input type="file" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'some "quoted" & ampersanded value'), '<input type="file" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'test@example.com', attrs={'class': 'fun'}), '<input type="file" name="email" class="fun" />')
|
||||
|
||||
# You can also pass 'attrs' to the constructor:
|
||||
w = FileInput(attrs={'class': 'fun'})
|
||||
self.assertHTMLEqual(w.render('email', ''), u'<input type="file" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'foo@example.com'), u'<input type="file" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', ''), '<input type="file" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'foo@example.com'), '<input type="file" class="fun" name="email" />')
|
||||
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<input type="file" class="fun" name="email" />')
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), '<input type="file" class="fun" name="email" />')
|
||||
|
||||
# Test for the behavior of _has_changed for FileInput. The value of data will
|
||||
# more than likely come from request.FILES. The value of initial data will
|
||||
|
|
@ -148,13 +149,13 @@ class FormsWidgetTestCase(TestCase):
|
|||
w = FileInput()
|
||||
|
||||
# No file was uploaded and no initial data.
|
||||
self.assertFalse(w._has_changed(u'', None))
|
||||
self.assertFalse(w._has_changed('', None))
|
||||
|
||||
# A file was uploaded and no initial data.
|
||||
self.assertTrue(w._has_changed(u'', {'filename': 'resume.txt', 'content': 'My resume'}))
|
||||
self.assertTrue(w._has_changed('', {'filename': 'resume.txt', 'content': 'My resume'}))
|
||||
|
||||
# A file was not uploaded, but there is initial data
|
||||
self.assertFalse(w._has_changed(u'resume.txt', None))
|
||||
self.assertFalse(w._has_changed('resume.txt', None))
|
||||
|
||||
# A file was uploaded and there is initial data (file identity is not dealt
|
||||
# with here)
|
||||
|
|
@ -162,64 +163,64 @@ class FormsWidgetTestCase(TestCase):
|
|||
|
||||
def test_textarea(self):
|
||||
w = Textarea()
|
||||
self.assertHTMLEqual(w.render('msg', ''), u'<textarea rows="10" cols="40" name="msg"></textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', None), u'<textarea rows="10" cols="40" name="msg"></textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', 'value'), u'<textarea rows="10" cols="40" name="msg">value</textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', 'some "quoted" & ampersanded value'), u'<textarea rows="10" cols="40" name="msg">some "quoted" & ampersanded value</textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', mark_safe('pre "quoted" value')), u'<textarea rows="10" cols="40" name="msg">pre "quoted" value</textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', 'value', attrs={'class': 'pretty', 'rows': 20}), u'<textarea class="pretty" rows="20" cols="40" name="msg">value</textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', ''), '<textarea rows="10" cols="40" name="msg"></textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', None), '<textarea rows="10" cols="40" name="msg"></textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', 'value'), '<textarea rows="10" cols="40" name="msg">value</textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', 'some "quoted" & ampersanded value'), '<textarea rows="10" cols="40" name="msg">some "quoted" & ampersanded value</textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', mark_safe('pre "quoted" value')), '<textarea rows="10" cols="40" name="msg">pre "quoted" value</textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', 'value', attrs={'class': 'pretty', 'rows': 20}), '<textarea class="pretty" rows="20" cols="40" name="msg">value</textarea>')
|
||||
|
||||
# You can also pass 'attrs' to the constructor:
|
||||
w = Textarea(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('msg', ''), u'<textarea rows="10" cols="40" name="msg" class="pretty"></textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', 'example'), u'<textarea rows="10" cols="40" name="msg" class="pretty">example</textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', ''), '<textarea rows="10" cols="40" name="msg" class="pretty"></textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', 'example'), '<textarea rows="10" cols="40" name="msg" class="pretty">example</textarea>')
|
||||
|
||||
# 'attrs' passed to render() get precedence over those passed to the constructor:
|
||||
w = Textarea(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('msg', '', attrs={'class': 'special'}), u'<textarea rows="10" cols="40" name="msg" class="special"></textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', '', attrs={'class': 'special'}), '<textarea rows="10" cols="40" name="msg" class="special"></textarea>')
|
||||
|
||||
self.assertHTMLEqual(w.render('msg', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), u'<textarea rows="10" cols="40" name="msg" class="fun">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</textarea>')
|
||||
self.assertHTMLEqual(w.render('msg', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'}), '<textarea rows="10" cols="40" name="msg" class="fun">\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111</textarea>')
|
||||
|
||||
def test_checkboxinput(self):
|
||||
w = CheckboxInput()
|
||||
self.assertHTMLEqual(w.render('is_cool', ''), u'<input type="checkbox" name="is_cool" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', None), u'<input type="checkbox" name="is_cool" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', False), u'<input type="checkbox" name="is_cool" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', True), u'<input checked="checked" type="checkbox" name="is_cool" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', ''), '<input type="checkbox" name="is_cool" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', None), '<input type="checkbox" name="is_cool" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', False), '<input type="checkbox" name="is_cool" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', True), '<input checked="checked" type="checkbox" name="is_cool" />')
|
||||
|
||||
# Using any value that's not in ('', None, False, True) will check the checkbox
|
||||
# and set the 'value' attribute.
|
||||
self.assertHTMLEqual(w.render('is_cool', 'foo'), u'<input checked="checked" type="checkbox" name="is_cool" value="foo" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', 'foo'), '<input checked="checked" type="checkbox" name="is_cool" value="foo" />')
|
||||
|
||||
self.assertHTMLEqual(w.render('is_cool', False, attrs={'class': 'pretty'}), u'<input type="checkbox" name="is_cool" class="pretty" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', False, attrs={'class': 'pretty'}), '<input type="checkbox" name="is_cool" class="pretty" />')
|
||||
|
||||
# regression for #17114
|
||||
self.assertHTMLEqual(w.render('is_cool', 0), u'<input checked="checked" type="checkbox" name="is_cool" value="0" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', 1), u'<input checked="checked" type="checkbox" name="is_cool" value="1" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', 0), '<input checked="checked" type="checkbox" name="is_cool" value="0" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', 1), '<input checked="checked" type="checkbox" name="is_cool" value="1" />')
|
||||
|
||||
# You can also pass 'attrs' to the constructor:
|
||||
w = CheckboxInput(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('is_cool', ''), u'<input type="checkbox" class="pretty" name="is_cool" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', ''), '<input type="checkbox" class="pretty" name="is_cool" />')
|
||||
|
||||
# 'attrs' passed to render() get precedence over those passed to the constructor:
|
||||
w = CheckboxInput(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('is_cool', '', attrs={'class': 'special'}), u'<input type="checkbox" class="special" name="is_cool" />')
|
||||
self.assertHTMLEqual(w.render('is_cool', '', attrs={'class': 'special'}), '<input type="checkbox" class="special" name="is_cool" />')
|
||||
|
||||
# You can pass 'check_test' to the constructor. This is a callable that takes the
|
||||
# value and returns True if the box should be checked.
|
||||
w = CheckboxInput(check_test=lambda value: value.startswith('hello'))
|
||||
self.assertHTMLEqual(w.render('greeting', ''), u'<input type="checkbox" name="greeting" />')
|
||||
self.assertHTMLEqual(w.render('greeting', 'hello'), u'<input checked="checked" type="checkbox" name="greeting" value="hello" />')
|
||||
self.assertHTMLEqual(w.render('greeting', 'hello there'), u'<input checked="checked" type="checkbox" name="greeting" value="hello there" />')
|
||||
self.assertHTMLEqual(w.render('greeting', 'hello & goodbye'), u'<input checked="checked" type="checkbox" name="greeting" value="hello & goodbye" />')
|
||||
self.assertHTMLEqual(w.render('greeting', ''), '<input type="checkbox" name="greeting" />')
|
||||
self.assertHTMLEqual(w.render('greeting', 'hello'), '<input checked="checked" type="checkbox" name="greeting" value="hello" />')
|
||||
self.assertHTMLEqual(w.render('greeting', 'hello there'), '<input checked="checked" type="checkbox" name="greeting" value="hello there" />')
|
||||
self.assertHTMLEqual(w.render('greeting', 'hello & goodbye'), '<input checked="checked" type="checkbox" name="greeting" value="hello & goodbye" />')
|
||||
|
||||
# A subtlety: If the 'check_test' argument cannot handle a value and raises any
|
||||
# exception during its __call__, then the exception will be swallowed and the box
|
||||
# will not be checked. In this example, the 'check_test' assumes the value has a
|
||||
# startswith() method, which fails for the values True, False and None.
|
||||
self.assertHTMLEqual(w.render('greeting', True), u'<input type="checkbox" name="greeting" />')
|
||||
self.assertHTMLEqual(w.render('greeting', False), u'<input type="checkbox" name="greeting" />')
|
||||
self.assertHTMLEqual(w.render('greeting', None), u'<input type="checkbox" name="greeting" />')
|
||||
self.assertHTMLEqual(w.render('greeting', True), '<input type="checkbox" name="greeting" />')
|
||||
self.assertHTMLEqual(w.render('greeting', False), '<input type="checkbox" name="greeting" />')
|
||||
self.assertHTMLEqual(w.render('greeting', None), '<input type="checkbox" name="greeting" />')
|
||||
|
||||
# The CheckboxInput widget will return False if the key is not found in the data
|
||||
# dictionary (because HTML form submission doesn't send any result for unchecked
|
||||
|
|
@ -227,12 +228,12 @@ class FormsWidgetTestCase(TestCase):
|
|||
self.assertFalse(w.value_from_datadict({}, {}, 'testing'))
|
||||
|
||||
self.assertFalse(w._has_changed(None, None))
|
||||
self.assertFalse(w._has_changed(None, u''))
|
||||
self.assertFalse(w._has_changed(u'', None))
|
||||
self.assertFalse(w._has_changed(u'', u''))
|
||||
self.assertTrue(w._has_changed(False, u'on'))
|
||||
self.assertFalse(w._has_changed(True, u'on'))
|
||||
self.assertTrue(w._has_changed(True, u''))
|
||||
self.assertFalse(w._has_changed(None, ''))
|
||||
self.assertFalse(w._has_changed('', None))
|
||||
self.assertFalse(w._has_changed('', ''))
|
||||
self.assertTrue(w._has_changed(False, 'on'))
|
||||
self.assertFalse(w._has_changed(True, 'on'))
|
||||
self.assertTrue(w._has_changed(True, ''))
|
||||
|
||||
def test_select(self):
|
||||
w = Select()
|
||||
|
|
@ -301,10 +302,10 @@ class FormsWidgetTestCase(TestCase):
|
|||
class SomeForm(Form):
|
||||
somechoice = ChoiceField(choices=chain((('', '-'*9),), [(thing['id'], thing['name']) for thing in things]))
|
||||
f = SomeForm()
|
||||
self.assertHTMLEqual(f.as_table(), u'<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="" selected="selected">---------</option>\n<option value="1">And Boom</option>\n<option value="2">One More Thing!</option>\n</select></td></tr>')
|
||||
self.assertHTMLEqual(f.as_table(), u'<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="" selected="selected">---------</option>\n<option value="1">And Boom</option>\n<option value="2">One More Thing!</option>\n</select></td></tr>')
|
||||
self.assertHTMLEqual(f.as_table(), '<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="" selected="selected">---------</option>\n<option value="1">And Boom</option>\n<option value="2">One More Thing!</option>\n</select></td></tr>')
|
||||
self.assertHTMLEqual(f.as_table(), '<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="" selected="selected">---------</option>\n<option value="1">And Boom</option>\n<option value="2">One More Thing!</option>\n</select></td></tr>')
|
||||
f = SomeForm({'somechoice': 2})
|
||||
self.assertHTMLEqual(f.as_table(), u'<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="">---------</option>\n<option value="1">And Boom</option>\n<option value="2" selected="selected">One More Thing!</option>\n</select></td></tr>')
|
||||
self.assertHTMLEqual(f.as_table(), '<tr><th><label for="id_somechoice">Somechoice:</label></th><td><select name="somechoice" id="id_somechoice">\n<option value="">---------</option>\n<option value="1">And Boom</option>\n<option value="2" selected="selected">One More Thing!</option>\n</select></td></tr>')
|
||||
|
||||
# You can also pass 'choices' to the constructor:
|
||||
w = Select(choices=[(1, 1), (2, 2), (3, 3)])
|
||||
|
|
@ -333,7 +334,7 @@ class FormsWidgetTestCase(TestCase):
|
|||
</select>""")
|
||||
|
||||
# Unicode choices are correctly rendered as HTML
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), u'<select name="email">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" selected="selected">\u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</option>\n<option value="\u0107\u017e\u0161\u0111">abc\u0107\u017e\u0161\u0111</option>\n</select>')
|
||||
self.assertHTMLEqual(w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), '<select name="email">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" selected="selected">\u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</option>\n<option value="\u0107\u017e\u0161\u0111">abc\u0107\u017e\u0161\u0111</option>\n</select>')
|
||||
|
||||
# If choices is passed to the constructor and is a generator, it can be iterated
|
||||
# over multiple times without getting consumed:
|
||||
|
|
@ -524,15 +525,15 @@ class FormsWidgetTestCase(TestCase):
|
|||
</select>""")
|
||||
|
||||
# Unicode choices are correctly rendered as HTML
|
||||
self.assertHTMLEqual(w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), u'<select multiple="multiple" name="nums">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" selected="selected">\u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</option>\n<option value="\u0107\u017e\u0161\u0111">abc\u0107\u017e\u0161\u0111</option>\n</select>')
|
||||
self.assertHTMLEqual(w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), '<select multiple="multiple" name="nums">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" selected="selected">\u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</option>\n<option value="\u0107\u017e\u0161\u0111">abc\u0107\u017e\u0161\u0111</option>\n</select>')
|
||||
|
||||
# Test the usage of _has_changed
|
||||
self.assertFalse(w._has_changed(None, None))
|
||||
self.assertFalse(w._has_changed([], None))
|
||||
self.assertTrue(w._has_changed(None, [u'1']))
|
||||
self.assertFalse(w._has_changed([1, 2], [u'1', u'2']))
|
||||
self.assertTrue(w._has_changed([1, 2], [u'1']))
|
||||
self.assertTrue(w._has_changed([1, 2], [u'1', u'3']))
|
||||
self.assertTrue(w._has_changed(None, ['1']))
|
||||
self.assertFalse(w._has_changed([1, 2], ['1', '2']))
|
||||
self.assertTrue(w._has_changed([1, 2], ['1']))
|
||||
self.assertTrue(w._has_changed([1, 2], ['1', '3']))
|
||||
|
||||
# Choices can be nested one level in order to create HTML optgroups:
|
||||
w.choices = (('outer1', 'Outer 1'), ('Group "1"', (('inner1', 'Inner 1'), ('inner2', 'Inner 2'))))
|
||||
|
|
@ -675,7 +676,7 @@ beatle J R Ringo False""")
|
|||
# You can create your own custom renderers for RadioSelect to use.
|
||||
class MyRenderer(RadioFieldRenderer):
|
||||
def render(self):
|
||||
return u'<br />\n'.join([unicode(choice) for choice in self])
|
||||
return '<br />\n'.join([unicode(choice) for choice in self])
|
||||
w = RadioSelect(renderer=MyRenderer)
|
||||
self.assertHTMLEqual(w.render('beatle', 'G', choices=(('J', 'John'), ('P', 'Paul'), ('G', 'George'), ('R', 'Ringo'))), """<label><input type="radio" name="beatle" value="J" /> John</label><br />
|
||||
<label><input type="radio" name="beatle" value="P" /> Paul</label><br />
|
||||
|
|
@ -698,7 +699,7 @@ beatle J R Ringo False""")
|
|||
self.assertHTMLEqual(str(r[0]), '<label><input checked="checked" type="radio" name="beatle" value="J" /> John</label>')
|
||||
self.assertTrue(r[0].is_checked())
|
||||
self.assertFalse(r[1].is_checked())
|
||||
self.assertEqual((r[1].name, r[1].value, r[1].choice_value, r[1].choice_label), ('beatle', u'J', u'P', u'Paul'))
|
||||
self.assertEqual((r[1].name, r[1].value, r[1].choice_value, r[1].choice_label), ('beatle', 'J', 'P', 'Paul'))
|
||||
|
||||
try:
|
||||
r[10]
|
||||
|
|
@ -715,7 +716,7 @@ beatle J R Ringo False""")
|
|||
|
||||
# Unicode choices are correctly rendered as HTML
|
||||
w = RadioSelect()
|
||||
self.assertHTMLEqual(unicode(w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')])), u'<ul>\n<li><label><input checked="checked" type="radio" name="email" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="radio" name="email" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>')
|
||||
self.assertHTMLEqual(unicode(w.render('email', 'ŠĐĆŽćžšđ', choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')])), '<ul>\n<li><label><input checked="checked" type="radio" name="email" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="radio" name="email" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>')
|
||||
|
||||
# Attributes provided at instantiation are passed to the constituent inputs
|
||||
w = RadioSelect(attrs={'id':'foo'})
|
||||
|
|
@ -838,14 +839,14 @@ beatle J R Ringo False""")
|
|||
# Test the usage of _has_changed
|
||||
self.assertFalse(w._has_changed(None, None))
|
||||
self.assertFalse(w._has_changed([], None))
|
||||
self.assertTrue(w._has_changed(None, [u'1']))
|
||||
self.assertFalse(w._has_changed([1, 2], [u'1', u'2']))
|
||||
self.assertTrue(w._has_changed([1, 2], [u'1']))
|
||||
self.assertTrue(w._has_changed([1, 2], [u'1', u'3']))
|
||||
self.assertFalse(w._has_changed([2, 1], [u'1', u'2']))
|
||||
self.assertTrue(w._has_changed(None, ['1']))
|
||||
self.assertFalse(w._has_changed([1, 2], ['1', '2']))
|
||||
self.assertTrue(w._has_changed([1, 2], ['1']))
|
||||
self.assertTrue(w._has_changed([1, 2], ['1', '3']))
|
||||
self.assertFalse(w._has_changed([2, 1], ['1', '2']))
|
||||
|
||||
# Unicode choices are correctly rendered as HTML
|
||||
self.assertHTMLEqual(w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), u'<ul>\n<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>\n<li><label><input type="checkbox" name="nums" value="2" /> 2</label></li>\n<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>\n<li><label><input checked="checked" type="checkbox" name="nums" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="checkbox" name="nums" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>')
|
||||
self.assertHTMLEqual(w.render('nums', ['ŠĐĆŽćžšđ'], choices=[('ŠĐĆŽćžšđ', 'ŠĐabcĆŽćžšđ'), ('ćžšđ', 'abcćžšđ')]), '<ul>\n<li><label><input type="checkbox" name="nums" value="1" /> 1</label></li>\n<li><label><input type="checkbox" name="nums" value="2" /> 2</label></li>\n<li><label><input type="checkbox" name="nums" value="3" /> 3</label></li>\n<li><label><input checked="checked" type="checkbox" name="nums" value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" /> \u0160\u0110abc\u0106\u017d\u0107\u017e\u0161\u0111</label></li>\n<li><label><input type="checkbox" name="nums" value="\u0107\u017e\u0161\u0111" /> abc\u0107\u017e\u0161\u0111</label></li>\n</ul>')
|
||||
|
||||
# Each input gets a separate ID
|
||||
self.assertHTMLEqual(CheckboxSelectMultiple().render('letters', list('ac'), choices=zip(list('abc'), list('ABC')), attrs={'id': 'abc'}), """<ul>
|
||||
|
|
@ -861,63 +862,63 @@ beatle J R Ringo False""")
|
|||
return value.split('__')
|
||||
return ['', '']
|
||||
def format_output(self, rendered_widgets):
|
||||
return u'<br />'.join(rendered_widgets)
|
||||
return '<br />'.join(rendered_widgets)
|
||||
|
||||
w = MyMultiWidget(widgets=(TextInput(attrs={'class': 'big'}), TextInput(attrs={'class': 'small'})))
|
||||
self.assertHTMLEqual(w.render('name', ['john', 'lennon']), u'<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" class="small" value="lennon" name="name_1" />')
|
||||
self.assertHTMLEqual(w.render('name', 'john__lennon'), u'<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" class="small" value="lennon" name="name_1" />')
|
||||
self.assertHTMLEqual(w.render('name', 'john__lennon', attrs={'id':'foo'}), u'<input id="foo_0" type="text" class="big" value="john" name="name_0" /><br /><input id="foo_1" type="text" class="small" value="lennon" name="name_1" />')
|
||||
self.assertHTMLEqual(w.render('name', ['john', 'lennon']), '<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" class="small" value="lennon" name="name_1" />')
|
||||
self.assertHTMLEqual(w.render('name', 'john__lennon'), '<input type="text" class="big" value="john" name="name_0" /><br /><input type="text" class="small" value="lennon" name="name_1" />')
|
||||
self.assertHTMLEqual(w.render('name', 'john__lennon', attrs={'id':'foo'}), '<input id="foo_0" type="text" class="big" value="john" name="name_0" /><br /><input id="foo_1" type="text" class="small" value="lennon" name="name_1" />')
|
||||
w = MyMultiWidget(widgets=(TextInput(attrs={'class': 'big'}), TextInput(attrs={'class': 'small'})), attrs={'id': 'bar'})
|
||||
self.assertHTMLEqual(w.render('name', ['john', 'lennon']), u'<input id="bar_0" type="text" class="big" value="john" name="name_0" /><br /><input id="bar_1" type="text" class="small" value="lennon" name="name_1" />')
|
||||
self.assertHTMLEqual(w.render('name', ['john', 'lennon']), '<input id="bar_0" type="text" class="big" value="john" name="name_0" /><br /><input id="bar_1" type="text" class="small" value="lennon" name="name_1" />')
|
||||
|
||||
w = MyMultiWidget(widgets=(TextInput(), TextInput()))
|
||||
|
||||
# test with no initial data
|
||||
self.assertTrue(w._has_changed(None, [u'john', u'lennon']))
|
||||
self.assertTrue(w._has_changed(None, ['john', 'lennon']))
|
||||
|
||||
# test when the data is the same as initial
|
||||
self.assertFalse(w._has_changed(u'john__lennon', [u'john', u'lennon']))
|
||||
self.assertFalse(w._has_changed('john__lennon', ['john', 'lennon']))
|
||||
|
||||
# test when the first widget's data has changed
|
||||
self.assertTrue(w._has_changed(u'john__lennon', [u'alfred', u'lennon']))
|
||||
self.assertTrue(w._has_changed('john__lennon', ['alfred', 'lennon']))
|
||||
|
||||
# test when the last widget's data has changed. this ensures that it is not
|
||||
# short circuiting while testing the widgets.
|
||||
self.assertTrue(w._has_changed(u'john__lennon', [u'john', u'denver']))
|
||||
self.assertTrue(w._has_changed('john__lennon', ['john', 'denver']))
|
||||
|
||||
def test_splitdatetime(self):
|
||||
w = SplitDateTimeWidget()
|
||||
self.assertHTMLEqual(w.render('date', ''), u'<input type="text" name="date_0" /><input type="text" name="date_1" />')
|
||||
self.assertHTMLEqual(w.render('date', None), u'<input type="text" name="date_0" /><input type="text" name="date_1" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), u'<input type="text" name="date_0" value="2006-01-10" /><input type="text" name="date_1" value="07:30:00" />')
|
||||
self.assertHTMLEqual(w.render('date', [datetime.date(2006, 1, 10), datetime.time(7, 30)]), u'<input type="text" name="date_0" value="2006-01-10" /><input type="text" name="date_1" value="07:30:00" />')
|
||||
self.assertHTMLEqual(w.render('date', ''), '<input type="text" name="date_0" /><input type="text" name="date_1" />')
|
||||
self.assertHTMLEqual(w.render('date', None), '<input type="text" name="date_0" /><input type="text" name="date_1" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), '<input type="text" name="date_0" value="2006-01-10" /><input type="text" name="date_1" value="07:30:00" />')
|
||||
self.assertHTMLEqual(w.render('date', [datetime.date(2006, 1, 10), datetime.time(7, 30)]), '<input type="text" name="date_0" value="2006-01-10" /><input type="text" name="date_1" value="07:30:00" />')
|
||||
|
||||
# You can also pass 'attrs' to the constructor. In this case, the attrs will be
|
||||
w = SplitDateTimeWidget(attrs={'class': 'pretty'})
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), u'<input type="text" class="pretty" value="2006-01-10" name="date_0" /><input type="text" class="pretty" value="07:30:00" name="date_1" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), '<input type="text" class="pretty" value="2006-01-10" name="date_0" /><input type="text" class="pretty" value="07:30:00" name="date_1" />')
|
||||
|
||||
# Use 'date_format' and 'time_format' to change the way a value is displayed.
|
||||
w = SplitDateTimeWidget(date_format='%d/%m/%Y', time_format='%H:%M')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), u'<input type="text" name="date_0" value="10/01/2006" /><input type="text" name="date_1" value="07:30" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2006, 1, 10, 7, 30)), '<input type="text" name="date_0" value="10/01/2006" /><input type="text" name="date_1" value="07:30" />')
|
||||
|
||||
self.assertTrue(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'2008-05-06', u'12:40:00']))
|
||||
self.assertFalse(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06/05/2008', u'12:40']))
|
||||
self.assertTrue(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06/05/2008', u'12:41']))
|
||||
self.assertTrue(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['2008-05-06', '12:40:00']))
|
||||
self.assertFalse(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['06/05/2008', '12:40']))
|
||||
self.assertTrue(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['06/05/2008', '12:41']))
|
||||
|
||||
def test_datetimeinput(self):
|
||||
w = DateTimeInput()
|
||||
self.assertHTMLEqual(w.render('date', None), u'<input type="text" name="date" />')
|
||||
self.assertHTMLEqual(w.render('date', None), '<input type="text" name="date" />')
|
||||
d = datetime.datetime(2007, 9, 17, 12, 51, 34, 482548)
|
||||
self.assertEqual(str(d), '2007-09-17 12:51:34.482548')
|
||||
|
||||
# The microseconds are trimmed on display, by default.
|
||||
self.assertHTMLEqual(w.render('date', d), u'<input type="text" name="date" value="2007-09-17 12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34)), u'<input type="text" name="date" value="2007-09-17 12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51)), u'<input type="text" name="date" value="2007-09-17 12:51:00" />')
|
||||
self.assertHTMLEqual(w.render('date', d), '<input type="text" name="date" value="2007-09-17 12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34)), '<input type="text" name="date" value="2007-09-17 12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51)), '<input type="text" name="date" value="2007-09-17 12:51:00" />')
|
||||
|
||||
# Use 'format' to change the way a value is displayed.
|
||||
w = DateTimeInput(format='%d/%m/%Y %H:%M')
|
||||
self.assertHTMLEqual(w.render('date', d), u'<input type="text" name="date" value="17/09/2007 12:51" />')
|
||||
self.assertHTMLEqual(w.render('date', d), '<input type="text" name="date" value="17/09/2007 12:51" />')
|
||||
self.assertFalse(w._has_changed(d, '17/09/2007 12:51'))
|
||||
|
||||
# Make sure a custom format works with _has_changed. The hidden input will use
|
||||
|
|
@ -928,19 +929,19 @@ beatle J R Ringo False""")
|
|||
|
||||
def test_dateinput(self):
|
||||
w = DateInput()
|
||||
self.assertHTMLEqual(w.render('date', None), u'<input type="text" name="date" />')
|
||||
self.assertHTMLEqual(w.render('date', None), '<input type="text" name="date" />')
|
||||
d = datetime.date(2007, 9, 17)
|
||||
self.assertEqual(str(d), '2007-09-17')
|
||||
|
||||
self.assertHTMLEqual(w.render('date', d), u'<input type="text" name="date" value="2007-09-17" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.date(2007, 9, 17)), u'<input type="text" name="date" value="2007-09-17" />')
|
||||
self.assertHTMLEqual(w.render('date', d), '<input type="text" name="date" value="2007-09-17" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.date(2007, 9, 17)), '<input type="text" name="date" value="2007-09-17" />')
|
||||
|
||||
# We should be able to initialize from a unicode value.
|
||||
self.assertHTMLEqual(w.render('date', u'2007-09-17'), u'<input type="text" name="date" value="2007-09-17" />')
|
||||
self.assertHTMLEqual(w.render('date', '2007-09-17'), '<input type="text" name="date" value="2007-09-17" />')
|
||||
|
||||
# Use 'format' to change the way a value is displayed.
|
||||
w = DateInput(format='%d/%m/%Y')
|
||||
self.assertHTMLEqual(w.render('date', d), u'<input type="text" name="date" value="17/09/2007" />')
|
||||
self.assertHTMLEqual(w.render('date', d), '<input type="text" name="date" value="17/09/2007" />')
|
||||
self.assertFalse(w._has_changed(d, '17/09/2007'))
|
||||
|
||||
# Make sure a custom format works with _has_changed. The hidden input will use
|
||||
|
|
@ -951,21 +952,21 @@ beatle J R Ringo False""")
|
|||
|
||||
def test_timeinput(self):
|
||||
w = TimeInput()
|
||||
self.assertHTMLEqual(w.render('time', None), u'<input type="text" name="time" />')
|
||||
self.assertHTMLEqual(w.render('time', None), '<input type="text" name="time" />')
|
||||
t = datetime.time(12, 51, 34, 482548)
|
||||
self.assertEqual(str(t), '12:51:34.482548')
|
||||
|
||||
# The microseconds are trimmed on display, by default.
|
||||
self.assertHTMLEqual(w.render('time', t), u'<input type="text" name="time" value="12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('time', datetime.time(12, 51, 34)), u'<input type="text" name="time" value="12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('time', datetime.time(12, 51)), u'<input type="text" name="time" value="12:51:00" />')
|
||||
self.assertHTMLEqual(w.render('time', t), '<input type="text" name="time" value="12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('time', datetime.time(12, 51, 34)), '<input type="text" name="time" value="12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('time', datetime.time(12, 51)), '<input type="text" name="time" value="12:51:00" />')
|
||||
|
||||
# We should be able to initialize from a unicode value.
|
||||
self.assertHTMLEqual(w.render('time', u'13:12:11'), u'<input type="text" name="time" value="13:12:11" />')
|
||||
self.assertHTMLEqual(w.render('time', '13:12:11'), '<input type="text" name="time" value="13:12:11" />')
|
||||
|
||||
# Use 'format' to change the way a value is displayed.
|
||||
w = TimeInput(format='%H:%M')
|
||||
self.assertHTMLEqual(w.render('time', t), u'<input type="text" name="time" value="12:51" />')
|
||||
self.assertHTMLEqual(w.render('time', t), '<input type="text" name="time" value="12:51" />')
|
||||
self.assertFalse(w._has_changed(t, '12:51'))
|
||||
|
||||
# Make sure a custom format works with _has_changed. The hidden input will use
|
||||
|
|
@ -978,12 +979,12 @@ beatle J R Ringo False""")
|
|||
from django.forms.widgets import SplitHiddenDateTimeWidget
|
||||
|
||||
w = SplitHiddenDateTimeWidget()
|
||||
self.assertHTMLEqual(w.render('date', ''), u'<input type="hidden" name="date_0" /><input type="hidden" name="date_1" />')
|
||||
self.assertHTMLEqual(w.render('date', ''), '<input type="hidden" name="date_0" /><input type="hidden" name="date_1" />')
|
||||
d = datetime.datetime(2007, 9, 17, 12, 51, 34, 482548)
|
||||
self.assertHTMLEqual(str(d), '2007-09-17 12:51:34.482548')
|
||||
self.assertHTMLEqual(w.render('date', d), u'<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34)), u'<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:34" />')
|
||||
self.assertHTMLEqual(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" />')
|
||||
self.assertHTMLEqual(w.render('date', d), '<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51, 34)), '<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51)), '<input type="hidden" name="date_0" value="2007-09-17" /><input type="hidden" name="date_1" value="12:51:00" />')
|
||||
|
||||
|
||||
class NullBooleanSelectLazyForm(Form):
|
||||
|
|
@ -1004,32 +1005,32 @@ class FormsI18NWidgetsTestCase(TestCase):
|
|||
|
||||
def test_splitdatetime(self):
|
||||
w = SplitDateTimeWidget(date_format='%d/%m/%Y', time_format='%H:%M')
|
||||
self.assertTrue(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), [u'06.05.2008', u'12:41']))
|
||||
self.assertTrue(w._has_changed(datetime.datetime(2008, 5, 6, 12, 40, 00), ['06.05.2008', '12:41']))
|
||||
|
||||
def test_datetimeinput(self):
|
||||
w = DateTimeInput()
|
||||
d = datetime.datetime(2007, 9, 17, 12, 51, 34, 482548)
|
||||
w.is_localized = True
|
||||
self.assertHTMLEqual(w.render('date', d), u'<input type="text" name="date" value="17.09.2007 12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('date', d), '<input type="text" name="date" value="17.09.2007 12:51:34" />')
|
||||
|
||||
def test_dateinput(self):
|
||||
w = DateInput()
|
||||
d = datetime.date(2007, 9, 17)
|
||||
w.is_localized = True
|
||||
self.assertHTMLEqual(w.render('date', d), u'<input type="text" name="date" value="17.09.2007" />')
|
||||
self.assertHTMLEqual(w.render('date', d), '<input type="text" name="date" value="17.09.2007" />')
|
||||
|
||||
def test_timeinput(self):
|
||||
w = TimeInput()
|
||||
t = datetime.time(12, 51, 34, 482548)
|
||||
w.is_localized = True
|
||||
self.assertHTMLEqual(w.render('time', t), u'<input type="text" name="time" value="12:51:34" />')
|
||||
self.assertHTMLEqual(w.render('time', t), '<input type="text" name="time" value="12:51:34" />')
|
||||
|
||||
def test_splithiddendatetime(self):
|
||||
from django.forms.widgets import SplitHiddenDateTimeWidget
|
||||
|
||||
w = SplitHiddenDateTimeWidget()
|
||||
w.is_localized = True
|
||||
self.assertHTMLEqual(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" />')
|
||||
self.assertHTMLEqual(w.render('date', datetime.datetime(2007, 9, 17, 12, 51)), '<input type="hidden" name="date_0" value="17.09.2007" /><input type="hidden" name="date_1" value="12:51:00" />')
|
||||
|
||||
def test_nullbooleanselect(self):
|
||||
"""
|
||||
|
|
@ -1038,7 +1039,7 @@ class FormsI18NWidgetsTestCase(TestCase):
|
|||
Refs #17190
|
||||
"""
|
||||
f = NullBooleanSelectLazyForm()
|
||||
self.assertHTMLEqual(f.fields['bool'].widget.render('id_bool', True), u'<select name="id_bool">\n<option value="1">Unbekannt</option>\n<option value="2" selected="selected">Ja</option>\n<option value="3">Nein</option>\n</select>')
|
||||
self.assertHTMLEqual(f.fields['bool'].widget.render('id_bool', True), '<select name="id_bool">\n<option value="1">Unbekannt</option>\n<option value="2" selected="selected">Ja</option>\n<option value="3">Nein</option>\n</select>')
|
||||
|
||||
|
||||
class SelectAndTextWidget(MultiWidget):
|
||||
|
|
@ -1115,7 +1116,7 @@ class ClearableFileInputTests(TestCase):
|
|||
widget = ClearableFileInput()
|
||||
widget.is_required = False
|
||||
self.assertHTMLEqual(widget.render('myfile', FakeFieldFile()),
|
||||
u'Currently: <a href="something">something</a> <input type="checkbox" name="myfile-clear" id="myfile-clear_id" /> <label for="myfile-clear_id">Clear</label><br />Change: <input type="file" name="myfile" />')
|
||||
'Currently: <a href="something">something</a> <input type="checkbox" name="myfile-clear" id="myfile-clear_id" /> <label for="myfile-clear_id">Clear</label><br />Change: <input type="file" name="myfile" />')
|
||||
|
||||
def test_html_escaped(self):
|
||||
"""
|
||||
|
|
@ -1127,17 +1128,17 @@ class ClearableFileInputTests(TestCase):
|
|||
url = "something?chapter=1§=2©=3&lang=en"
|
||||
|
||||
def __unicode__(self):
|
||||
return u'''something<div onclick="alert('oops')">.jpg'''
|
||||
return '''something<div onclick="alert('oops')">.jpg'''
|
||||
|
||||
widget = ClearableFileInput()
|
||||
field = StrangeFieldFile()
|
||||
output = widget.render('my<div>file', field)
|
||||
self.assertFalse(field.url in output)
|
||||
self.assertTrue(u'href="something?chapter=1&sect=2&copy=3&lang=en"' in output)
|
||||
self.assertTrue('href="something?chapter=1&sect=2&copy=3&lang=en"' in output)
|
||||
self.assertFalse(unicode(field) in output)
|
||||
self.assertTrue(u'something<div onclick="alert('oops')">.jpg' in output)
|
||||
self.assertTrue(u'my<div>file' in output)
|
||||
self.assertFalse(u'my<div>file' in output)
|
||||
self.assertTrue('something<div onclick="alert('oops')">.jpg' in output)
|
||||
self.assertTrue('my<div>file' in output)
|
||||
self.assertFalse('my<div>file' in output)
|
||||
|
||||
def test_clear_input_renders_only_if_not_required(self):
|
||||
"""
|
||||
|
|
@ -1148,7 +1149,7 @@ class ClearableFileInputTests(TestCase):
|
|||
widget = ClearableFileInput()
|
||||
widget.is_required = True
|
||||
self.assertHTMLEqual(widget.render('myfile', FakeFieldFile()),
|
||||
u'Currently: <a href="something">something</a> <br />Change: <input type="file" name="myfile" />')
|
||||
'Currently: <a href="something">something</a> <br />Change: <input type="file" name="myfile" />')
|
||||
|
||||
def test_clear_input_renders_only_if_initial(self):
|
||||
"""
|
||||
|
|
@ -1159,7 +1160,7 @@ class ClearableFileInputTests(TestCase):
|
|||
widget = ClearableFileInput()
|
||||
widget.is_required = False
|
||||
self.assertHTMLEqual(widget.render('myfile', None),
|
||||
u'<input type="file" name="myfile" />')
|
||||
'<input type="file" name="myfile" />')
|
||||
|
||||
def test_clear_input_checked_returns_false(self):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
# coding: utf-8
|
||||
|
||||
from __future__ import absolute_import
|
||||
# -*- coding: utf-8 -*-
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import admin
|
||||
|
|
@ -66,11 +65,11 @@ class GenericAdminViewTest(TestCase):
|
|||
A smoke test to ensure POST on add_view works.
|
||||
"""
|
||||
post_data = {
|
||||
"name": u"This Week in Django",
|
||||
"name": "This Week in Django",
|
||||
# inline data
|
||||
"generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": u"1",
|
||||
"generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": u"0",
|
||||
"generic_inline_admin-media-content_type-object_id-MAX_NUM_FORMS": u"0",
|
||||
"generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": "1",
|
||||
"generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": "0",
|
||||
"generic_inline_admin-media-content_type-object_id-MAX_NUM_FORMS": "0",
|
||||
}
|
||||
response = self.client.post('/generic_inline_admin/admin/generic_inline_admin/episode/add/', post_data)
|
||||
self.assertEqual(response.status_code, 302) # redirect somewhere
|
||||
|
|
@ -80,17 +79,17 @@ class GenericAdminViewTest(TestCase):
|
|||
A smoke test to ensure POST on edit_view works.
|
||||
"""
|
||||
post_data = {
|
||||
"name": u"This Week in Django",
|
||||
"name": "This Week in Django",
|
||||
# inline data
|
||||
"generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": u"3",
|
||||
"generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": u"2",
|
||||
"generic_inline_admin-media-content_type-object_id-MAX_NUM_FORMS": u"0",
|
||||
"generic_inline_admin-media-content_type-object_id-0-id": u"%d" % self.mp3_media_pk,
|
||||
"generic_inline_admin-media-content_type-object_id-0-url": u"http://example.com/podcast.mp3",
|
||||
"generic_inline_admin-media-content_type-object_id-1-id": u"%d" % self.png_media_pk,
|
||||
"generic_inline_admin-media-content_type-object_id-1-url": u"http://example.com/logo.png",
|
||||
"generic_inline_admin-media-content_type-object_id-2-id": u"",
|
||||
"generic_inline_admin-media-content_type-object_id-2-url": u"",
|
||||
"generic_inline_admin-media-content_type-object_id-TOTAL_FORMS": "3",
|
||||
"generic_inline_admin-media-content_type-object_id-INITIAL_FORMS": "2",
|
||||
"generic_inline_admin-media-content_type-object_id-MAX_NUM_FORMS": "0",
|
||||
"generic_inline_admin-media-content_type-object_id-0-id": "%d" % self.mp3_media_pk,
|
||||
"generic_inline_admin-media-content_type-object_id-0-url": "http://example.com/podcast.mp3",
|
||||
"generic_inline_admin-media-content_type-object_id-1-id": "%d" % self.png_media_pk,
|
||||
"generic_inline_admin-media-content_type-object_id-1-url": "http://example.com/logo.png",
|
||||
"generic_inline_admin-media-content_type-object_id-2-id": "",
|
||||
"generic_inline_admin-media-content_type-object_id-2-url": "",
|
||||
}
|
||||
url = '/generic_inline_admin/admin/generic_inline_admin/episode/%d/' % self.episode_pk
|
||||
response = self.client.post(url, post_data)
|
||||
|
|
@ -198,11 +197,11 @@ class GenericInlineAdminWithUniqueTogetherTest(TestCase):
|
|||
def testAdd(self):
|
||||
category_id = Category.objects.create(name='male').pk
|
||||
post_data = {
|
||||
"name": u"John Doe",
|
||||
"name": "John Doe",
|
||||
# inline data
|
||||
"generic_inline_admin-phonenumber-content_type-object_id-TOTAL_FORMS": u"1",
|
||||
"generic_inline_admin-phonenumber-content_type-object_id-INITIAL_FORMS": u"0",
|
||||
"generic_inline_admin-phonenumber-content_type-object_id-MAX_NUM_FORMS": u"0",
|
||||
"generic_inline_admin-phonenumber-content_type-object_id-TOTAL_FORMS": "1",
|
||||
"generic_inline_admin-phonenumber-content_type-object_id-INITIAL_FORMS": "0",
|
||||
"generic_inline_admin-phonenumber-content_type-object_id-MAX_NUM_FORMS": "0",
|
||||
"generic_inline_admin-phonenumber-content_type-object_id-0-id": "",
|
||||
"generic_inline_admin-phonenumber-content_type-object_id-0-phone_number": "555-555-5555",
|
||||
"generic_inline_admin-phonenumber-content_type-object_id-0-category": "%s" % category_id,
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import copy
|
||||
import pickle
|
||||
|
||||
|
|
@ -59,8 +61,8 @@ class QueryDictTests(unittest.TestCase):
|
|||
self.assertFalse(q.has_key('bar'))
|
||||
self.assertFalse('bar' in q)
|
||||
|
||||
self.assertEqual(q.items(), [(u'foo', u'bar')])
|
||||
self.assertEqual(q.lists(), [(u'foo', [u'bar'])])
|
||||
self.assertEqual(q.items(), [('foo', 'bar')])
|
||||
self.assertEqual(q.lists(), [('foo', ['bar'])])
|
||||
self.assertEqual(q.keys(), ['foo'])
|
||||
self.assertEqual(q.values(), ['bar'])
|
||||
self.assertEqual(len(q), 1)
|
||||
|
|
@ -79,7 +81,7 @@ class QueryDictTests(unittest.TestCase):
|
|||
self.assertEqual(q.urlencode(), 'next=%2Fa%26b%2F')
|
||||
self.assertEqual(q.urlencode(safe='/'), 'next=/a%26b/')
|
||||
q = QueryDict('', mutable=True)
|
||||
q['next'] = u'/t\xebst&key/'
|
||||
q['next'] = '/t\xebst&key/'
|
||||
self.assertEqual(q.urlencode(), 'next=%2Ft%C3%ABst%26key%2F')
|
||||
self.assertEqual(q.urlencode(safe='/'), 'next=/t%C3%ABst%26key/')
|
||||
|
||||
|
|
@ -114,17 +116,17 @@ class QueryDictTests(unittest.TestCase):
|
|||
self.assertTrue(q.has_key('foo'))
|
||||
self.assertTrue('foo' in q)
|
||||
|
||||
self.assertEqual(q.items(), [(u'foo', u'another'), (u'name', u'john')])
|
||||
self.assertEqual(q.lists(), [(u'foo', [u'bar', u'baz', u'another']), (u'name', [u'john'])])
|
||||
self.assertEqual(q.keys(), [u'foo', u'name'])
|
||||
self.assertEqual(q.values(), [u'another', u'john'])
|
||||
self.assertEqual(q.items(), [('foo', 'another'), ('name', 'john')])
|
||||
self.assertEqual(q.lists(), [('foo', ['bar', 'baz', 'another']), ('name', ['john'])])
|
||||
self.assertEqual(q.keys(), ['foo', 'name'])
|
||||
self.assertEqual(q.values(), ['another', 'john'])
|
||||
self.assertEqual(len(q), 2)
|
||||
|
||||
q.update({'foo': 'hello'})
|
||||
self.assertEqual(q['foo'], 'hello')
|
||||
self.assertEqual(q.get('foo', 'not available'), 'hello')
|
||||
self.assertEqual(q.getlist('foo'), [u'bar', u'baz', u'another', u'hello'])
|
||||
self.assertEqual(q.pop('foo'), [u'bar', u'baz', u'another', u'hello'])
|
||||
self.assertEqual(q.getlist('foo'), ['bar', 'baz', 'another', 'hello'])
|
||||
self.assertEqual(q.pop('foo'), ['bar', 'baz', 'another', 'hello'])
|
||||
self.assertEqual(q.pop('foo', 'not there'), 'not there')
|
||||
self.assertEqual(q.get('foo', 'not there'), 'not there')
|
||||
self.assertEqual(q.setdefault('foo', 'bar'), 'bar')
|
||||
|
|
@ -140,12 +142,12 @@ class QueryDictTests(unittest.TestCase):
|
|||
|
||||
q = QueryDict('vote=yes&vote=no')
|
||||
|
||||
self.assertEqual(q['vote'], u'no')
|
||||
self.assertEqual(q['vote'], 'no')
|
||||
self.assertRaises(AttributeError, q.__setitem__, 'something', 'bar')
|
||||
|
||||
self.assertEqual(q.get('vote', 'default'), u'no')
|
||||
self.assertEqual(q.get('vote', 'default'), 'no')
|
||||
self.assertEqual(q.get('foo', 'default'), 'default')
|
||||
self.assertEqual(q.getlist('vote'), [u'yes', u'no'])
|
||||
self.assertEqual(q.getlist('vote'), ['yes', 'no'])
|
||||
self.assertEqual(q.getlist('foo'), [])
|
||||
|
||||
self.assertRaises(AttributeError, q.setlist, 'foo', ['bar', 'baz'])
|
||||
|
|
@ -156,10 +158,10 @@ class QueryDictTests(unittest.TestCase):
|
|||
self.assertEqual('vote' in q, True)
|
||||
self.assertEqual(q.has_key('foo'), False)
|
||||
self.assertEqual('foo' in q, False)
|
||||
self.assertEqual(q.items(), [(u'vote', u'no')])
|
||||
self.assertEqual(q.lists(), [(u'vote', [u'yes', u'no'])])
|
||||
self.assertEqual(q.keys(), [u'vote'])
|
||||
self.assertEqual(q.values(), [u'no'])
|
||||
self.assertEqual(q.items(), [('vote', 'no')])
|
||||
self.assertEqual(q.lists(), [('vote', ['yes', 'no'])])
|
||||
self.assertEqual(q.keys(), ['vote'])
|
||||
self.assertEqual(q.values(), ['no'])
|
||||
self.assertEqual(len(q), 1)
|
||||
|
||||
self.assertRaises(AttributeError, q.update, {'foo': 'bar'})
|
||||
|
|
@ -175,8 +177,8 @@ class QueryDictTests(unittest.TestCase):
|
|||
case, bad UTF-8 encoding).
|
||||
"""
|
||||
q = QueryDict(b'foo=bar&foo=\xff')
|
||||
self.assertEqual(q['foo'], u'\ufffd')
|
||||
self.assertEqual(q.getlist('foo'), [u'bar', u'\ufffd'])
|
||||
self.assertEqual(q['foo'], '\ufffd')
|
||||
self.assertEqual(q.getlist('foo'), ['bar', '\ufffd'])
|
||||
|
||||
def test_pickle(self):
|
||||
q = QueryDict('')
|
||||
|
|
@ -194,17 +196,17 @@ class QueryDictTests(unittest.TestCase):
|
|||
x = QueryDict("a=1&a=2", mutable=True)
|
||||
y = QueryDict("a=3&a=4")
|
||||
x.update(y)
|
||||
self.assertEqual(x.getlist('a'), [u'1', u'2', u'3', u'4'])
|
||||
self.assertEqual(x.getlist('a'), ['1', '2', '3', '4'])
|
||||
|
||||
def test_non_default_encoding(self):
|
||||
"""#13572 - QueryDict with a non-default encoding"""
|
||||
q = QueryDict(b'sbb=one', encoding='rot_13')
|
||||
self.assertEqual(q.encoding , 'rot_13' )
|
||||
self.assertEqual(q.items() , [(u'foo', u'bar')] )
|
||||
self.assertEqual(q.items() , [('foo', 'bar')] )
|
||||
self.assertEqual(q.urlencode() , 'sbb=one' )
|
||||
q = q.copy()
|
||||
self.assertEqual(q.encoding , 'rot_13' )
|
||||
self.assertEqual(q.items() , [(u'foo', u'bar')] )
|
||||
self.assertEqual(q.items() , [('foo', 'bar')] )
|
||||
self.assertEqual(q.urlencode() , 'sbb=one' )
|
||||
self.assertEqual(copy.copy(q).encoding , 'rot_13' )
|
||||
self.assertEqual(copy.deepcopy(q).encoding , 'rot_13')
|
||||
|
|
@ -214,29 +216,29 @@ class HttpResponseTests(unittest.TestCase):
|
|||
r = HttpResponse()
|
||||
|
||||
# If we insert a unicode value it will be converted to an ascii
|
||||
r['value'] = u'test value'
|
||||
r['value'] = 'test value'
|
||||
self.assertTrue(isinstance(r['value'], str))
|
||||
|
||||
# An error is raised when a unicode object with non-ascii is assigned.
|
||||
self.assertRaises(UnicodeEncodeError, r.__setitem__, 'value', u't\xebst value')
|
||||
self.assertRaises(UnicodeEncodeError, r.__setitem__, 'value', 't\xebst value')
|
||||
|
||||
# An error is raised when a unicode object with non-ASCII format is
|
||||
# passed as initial mimetype or content_type.
|
||||
self.assertRaises(UnicodeEncodeError, HttpResponse,
|
||||
content_type=u't\xebst value')
|
||||
content_type='t\xebst value')
|
||||
|
||||
# HttpResponse headers must be convertible to ASCII.
|
||||
self.assertRaises(UnicodeEncodeError, HttpResponse,
|
||||
content_type=u't\xebst value')
|
||||
content_type='t\xebst value')
|
||||
|
||||
# The response also converts unicode keys to strings.)
|
||||
r[u'test'] = 'testing key'
|
||||
r['test'] = 'testing key'
|
||||
l = list(r.items())
|
||||
l.sort()
|
||||
self.assertEqual(l[1], ('test', 'testing key'))
|
||||
|
||||
# It will also raise errors for keys with non-ascii data.
|
||||
self.assertRaises(UnicodeEncodeError, r.__setitem__, u't\xebst key', 'value')
|
||||
self.assertRaises(UnicodeEncodeError, r.__setitem__, 't\xebst key', 'value')
|
||||
|
||||
def test_newlines_in_headers(self):
|
||||
# Bug #10188: Do not allow newlines in headers (CR or LF)
|
||||
|
|
@ -276,7 +278,7 @@ class HttpResponseTests(unittest.TestCase):
|
|||
|
||||
#test retrieval explicitly using iter and odd inputs
|
||||
r = HttpResponse()
|
||||
r.content = ['1', u'2', 3, unichr(1950)]
|
||||
r.content = ['1', '2', 3, unichr(1950)]
|
||||
result = []
|
||||
my_iter = r.__iter__()
|
||||
while True:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# coding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
|
||||
|
|
@ -23,9 +24,9 @@ class ContentTypeTests(TestCase):
|
|||
def test_verbose_name(self):
|
||||
company_type = ContentType.objects.get(app_label='i18n', model='company')
|
||||
with translation.override('en'):
|
||||
self.assertEqual(unicode(company_type), u'Company')
|
||||
self.assertEqual(unicode(company_type), 'Company')
|
||||
with translation.override('fr'):
|
||||
self.assertEqual(unicode(company_type), u'Société')
|
||||
self.assertEqual(unicode(company_type), 'Société')
|
||||
|
||||
def test_field_override(self):
|
||||
company_type = ContentType.objects.get(app_label='i18n', model='company')
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
|
@ -247,7 +249,7 @@ class URLTagTests(URLTestCaseBase):
|
|||
{% language 'nl' %}{% url 'no-prefix-translated' %}{% endlanguage %}
|
||||
{% language 'pt-br' %}{% url 'no-prefix-translated' %}{% endlanguage %}""")
|
||||
self.assertEqual(t.render(Context({})).strip().split(),
|
||||
[u'/vertaald/', u'/traduzidos/'])
|
||||
['/vertaald/', '/traduzidos/'])
|
||||
|
||||
def test_context(self):
|
||||
ctx = Context({'lang1':'nl', 'lang2':'pt-br'})
|
||||
|
|
@ -255,18 +257,18 @@ class URLTagTests(URLTestCaseBase):
|
|||
{% language lang1 %}{% url 'no-prefix-translated' %}{% endlanguage %}
|
||||
{% language lang2 %}{% url 'no-prefix-translated' %}{% endlanguage %}""")
|
||||
self.assertEqual(tpl.render(ctx).strip().split(),
|
||||
[u'/vertaald/', u'/traduzidos/'])
|
||||
['/vertaald/', '/traduzidos/'])
|
||||
|
||||
def test_args(self):
|
||||
tpl = Template("""{% load i18n %}
|
||||
{% language 'nl' %}{% url 'no-prefix-translated-slug' 'apo' %}{% endlanguage %}
|
||||
{% language 'pt-br' %}{% url 'no-prefix-translated-slug' 'apo' %}{% endlanguage %}""")
|
||||
self.assertEqual(tpl.render(Context({})).strip().split(),
|
||||
[u'/vertaald/apo/', u'/traduzidos/apo/'])
|
||||
['/vertaald/apo/', '/traduzidos/apo/'])
|
||||
|
||||
def test_kwargs(self):
|
||||
tpl = Template("""{% load i18n %}
|
||||
{% language 'nl' %}{% url 'no-prefix-translated-slug' slug='apo' %}{% endlanguage %}
|
||||
{% language 'pt-br' %}{% url 'no-prefix-translated-slug' slug='apo' %}{% endlanguage %}""")
|
||||
self.assertEqual(tpl.render(Context({})).strip().split(),
|
||||
[u'/vertaald/apo/', u'/traduzidos/apo/'])
|
||||
['/vertaald/apo/', '/traduzidos/apo/'])
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
import decimal
|
||||
|
|
@ -62,11 +62,11 @@ class TranslationTests(TestCase):
|
|||
"""
|
||||
s = ugettext_lazy('Add %(name)s')
|
||||
d = {'name': 'Ringo'}
|
||||
self.assertEqual(u'Add Ringo', s % d)
|
||||
self.assertEqual('Add Ringo', s % d)
|
||||
with translation.override('de', deactivate=True):
|
||||
self.assertEqual(u'Ringo hinzuf\xfcgen', s % d)
|
||||
self.assertEqual('Ringo hinzuf\xfcgen', s % d)
|
||||
with translation.override('pl'):
|
||||
self.assertEqual(u'Dodaj Ringo', s % d)
|
||||
self.assertEqual('Dodaj Ringo', s % d)
|
||||
|
||||
# It should be possible to compare *_lazy objects.
|
||||
s1 = ugettext_lazy('Add %(name)s')
|
||||
|
|
@ -94,10 +94,10 @@ class TranslationTests(TestCase):
|
|||
trans_real._active = local()
|
||||
trans_real._translations = {}
|
||||
with translation.override('de'):
|
||||
self.assertEqual(pgettext("unexisting", "May"), u"May")
|
||||
self.assertEqual(pgettext("month name", "May"), u"Mai")
|
||||
self.assertEqual(pgettext("verb", "May"), u"Kann")
|
||||
self.assertEqual(npgettext("search", "%d result", "%d results", 4) % 4, u"4 Resultate")
|
||||
self.assertEqual(pgettext("unexisting", "May"), "May")
|
||||
self.assertEqual(pgettext("month name", "May"), "Mai")
|
||||
self.assertEqual(pgettext("verb", "May"), "Kann")
|
||||
self.assertEqual(npgettext("search", "%d result", "%d results", 4) % 4, "4 Resultate")
|
||||
|
||||
def test_template_tags_pgettext(self):
|
||||
"""
|
||||
|
|
@ -224,7 +224,7 @@ class TranslationTests(TestCase):
|
|||
unicode(string_concat(...)) should not raise a TypeError - #4796
|
||||
"""
|
||||
import django.utils.translation
|
||||
self.assertEqual(u'django', unicode(django.utils.translation.string_concat("dja", "ngo")))
|
||||
self.assertEqual('django', unicode(django.utils.translation.string_concat("dja", "ngo")))
|
||||
|
||||
def test_safe_status(self):
|
||||
"""
|
||||
|
|
@ -247,11 +247,11 @@ class TranslationTests(TestCase):
|
|||
"""
|
||||
from django.utils.translation.trans_real import translation as Trans
|
||||
ca_translation = Trans('ca')
|
||||
ca_translation._catalog[u'Mac\nEOF\n'] = u'Catalan Mac\nEOF\n'
|
||||
ca_translation._catalog[u'Win\nEOF\n'] = u'Catalan Win\nEOF\n'
|
||||
ca_translation._catalog['Mac\nEOF\n'] = 'Catalan Mac\nEOF\n'
|
||||
ca_translation._catalog['Win\nEOF\n'] = 'Catalan Win\nEOF\n'
|
||||
with translation.override('ca', deactivate=True):
|
||||
self.assertEqual(u'Catalan Mac\nEOF\n', ugettext(u'Mac\rEOF\r'))
|
||||
self.assertEqual(u'Catalan Win\nEOF\n', ugettext(u'Win\r\nEOF\r\n'))
|
||||
self.assertEqual('Catalan Mac\nEOF\n', ugettext('Mac\rEOF\r'))
|
||||
self.assertEqual('Catalan Win\nEOF\n', ugettext('Win\r\nEOF\r\n'))
|
||||
|
||||
def test_to_locale(self):
|
||||
"""
|
||||
|
|
@ -332,22 +332,22 @@ class FormattingTests(TestCase):
|
|||
Localization of numbers
|
||||
"""
|
||||
with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=False):
|
||||
self.assertEqual(u'66666.66', nformat(self.n, decimal_sep='.', decimal_pos=2, grouping=3, thousand_sep=','))
|
||||
self.assertEqual(u'66666A6', nformat(self.n, decimal_sep='A', decimal_pos=1, grouping=1, thousand_sep='B'))
|
||||
self.assertEqual(u'66666', nformat(self.n, decimal_sep='X', decimal_pos=0, grouping=1, thousand_sep='Y'))
|
||||
self.assertEqual('66666.66', nformat(self.n, decimal_sep='.', decimal_pos=2, grouping=3, thousand_sep=','))
|
||||
self.assertEqual('66666A6', nformat(self.n, decimal_sep='A', decimal_pos=1, grouping=1, thousand_sep='B'))
|
||||
self.assertEqual('66666', nformat(self.n, decimal_sep='X', decimal_pos=0, grouping=1, thousand_sep='Y'))
|
||||
|
||||
with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True):
|
||||
self.assertEqual(u'66,666.66', nformat(self.n, decimal_sep='.', decimal_pos=2, grouping=3, thousand_sep=','))
|
||||
self.assertEqual(u'6B6B6B6B6A6', nformat(self.n, decimal_sep='A', decimal_pos=1, grouping=1, thousand_sep='B'))
|
||||
self.assertEqual(u'-66666.6', nformat(-66666.666, decimal_sep='.', decimal_pos=1))
|
||||
self.assertEqual(u'-66666.0', nformat(int('-66666'), decimal_sep='.', decimal_pos=1))
|
||||
self.assertEqual(u'10000.0', nformat(self.l, decimal_sep='.', decimal_pos=1))
|
||||
self.assertEqual('66,666.66', nformat(self.n, decimal_sep='.', decimal_pos=2, grouping=3, thousand_sep=','))
|
||||
self.assertEqual('6B6B6B6B6A6', nformat(self.n, decimal_sep='A', decimal_pos=1, grouping=1, thousand_sep='B'))
|
||||
self.assertEqual('-66666.6', nformat(-66666.666, decimal_sep='.', decimal_pos=1))
|
||||
self.assertEqual('-66666.0', nformat(int('-66666'), decimal_sep='.', decimal_pos=1))
|
||||
self.assertEqual('10000.0', nformat(self.l, decimal_sep='.', decimal_pos=1))
|
||||
# This unusual grouping/force_grouping combination may be triggered by the intcomma filter (#17414)
|
||||
self.assertEqual(u'10000', nformat(self.l, decimal_sep='.', decimal_pos=0, grouping=0, force_grouping=True))
|
||||
self.assertEqual('10000', nformat(self.l, decimal_sep='.', decimal_pos=0, grouping=0, force_grouping=True))
|
||||
|
||||
# date filter
|
||||
self.assertEqual(u'31.12.2009 в 20:50', Template('{{ dt|date:"d.m.Y в H:i" }}').render(self.ctxt))
|
||||
self.assertEqual(u'⌚ 10:15', Template('{{ t|time:"⌚ H:i" }}').render(self.ctxt))
|
||||
self.assertEqual('31.12.2009 в 20:50', Template('{{ dt|date:"d.m.Y в H:i" }}').render(self.ctxt))
|
||||
self.assertEqual('⌚ 10:15', Template('{{ t|time:"⌚ H:i" }}').render(self.ctxt))
|
||||
|
||||
def test_l10n_disabled(self):
|
||||
"""
|
||||
|
|
@ -356,53 +356,53 @@ class FormattingTests(TestCase):
|
|||
"""
|
||||
settings.USE_L10N = False
|
||||
with translation.override('ca', deactivate=True):
|
||||
self.assertEqual(u'N j, Y', get_format('DATE_FORMAT'))
|
||||
self.assertEqual('N j, Y', get_format('DATE_FORMAT'))
|
||||
self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK'))
|
||||
self.assertEqual(u'.', get_format('DECIMAL_SEPARATOR'))
|
||||
self.assertEqual(u'10:15 a.m.', time_format(self.t))
|
||||
self.assertEqual(u'des. 31, 2009', date_format(self.d))
|
||||
self.assertEqual(u'desembre 2009', date_format(self.d, 'YEAR_MONTH_FORMAT'))
|
||||
self.assertEqual(u'12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT'))
|
||||
self.assertEqual(u'No localizable', localize('No localizable'))
|
||||
self.assertEqual(u'66666.666', localize(self.n))
|
||||
self.assertEqual(u'99999.999', localize(self.f))
|
||||
self.assertEqual(u'10000', localize(self.l))
|
||||
self.assertEqual(u'des. 31, 2009', localize(self.d))
|
||||
self.assertEqual(u'des. 31, 2009, 8:50 p.m.', localize(self.dt))
|
||||
self.assertEqual(u'66666.666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual(u'99999.999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual(u'des. 31, 2009', Template('{{ d }}').render(self.ctxt))
|
||||
self.assertEqual(u'des. 31, 2009, 8:50 p.m.', Template('{{ dt }}').render(self.ctxt))
|
||||
self.assertEqual(u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
|
||||
self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt))
|
||||
self.assertEqual(u'10:15 a.m.', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual(u'12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual(u'12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual('.', get_format('DECIMAL_SEPARATOR'))
|
||||
self.assertEqual('10:15 a.m.', time_format(self.t))
|
||||
self.assertEqual('des. 31, 2009', date_format(self.d))
|
||||
self.assertEqual('desembre 2009', date_format(self.d, 'YEAR_MONTH_FORMAT'))
|
||||
self.assertEqual('12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT'))
|
||||
self.assertEqual('No localizable', localize('No localizable'))
|
||||
self.assertEqual('66666.666', localize(self.n))
|
||||
self.assertEqual('99999.999', localize(self.f))
|
||||
self.assertEqual('10000', localize(self.l))
|
||||
self.assertEqual('des. 31, 2009', localize(self.d))
|
||||
self.assertEqual('des. 31, 2009, 8:50 p.m.', localize(self.dt))
|
||||
self.assertEqual('66666.666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual('99999.999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual('des. 31, 2009', Template('{{ d }}').render(self.ctxt))
|
||||
self.assertEqual('des. 31, 2009, 8:50 p.m.', Template('{{ dt }}').render(self.ctxt))
|
||||
self.assertEqual('66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
|
||||
self.assertEqual('100000.0', Template('{{ f|floatformat }}').render(self.ctxt))
|
||||
self.assertEqual('10:15 a.m.', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual('12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual('12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt))
|
||||
|
||||
form = I18nForm({
|
||||
'decimal_field': u'66666,666',
|
||||
'float_field': u'99999,999',
|
||||
'date_field': u'31/12/2009',
|
||||
'datetime_field': u'31/12/2009 20:50',
|
||||
'time_field': u'20:50',
|
||||
'integer_field': u'1.234',
|
||||
'decimal_field': '66666,666',
|
||||
'float_field': '99999,999',
|
||||
'date_field': '31/12/2009',
|
||||
'datetime_field': '31/12/2009 20:50',
|
||||
'time_field': '20:50',
|
||||
'integer_field': '1.234',
|
||||
})
|
||||
self.assertEqual(False, form.is_valid())
|
||||
self.assertEqual([u'Introdu\xefu un n\xfamero.'], form.errors['float_field'])
|
||||
self.assertEqual([u'Introdu\xefu un n\xfamero.'], form.errors['decimal_field'])
|
||||
self.assertEqual([u'Introdu\xefu una data v\xe0lida.'], form.errors['date_field'])
|
||||
self.assertEqual([u'Introdu\xefu una data/hora v\xe0lides.'], form.errors['datetime_field'])
|
||||
self.assertEqual([u'Introdu\xefu un n\xfamero sencer.'], form.errors['integer_field'])
|
||||
self.assertEqual(['Introdu\xefu un n\xfamero.'], form.errors['float_field'])
|
||||
self.assertEqual(['Introdu\xefu un n\xfamero.'], form.errors['decimal_field'])
|
||||
self.assertEqual(['Introdu\xefu una data v\xe0lida.'], form.errors['date_field'])
|
||||
self.assertEqual(['Introdu\xefu una data/hora v\xe0lides.'], form.errors['datetime_field'])
|
||||
self.assertEqual(['Introdu\xefu un n\xfamero sencer.'], form.errors['integer_field'])
|
||||
|
||||
form2 = SelectDateForm({
|
||||
'date_field_month': u'12',
|
||||
'date_field_day': u'31',
|
||||
'date_field_year': u'2009'
|
||||
'date_field_month': '12',
|
||||
'date_field_day': '31',
|
||||
'date_field_year': '2009'
|
||||
})
|
||||
self.assertEqual(True, form2.is_valid())
|
||||
self.assertEqual(datetime.date(2009, 12, 31), form2.cleaned_data['date_field'])
|
||||
self.assertHTMLEqual(
|
||||
u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>',
|
||||
'<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>',
|
||||
SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31))
|
||||
)
|
||||
|
||||
|
|
@ -412,8 +412,8 @@ class FormattingTests(TestCase):
|
|||
# THOUSAND_SEPARATOR settings are specified
|
||||
with self.settings(USE_THOUSAND_SEPARATOR=True,
|
||||
NUMBER_GROUPING=1, THOUSAND_SEPARATOR='!'):
|
||||
self.assertEqual(u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
|
||||
self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt))
|
||||
self.assertEqual('66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
|
||||
self.assertEqual('100000.0', Template('{{ f|floatformat }}').render(self.ctxt))
|
||||
|
||||
def test_false_like_locale_formats(self):
|
||||
"""
|
||||
|
|
@ -455,37 +455,37 @@ class FormattingTests(TestCase):
|
|||
self.assertEqual('j \d\e F \d\e Y', get_format('DATE_FORMAT'))
|
||||
self.assertEqual(1, get_format('FIRST_DAY_OF_WEEK'))
|
||||
self.assertEqual(',', get_format('DECIMAL_SEPARATOR'))
|
||||
self.assertEqual(u'10:15:48', time_format(self.t))
|
||||
self.assertEqual(u'31 de desembre de 2009', date_format(self.d))
|
||||
self.assertEqual(u'desembre del 2009', date_format(self.d, 'YEAR_MONTH_FORMAT'))
|
||||
self.assertEqual(u'31/12/2009 20:50', date_format(self.dt, 'SHORT_DATETIME_FORMAT'))
|
||||
self.assertEqual('10:15:48', time_format(self.t))
|
||||
self.assertEqual('31 de desembre de 2009', date_format(self.d))
|
||||
self.assertEqual('desembre del 2009', date_format(self.d, 'YEAR_MONTH_FORMAT'))
|
||||
self.assertEqual('31/12/2009 20:50', date_format(self.dt, 'SHORT_DATETIME_FORMAT'))
|
||||
self.assertEqual('No localizable', localize('No localizable'))
|
||||
|
||||
settings.USE_THOUSAND_SEPARATOR = True
|
||||
self.assertEqual(u'66.666,666', localize(self.n))
|
||||
self.assertEqual(u'99.999,999', localize(self.f))
|
||||
self.assertEqual(u'10.000', localize(self.l))
|
||||
self.assertEqual(u'True', localize(True))
|
||||
self.assertEqual('66.666,666', localize(self.n))
|
||||
self.assertEqual('99.999,999', localize(self.f))
|
||||
self.assertEqual('10.000', localize(self.l))
|
||||
self.assertEqual('True', localize(True))
|
||||
|
||||
settings.USE_THOUSAND_SEPARATOR = False
|
||||
self.assertEqual(u'66666,666', localize(self.n))
|
||||
self.assertEqual(u'99999,999', localize(self.f))
|
||||
self.assertEqual(u'10000', localize(self.l))
|
||||
self.assertEqual(u'31 de desembre de 2009', localize(self.d))
|
||||
self.assertEqual(u'31 de desembre de 2009 a les 20:50', localize(self.dt))
|
||||
self.assertEqual('66666,666', localize(self.n))
|
||||
self.assertEqual('99999,999', localize(self.f))
|
||||
self.assertEqual('10000', localize(self.l))
|
||||
self.assertEqual('31 de desembre de 2009', localize(self.d))
|
||||
self.assertEqual('31 de desembre de 2009 a les 20:50', localize(self.dt))
|
||||
|
||||
settings.USE_THOUSAND_SEPARATOR = True
|
||||
self.assertEqual(u'66.666,666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual(u'99.999,999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual(u'10.000', Template('{{ l }}').render(self.ctxt))
|
||||
self.assertEqual('66.666,666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual('99.999,999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual('10.000', Template('{{ l }}').render(self.ctxt))
|
||||
|
||||
form3 = I18nForm({
|
||||
'decimal_field': u'66.666,666',
|
||||
'float_field': u'99.999,999',
|
||||
'date_field': u'31/12/2009',
|
||||
'datetime_field': u'31/12/2009 20:50',
|
||||
'time_field': u'20:50',
|
||||
'integer_field': u'1.234',
|
||||
'decimal_field': '66.666,666',
|
||||
'float_field': '99.999,999',
|
||||
'date_field': '31/12/2009',
|
||||
'datetime_field': '31/12/2009 20:50',
|
||||
'time_field': '20:50',
|
||||
'integer_field': '1.234',
|
||||
})
|
||||
self.assertEqual(True, form3.is_valid())
|
||||
self.assertEqual(decimal.Decimal('66666.666'), form3.cleaned_data['decimal_field'])
|
||||
|
|
@ -496,24 +496,24 @@ class FormattingTests(TestCase):
|
|||
self.assertEqual(1234, form3.cleaned_data['integer_field'])
|
||||
|
||||
settings.USE_THOUSAND_SEPARATOR = False
|
||||
self.assertEqual(u'66666,666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual(u'99999,999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual(u'31 de desembre de 2009', Template('{{ d }}').render(self.ctxt))
|
||||
self.assertEqual(u'31 de desembre de 2009 a les 20:50', Template('{{ dt }}').render(self.ctxt))
|
||||
self.assertEqual(u'66666,67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
|
||||
self.assertEqual(u'100000,0', Template('{{ f|floatformat }}').render(self.ctxt))
|
||||
self.assertEqual(u'10:15:48', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual(u'31/12/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual(u'31/12/2009 20:50', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual('66666,666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual('99999,999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual('31 de desembre de 2009', Template('{{ d }}').render(self.ctxt))
|
||||
self.assertEqual('31 de desembre de 2009 a les 20:50', Template('{{ dt }}').render(self.ctxt))
|
||||
self.assertEqual('66666,67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
|
||||
self.assertEqual('100000,0', Template('{{ f|floatformat }}').render(self.ctxt))
|
||||
self.assertEqual('10:15:48', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual('31/12/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual('31/12/2009 20:50', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual(date_format(datetime.datetime.now(), "DATE_FORMAT"), Template('{% now "DATE_FORMAT" %}').render(self.ctxt))
|
||||
|
||||
form4 = I18nForm({
|
||||
'decimal_field': u'66666,666',
|
||||
'float_field': u'99999,999',
|
||||
'date_field': u'31/12/2009',
|
||||
'datetime_field': u'31/12/2009 20:50',
|
||||
'time_field': u'20:50',
|
||||
'integer_field': u'1234',
|
||||
'decimal_field': '66666,666',
|
||||
'float_field': '99999,999',
|
||||
'date_field': '31/12/2009',
|
||||
'datetime_field': '31/12/2009 20:50',
|
||||
'time_field': '20:50',
|
||||
'integer_field': '1234',
|
||||
})
|
||||
self.assertEqual(True, form4.is_valid())
|
||||
self.assertEqual(decimal.Decimal('66666.666'), form4.cleaned_data['decimal_field'])
|
||||
|
|
@ -524,21 +524,21 @@ class FormattingTests(TestCase):
|
|||
self.assertEqual(1234, form4.cleaned_data['integer_field'])
|
||||
|
||||
form5 = SelectDateForm({
|
||||
'date_field_month': u'12',
|
||||
'date_field_day': u'31',
|
||||
'date_field_year': u'2009'
|
||||
'date_field_month': '12',
|
||||
'date_field_day': '31',
|
||||
'date_field_year': '2009'
|
||||
})
|
||||
self.assertEqual(True, form5.is_valid())
|
||||
self.assertEqual(datetime.date(2009, 12, 31), form5.cleaned_data['date_field'])
|
||||
self.assertHTMLEqual(
|
||||
u'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>',
|
||||
'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>',
|
||||
SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31))
|
||||
)
|
||||
|
||||
# Russian locale (with E as month)
|
||||
with translation.override('ru', deactivate=True):
|
||||
self.assertHTMLEqual(
|
||||
u'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">\u042f\u043d\u0432\u0430\u0440\u044c</option>\n<option value="2">\u0424\u0435\u0432\u0440\u0430\u043b\u044c</option>\n<option value="3">\u041c\u0430\u0440\u0442</option>\n<option value="4">\u0410\u043f\u0440\u0435\u043b\u044c</option>\n<option value="5">\u041c\u0430\u0439</option>\n<option value="6">\u0418\u044e\u043d\u044c</option>\n<option value="7">\u0418\u044e\u043b\u044c</option>\n<option value="8">\u0410\u0432\u0433\u0443\u0441\u0442</option>\n<option value="9">\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c</option>\n<option value="10">\u041e\u043a\u0442\u044f\u0431\u0440\u044c</option>\n<option value="11">\u041d\u043e\u044f\u0431\u0440\u044c</option>\n<option value="12" selected="selected">\u0414\u0435\u043a\u0430\u0431\u0440\u044c</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>',
|
||||
'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">\u042f\u043d\u0432\u0430\u0440\u044c</option>\n<option value="2">\u0424\u0435\u0432\u0440\u0430\u043b\u044c</option>\n<option value="3">\u041c\u0430\u0440\u0442</option>\n<option value="4">\u0410\u043f\u0440\u0435\u043b\u044c</option>\n<option value="5">\u041c\u0430\u0439</option>\n<option value="6">\u0418\u044e\u043d\u044c</option>\n<option value="7">\u0418\u044e\u043b\u044c</option>\n<option value="8">\u0410\u0432\u0433\u0443\u0441\u0442</option>\n<option value="9">\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c</option>\n<option value="10">\u041e\u043a\u0442\u044f\u0431\u0440\u044c</option>\n<option value="11">\u041d\u043e\u044f\u0431\u0440\u044c</option>\n<option value="12" selected="selected">\u0414\u0435\u043a\u0430\u0431\u0440\u044c</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>',
|
||||
SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31))
|
||||
)
|
||||
|
||||
|
|
@ -547,45 +547,45 @@ class FormattingTests(TestCase):
|
|||
self.assertEqual('N j, Y', get_format('DATE_FORMAT'))
|
||||
self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK'))
|
||||
self.assertEqual('.', get_format('DECIMAL_SEPARATOR'))
|
||||
self.assertEqual(u'Dec. 31, 2009', date_format(self.d))
|
||||
self.assertEqual(u'December 2009', date_format(self.d, 'YEAR_MONTH_FORMAT'))
|
||||
self.assertEqual(u'12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT'))
|
||||
self.assertEqual(u'No localizable', localize('No localizable'))
|
||||
self.assertEqual('Dec. 31, 2009', date_format(self.d))
|
||||
self.assertEqual('December 2009', date_format(self.d, 'YEAR_MONTH_FORMAT'))
|
||||
self.assertEqual('12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT'))
|
||||
self.assertEqual('No localizable', localize('No localizable'))
|
||||
|
||||
settings.USE_THOUSAND_SEPARATOR = True
|
||||
self.assertEqual(u'66,666.666', localize(self.n))
|
||||
self.assertEqual(u'99,999.999', localize(self.f))
|
||||
self.assertEqual(u'10,000', localize(self.l))
|
||||
self.assertEqual('66,666.666', localize(self.n))
|
||||
self.assertEqual('99,999.999', localize(self.f))
|
||||
self.assertEqual('10,000', localize(self.l))
|
||||
|
||||
settings.USE_THOUSAND_SEPARATOR = False
|
||||
self.assertEqual(u'66666.666', localize(self.n))
|
||||
self.assertEqual(u'99999.999', localize(self.f))
|
||||
self.assertEqual(u'10000', localize(self.l))
|
||||
self.assertEqual(u'Dec. 31, 2009', localize(self.d))
|
||||
self.assertEqual(u'Dec. 31, 2009, 8:50 p.m.', localize(self.dt))
|
||||
self.assertEqual('66666.666', localize(self.n))
|
||||
self.assertEqual('99999.999', localize(self.f))
|
||||
self.assertEqual('10000', localize(self.l))
|
||||
self.assertEqual('Dec. 31, 2009', localize(self.d))
|
||||
self.assertEqual('Dec. 31, 2009, 8:50 p.m.', localize(self.dt))
|
||||
|
||||
settings.USE_THOUSAND_SEPARATOR = True
|
||||
self.assertEqual(u'66,666.666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual(u'99,999.999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual(u'10,000', Template('{{ l }}').render(self.ctxt))
|
||||
self.assertEqual('66,666.666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual('99,999.999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual('10,000', Template('{{ l }}').render(self.ctxt))
|
||||
|
||||
settings.USE_THOUSAND_SEPARATOR = False
|
||||
self.assertEqual(u'66666.666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual(u'99999.999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual(u'Dec. 31, 2009', Template('{{ d }}').render(self.ctxt))
|
||||
self.assertEqual(u'Dec. 31, 2009, 8:50 p.m.', Template('{{ dt }}').render(self.ctxt))
|
||||
self.assertEqual(u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
|
||||
self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt))
|
||||
self.assertEqual(u'12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual(u'12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual('66666.666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual('99999.999', Template('{{ f }}').render(self.ctxt))
|
||||
self.assertEqual('Dec. 31, 2009', Template('{{ d }}').render(self.ctxt))
|
||||
self.assertEqual('Dec. 31, 2009, 8:50 p.m.', Template('{{ dt }}').render(self.ctxt))
|
||||
self.assertEqual('66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt))
|
||||
self.assertEqual('100000.0', Template('{{ f|floatformat }}').render(self.ctxt))
|
||||
self.assertEqual('12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt))
|
||||
self.assertEqual('12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt))
|
||||
|
||||
form5 = I18nForm({
|
||||
'decimal_field': u'66666.666',
|
||||
'float_field': u'99999.999',
|
||||
'date_field': u'12/31/2009',
|
||||
'datetime_field': u'12/31/2009 20:50',
|
||||
'time_field': u'20:50',
|
||||
'integer_field': u'1234',
|
||||
'decimal_field': '66666.666',
|
||||
'float_field': '99999.999',
|
||||
'date_field': '12/31/2009',
|
||||
'datetime_field': '12/31/2009 20:50',
|
||||
'time_field': '20:50',
|
||||
'integer_field': '1234',
|
||||
})
|
||||
self.assertEqual(True, form5.is_valid())
|
||||
self.assertEqual(decimal.Decimal('66666.666'), form5.cleaned_data['decimal_field'])
|
||||
|
|
@ -596,14 +596,14 @@ class FormattingTests(TestCase):
|
|||
self.assertEqual(1234, form5.cleaned_data['integer_field'])
|
||||
|
||||
form6 = SelectDateForm({
|
||||
'date_field_month': u'12',
|
||||
'date_field_day': u'31',
|
||||
'date_field_year': u'2009'
|
||||
'date_field_month': '12',
|
||||
'date_field_day': '31',
|
||||
'date_field_year': '2009'
|
||||
})
|
||||
self.assertEqual(True, form6.is_valid())
|
||||
self.assertEqual(datetime.date(2009, 12, 31), form6.cleaned_data['date_field'])
|
||||
self.assertHTMLEqual(
|
||||
u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12" selected="selected">December</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>',
|
||||
'<select name="mydate_month" id="id_mydate_month">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12" selected="selected">December</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>',
|
||||
SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31))
|
||||
)
|
||||
|
||||
|
|
@ -613,9 +613,9 @@ class FormattingTests(TestCase):
|
|||
"""
|
||||
with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True):
|
||||
with translation.override('de-at', deactivate=True):
|
||||
self.assertEqual(u'66.666,666', Template('{{ n }}').render(self.ctxt))
|
||||
self.assertEqual('66.666,666', Template('{{ n }}').render(self.ctxt))
|
||||
with translation.override('es-us', deactivate=True):
|
||||
self.assertEqual(u'31 de diciembre de 2009', date_format(self.d))
|
||||
self.assertEqual('31 de diciembre de 2009', date_format(self.d))
|
||||
|
||||
def test_localized_input(self):
|
||||
"""
|
||||
|
|
@ -624,7 +624,7 @@ class FormattingTests(TestCase):
|
|||
settings.USE_L10N = True
|
||||
with translation.override('de-at', deactivate=True):
|
||||
form6 = CompanyForm({
|
||||
'name': u'acme',
|
||||
'name': 'acme',
|
||||
'date_added': datetime.datetime(2009, 12, 31, 6, 0, 0),
|
||||
'cents_paid': decimal.Decimal('59.47'),
|
||||
'products_delivered': 12000,
|
||||
|
|
@ -632,13 +632,13 @@ class FormattingTests(TestCase):
|
|||
self.assertEqual(True, form6.is_valid())
|
||||
self.assertHTMLEqual(
|
||||
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>\n<li><label for="id_cents_paid">Cents paid:</label> <input type="text" name="cents_paid" value="59,47" id="id_cents_paid" /></li>\n<li><label for="id_products_delivered">Products delivered:</label> <input type="text" name="products_delivered" value="12000" id="id_products_delivered" /></li>'
|
||||
'<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>\n<li><label for="id_cents_paid">Cents paid:</label> <input type="text" name="cents_paid" value="59,47" id="id_cents_paid" /></li>\n<li><label for="id_products_delivered">Products delivered:</label> <input type="text" name="products_delivered" value="12000" id="id_products_delivered" /></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'])
|
||||
with self.settings(USE_THOUSAND_SEPARATOR=True):
|
||||
# Checking for the localized "products_delivered" field
|
||||
self.assertTrue(u'<input type="text" name="products_delivered" value="12.000" id="id_products_delivered" />' in form6.as_ul())
|
||||
self.assertTrue('<input type="text" name="products_delivered" value="12.000" id="id_products_delivered" />' in form6.as_ul())
|
||||
|
||||
def test_iter_format_modules(self):
|
||||
"""
|
||||
|
|
@ -826,9 +826,9 @@ class MiscTests(TestCase):
|
|||
t_sing = Template("{% load i18n %}{% blocktrans %}The result was {{ percent }}%{% endblocktrans %}")
|
||||
t_plur = Template("{% load i18n %}{% blocktrans count num as number %}{{ percent }}% represents {{ num }} object{% plural %}{{ percent }}% represents {{ num }} objects{% endblocktrans %}")
|
||||
with translation.override('de'):
|
||||
self.assertEqual(t_sing.render(Context({'percent': 42})), u'Das Ergebnis war 42%')
|
||||
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 1})), u'42% stellt 1 Objekt dar')
|
||||
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 4})), u'42% stellt 4 Objekte dar')
|
||||
self.assertEqual(t_sing.render(Context({'percent': 42})), 'Das Ergebnis war 42%')
|
||||
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 1})), '42% stellt 1 Objekt dar')
|
||||
self.assertEqual(t_plur.render(Context({'percent': 42, 'num': 4})), '42% stellt 4 Objekte dar')
|
||||
|
||||
|
||||
class ResolutionOrderI18NTests(TestCase):
|
||||
|
|
@ -895,9 +895,9 @@ class TestModels(TestCase):
|
|||
|
||||
def test_safestr(self):
|
||||
c = Company(cents_paid=12, products_delivered=1)
|
||||
c.name = SafeUnicode(u'Iñtërnâtiônàlizætiøn1')
|
||||
c.name = SafeUnicode('Iñtërnâtiônàlizætiøn1')
|
||||
c.save()
|
||||
c.name = SafeString(u'Iñtërnâtiônàlizætiøn1'.encode('utf-8'))
|
||||
c.name = SafeString('Iñtërnâtiônàlizætiøn1'.encode('utf-8'))
|
||||
c.save()
|
||||
|
||||
|
||||
|
|
@ -905,7 +905,7 @@ class TestLanguageInfo(TestCase):
|
|||
def test_localized_language_info(self):
|
||||
li = get_language_info('de')
|
||||
self.assertEqual(li['code'], 'de')
|
||||
self.assertEqual(li['name_local'], u'Deutsch')
|
||||
self.assertEqual(li['name_local'], 'Deutsch')
|
||||
self.assertEqual(li['name'], 'German')
|
||||
self.assertEqual(li['bidi'], False)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.forms.models import inlineformset_factory
|
||||
from django.test import TestCase
|
||||
|
|
@ -13,13 +13,13 @@ class DeletionTests(TestCase):
|
|||
poet = Poet.objects.create(name='test')
|
||||
poem = poet.poem_set.create(name='test poem')
|
||||
data = {
|
||||
'poem_set-TOTAL_FORMS': u'1',
|
||||
'poem_set-INITIAL_FORMS': u'1',
|
||||
'poem_set-MAX_NUM_FORMS': u'0',
|
||||
'poem_set-TOTAL_FORMS': '1',
|
||||
'poem_set-INITIAL_FORMS': '1',
|
||||
'poem_set-MAX_NUM_FORMS': '0',
|
||||
'poem_set-0-id': str(poem.pk),
|
||||
'poem_set-0-poet': str(poet.pk),
|
||||
'poem_set-0-name': u'test',
|
||||
'poem_set-0-DELETE': u'on',
|
||||
'poem_set-0-name': 'test',
|
||||
'poem_set-0-DELETE': 'on',
|
||||
}
|
||||
formset = PoemFormSet(data, instance=poet)
|
||||
formset.save()
|
||||
|
|
@ -34,12 +34,12 @@ class DeletionTests(TestCase):
|
|||
PoemFormSet = inlineformset_factory(Poet, Poem, can_delete=True)
|
||||
poet = Poet.objects.create(name='test')
|
||||
data = {
|
||||
'poem_set-TOTAL_FORMS': u'1',
|
||||
'poem_set-INITIAL_FORMS': u'0',
|
||||
'poem_set-MAX_NUM_FORMS': u'0',
|
||||
'poem_set-0-id': u'',
|
||||
'poem_set-0-poem': u'1',
|
||||
'poem_set-0-name': u'x' * 1000,
|
||||
'poem_set-TOTAL_FORMS': '1',
|
||||
'poem_set-INITIAL_FORMS': '0',
|
||||
'poem_set-MAX_NUM_FORMS': '0',
|
||||
'poem_set-0-id': '',
|
||||
'poem_set-0-poem': '1',
|
||||
'poem_set-0-name': 'x' * 1000,
|
||||
}
|
||||
formset = PoemFormSet(data, instance=poet)
|
||||
# Make sure this form doesn't pass validation.
|
||||
|
|
@ -63,12 +63,12 @@ class DeletionTests(TestCase):
|
|||
poet = Poet.objects.create(name='test')
|
||||
poem = poet.poem_set.create(name='test poem')
|
||||
data = {
|
||||
'poem_set-TOTAL_FORMS': u'1',
|
||||
'poem_set-INITIAL_FORMS': u'1',
|
||||
'poem_set-MAX_NUM_FORMS': u'0',
|
||||
'poem_set-TOTAL_FORMS': '1',
|
||||
'poem_set-INITIAL_FORMS': '1',
|
||||
'poem_set-MAX_NUM_FORMS': '0',
|
||||
'poem_set-0-id': unicode(poem.id),
|
||||
'poem_set-0-poem': unicode(poem.id),
|
||||
'poem_set-0-name': u'x' * 1000,
|
||||
'poem_set-0-name': 'x' * 1000,
|
||||
}
|
||||
formset = PoemFormSet(data, instance=poet)
|
||||
# Make sure this form doesn't pass validation.
|
||||
|
|
@ -90,14 +90,14 @@ class DeletionTests(TestCase):
|
|||
"""
|
||||
# exclude some required field from the forms
|
||||
ChildFormSet = inlineformset_factory(School, Child, exclude=['father', 'mother'])
|
||||
school = School.objects.create(name=u'test')
|
||||
mother = Parent.objects.create(name=u'mother')
|
||||
father = Parent.objects.create(name=u'father')
|
||||
school = School.objects.create(name='test')
|
||||
mother = Parent.objects.create(name='mother')
|
||||
father = Parent.objects.create(name='father')
|
||||
data = {
|
||||
'child_set-TOTAL_FORMS': u'1',
|
||||
'child_set-INITIAL_FORMS': u'0',
|
||||
'child_set-MAX_NUM_FORMS': u'0',
|
||||
'child_set-0-name': u'child',
|
||||
'child_set-TOTAL_FORMS': '1',
|
||||
'child_set-INITIAL_FORMS': '0',
|
||||
'child_set-MAX_NUM_FORMS': '0',
|
||||
'child_set-0-name': 'child',
|
||||
}
|
||||
formset = ChildFormSet(data, instance=school)
|
||||
self.assertEqual(formset.is_valid(), True)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
||||
|
|
@ -11,7 +13,7 @@ class Reporter(models.Model):
|
|||
unique_together = ('first_name', 'last_name')
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s %s" % (self.first_name, self.last_name)
|
||||
return "%s %s" % (self.first_name, self.last_name)
|
||||
|
||||
class Article(models.Model):
|
||||
headline = models.CharField(max_length=100)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import,unicode_literals
|
||||
|
||||
from functools import update_wrapper
|
||||
|
||||
|
|
@ -125,12 +125,12 @@ class IntrospectionTests(TestCase):
|
|||
def test_get_key_columns(self):
|
||||
cursor = connection.cursor()
|
||||
key_columns = connection.introspection.get_key_columns(cursor, Article._meta.db_table)
|
||||
self.assertEqual(key_columns, [(u'reporter_id', Reporter._meta.db_table, u'id')])
|
||||
self.assertEqual(key_columns, [('reporter_id', Reporter._meta.db_table, 'id')])
|
||||
|
||||
def test_get_primary_key_column(self):
|
||||
cursor = connection.cursor()
|
||||
primary_key_column = connection.introspection.get_primary_key_column(cursor, Article._meta.db_table)
|
||||
self.assertEqual(primary_key_column, u'id')
|
||||
self.assertEqual(primary_key_column, 'id')
|
||||
|
||||
def test_get_indexes(self):
|
||||
cursor = connection.cursor()
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.ar.forms import (ARProvinceSelect,
|
||||
ARPostalCodeField, ARDNIField, ARCUITField)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class ARLocalFlavorTests(SimpleTestCase):
|
||||
def test_ARProvinceSelect(self):
|
||||
f = ARProvinceSelect()
|
||||
out = u'''<select name="provincias">
|
||||
out = '''<select name="provincias">
|
||||
<option value="B">Buenos Aires</option>
|
||||
<option value="K">Catamarca</option>
|
||||
<option value="H">Chaco</option>
|
||||
|
|
@ -36,16 +38,16 @@ class ARLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('provincias', 'A'), out)
|
||||
|
||||
def test_ARPostalCodeField(self):
|
||||
error_format = [u'Enter a postal code in the format NNNN or ANNNNAAA.']
|
||||
error_atmost = [u'Ensure this value has at most 8 characters (it has 9).']
|
||||
error_atleast = [u'Ensure this value has at least 4 characters (it has 3).']
|
||||
error_format = ['Enter a postal code in the format NNNN or ANNNNAAA.']
|
||||
error_atmost = ['Ensure this value has at most 8 characters (it has 9).']
|
||||
error_atleast = ['Ensure this value has at least 4 characters (it has 3).']
|
||||
valid = {
|
||||
'5000': '5000',
|
||||
'C1064AAB': 'C1064AAB',
|
||||
'c1064AAB': 'C1064AAB',
|
||||
'C1064aab': 'C1064AAB',
|
||||
'4400': '4400',
|
||||
u'C1064AAB': 'C1064AAB',
|
||||
'C1064AAB': 'C1064AAB',
|
||||
}
|
||||
invalid = {
|
||||
'C1064AABB': error_atmost + error_format,
|
||||
|
|
@ -58,13 +60,13 @@ class ARLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ARPostalCodeField, valid, invalid)
|
||||
|
||||
def test_ARDNIField(self):
|
||||
error_length = [u'This field requires 7 or 8 digits.']
|
||||
error_digitsonly = [u'This field requires only numbers.']
|
||||
error_length = ['This field requires 7 or 8 digits.']
|
||||
error_digitsonly = ['This field requires only numbers.']
|
||||
valid = {
|
||||
'20123456': '20123456',
|
||||
'20.123.456': '20123456',
|
||||
u'20123456': '20123456',
|
||||
u'20.123.456': '20123456',
|
||||
'20123456': '20123456',
|
||||
'20.123.456': '20123456',
|
||||
'20.123456': '20123456',
|
||||
'9123456': '9123456',
|
||||
'9.123.456': '9123456',
|
||||
|
|
@ -77,11 +79,11 @@ class ARLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ARDNIField, valid, invalid)
|
||||
|
||||
def test_ARCUITField(self):
|
||||
error_format = [u'Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.']
|
||||
error_invalid = [u'Invalid CUIT.']
|
||||
error_format = ['Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format.']
|
||||
error_invalid = ['Invalid CUIT.']
|
||||
valid = {
|
||||
'20-10123456-9': '20-10123456-9',
|
||||
u'20-10123456-9': '20-10123456-9',
|
||||
'20-10123456-9': '20-10123456-9',
|
||||
'27-10345678-4': '27-10345678-4',
|
||||
'20101234569': '20-10123456-9',
|
||||
'27103456784': '27-10345678-4',
|
||||
|
|
@ -93,6 +95,6 @@ class ARLocalFlavorTests(SimpleTestCase):
|
|||
'20-10123456-': error_format,
|
||||
'20-10123456-5': error_invalid,
|
||||
'27-10345678-1': error_invalid,
|
||||
u'27-10345678-1': error_invalid,
|
||||
'27-10345678-1': error_invalid,
|
||||
}
|
||||
self.assertFieldOutput(ARCUITField, valid, invalid)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.at.forms import (ATZipCodeField, ATStateSelect,
|
||||
ATSocialSecurityNumberField)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class ATLocalFlavorTests(SimpleTestCase):
|
||||
def test_ATStateSelect(self):
|
||||
f = ATStateSelect()
|
||||
out = u'''<select name="bundesland">
|
||||
out = '''<select name="bundesland">
|
||||
<option value="BL">Burgenland</option>
|
||||
<option value="KA">Carinthia</option>
|
||||
<option value="NO">Lower Austria</option>
|
||||
|
|
@ -21,7 +23,7 @@ class ATLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('bundesland', 'WI'), out)
|
||||
|
||||
def test_ATZipCodeField(self):
|
||||
error_format = [u'Enter a zip code in the format XXXX.']
|
||||
error_format = ['Enter a zip code in the format XXXX.']
|
||||
valid = {
|
||||
'1150': '1150',
|
||||
'4020': '4020',
|
||||
|
|
@ -36,7 +38,7 @@ class ATLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ATZipCodeField, valid, invalid)
|
||||
|
||||
def test_ATSocialSecurityNumberField(self):
|
||||
error_format = [u'Enter a valid Austrian Social Security Number in XXXX XXXXXX format.']
|
||||
error_format = ['Enter a valid Austrian Social Security Number in XXXX XXXXXX format.']
|
||||
valid = {
|
||||
'1237 010180': '1237 010180',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import re
|
||||
|
||||
|
|
@ -44,9 +44,9 @@ class AULocalflavorTests(SimpleTestCase):
|
|||
form = AustralianPlaceForm({'state':'NSW', 'name':'Wollongong'})
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(
|
||||
form.errors['state_required'], [u'This field is required.'])
|
||||
form.errors['state_required'], ['This field is required.'])
|
||||
self.assertEqual(
|
||||
form.errors['postcode_required'], [u'This field is required.'])
|
||||
form.errors['postcode_required'], ['This field is required.'])
|
||||
|
||||
def test_field_blank_option(self):
|
||||
""" Test that the empty option is there. """
|
||||
|
|
@ -66,7 +66,7 @@ class AULocalflavorTests(SimpleTestCase):
|
|||
|
||||
def test_AUStateSelect(self):
|
||||
f = AUStateSelect()
|
||||
out = u'''<select name="state">
|
||||
out = '''<select name="state">
|
||||
<option value="ACT">Australian Capital Territory</option>
|
||||
<option value="NSW" selected="selected">New South Wales</option>
|
||||
<option value="NT">Northern Territory</option>
|
||||
|
|
@ -79,19 +79,19 @@ class AULocalflavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('state', 'NSW'), out)
|
||||
|
||||
def test_AUPostCodeField(self):
|
||||
error_format = [u'Enter a 4 digit postcode.']
|
||||
error_format = ['Enter a 4 digit postcode.']
|
||||
valid = {
|
||||
'1234': '1234',
|
||||
'2000': '2000',
|
||||
}
|
||||
invalid = {
|
||||
'abcd': error_format,
|
||||
'20001': [u'Ensure this value has at most 4 characters (it has 5).'] + error_format,
|
||||
'20001': ['Ensure this value has at most 4 characters (it has 5).'] + error_format,
|
||||
}
|
||||
self.assertFieldOutput(AUPostCodeField, valid, invalid)
|
||||
|
||||
def test_AUPhoneNumberField(self):
|
||||
error_format = [u'Phone numbers must contain 10 digits.']
|
||||
error_format = ['Phone numbers must contain 10 digits.']
|
||||
valid = {
|
||||
'1234567890': '1234567890',
|
||||
'0213456789': '0213456789',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.be.forms import (BEPostalCodeField,
|
||||
BEPhoneNumberField, BERegionSelect, BEProvinceSelect)
|
||||
|
||||
|
|
@ -6,10 +8,10 @@ from django.test import SimpleTestCase
|
|||
|
||||
class BELocalFlavorTests(SimpleTestCase):
|
||||
def test_BEPostalCodeField(self):
|
||||
error_format = [u'Enter a valid postal code in the range and format 1XXX - 9XXX.']
|
||||
error_format = ['Enter a valid postal code in the range and format 1XXX - 9XXX.']
|
||||
valid = {
|
||||
u'1451': '1451',
|
||||
u'2540': '2540',
|
||||
'1451': '1451',
|
||||
'2540': '2540',
|
||||
}
|
||||
invalid = {
|
||||
'0287': error_format,
|
||||
|
|
@ -28,17 +30,17 @@ class BELocalFlavorTests(SimpleTestCase):
|
|||
'0xxxxxxxx or 04xxxxxxxx.')
|
||||
]
|
||||
valid = {
|
||||
u'01 234 56 78': '01 234 56 78',
|
||||
u'01/234.56.78': '01/234.56.78',
|
||||
u'01.234.56.78': '01.234.56.78',
|
||||
u'012 34 56 78': '012 34 56 78',
|
||||
u'012/34.56.78': '012/34.56.78',
|
||||
u'012.34.56.78': '012.34.56.78',
|
||||
u'0412 34 56 78': '0412 34 56 78',
|
||||
u'0412/34.56.78': '0412/34.56.78',
|
||||
u'0412.34.56.78': '0412.34.56.78',
|
||||
u'012345678': '012345678',
|
||||
u'0412345678': '0412345678',
|
||||
'01 234 56 78': '01 234 56 78',
|
||||
'01/234.56.78': '01/234.56.78',
|
||||
'01.234.56.78': '01.234.56.78',
|
||||
'012 34 56 78': '012 34 56 78',
|
||||
'012/34.56.78': '012/34.56.78',
|
||||
'012.34.56.78': '012.34.56.78',
|
||||
'0412 34 56 78': '0412 34 56 78',
|
||||
'0412/34.56.78': '0412/34.56.78',
|
||||
'0412.34.56.78': '0412.34.56.78',
|
||||
'012345678': '012345678',
|
||||
'0412345678': '0412345678',
|
||||
}
|
||||
invalid = {
|
||||
'01234567': error_format,
|
||||
|
|
@ -54,7 +56,7 @@ class BELocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_BERegionSelect(self):
|
||||
f = BERegionSelect()
|
||||
out = u'''<select name="regions">
|
||||
out = '''<select name="regions">
|
||||
<option value="BRU">Brussels Capital Region</option>
|
||||
<option value="VLG" selected="selected">Flemish Region</option>
|
||||
<option value="WAL">Wallonia</option>
|
||||
|
|
@ -63,7 +65,7 @@ class BELocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_BEProvinceSelect(self):
|
||||
f = BEProvinceSelect()
|
||||
out = u'''<select name="provinces">
|
||||
out = '''<select name="provinces">
|
||||
<option value="VAN">Antwerp</option>
|
||||
<option value="BRU">Brussels</option>
|
||||
<option value="VOV">East Flanders</option>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.br.forms import (BRZipCodeField,
|
||||
BRCNPJField, BRCPFField, BRPhoneNumberField, BRStateSelect,
|
||||
BRStateChoiceField)
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class BRLocalFlavorTests(SimpleTestCase):
|
||||
def test_BRZipCodeField(self):
|
||||
error_format = [u'Enter a zip code in the format XXXXX-XXX.']
|
||||
error_format = ['Enter a zip code in the format XXXXX-XXX.']
|
||||
valid = {
|
||||
'12345-123': '12345-123',
|
||||
}
|
||||
|
|
@ -21,8 +23,8 @@ class BRLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(BRZipCodeField, valid, invalid)
|
||||
|
||||
def test_BRCNPJField(self):
|
||||
error_format = [u'Invalid CNPJ number.']
|
||||
error_numbersonly = [u'This field requires only numbers.']
|
||||
error_format = ['Invalid CNPJ number.']
|
||||
error_numbersonly = ['This field requires only numbers.']
|
||||
valid = {
|
||||
'64.132.916/0001-88': '64.132.916/0001-88',
|
||||
'64-132-916/0001-88': '64-132-916/0001-88',
|
||||
|
|
@ -37,11 +39,11 @@ class BRLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(BRCNPJField, valid, invalid)
|
||||
|
||||
def test_BRCPFField(self):
|
||||
error_format = [u'Invalid CPF number.']
|
||||
error_numbersonly = [u'This field requires only numbers.']
|
||||
error_atmost_chars = [u'Ensure this value has at most 14 characters (it has 15).']
|
||||
error_atleast_chars = [u'Ensure this value has at least 11 characters (it has 10).']
|
||||
error_atmost = [u'This field requires at most 11 digits or 14 characters.']
|
||||
error_format = ['Invalid CPF number.']
|
||||
error_numbersonly = ['This field requires only numbers.']
|
||||
error_atmost_chars = ['Ensure this value has at most 14 characters (it has 15).']
|
||||
error_atleast_chars = ['Ensure this value has at least 11 characters (it has 10).']
|
||||
error_atmost = ['This field requires at most 11 digits or 14 characters.']
|
||||
valid = {
|
||||
'663.256.017-26': '663.256.017-26',
|
||||
'66325601726': '66325601726',
|
||||
|
|
@ -62,21 +64,21 @@ class BRLocalFlavorTests(SimpleTestCase):
|
|||
def test_BRPhoneNumberField(self):
|
||||
# TODO: this doesn't test for any invalid inputs.
|
||||
valid = {
|
||||
'41-3562-3464': u'41-3562-3464',
|
||||
'4135623464': u'41-3562-3464',
|
||||
'41 3562-3464': u'41-3562-3464',
|
||||
'41 3562 3464': u'41-3562-3464',
|
||||
'(41) 3562 3464': u'41-3562-3464',
|
||||
'41.3562.3464': u'41-3562-3464',
|
||||
'41.3562-3464': u'41-3562-3464',
|
||||
' (41) 3562.3464': u'41-3562-3464',
|
||||
'41-3562-3464': '41-3562-3464',
|
||||
'4135623464': '41-3562-3464',
|
||||
'41 3562-3464': '41-3562-3464',
|
||||
'41 3562 3464': '41-3562-3464',
|
||||
'(41) 3562 3464': '41-3562-3464',
|
||||
'41.3562.3464': '41-3562-3464',
|
||||
'41.3562-3464': '41-3562-3464',
|
||||
' (41) 3562.3464': '41-3562-3464',
|
||||
}
|
||||
invalid = {}
|
||||
self.assertFieldOutput(BRPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_BRStateSelect(self):
|
||||
f = BRStateSelect()
|
||||
out = u'''<select name="states">
|
||||
out = '''<select name="states">
|
||||
<option value="AC">Acre</option>
|
||||
<option value="AL">Alagoas</option>
|
||||
<option value="AP">Amap\xe1</option>
|
||||
|
|
@ -108,7 +110,7 @@ class BRLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('states', 'PR'), out)
|
||||
|
||||
def test_BRStateChoiceField(self):
|
||||
error_invalid = [u'Select a valid brazilian state. That state is not one of the available states.']
|
||||
error_invalid = ['Select a valid brazilian state. That state is not one of the available states.']
|
||||
valid = {
|
||||
'AC': 'AC',
|
||||
'AL': 'AL',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import warnings
|
||||
|
||||
from django.contrib.localflavor.ca.forms import (CAPostalCodeField,
|
||||
|
|
@ -21,7 +23,7 @@ class CALocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_CAProvinceSelect(self):
|
||||
f = CAProvinceSelect()
|
||||
out = u'''<select name="province">
|
||||
out = '''<select name="province">
|
||||
<option value="AB" selected="selected">Alberta</option>
|
||||
<option value="BC">British Columbia</option>
|
||||
<option value="MB">Manitoba</option>
|
||||
|
|
@ -39,7 +41,7 @@ class CALocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('province', 'AB'), out)
|
||||
|
||||
def test_CAPostalCodeField(self):
|
||||
error_format = [u'Enter a postal code in the format XXX XXX.']
|
||||
error_format = ['Enter a postal code in the format XXX XXX.']
|
||||
valid = {
|
||||
'T2S 2H7': 'T2S 2H7',
|
||||
'T2S 2W7': 'T2S 2W7',
|
||||
|
|
@ -69,7 +71,7 @@ class CALocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(CAPostalCodeField, valid, invalid)
|
||||
|
||||
def test_CAPhoneNumberField(self):
|
||||
error_format = [u'Phone numbers must be in XXX-XXX-XXXX format.']
|
||||
error_format = ['Phone numbers must be in XXX-XXX-XXXX format.']
|
||||
valid = {
|
||||
'403-555-1212': '403-555-1212',
|
||||
'4035551212': '403-555-1212',
|
||||
|
|
@ -87,7 +89,7 @@ class CALocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(CAPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_CAProvinceField(self):
|
||||
error_format = [u'Enter a Canadian province or territory.']
|
||||
error_format = ['Enter a Canadian province or territory.']
|
||||
valid = {
|
||||
'ab': 'AB',
|
||||
'BC': 'BC',
|
||||
|
|
@ -101,7 +103,7 @@ class CALocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(CAProvinceField, valid, invalid)
|
||||
|
||||
def test_CASocialInsuranceField(self):
|
||||
error_format = [u'Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format.']
|
||||
error_format = ['Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format.']
|
||||
valid = {
|
||||
'046-454-286': '046-454-286',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.ch.forms import (CHZipCodeField,
|
||||
CHPhoneNumberField, CHIdentityCardNumberField, CHStateSelect)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class CHLocalFlavorTests(SimpleTestCase):
|
||||
def test_CHStateSelect(self):
|
||||
f = CHStateSelect()
|
||||
out = u'''<select name="state">
|
||||
out = '''<select name="state">
|
||||
<option value="AG" selected="selected">Aargau</option>
|
||||
<option value="AI">Appenzell Innerrhoden</option>
|
||||
<option value="AR">Appenzell Ausserrhoden</option>
|
||||
|
|
@ -38,7 +40,7 @@ class CHLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('state', 'AG'), out)
|
||||
|
||||
def test_CHZipCodeField(self):
|
||||
error_format = [u'Enter a zip code in the format XXXX.']
|
||||
error_format = ['Enter a zip code in the format XXXX.']
|
||||
valid = {
|
||||
'1234': '1234',
|
||||
'0000': '0000',
|
||||
|
|
@ -50,7 +52,7 @@ class CHLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(CHZipCodeField, valid, invalid)
|
||||
|
||||
def test_CHPhoneNumberField(self):
|
||||
error_format = [u'Phone numbers must be in 0XX XXX XX XX format.']
|
||||
error_format = ['Phone numbers must be in 0XX XXX XX XX format.']
|
||||
valid = {
|
||||
'012 345 67 89': '012 345 67 89',
|
||||
'0123456789': '012 345 67 89',
|
||||
|
|
@ -62,7 +64,7 @@ class CHLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(CHPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_CHIdentityCardNumberField(self):
|
||||
error_format = [u'Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format.']
|
||||
error_format = ['Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format.']
|
||||
valid = {
|
||||
'C1234567<0': 'C1234567<0',
|
||||
'2123456700': '2123456700',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.cl.forms import CLRutField, CLRegionSelect
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
|
@ -6,7 +8,7 @@ from django.test import SimpleTestCase
|
|||
class CLLocalFlavorTests(SimpleTestCase):
|
||||
def test_CLRegionSelect(self):
|
||||
f = CLRegionSelect()
|
||||
out = u'''<select name="foo">
|
||||
out = '''<select name="foo">
|
||||
<option value="RM">Regi\xf3n Metropolitana de Santiago</option>
|
||||
<option value="I">Regi\xf3n de Tarapac\xe1</option>
|
||||
<option value="II">Regi\xf3n de Antofagasta</option>
|
||||
|
|
@ -26,8 +28,8 @@ class CLLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('foo', 'bar'), out)
|
||||
|
||||
def test_CLRutField(self):
|
||||
error_invalid = [u'The Chilean RUT is not valid.']
|
||||
error_format = [u'Enter a valid Chilean RUT. The format is XX.XXX.XXX-X.']
|
||||
error_invalid = ['The Chilean RUT is not valid.']
|
||||
error_format = ['Enter a valid Chilean RUT. The format is XX.XXX.XXX-X.']
|
||||
valid = {
|
||||
'11-6': '11-6',
|
||||
'116': '11-6',
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# Tests for contrib/localflavor/ CN Form Fields
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.cn.forms import (CNProvinceSelect,
|
||||
CNPostCodeField, CNIDCardField, CNPhoneNumberField, CNCellNumberField)
|
||||
|
|
@ -7,7 +8,7 @@ from django.test import SimpleTestCase
|
|||
class CNLocalFlavorTests(SimpleTestCase):
|
||||
def test_CNProvinceSelect(self):
|
||||
f = CNProvinceSelect()
|
||||
correct_output = u'''<select name="provinces">
|
||||
correct_output = '''<select name="provinces">
|
||||
<option value="anhui">\u5b89\u5fbd</option>
|
||||
<option value="beijing">\u5317\u4eac</option>
|
||||
<option value="chongqing">\u91cd\u5e86</option>
|
||||
|
|
@ -46,9 +47,9 @@ class CNLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('provinces', 'hubei'), correct_output)
|
||||
|
||||
def test_CNPostCodeField(self):
|
||||
error_format = [u'Enter a post code in the format XXXXXX.']
|
||||
error_format = ['Enter a post code in the format XXXXXX.']
|
||||
valid = {
|
||||
'091209': u'091209'
|
||||
'091209': '091209'
|
||||
}
|
||||
invalid = {
|
||||
'09120': error_format,
|
||||
|
|
@ -59,17 +60,17 @@ class CNLocalFlavorTests(SimpleTestCase):
|
|||
def test_CNIDCardField(self):
|
||||
valid = {
|
||||
# A valid 1st generation ID Card Number.
|
||||
'110101491001001': u'110101491001001',
|
||||
'110101491001001': '110101491001001',
|
||||
# A valid 2nd generation ID Card number.
|
||||
'11010119491001001X': u'11010119491001001X',
|
||||
'11010119491001001X': '11010119491001001X',
|
||||
# Another valid 2nd gen ID Number with a case change
|
||||
'11010119491001001x': u'11010119491001001X'
|
||||
'11010119491001001x': '11010119491001001X'
|
||||
}
|
||||
|
||||
wrong_format = [u'ID Card Number consists of 15 or 18 digits.']
|
||||
wrong_location = [u'Invalid ID Card Number: Wrong location code']
|
||||
wrong_bday = [u'Invalid ID Card Number: Wrong birthdate']
|
||||
wrong_checksum = [u'Invalid ID Card Number: Wrong checksum']
|
||||
wrong_format = ['ID Card Number consists of 15 or 18 digits.']
|
||||
wrong_location = ['Invalid ID Card Number: Wrong location code']
|
||||
wrong_bday = ['Invalid ID Card Number: Wrong birthdate']
|
||||
wrong_checksum = ['Invalid ID Card Number: Wrong checksum']
|
||||
|
||||
invalid = {
|
||||
'abcdefghijklmnop': wrong_format,
|
||||
|
|
@ -83,13 +84,13 @@ class CNLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(CNIDCardField, valid, invalid)
|
||||
|
||||
def test_CNPhoneNumberField(self):
|
||||
error_format = [u'Enter a valid phone number.']
|
||||
error_format = ['Enter a valid phone number.']
|
||||
valid = {
|
||||
'010-12345678': u'010-12345678',
|
||||
'010-1234567': u'010-1234567',
|
||||
'0101-12345678': u'0101-12345678',
|
||||
'0101-1234567': u'0101-1234567',
|
||||
'010-12345678-020':u'010-12345678-020'
|
||||
'010-12345678': '010-12345678',
|
||||
'010-1234567': '010-1234567',
|
||||
'0101-12345678': '0101-12345678',
|
||||
'0101-1234567': '0101-1234567',
|
||||
'010-12345678-020':'010-12345678-020'
|
||||
}
|
||||
invalid = {
|
||||
'01x-12345678': error_format,
|
||||
|
|
@ -101,9 +102,9 @@ class CNLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(CNPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_CNCellNumberField(self):
|
||||
error_format = [u'Enter a valid cell number.']
|
||||
error_format = ['Enter a valid cell number.']
|
||||
valid = {
|
||||
'13012345678': u'13012345678',
|
||||
'13012345678': '13012345678',
|
||||
}
|
||||
invalid = {
|
||||
'130123456789': error_format,
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.co.forms import CODepartmentSelect
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
|
@ -5,7 +7,7 @@ from django.test import SimpleTestCase
|
|||
class COLocalFlavorTests(SimpleTestCase):
|
||||
def test_CODepartmentSelect(self):
|
||||
d = CODepartmentSelect()
|
||||
out = u"""<select name="department">
|
||||
out = """<select name="department">
|
||||
<option value="AMA">Amazonas</option>
|
||||
<option value="ANT">Antioquia</option>
|
||||
<option value="ARA">Arauca</option>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.cz.forms import (CZPostalCodeField,
|
||||
CZRegionSelect, CZBirthNumberField, CZICNumberField)
|
||||
|
||||
|
|
@ -8,7 +10,7 @@ from django.test import SimpleTestCase
|
|||
class CZLocalFlavorTests(SimpleTestCase):
|
||||
def test_CZRegionSelect(self):
|
||||
f = CZRegionSelect()
|
||||
out = u'''<select name="regions">
|
||||
out = '''<select name="regions">
|
||||
<option value="PR">Prague</option>
|
||||
<option value="CE">Central Bohemian Region</option>
|
||||
<option value="SO">South Bohemian Region</option>
|
||||
|
|
@ -27,7 +29,7 @@ class CZLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('regions', 'TT'), out)
|
||||
|
||||
def test_CZPostalCodeField(self):
|
||||
error_format = [u'Enter a postal code in the format XXXXX or XXX XX.']
|
||||
error_format = ['Enter a postal code in the format XXXXX or XXX XX.']
|
||||
valid = {
|
||||
'91909': '91909',
|
||||
'917 01': '91701',
|
||||
|
|
@ -42,8 +44,8 @@ class CZLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(CZPostalCodeField, valid, invalid)
|
||||
|
||||
def test_CZBirthNumberField(self):
|
||||
error_format = [u'Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX.']
|
||||
error_invalid = [u'Enter a valid birth number.']
|
||||
error_format = ['Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX.']
|
||||
error_invalid = ['Enter a valid birth number.']
|
||||
valid = {
|
||||
'880523/1237': '880523/1237',
|
||||
'8805231237': '8805231237',
|
||||
|
|
@ -63,7 +65,7 @@ class CZLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(CZBirthNumberField, valid, invalid)
|
||||
|
||||
def test_CZICNumberField(self):
|
||||
error_invalid = [u'Enter a valid IC number.']
|
||||
error_invalid = ['Enter a valid IC number.']
|
||||
valid ={
|
||||
'12345679': '12345679',
|
||||
'12345601': '12345601',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.de.forms import (DEZipCodeField, DEStateSelect,
|
||||
DEIdentityCardNumberField)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class DELocalFlavorTests(SimpleTestCase):
|
||||
def test_DEStateSelect(self):
|
||||
f = DEStateSelect()
|
||||
out = u'''<select name="states">
|
||||
out = '''<select name="states">
|
||||
<option value="BW">Baden-Wuerttemberg</option>
|
||||
<option value="BY">Bavaria</option>
|
||||
<option value="BE">Berlin</option>
|
||||
|
|
@ -28,7 +30,7 @@ class DELocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('states', 'TH'), out)
|
||||
|
||||
def test_DEZipCodeField(self):
|
||||
error_format = [u'Enter a zip code in the format XXXXX.']
|
||||
error_format = ['Enter a zip code in the format XXXXX.']
|
||||
valid = {
|
||||
'99423': '99423',
|
||||
}
|
||||
|
|
@ -38,7 +40,7 @@ class DELocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(DEZipCodeField, valid, invalid)
|
||||
|
||||
def test_DEIdentityCardNumberField(self):
|
||||
error_format = [u'Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.']
|
||||
error_format = ['Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format.']
|
||||
valid = {
|
||||
'7549313035D-6004103-0903042-0': '7549313035D-6004103-0903042-0',
|
||||
'9786324830D 6104243 0910271 2': '9786324830D-6104243-0910271-2',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.ec.forms import ECProvinceSelect
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
|
@ -5,7 +7,7 @@ from django.test import SimpleTestCase
|
|||
class ECLocalFlavorTests(SimpleTestCase):
|
||||
def test_ECProvinceSelect(self):
|
||||
p = ECProvinceSelect()
|
||||
out = u"""<select name="province">
|
||||
out = """<select name="province">
|
||||
<option value="A">Azuay</option>
|
||||
<option value="B">Bol\xedvar</option>
|
||||
<option value="F">Ca\xf1ar</option>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.es.forms import (ESPostalCodeField, ESPhoneNumberField,
|
||||
ESIdentityCardNumberField, ESCCCField, ESRegionSelect, ESProvinceSelect)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class ESLocalFlavorTests(SimpleTestCase):
|
||||
def test_ESRegionSelect(self):
|
||||
f = ESRegionSelect()
|
||||
out = u'''<select name="regions">
|
||||
out = '''<select name="regions">
|
||||
<option value="AN">Andalusia</option>
|
||||
<option value="AR">Aragon</option>
|
||||
<option value="O">Principality of Asturias</option>
|
||||
|
|
@ -30,7 +32,7 @@ class ESLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_ESProvinceSelect(self):
|
||||
f = ESProvinceSelect()
|
||||
out = u'''<select name="provinces">
|
||||
out = '''<select name="provinces">
|
||||
<option value="01">Araba</option>
|
||||
<option value="02">Albacete</option>
|
||||
<option value="03">Alacant</option>
|
||||
|
|
@ -87,7 +89,7 @@ class ESLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('provinces', '08'), out)
|
||||
|
||||
def test_ESPostalCodeField(self):
|
||||
error_invalid = [u'Enter a valid postal code in the range and format 01XXX - 52XXX.']
|
||||
error_invalid = ['Enter a valid postal code in the range and format 01XXX - 52XXX.']
|
||||
valid = {
|
||||
'08028': '08028',
|
||||
'28080': '28080',
|
||||
|
|
@ -103,7 +105,7 @@ class ESLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ESPostalCodeField, valid, invalid)
|
||||
|
||||
def test_ESPhoneNumberField(self):
|
||||
error_invalid = [u'Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX.']
|
||||
error_invalid = ['Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX.']
|
||||
valid = {
|
||||
'650010101': '650010101',
|
||||
'931234567': '931234567',
|
||||
|
|
@ -119,10 +121,10 @@ class ESLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ESPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_ESIdentityCardNumberField(self):
|
||||
error_invalid = [u'Please enter a valid NIF, NIE, or CIF.']
|
||||
error_checksum_nif = [u'Invalid checksum for NIF.']
|
||||
error_checksum_nie = [u'Invalid checksum for NIE.']
|
||||
error_checksum_cif = [u'Invalid checksum for CIF.']
|
||||
error_invalid = ['Please enter a valid NIF, NIE, or CIF.']
|
||||
error_checksum_nif = ['Invalid checksum for NIF.']
|
||||
error_checksum_nie = ['Invalid checksum for NIE.']
|
||||
error_checksum_cif = ['Invalid checksum for CIF.']
|
||||
valid = {
|
||||
'78699688J': '78699688J',
|
||||
'78699688-J': '78699688J',
|
||||
|
|
@ -155,8 +157,8 @@ class ESLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ESIdentityCardNumberField, valid, invalid)
|
||||
|
||||
def test_ESCCCField(self):
|
||||
error_invalid = [u'Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX.']
|
||||
error_checksum = [u'Invalid checksum for bank account number.']
|
||||
error_invalid = ['Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX.']
|
||||
error_checksum = ['Invalid checksum for bank account number.']
|
||||
valid = {
|
||||
'20770338793100254321': '20770338793100254321',
|
||||
'2077 0338 79 3100254321': '2077 0338 79 3100254321',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.fi.forms import (FIZipCodeField,
|
||||
FISocialSecurityNumber, FIMunicipalitySelect)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class FILocalFlavorTests(SimpleTestCase):
|
||||
def test_FIMunicipalitySelect(self):
|
||||
f = FIMunicipalitySelect()
|
||||
out = u'''<select name="municipalities">
|
||||
out = '''<select name="municipalities">
|
||||
<option value="akaa">Akaa</option>
|
||||
<option value="alajarvi">Alaj\xe4rvi</option>
|
||||
<option value="alavieska">Alavieska</option>
|
||||
|
|
@ -354,7 +356,7 @@ class FILocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('municipalities', 'turku'), out)
|
||||
|
||||
def test_FIZipCodeField(self):
|
||||
error_format = [u'Enter a zip code in the format XXXXX.']
|
||||
error_format = ['Enter a zip code in the format XXXXX.']
|
||||
valid = {
|
||||
'20540': '20540',
|
||||
'20101': '20101',
|
||||
|
|
@ -366,7 +368,7 @@ class FILocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(FIZipCodeField, valid, invalid)
|
||||
|
||||
def test_FISocialSecurityNumber(self):
|
||||
error_invalid = [u'Enter a valid Finnish social security number.']
|
||||
error_invalid = ['Enter a valid Finnish social security number.']
|
||||
valid = {
|
||||
'010101-0101': '010101-0101',
|
||||
'010101+0101': '010101+0101',
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.fr.forms import (FRZipCodeField,
|
||||
FRPhoneNumberField, FRDepartmentSelect)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class FRLocalFlavorTests(SimpleTestCase):
|
||||
def test_FRZipCodeField(self):
|
||||
error_format = [u'Enter a zip code in the format XXXXX.']
|
||||
error_format = ['Enter a zip code in the format XXXXX.']
|
||||
valid = {
|
||||
'75001': '75001',
|
||||
'93200': '93200',
|
||||
|
|
@ -19,7 +21,7 @@ class FRLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(FRZipCodeField, valid, invalid)
|
||||
|
||||
def test_FRPhoneNumberField(self):
|
||||
error_format = [u'Phone numbers must be in 0X XX XX XX XX format.']
|
||||
error_format = ['Phone numbers must be in 0X XX XX XX XX format.']
|
||||
valid = {
|
||||
'01 55 44 58 64': '01 55 44 58 64',
|
||||
'0155445864': '01 55 44 58 64',
|
||||
|
|
@ -35,7 +37,7 @@ class FRLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_FRDepartmentSelect(self):
|
||||
f = FRDepartmentSelect()
|
||||
out = u'''<select name="dep">
|
||||
out = '''<select name="dep">
|
||||
<option value="01">01 - Ain</option>
|
||||
<option value="02">02 - Aisne</option>
|
||||
<option value="03">03 - Allier</option>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.gb.forms import GBPostcodeField
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
|
@ -5,7 +7,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class GBLocalFlavorTests(SimpleTestCase):
|
||||
def test_GBPostcodeField(self):
|
||||
error_invalid = [u'Enter a valid postcode.']
|
||||
error_invalid = ['Enter a valid postcode.']
|
||||
valid = {
|
||||
'BT32 4PX': 'BT32 4PX',
|
||||
'GIR 0AA': 'GIR 0AA',
|
||||
|
|
@ -24,7 +26,7 @@ class GBLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(GBPostcodeField, valid, invalid)
|
||||
valid = {}
|
||||
invalid = {
|
||||
'1NV 4L1D': [u'Enter a bloody postcode!'],
|
||||
'1NV 4L1D': ['Enter a bloody postcode!'],
|
||||
}
|
||||
kwargs = {'error_messages': {'invalid': 'Enter a bloody postcode!'}}
|
||||
self.assertFieldOutput(GBPostcodeField, valid, invalid, field_kwargs=kwargs)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import datetime
|
||||
|
||||
from django.contrib.localflavor.generic.forms import DateField, DateTimeField
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class GenericLocalFlavorTests(SimpleTestCase):
|
||||
def test_GenericDateField(self):
|
||||
error_invalid = [u'Enter a valid date.']
|
||||
error_invalid = ['Enter a valid date.']
|
||||
valid = {
|
||||
datetime.date(2006, 10, 25): datetime.date(2006, 10, 25),
|
||||
datetime.datetime(2006, 10, 25, 14, 30): datetime.date(2006, 10, 25),
|
||||
|
|
@ -46,7 +48,7 @@ class GenericLocalFlavorTests(SimpleTestCase):
|
|||
)
|
||||
|
||||
def test_GenericDateTimeField(self):
|
||||
error_invalid = [u'Enter a valid date/time.']
|
||||
error_invalid = ['Enter a valid date/time.']
|
||||
valid = {
|
||||
datetime.date(2006, 10, 25): datetime.datetime(2006, 10, 25, 0, 0),
|
||||
datetime.datetime(2006, 10, 25, 14, 30): datetime.datetime(2006, 10, 25, 14, 30),
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.hr.forms import (HRCountySelect,
|
||||
HRPhoneNumberPrefixSelect, HRLicensePlatePrefixSelect, HRPhoneNumberField,
|
||||
HRLicensePlateField, HRPostalCodeField, HROIBField, HRJMBGField,
|
||||
|
|
@ -9,7 +11,7 @@ from django.test import SimpleTestCase
|
|||
class HRLocalFlavorTests(SimpleTestCase):
|
||||
def test_HRCountySelect(self):
|
||||
f = HRCountySelect()
|
||||
out = u'''<select name="county">
|
||||
out = '''<select name="county">
|
||||
<option value="GZG" selected="selected">Grad Zagreb</option>
|
||||
<option value="BBŽ">Bjelovarsko-bilogorska županija</option>
|
||||
<option value="BPŽ">Brodsko-posavska županija</option>
|
||||
|
|
@ -36,7 +38,7 @@ class HRLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_HRPhoneNumberPrefixSelect(self):
|
||||
f = HRPhoneNumberPrefixSelect()
|
||||
out = u'''<select name="phone">
|
||||
out = '''<select name="phone">
|
||||
<option value="1" selected="selected">01</option>
|
||||
<option value="20">020</option>
|
||||
<option value="21">021</option>
|
||||
|
|
@ -68,7 +70,7 @@ class HRLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_HRLicensePlatePrefixSelect(self):
|
||||
f = HRLicensePlatePrefixSelect()
|
||||
out = u'''<select name="license">
|
||||
out = '''<select name="license">
|
||||
<option value="BJ" selected="selected">BJ</option>
|
||||
<option value="BM">BM</option>
|
||||
<option value="ČK">ČK</option>
|
||||
|
|
@ -107,9 +109,9 @@ class HRLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('license', 'BJ'), out)
|
||||
|
||||
def test_HRPhoneNumberField(self):
|
||||
error_invalid = [u'Enter a valid phone number']
|
||||
error_area = [u'Enter a valid area or mobile network code']
|
||||
error_number = [u'The phone nubmer is too long']
|
||||
error_invalid = ['Enter a valid phone number']
|
||||
error_area = ['Enter a valid area or mobile network code']
|
||||
error_number = ['The phone nubmer is too long']
|
||||
valid = {
|
||||
'+38511234567': '+38511234567',
|
||||
'0038511234567': '+38511234567',
|
||||
|
|
@ -126,12 +128,12 @@ class HRLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(HRPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_HRLicensePlateField(self):
|
||||
error_invalid = [u'Enter a valid vehicle license plate number']
|
||||
error_area = [u'Enter a valid location code']
|
||||
error_number = [u'Number part cannot be zero']
|
||||
error_invalid = ['Enter a valid vehicle license plate number']
|
||||
error_area = ['Enter a valid location code']
|
||||
error_number = ['Number part cannot be zero']
|
||||
valid = {
|
||||
'ZG 1234-AA': u'ZG 1234-AA',
|
||||
'ZG 123-A': u'ZG 123-A',
|
||||
'ZG 1234-AA': 'ZG 1234-AA',
|
||||
'ZG 123-A': 'ZG 123-A',
|
||||
}
|
||||
invalid = {
|
||||
'PV12345': error_invalid,
|
||||
|
|
@ -141,7 +143,7 @@ class HRLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(HRLicensePlateField, valid, invalid)
|
||||
|
||||
def test_HRPostalCodeField(self):
|
||||
error_invalid = [u'Enter a valid 5 digit postal code']
|
||||
error_invalid = ['Enter a valid 5 digit postal code']
|
||||
valid = {
|
||||
'10000': '10000',
|
||||
'35410': '35410',
|
||||
|
|
@ -153,19 +155,19 @@ class HRLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(HRPostalCodeField, valid, invalid)
|
||||
|
||||
def test_HROIBField(self):
|
||||
error_invalid = [u'Enter a valid 11 digit OIB']
|
||||
error_invalid = ['Enter a valid 11 digit OIB']
|
||||
valid = {
|
||||
'12345678901': '12345678901',
|
||||
}
|
||||
invalid = {
|
||||
'1234567890': [u'Ensure this value has at least 11 characters (it has 10).'] + error_invalid,
|
||||
'1234567890': ['Ensure this value has at least 11 characters (it has 10).'] + error_invalid,
|
||||
'ABCDEFGHIJK': error_invalid,
|
||||
}
|
||||
self.assertFieldOutput(HROIBField, valid, invalid)
|
||||
|
||||
def test_HRJMBGField(self):
|
||||
error_invalid = [u'Enter a valid 13 digit JMBG']
|
||||
error_date = [u'Error in date segment']
|
||||
error_invalid = ['Enter a valid 13 digit JMBG']
|
||||
error_date = ['Error in date segment']
|
||||
valid = {
|
||||
'1211984302155': '1211984302155',
|
||||
'2701984307107': '2701984307107',
|
||||
|
|
@ -178,8 +180,8 @@ class HRLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(HRJMBGField, valid, invalid)
|
||||
|
||||
def test_HRJMBAGField(self):
|
||||
error_invalid = [u'Enter a valid 19 digit JMBAG starting with 601983']
|
||||
error_copy = [u'Card issue number cannot be zero']
|
||||
error_invalid = ['Enter a valid 19 digit JMBAG starting with 601983']
|
||||
error_copy = ['Card issue number cannot be zero']
|
||||
valid = {
|
||||
'601983 11 0130185856 4': '6019831101301858564',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import warnings
|
||||
|
||||
from django.contrib.localflavor.id.forms import (IDPhoneNumberField,
|
||||
|
|
@ -21,7 +23,7 @@ class IDLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_IDProvinceSelect(self):
|
||||
f = IDProvinceSelect()
|
||||
out = u'''<select name="provinces">
|
||||
out = '''<select name="provinces">
|
||||
<option value="ACE">Aceh</option>
|
||||
<option value="BLI">Bali</option>
|
||||
<option value="BTN">Banten</option>
|
||||
|
|
@ -60,7 +62,7 @@ class IDLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_IDLicensePlatePrefixSelect(self):
|
||||
f = IDLicensePlatePrefixSelect()
|
||||
out = u'''<select name="codes">
|
||||
out = '''<select name="codes">
|
||||
<option value="A">Banten</option>
|
||||
<option value="AA">Magelang</option>
|
||||
<option value="AB">Yogyakarta</option>
|
||||
|
|
@ -121,14 +123,14 @@ class IDLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('codes', 'BE'), out)
|
||||
|
||||
def test_IDPhoneNumberField(self):
|
||||
error_invalid = [u'Enter a valid phone number']
|
||||
error_invalid = ['Enter a valid phone number']
|
||||
valid = {
|
||||
'0812-3456789': u'0812-3456789',
|
||||
'081234567890': u'081234567890',
|
||||
'021 345 6789': u'021 345 6789',
|
||||
'0213456789': u'0213456789',
|
||||
'+62-21-3456789': u'+62-21-3456789',
|
||||
'(021) 345 6789': u'(021) 345 6789',
|
||||
'0812-3456789': '0812-3456789',
|
||||
'081234567890': '081234567890',
|
||||
'021 345 6789': '021 345 6789',
|
||||
'0213456789': '0213456789',
|
||||
'+62-21-3456789': '+62-21-3456789',
|
||||
'(021) 345 6789': '(021) 345 6789',
|
||||
}
|
||||
invalid = {
|
||||
'0123456789': error_invalid,
|
||||
|
|
@ -140,11 +142,11 @@ class IDLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(IDPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_IDPostCodeField(self):
|
||||
error_invalid = [u'Enter a valid post code']
|
||||
error_invalid = ['Enter a valid post code']
|
||||
valid = {
|
||||
'12340': u'12340',
|
||||
'25412': u'25412',
|
||||
' 12340 ': u'12340',
|
||||
'12340': '12340',
|
||||
'25412': '25412',
|
||||
' 12340 ': '12340',
|
||||
}
|
||||
invalid = {
|
||||
'12 3 4 0': error_invalid,
|
||||
|
|
@ -156,11 +158,11 @@ class IDLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(IDPostCodeField, valid, invalid)
|
||||
|
||||
def test_IDNationalIdentityNumberField(self):
|
||||
error_invalid = [u'Enter a valid NIK/KTP number']
|
||||
error_invalid = ['Enter a valid NIK/KTP number']
|
||||
valid = {
|
||||
' 12.3456.010178 3456 ': u'12.3456.010178.3456',
|
||||
'1234560101783456': u'12.3456.010178.3456',
|
||||
'12.3456.010101.3456': u'12.3456.010101.3456',
|
||||
' 12.3456.010178 3456 ': '12.3456.010178.3456',
|
||||
'1234560101783456': '12.3456.010178.3456',
|
||||
'12.3456.010101.3456': '12.3456.010101.3456',
|
||||
}
|
||||
invalid = {
|
||||
'12.3456.310278.3456': error_invalid,
|
||||
|
|
@ -171,14 +173,14 @@ class IDLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(IDNationalIdentityNumberField, valid, invalid)
|
||||
|
||||
def test_IDLicensePlateField(self):
|
||||
error_invalid = [u'Enter a valid vehicle license plate number']
|
||||
error_invalid = ['Enter a valid vehicle license plate number']
|
||||
valid = {
|
||||
' b 1234 ab ': u'B 1234 AB',
|
||||
'B 1234 ABC': u'B 1234 ABC',
|
||||
'A 12': u'A 12',
|
||||
'DK 12345 12': u'DK 12345 12',
|
||||
'RI 10': u'RI 10',
|
||||
'CD 12 12': u'CD 12 12',
|
||||
' b 1234 ab ': 'B 1234 AB',
|
||||
'B 1234 ABC': 'B 1234 ABC',
|
||||
'A 12': 'A 12',
|
||||
'DK 12345 12': 'DK 12345 12',
|
||||
'RI 10': 'RI 10',
|
||||
'CD 12 12': 'CD 12 12',
|
||||
}
|
||||
invalid = {
|
||||
'CD 10 12': error_invalid,
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.ie.forms import IECountySelect
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
|
@ -6,7 +8,7 @@ from django.test import SimpleTestCase
|
|||
class IELocalFlavorTests(SimpleTestCase):
|
||||
def test_IECountySelect(self):
|
||||
f = IECountySelect()
|
||||
out = u'''<select name="counties">
|
||||
out = '''<select name="counties">
|
||||
<option value="antrim">Antrim</option>
|
||||
<option value="armagh">Armagh</option>
|
||||
<option value="carlow">Carlow</option>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.il.forms import (ILPostalCodeField,
|
||||
ILIDNumberField)
|
||||
|
||||
|
|
@ -6,7 +8,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class ILLocalFlavorTests(SimpleTestCase):
|
||||
def test_ILPostalCodeField(self):
|
||||
error_format = [u'Enter a postal code in the format XXXXX']
|
||||
error_format = ['Enter a postal code in the format XXXXX']
|
||||
valid = {
|
||||
'69973': '69973',
|
||||
'699 73': '69973',
|
||||
|
|
@ -21,7 +23,7 @@ class ILLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ILPostalCodeField, valid, invalid)
|
||||
|
||||
def test_ILIDNumberField(self):
|
||||
error_invalid = [u'Enter a valid ID number.']
|
||||
error_invalid = ['Enter a valid ID number.']
|
||||
valid = {
|
||||
'3933742-3': '39337423',
|
||||
'39337423': '39337423',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.in_.forms import (INZipCodeField,
|
||||
INStateField, INStateSelect, INPhoneNumberField)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class INLocalFlavorTests(SimpleTestCase):
|
||||
def test_INPhoneNumberField(self):
|
||||
error_format = [u'Phone numbers must be in 02X-8X or 03X-7X or 04X-6X format.']
|
||||
error_format = ['Phone numbers must be in 02X-8X or 03X-7X or 04X-6X format.']
|
||||
valid = {
|
||||
'0423-2443667': '0423-2443667',
|
||||
'0423 2443667': '0423 2443667',
|
||||
|
|
@ -27,7 +29,7 @@ class INLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_INPStateSelect(self):
|
||||
f = INStateSelect()
|
||||
out = u'''<select name="state">
|
||||
out = '''<select name="state">
|
||||
<option value="KA">Karnataka</option>
|
||||
<option value="AP" selected="selected">Andhra Pradesh</option>
|
||||
<option value="KL">Kerala</option>
|
||||
|
|
@ -67,7 +69,7 @@ class INLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('state', 'AP'), out)
|
||||
|
||||
def test_INZipCodeField(self):
|
||||
error_format = [u'Enter a zip code in the format XXXXXX or XXX XXX.']
|
||||
error_format = ['Enter a zip code in the format XXXXXX or XXX XXX.']
|
||||
valid = {
|
||||
'360311': '360311',
|
||||
'360 311': '360311',
|
||||
|
|
@ -82,7 +84,7 @@ class INLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(INZipCodeField, valid, invalid)
|
||||
|
||||
def test_INStateField(self):
|
||||
error_format = [u'Enter an Indian state or territory.']
|
||||
error_format = ['Enter an Indian state or territory.']
|
||||
valid = {
|
||||
'an': 'AN',
|
||||
'AN': 'AN',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.is_.forms import (ISIdNumberField,
|
||||
ISPhoneNumberField, ISPostalCodeSelect)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class ISLocalFlavorTests(SimpleTestCase):
|
||||
def test_ISPostalCodeSelect(self):
|
||||
f = ISPostalCodeSelect()
|
||||
out = u'''<select name="foo">
|
||||
out = '''<select name="foo">
|
||||
<option value="101">101 Reykjav\xedk</option>
|
||||
<option value="103">103 Reykjav\xedk</option>
|
||||
<option value="104">104 Reykjav\xedk</option>
|
||||
|
|
@ -159,10 +161,10 @@ class ISLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('foo', 'bar'), out)
|
||||
|
||||
def test_ISIdNumberField(self):
|
||||
error_atleast = [u'Ensure this value has at least 10 characters (it has 9).']
|
||||
error_invalid = [u'Enter a valid Icelandic identification number. The format is XXXXXX-XXXX.']
|
||||
error_atmost = [u'Ensure this value has at most 11 characters (it has 12).']
|
||||
error_notvalid = [u'The Icelandic identification number is not valid.']
|
||||
error_atleast = ['Ensure this value has at least 10 characters (it has 9).']
|
||||
error_invalid = ['Enter a valid Icelandic identification number. The format is XXXXXX-XXXX.']
|
||||
error_atmost = ['Ensure this value has at most 11 characters (it has 12).']
|
||||
error_notvalid = ['The Icelandic identification number is not valid.']
|
||||
valid = {
|
||||
'2308803449': '230880-3449',
|
||||
'230880-3449': '230880-3449',
|
||||
|
|
@ -179,9 +181,9 @@ class ISLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ISIdNumberField, valid, invalid)
|
||||
|
||||
def test_ISPhoneNumberField(self):
|
||||
error_invalid = [u'Enter a valid value.']
|
||||
error_atleast = [u'Ensure this value has at least 7 characters (it has 6).']
|
||||
error_atmost = [u'Ensure this value has at most 8 characters (it has 9).']
|
||||
error_invalid = ['Enter a valid value.']
|
||||
error_atleast = ['Ensure this value has at least 7 characters (it has 6).']
|
||||
error_atmost = ['Ensure this value has at most 8 characters (it has 9).']
|
||||
valid = {
|
||||
'1234567': '1234567',
|
||||
'123 4567': '1234567',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.it.forms import (ITZipCodeField, ITRegionSelect,
|
||||
ITSocialSecurityNumberField, ITVatNumberField)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class ITLocalFlavorTests(SimpleTestCase):
|
||||
def test_ITRegionSelect(self):
|
||||
f = ITRegionSelect()
|
||||
out = u'''<select name="regions">
|
||||
out = '''<select name="regions">
|
||||
<option value="ABR">Abruzzo</option>
|
||||
<option value="BAS">Basilicata</option>
|
||||
<option value="CAL">Calabria</option>
|
||||
|
|
@ -32,7 +34,7 @@ class ITLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('regions', 'PMN'), out)
|
||||
|
||||
def test_ITZipCodeField(self):
|
||||
error_invalid = [u'Enter a valid zip code.']
|
||||
error_invalid = ['Enter a valid zip code.']
|
||||
valid = {
|
||||
'00100': '00100',
|
||||
}
|
||||
|
|
@ -42,7 +44,7 @@ class ITLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ITZipCodeField, valid, invalid)
|
||||
|
||||
def test_ITSocialSecurityNumberField(self):
|
||||
error_invalid = [u'Enter a valid Social Security number.']
|
||||
error_invalid = ['Enter a valid Social Security number.']
|
||||
valid = {
|
||||
'LVSGDU99T71H501L': 'LVSGDU99T71H501L',
|
||||
'LBRRME11A01L736W': 'LBRRME11A01L736W',
|
||||
|
|
@ -56,7 +58,7 @@ class ITLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ITSocialSecurityNumberField, valid, invalid)
|
||||
|
||||
def test_ITVatNumberField(self):
|
||||
error_invalid = [u'Enter a valid VAT number.']
|
||||
error_invalid = ['Enter a valid VAT number.']
|
||||
valid = {
|
||||
'07973780013': '07973780013',
|
||||
'7973780013': '07973780013',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.jp.forms import (JPPostalCodeField,
|
||||
JPPrefectureSelect)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class JPLocalFlavorTests(SimpleTestCase):
|
||||
def test_JPPrefectureSelect(self):
|
||||
f = JPPrefectureSelect()
|
||||
out = u'''<select name="prefecture">
|
||||
out = '''<select name="prefecture">
|
||||
<option value="hokkaido">Hokkaido</option>
|
||||
<option value="aomori">Aomori</option>
|
||||
<option value="iwate">Iwate</option>
|
||||
|
|
@ -59,7 +61,7 @@ class JPLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('prefecture', 'kanagawa'), out)
|
||||
|
||||
def test_JPPostalCodeField(self):
|
||||
error_format = [u'Enter a postal code in the format XXXXXXX or XXX-XXXX.']
|
||||
error_format = ['Enter a postal code in the format XXXXXXX or XXX-XXXX.']
|
||||
valid = {
|
||||
'251-0032': '2510032',
|
||||
'2510032': '2510032',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.kw.forms import KWCivilIDNumberField
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
|
@ -5,7 +7,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class KWLocalFlavorTests(SimpleTestCase):
|
||||
def test_KWCivilIDNumberField(self):
|
||||
error_invalid = [u'Enter a valid Kuwaiti Civil ID number']
|
||||
error_invalid = ['Enter a valid Kuwaiti Civil ID number']
|
||||
valid = {
|
||||
'282040701483': '282040701483',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.contrib.localflavor.mk.forms import (
|
||||
MKIdentityCardNumberField, MKMunicipalitySelect, UMCNField)
|
||||
|
|
@ -41,7 +41,7 @@ class MKLocalFlavorTests(SimpleTestCase):
|
|||
})
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(
|
||||
form.errors['municipality_req'], [u'This field is required.'])
|
||||
form.errors['municipality_req'], ['This field is required.'])
|
||||
|
||||
def test_umcn_invalid(self):
|
||||
"""
|
||||
|
|
@ -56,7 +56,7 @@ class MKLocalFlavorTests(SimpleTestCase):
|
|||
'id_number':'A1234567',
|
||||
})
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.errors['umcn'], [u'The UMCN is not valid.'])
|
||||
self.assertEqual(form.errors['umcn'], ['The UMCN is not valid.'])
|
||||
|
||||
form = MKPersonForm({
|
||||
'first_name':'Someone',
|
||||
|
|
@ -67,7 +67,7 @@ class MKLocalFlavorTests(SimpleTestCase):
|
|||
'id_number':'A1234567',
|
||||
})
|
||||
self.assertEqual(form.errors['umcn'],
|
||||
[u'The first 7 digits of the UMCN must represent a valid past date.'])
|
||||
['The first 7 digits of the UMCN must represent a valid past date.'])
|
||||
|
||||
def test_idnumber_invalid(self):
|
||||
"""
|
||||
|
|
@ -85,8 +85,8 @@ class MKLocalFlavorTests(SimpleTestCase):
|
|||
})
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.errors['id_number'],
|
||||
[u'Identity card numbers must contain either 4 to 7 '
|
||||
'digits or an uppercase letter and 7 digits.'])
|
||||
['Identity card numbers must contain either 4 to 7 '
|
||||
'digits or an uppercase letter and 7 digits.'])
|
||||
|
||||
def test_field_blank_option(self):
|
||||
"""
|
||||
|
|
@ -183,7 +183,7 @@ class MKLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(str(self.form['municipality']), municipality_select_html)
|
||||
|
||||
def test_MKIdentityCardNumberField(self):
|
||||
error_invalid = [u'Identity card numbers must contain either 4 to 7 '
|
||||
error_invalid = ['Identity card numbers must contain either 4 to 7 '
|
||||
'digits or an uppercase letter and 7 digits.']
|
||||
valid = {
|
||||
'L0018077':'L0018077',
|
||||
|
|
@ -198,7 +198,7 @@ class MKLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_MKMunicipalitySelect(self):
|
||||
f = MKMunicipalitySelect()
|
||||
out=u'''<select name="municipality">
|
||||
out='''<select name="municipality">
|
||||
<option value="AD">Aerodrom</option>
|
||||
<option value="AR">Ara\u010dinovo</option>
|
||||
<option value="BR">Berovo</option>
|
||||
|
|
@ -287,10 +287,10 @@ class MKLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('municipality', 'DL' ), out)
|
||||
|
||||
def test_UMCNField(self):
|
||||
error_invalid = [u'This field should contain exactly 13 digits.']
|
||||
error_checksum = [u'The UMCN is not valid.']
|
||||
error_date = [u'The first 7 digits of the UMCN '
|
||||
'must represent a valid past date.']
|
||||
error_invalid = ['This field should contain exactly 13 digits.']
|
||||
error_checksum = ['The UMCN is not valid.']
|
||||
error_date = ['The first 7 digits of the UMCN '
|
||||
'must represent a valid past date.']
|
||||
valid = {
|
||||
'2402983450006': '2402983450006',
|
||||
'2803984430038': '2803984430038',
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.contrib.localflavor.mx.forms import (MXZipCodeField, MXRFCField,
|
||||
MXStateSelect, MXCURPField)
|
||||
|
|
@ -21,7 +21,7 @@ class MXLocalFlavorTests(SimpleTestCase):
|
|||
def test_get_display_methods(self):
|
||||
"""Test that the get_*_display() methods are added to the model instances."""
|
||||
place = self.form.save()
|
||||
self.assertEqual(place.get_state_display(), u'Michoacán')
|
||||
self.assertEqual(place.get_state_display(), 'Michoacán')
|
||||
|
||||
def test_errors(self):
|
||||
"""Test that required MXFields throw appropriate errors."""
|
||||
|
|
@ -32,10 +32,10 @@ class MXLocalFlavorTests(SimpleTestCase):
|
|||
'zip_code': 'xxx',
|
||||
})
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.errors['state'], [u'Select a valid choice. Invalid state is not one of the available choices.'])
|
||||
self.assertEqual(form.errors['rfc'], [u'Enter a valid RFC.'])
|
||||
self.assertEqual(form.errors['curp'], [u'Ensure this value has at least 18 characters (it has 12).', u'Enter a valid CURP.'])
|
||||
self.assertEqual(form.errors['zip_code'], [u'Enter a valid zip code in the format XXXXX.'])
|
||||
self.assertEqual(form.errors['state'], ['Select a valid choice. Invalid state is not one of the available choices.'])
|
||||
self.assertEqual(form.errors['rfc'], ['Enter a valid RFC.'])
|
||||
self.assertEqual(form.errors['curp'], ['Ensure this value has at least 18 characters (it has 12).', 'Enter a valid CURP.'])
|
||||
self.assertEqual(form.errors['zip_code'], ['Enter a valid zip code in the format XXXXX.'])
|
||||
|
||||
def test_field_blank_option(self):
|
||||
"""Test that the empty option is there."""
|
||||
|
|
@ -79,7 +79,7 @@ class MXLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_MXStateSelect(self):
|
||||
f = MXStateSelect()
|
||||
out = u'''<select name="state">
|
||||
out = '''<select name="state">
|
||||
<option value="AGU">Aguascalientes</option>
|
||||
<option value="BCN">Baja California</option>
|
||||
<option value="BCS">Baja California Sur</option>
|
||||
|
|
@ -116,12 +116,12 @@ class MXLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('state', 'MIC'), out)
|
||||
|
||||
def test_MXZipCodeField(self):
|
||||
error_format = [u'Enter a valid zip code in the format XXXXX.']
|
||||
error_format = ['Enter a valid zip code in the format XXXXX.']
|
||||
valid = {
|
||||
'58120': u'58120',
|
||||
'58502': u'58502',
|
||||
'59310': u'59310',
|
||||
'99999': u'99999',
|
||||
'58120': '58120',
|
||||
'58502': '58502',
|
||||
'59310': '59310',
|
||||
'99999': '99999',
|
||||
}
|
||||
invalid = {
|
||||
'17000': error_format,
|
||||
|
|
@ -132,16 +132,16 @@ class MXLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(MXZipCodeField, valid, invalid)
|
||||
|
||||
def test_MXRFCField(self):
|
||||
error_format = [u'Enter a valid RFC.']
|
||||
error_checksum = [u'Invalid checksum for RFC.']
|
||||
error_format = ['Enter a valid RFC.']
|
||||
error_checksum = ['Invalid checksum for RFC.']
|
||||
valid = {
|
||||
'MoFN641205eX5': u'MOFN641205EX5',
|
||||
'ICa060120873': u'ICA060120873',
|
||||
'eUcG751104rT0': u'EUCG751104RT0',
|
||||
'GME08100195A': u'GME08100195A',
|
||||
'AA&060524KX5': u'AA&060524KX5',
|
||||
'CAÑ0708045P7': u'CAÑ0708045P7',
|
||||
'aaa000101aa9': u'AAA000101AA9',
|
||||
'MoFN641205eX5': 'MOFN641205EX5',
|
||||
'ICa060120873': 'ICA060120873',
|
||||
'eUcG751104rT0': 'EUCG751104RT0',
|
||||
'GME08100195A': 'GME08100195A',
|
||||
'AA&060524KX5': 'AA&060524KX5',
|
||||
'CAÑ0708045P7': 'CAÑ0708045P7',
|
||||
'aaa000101aa9': 'AAA000101AA9',
|
||||
}
|
||||
invalid = {
|
||||
'MED0000000XA': error_format,
|
||||
|
|
@ -166,19 +166,19 @@ class MXLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(MXRFCField, valid, invalid)
|
||||
|
||||
def test_MXCURPField(self):
|
||||
error_format = [u'Enter a valid CURP.']
|
||||
error_checksum = [u'Invalid checksum for CURP.']
|
||||
error_format = ['Enter a valid CURP.']
|
||||
error_checksum = ['Invalid checksum for CURP.']
|
||||
valid = {
|
||||
'AaMG890608HDFLJL00': u'AAMG890608HDFLJL00',
|
||||
'BAAd890419HMNRRV07': u'BAAD890419HMNRRV07',
|
||||
'VIAA900930MMNClL08': u'VIAA900930MMNCLL08',
|
||||
'HEGR891009HMNRRD09': u'HEGR891009HMNRRD09',
|
||||
'MARR890512HMNRMN09': u'MARR890512HMNRMN09',
|
||||
'MESJ890928HMNZNS00': u'MESJ890928HMNZNS00',
|
||||
'BAAA890317HDFRLL03': u'BAAA890317HDFRLL03',
|
||||
'TOMA880125HMNRRNO2': u'TOMA880125HMNRRNO2',
|
||||
'OOMG890727HMNRSR06': u'OOMG890727HMNRSR06',
|
||||
'AAAA000101HDFCCC09': u'AAAA000101HDFCCC09',
|
||||
'AaMG890608HDFLJL00': 'AAMG890608HDFLJL00',
|
||||
'BAAd890419HMNRRV07': 'BAAD890419HMNRRV07',
|
||||
'VIAA900930MMNClL08': 'VIAA900930MMNCLL08',
|
||||
'HEGR891009HMNRRD09': 'HEGR891009HMNRRD09',
|
||||
'MARR890512HMNRMN09': 'MARR890512HMNRMN09',
|
||||
'MESJ890928HMNZNS00': 'MESJ890928HMNZNS00',
|
||||
'BAAA890317HDFRLL03': 'BAAA890317HDFRLL03',
|
||||
'TOMA880125HMNRRNO2': 'TOMA880125HMNRRNO2',
|
||||
'OOMG890727HMNRSR06': 'OOMG890727HMNRSR06',
|
||||
'AAAA000101HDFCCC09': 'AAAA000101HDFCCC09',
|
||||
}
|
||||
invalid = {
|
||||
'AAAA000000HDFCCC09': error_format,
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.nl.forms import (NLPhoneNumberField,
|
||||
NLZipCodeField, NLSoFiNumberField, NLProvinceSelect)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class NLLocalFlavorTests(SimpleTestCase):
|
||||
def test_NLProvinceSelect(self):
|
||||
f = NLProvinceSelect()
|
||||
out = u'''<select name="provinces">
|
||||
out = '''<select name="provinces">
|
||||
<option value="DR">Drenthe</option>
|
||||
<option value="FL">Flevoland</option>
|
||||
<option value="FR">Friesland</option>
|
||||
|
|
@ -24,7 +26,7 @@ class NLLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('provinces', 'OV'), out)
|
||||
|
||||
def test_NLPhoneNumberField(self):
|
||||
error_invalid = [u'Enter a valid phone number']
|
||||
error_invalid = ['Enter a valid phone number']
|
||||
valid = {
|
||||
'012-3456789': '012-3456789',
|
||||
'0123456789': '0123456789',
|
||||
|
|
@ -37,7 +39,7 @@ class NLLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(NLPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_NLZipCodeField(self):
|
||||
error_invalid = [u'Enter a valid postal code']
|
||||
error_invalid = ['Enter a valid postal code']
|
||||
valid = {
|
||||
'1234ab': '1234 AB',
|
||||
'1234 ab': '1234 AB',
|
||||
|
|
@ -50,7 +52,7 @@ class NLLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(NLZipCodeField, valid, invalid)
|
||||
|
||||
def test_NLSoFiNumberField(self):
|
||||
error_invalid = [u'Enter a valid SoFi number']
|
||||
error_invalid = ['Enter a valid SoFi number']
|
||||
valid = {
|
||||
'123456782': '123456782',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.pl.forms import (PLProvinceSelect,
|
||||
PLCountySelect, PLPostalCodeField, PLNIPField, PLPESELField, PLNationalIDCardNumberField, PLREGONField)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class PLLocalFlavorTests(SimpleTestCase):
|
||||
def test_PLProvinceSelect(self):
|
||||
f = PLProvinceSelect()
|
||||
out = u'''<select name="voivodeships">
|
||||
out = '''<select name="voivodeships">
|
||||
<option value="lower_silesia">Lower Silesia</option>
|
||||
<option value="kuyavia-pomerania">Kuyavia-Pomerania</option>
|
||||
<option value="lublin">Lublin</option>
|
||||
|
|
@ -29,7 +31,7 @@ class PLLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_PLCountrySelect(self):
|
||||
f = PLCountySelect()
|
||||
out = u'''<select name="administrativeunit">
|
||||
out = '''<select name="administrativeunit">
|
||||
<option value="wroclaw">Wroc\u0142aw</option>
|
||||
<option value="jeleniagora">Jelenia G\xf3ra</option>
|
||||
<option value="legnica">Legnica</option>
|
||||
|
|
@ -410,7 +412,7 @@ class PLLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('administrativeunit', 'katowice'), out)
|
||||
|
||||
def test_PLPostalCodeField(self):
|
||||
error_format = [u'Enter a postal code in the format XX-XXX.']
|
||||
error_format = ['Enter a postal code in the format XX-XXX.']
|
||||
valid = {
|
||||
'41-403': '41-403',
|
||||
}
|
||||
|
|
@ -420,8 +422,8 @@ class PLLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(PLPostalCodeField, valid, invalid)
|
||||
|
||||
def test_PLNIPField(self):
|
||||
error_format = [u'Enter a tax number field (NIP) in the format XXX-XXX-XX-XX, XXX-XX-XX-XXX or XXXXXXXXXX.']
|
||||
error_checksum = [u'Wrong checksum for the Tax Number (NIP).']
|
||||
error_format = ['Enter a tax number field (NIP) in the format XXX-XXX-XX-XX, XXX-XX-XX-XXX or XXXXXXXXXX.']
|
||||
error_checksum = ['Wrong checksum for the Tax Number (NIP).']
|
||||
valid = {
|
||||
'646-241-41-24': '6462414124',
|
||||
'646-24-14-124': '6462414124',
|
||||
|
|
@ -429,14 +431,14 @@ class PLLocalFlavorTests(SimpleTestCase):
|
|||
}
|
||||
invalid = {
|
||||
'43-343-234-323': error_format,
|
||||
'64-62-414-124': error_format,
|
||||
'64-62-414-124': error_format,
|
||||
'646-241-41-23': error_checksum,
|
||||
}
|
||||
self.assertFieldOutput(PLNIPField, valid, invalid)
|
||||
|
||||
def test_PLPESELField(self):
|
||||
error_checksum = [u'Wrong checksum for the National Identification Number.']
|
||||
error_format = [u'National Identification Number consists of 11 digits.']
|
||||
error_checksum = ['Wrong checksum for the National Identification Number.']
|
||||
error_format = ['National Identification Number consists of 11 digits.']
|
||||
valid = {
|
||||
'80071610614': '80071610614',
|
||||
}
|
||||
|
|
@ -448,8 +450,8 @@ class PLLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(PLPESELField, valid, invalid)
|
||||
|
||||
def test_PLNationalIDCardNumberField(self):
|
||||
error_checksum = [u'Wrong checksum for the National ID Card Number.']
|
||||
error_format = [u'National ID Card Number consists of 3 letters and 6 digits.']
|
||||
error_checksum = ['Wrong checksum for the National ID Card Number.']
|
||||
error_format = ['National ID Card Number consists of 3 letters and 6 digits.']
|
||||
valid = {
|
||||
'ABC123458': 'ABC123458',
|
||||
'abc123458': 'ABC123458',
|
||||
|
|
@ -463,8 +465,8 @@ class PLLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(PLNationalIDCardNumberField, valid, invalid)
|
||||
|
||||
def test_PLREGONField(self):
|
||||
error_checksum = [u'Wrong checksum for the National Business Register Number (REGON).']
|
||||
error_format = [u'National Business Register Number (REGON) consists of 9 or 14 digits.']
|
||||
error_checksum = ['Wrong checksum for the National Business Register Number (REGON).']
|
||||
error_format = ['National Business Register Number (REGON) consists of 9 or 14 digits.']
|
||||
valid = {
|
||||
'12345678512347': '12345678512347',
|
||||
'590096454': '590096454',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.pt.forms import PTZipCodeField, PTPhoneNumberField
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
|
@ -5,7 +7,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class PTLocalFlavorTests(SimpleTestCase):
|
||||
def test_PTZipCodeField(self):
|
||||
error_format = [u'Enter a zip code in the format XXXX-XXX.']
|
||||
error_format = ['Enter a zip code in the format XXXX-XXX.']
|
||||
valid = {
|
||||
'3030-034': '3030-034',
|
||||
'1003456': '1003-456',
|
||||
|
|
@ -17,7 +19,7 @@ class PTLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(PTZipCodeField, valid, invalid)
|
||||
|
||||
def test_PTPhoneNumberField(self):
|
||||
error_format = [u'Phone numbers must have 9 digits, or start by + or 00.']
|
||||
error_format = ['Phone numbers must have 9 digits, or start by + or 00.']
|
||||
valid = {
|
||||
'917845189': '917845189',
|
||||
'91 784 5189': '917845189',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.py.forms import (PyDepartmentSelect,
|
||||
PyNumberedDepartmentSelect)
|
||||
|
||||
|
|
@ -6,7 +8,7 @@ from django.test import SimpleTestCase
|
|||
class PYLocalFlavorTests(SimpleTestCase):
|
||||
def test_PyDepartmentSelect(self):
|
||||
py = PyDepartmentSelect()
|
||||
out = u'''<select name="department">
|
||||
out = '''<select name="department">
|
||||
<option value="AG">Alto Paraguay</option>
|
||||
<option value="AA">Alto Paran\xe1</option>
|
||||
<option value="AM">Amambay</option>
|
||||
|
|
@ -30,7 +32,7 @@ class PYLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_PyNumberedDepartmentSelect(self):
|
||||
py = PyNumberedDepartmentSelect()
|
||||
out = u'''<select name="department">
|
||||
out = '''<select name="department">
|
||||
<option value="CN">I Concepci\xf3n</option>
|
||||
<option value="SP">II San Pedro</option>
|
||||
<option value="CR">III Cordillera</option>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.ro.forms import (ROCIFField, ROCNPField,
|
||||
ROCountyField, ROCountySelect, ROIBANField, ROPhoneNumberField,
|
||||
ROPostalCodeField)
|
||||
|
|
@ -9,7 +11,7 @@ from django.test import SimpleTestCase
|
|||
class ROLocalFlavorTests(SimpleTestCase):
|
||||
def test_ROCountySelect(self):
|
||||
f = ROCountySelect()
|
||||
out = u'''<select name="county">
|
||||
out = '''<select name="county">
|
||||
<option value="AB">Alba</option>
|
||||
<option value="AR">Arad</option>
|
||||
<option value="AG">Arge\u015f</option>
|
||||
|
|
@ -56,12 +58,12 @@ class ROLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('county', 'CJ'), out)
|
||||
|
||||
def test_ROCIFField(self):
|
||||
error_invalid = [u'Enter a valid CIF.']
|
||||
error_atmost = [u'Ensure this value has at most 10 characters (it has 11).']
|
||||
error_atleast = [u'Ensure this value has at least 2 characters (it has 1).']
|
||||
error_invalid = ['Enter a valid CIF.']
|
||||
error_atmost = ['Ensure this value has at most 10 characters (it has 11).']
|
||||
error_atleast = ['Ensure this value has at least 2 characters (it has 1).']
|
||||
valid = {
|
||||
'21694681': u'21694681',
|
||||
'RO21694681': u'21694681',
|
||||
'21694681': '21694681',
|
||||
'RO21694681': '21694681',
|
||||
}
|
||||
invalid = {
|
||||
'21694680': error_invalid,
|
||||
|
|
@ -71,9 +73,9 @@ class ROLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ROCIFField, valid, invalid)
|
||||
|
||||
def test_ROCNPField(self):
|
||||
error_invalid = [u'Enter a valid CNP.']
|
||||
error_atleast = [u'Ensure this value has at least 13 characters (it has 10).']
|
||||
error_atmost = [u'Ensure this value has at most 13 characters (it has 14).']
|
||||
error_invalid = ['Enter a valid CNP.']
|
||||
error_atleast = ['Ensure this value has at least 13 characters (it has 10).']
|
||||
error_atmost = ['Ensure this value has at most 13 characters (it has 14).']
|
||||
valid = {
|
||||
'1981211204489': '1981211204489',
|
||||
}
|
||||
|
|
@ -87,12 +89,12 @@ class ROLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ROCNPField, valid, invalid)
|
||||
|
||||
def test_ROCountyField(self):
|
||||
error_format = [u'Enter a Romanian county code or name.']
|
||||
error_format = ['Enter a Romanian county code or name.']
|
||||
valid = {
|
||||
'CJ': 'CJ',
|
||||
'cj': 'CJ',
|
||||
u'Argeş': 'AG',
|
||||
u'argeş': 'AG',
|
||||
'Argeş': 'AG',
|
||||
'argeş': 'AG',
|
||||
}
|
||||
invalid = {
|
||||
'Arges': error_format,
|
||||
|
|
@ -100,8 +102,8 @@ class ROLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ROCountyField, valid, invalid)
|
||||
|
||||
def test_ROIBANField(self):
|
||||
error_invalid = [u'Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format']
|
||||
error_atleast = [u'Ensure this value has at least 24 characters (it has 23).']
|
||||
error_invalid = ['Enter a valid IBAN in ROXX-XXXX-XXXX-XXXX-XXXX-XXXX format']
|
||||
error_atleast = ['Ensure this value has at least 24 characters (it has 23).']
|
||||
valid = {
|
||||
'RO56RZBR0000060003291177': 'RO56RZBR0000060003291177',
|
||||
'RO56-RZBR-0000-0600-0329-1177': 'RO56RZBR0000060003291177',
|
||||
|
|
@ -114,9 +116,9 @@ class ROLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ROIBANField, valid, invalid)
|
||||
|
||||
def test_ROPhoneNumberField(self):
|
||||
error_format = [u'Phone numbers must be in XXXX-XXXXXX format.']
|
||||
error_atleast = [u'Ensure this value has at least 10 characters (it has 9).']
|
||||
error_invalid = [u'Phone numbers must be in XXXX-XXXXXX format.']
|
||||
error_format = ['Phone numbers must be in XXXX-XXXXXX format.']
|
||||
error_atleast = ['Ensure this value has at least 10 characters (it has 9).']
|
||||
error_invalid = ['Phone numbers must be in XXXX-XXXXXX format.']
|
||||
valid = {
|
||||
'0264485936': '0264485936',
|
||||
'(0264)-485936': '0264485936',
|
||||
|
|
@ -128,9 +130,9 @@ class ROLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ROPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_ROPostalCodeField(self):
|
||||
error_atleast = [u'Ensure this value has at least 6 characters (it has 5).']
|
||||
error_atmost = [u'Ensure this value has at most 6 characters (it has 7).']
|
||||
error_invalid = [u'Enter a valid postal code in the format XXXXXX']
|
||||
error_atleast = ['Ensure this value has at least 6 characters (it has 5).']
|
||||
error_atmost = ['Ensure this value has at most 6 characters (it has 7).']
|
||||
error_invalid = ['Enter a valid postal code in the format XXXXXX']
|
||||
|
||||
valid = {
|
||||
'400473': '400473',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.ru.forms import *
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
|
@ -6,7 +8,7 @@ from django.test import SimpleTestCase
|
|||
class RULocalFlavorTests(SimpleTestCase):
|
||||
|
||||
def test_RUPassportNumberField(self):
|
||||
error = [u'Enter a passport number in the format XXXX XXXXXX.']
|
||||
error = ['Enter a passport number in the format XXXX XXXXXX.']
|
||||
valid = {
|
||||
'1981 211204': '1981 211204',
|
||||
'0305 967876': '0305 967876',
|
||||
|
|
@ -19,7 +21,7 @@ class RULocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(RUPassportNumberField, valid, invalid)
|
||||
|
||||
def test_RUAlienPassportNumberField(self):
|
||||
error = [u'Enter a passport number in the format XX XXXXXXX.']
|
||||
error = ['Enter a passport number in the format XX XXXXXXX.']
|
||||
valid = {
|
||||
'19 8111204': '19 8111204',
|
||||
'03 0567876': '03 0567876',
|
||||
|
|
@ -32,7 +34,7 @@ class RULocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(RUAlienPassportNumberField, valid, invalid)
|
||||
|
||||
def test_RUPostalCodeField(self):
|
||||
error = [u'Enter a postal code in the format XXXXXX.']
|
||||
error = ['Enter a postal code in the format XXXXXX.']
|
||||
valid = {
|
||||
'987654': '987654',
|
||||
'123456': '123456'
|
||||
|
|
@ -46,7 +48,7 @@ class RULocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_RUCountySelect(self):
|
||||
f = RUCountySelect()
|
||||
out = u'''<select name="county">
|
||||
out = '''<select name="county">
|
||||
<option value="Central Federal County">Central Federal County</option>
|
||||
<option value="South Federal County">South Federal County</option>
|
||||
<option value="North-West Federal County">North-West Federal County</option>
|
||||
|
|
@ -60,7 +62,7 @@ class RULocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_RURegionSelect(self):
|
||||
f = RURegionSelect()
|
||||
out = u'''<select name="region">
|
||||
out = '''<select name="region">
|
||||
<option value="77">Moskva</option>
|
||||
<option value="78">Saint-Peterburg</option>
|
||||
<option value="50">Moskovskaya oblast'</option>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.se.forms import (SECountySelect,
|
||||
SEOrganisationNumberField, SEPersonalIdentityNumberField,
|
||||
SEPostalCodeField)
|
||||
|
|
@ -24,7 +26,7 @@ class SELocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_SECountySelect(self):
|
||||
f = SECountySelect()
|
||||
out = u'''<select name="swedish_county">
|
||||
out = '''<select name="swedish_county">
|
||||
<option value="AB">Stockholm</option>
|
||||
<option value="AC">V\xe4sterbotten</option>
|
||||
<option value="BD">Norrbotten</option>
|
||||
|
|
@ -50,7 +52,7 @@ class SELocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('swedish_county', 'E'), out)
|
||||
|
||||
def test_SEOrganizationNumberField(self):
|
||||
error_invalid = [u'Enter a valid Swedish organisation number.']
|
||||
error_invalid = ['Enter a valid Swedish organisation number.']
|
||||
valid = {
|
||||
'870512-1989': '198705121989',
|
||||
'19870512-1989': '198705121989',
|
||||
|
|
@ -95,8 +97,8 @@ class SELocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(SEOrganisationNumberField, valid, invalid)
|
||||
|
||||
def test_SEPersonalIdentityNumberField(self):
|
||||
error_invalid = [u'Enter a valid Swedish personal identity number.']
|
||||
error_coord = [u'Co-ordination numbers are not allowed.']
|
||||
error_invalid = ['Enter a valid Swedish personal identity number.']
|
||||
error_coord = ['Co-ordination numbers are not allowed.']
|
||||
valid = {
|
||||
'870512-1989': '198705121989',
|
||||
'870512-2128': '198705122128',
|
||||
|
|
@ -148,7 +150,7 @@ class SELocalFlavorTests(SimpleTestCase):
|
|||
field_kwargs=kwargs)
|
||||
|
||||
def test_SEPostalCodeField(self):
|
||||
error_format = [u'Enter a Swedish postal code in the format XXXXX.']
|
||||
error_format = ['Enter a Swedish postal code in the format XXXXX.']
|
||||
valid = {
|
||||
'589 37': '58937',
|
||||
'58937': '58937',
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from datetime import date
|
||||
|
||||
|
|
@ -9,7 +10,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class SILocalFlavorTests(SimpleTestCase):
|
||||
def test_SITaxNumberField(self):
|
||||
error_invalid = [u'Enter a valid tax number in form SIXXXXXXXX']
|
||||
error_invalid = ['Enter a valid tax number in form SIXXXXXXXX']
|
||||
valid = {
|
||||
'15012557': '15012557',
|
||||
'SI15012557': '15012557',
|
||||
|
|
@ -26,9 +27,9 @@ class SILocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(SITaxNumberField, valid, invalid)
|
||||
|
||||
def test_SIEMSOField(self):
|
||||
error_invalid = [u'This field should contain exactly 13 digits.']
|
||||
error_invalid_date = [u'The first 7 digits of the EMSO must represent a valid past date.']
|
||||
error_invalid_chksum = [u'The EMSO is not valid.']
|
||||
error_invalid = ['This field should contain exactly 13 digits.']
|
||||
error_invalid_date = ['The first 7 digits of the EMSO must represent a valid past date.']
|
||||
error_invalid_chksum = ['The EMSO is not valid.']
|
||||
valid = {
|
||||
'0205951500462': '0205951500462',
|
||||
'2309002500068': '2309002500068',
|
||||
|
|
@ -58,7 +59,7 @@ class SILocalFlavorTests(SimpleTestCase):
|
|||
self.assertEqual(f.info, info)
|
||||
|
||||
def test_SIPhoneNumberField(self):
|
||||
error_invalid = [u'Enter phone number in form +386XXXXXXXX or 0XXXXXXXX.']
|
||||
error_invalid = ['Enter phone number in form +386XXXXXXXX or 0XXXXXXXX.']
|
||||
valid = {
|
||||
'+38640999999': '40999999',
|
||||
'+3861999999': '1999999',
|
||||
|
|
@ -81,14 +82,14 @@ class SILocalFlavorTests(SimpleTestCase):
|
|||
'1000': '1000'
|
||||
}
|
||||
invalid = {
|
||||
'1113': [u'Select a valid choice. 1113 is not one of the available choices.'],
|
||||
'111': [u'Select a valid choice. 111 is not one of the available choices.'],
|
||||
'1113': ['Select a valid choice. 1113 is not one of the available choices.'],
|
||||
'111': ['Select a valid choice. 111 is not one of the available choices.'],
|
||||
}
|
||||
self.assertFieldOutput(SIPostalCodeField, valid, invalid)
|
||||
|
||||
def test_SIPostalCodeSelect(self):
|
||||
f = SIPostalCodeSelect()
|
||||
out = u'''<select name="Kranj">
|
||||
out = '''<select name="Kranj">
|
||||
<option value="8341">Adle\u0161i\u010di</option>
|
||||
<option value="5270">Ajdov\u0161\u010dina</option>
|
||||
<option value="6280">Ankaran - Ancarano</option>
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.sk.forms import (SKRegionSelect,
|
||||
SKPostalCodeField, SKDistrictSelect)
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class SKLocalFlavorTests(SimpleTestCase):
|
||||
def test_SKRegionSelect(self):
|
||||
f = SKRegionSelect()
|
||||
out = u'''<select name="regions">
|
||||
out = '''<select name="regions">
|
||||
<option value="BB">Banska Bystrica region</option>
|
||||
<option value="BA">Bratislava region</option>
|
||||
<option value="KE">Kosice region</option>
|
||||
|
|
@ -21,7 +23,7 @@ class SKLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_SKDistrictSelect(self):
|
||||
f = SKDistrictSelect()
|
||||
out = u'''<select name="Districts">
|
||||
out = '''<select name="Districts">
|
||||
<option value="BB">Banska Bystrica</option>
|
||||
<option value="BS">Banska Stiavnica</option>
|
||||
<option value="BJ">Bardejov</option>
|
||||
|
|
@ -105,7 +107,7 @@ class SKLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('Districts', 'RK'), out)
|
||||
|
||||
def test_SKPostalCodeField(self):
|
||||
error_format = [u'Enter a postal code in the format XXXXX or XXX XX.']
|
||||
error_format = ['Enter a postal code in the format XXXXX or XXX XX.']
|
||||
valid = {
|
||||
'91909': '91909',
|
||||
'917 01': '91701',
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.contrib.localflavor.us.forms import (USZipCodeField,
|
||||
USPhoneNumberField, USStateField, USStateSelect,
|
||||
|
|
@ -23,7 +23,7 @@ class USLocalFlavorTests(SimpleTestCase):
|
|||
"""Test that required USStateFields throw appropriate errors."""
|
||||
form = USPlaceForm({'state':'GA', 'name':'Place in GA'})
|
||||
self.assertFalse(form.is_valid())
|
||||
self.assertEqual(form.errors['state_req'], [u'This field is required.'])
|
||||
self.assertEqual(form.errors['state_req'], ['This field is required.'])
|
||||
|
||||
def test_field_blank_option(self):
|
||||
"""Test that the empty option is there."""
|
||||
|
|
@ -164,7 +164,7 @@ class USLocalFlavorTests(SimpleTestCase):
|
|||
|
||||
def test_USStateSelect(self):
|
||||
f = USStateSelect()
|
||||
out = u'''<select name="state">
|
||||
out = '''<select name="state">
|
||||
<option value="AL">Alabama</option>
|
||||
<option value="AK">Alaska</option>
|
||||
<option value="AS">American Samoa</option>
|
||||
|
|
@ -228,7 +228,7 @@ class USLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('state', 'IL'), out)
|
||||
|
||||
def test_USZipCodeField(self):
|
||||
error_format = [u'Enter a zip code in the format XXXXX or XXXXX-XXXX.']
|
||||
error_format = ['Enter a zip code in the format XXXXX or XXXXX-XXXX.']
|
||||
valid = {
|
||||
'60606': '60606',
|
||||
60606: '60606',
|
||||
|
|
@ -243,7 +243,7 @@ class USLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(USZipCodeField, valid, invalid)
|
||||
|
||||
def test_USPhoneNumberField(self):
|
||||
error_format = [u'Phone numbers must be in XXX-XXX-XXXX format.']
|
||||
error_format = ['Phone numbers must be in XXX-XXX-XXXX format.']
|
||||
valid = {
|
||||
'312-555-1212': '312-555-1212',
|
||||
'3125551212': '312-555-1212',
|
||||
|
|
@ -261,7 +261,7 @@ class USLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(USPhoneNumberField, valid, invalid)
|
||||
|
||||
def test_USStateField(self):
|
||||
error_invalid = [u'Enter a U.S. state or territory.']
|
||||
error_invalid = ['Enter a U.S. state or territory.']
|
||||
valid = {
|
||||
'il': 'IL',
|
||||
'IL': 'IL',
|
||||
|
|
@ -274,7 +274,7 @@ class USLocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(USStateField, valid, invalid)
|
||||
|
||||
def test_USSocialSecurityNumberField(self):
|
||||
error_invalid = [u'Enter a valid U.S. Social Security number in XXX-XX-XXXX format.']
|
||||
error_invalid = ['Enter a valid U.S. Social Security number in XXX-XX-XXXX format.']
|
||||
|
||||
valid = {
|
||||
'987-65-4330': '987-65-4330',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.uy.forms import UYDepartamentSelect, UYCIField
|
||||
from django.contrib.localflavor.uy.util import get_validation_digit
|
||||
|
||||
|
|
@ -7,7 +9,7 @@ from django.test import SimpleTestCase
|
|||
class UYLocalFlavorTests(SimpleTestCase):
|
||||
def test_UYDepartmentSelect(self):
|
||||
f = UYDepartamentSelect()
|
||||
out = u'''<select name="departamentos">
|
||||
out = '''<select name="departamentos">
|
||||
<option value="G">Artigas</option>
|
||||
<option value="A">Canelones</option>
|
||||
<option value="E">Cerro Largo</option>
|
||||
|
|
@ -31,8 +33,8 @@ class UYLocalFlavorTests(SimpleTestCase):
|
|||
self.assertHTMLEqual(f.render('departamentos', 'S'), out)
|
||||
|
||||
def test_UYCIField(self):
|
||||
error_format = [u'Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format.']
|
||||
error_invalid = [u'Enter a valid CI number.']
|
||||
error_format = ['Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format.']
|
||||
error_invalid = ['Enter a valid CI number.']
|
||||
valid = {
|
||||
'4098053': '4098053',
|
||||
'409805-3': '409805-3',
|
||||
|
|
@ -42,9 +44,9 @@ class UYLocalFlavorTests(SimpleTestCase):
|
|||
'1.005.411-2': '1.005.411-2',
|
||||
}
|
||||
invalid = {
|
||||
'foo': [u'Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format.'],
|
||||
'409805-2': [u'Enter a valid CI number.'],
|
||||
'1.005.411-5': [u'Enter a valid CI number.'],
|
||||
'foo': ['Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format.'],
|
||||
'409805-2': ['Enter a valid CI number.'],
|
||||
'1.005.411-5': ['Enter a valid CI number.'],
|
||||
}
|
||||
self.assertFieldOutput(UYCIField, valid, invalid)
|
||||
self.assertEqual(get_validation_digit(409805), 3)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.localflavor.za.forms import ZAIDField, ZAPostCodeField
|
||||
|
||||
from django.test import SimpleTestCase
|
||||
|
|
@ -5,7 +7,7 @@ from django.test import SimpleTestCase
|
|||
|
||||
class ZALocalFlavorTests(SimpleTestCase):
|
||||
def test_ZAIDField(self):
|
||||
error_invalid = [u'Enter a valid South African ID number']
|
||||
error_invalid = ['Enter a valid South African ID number']
|
||||
valid = {
|
||||
'0002290001003': '0002290001003',
|
||||
'000229 0001 003': '0002290001003',
|
||||
|
|
@ -18,7 +20,7 @@ class ZALocalFlavorTests(SimpleTestCase):
|
|||
self.assertFieldOutput(ZAIDField, valid, invalid)
|
||||
|
||||
def test_ZAPostCodeField(self):
|
||||
error_invalid = [u'Enter a valid South African postal code']
|
||||
error_invalid = ['Enter a valid South African postal code']
|
||||
valid = {
|
||||
'0000': '0000',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import copy
|
||||
import warnings
|
||||
|
||||
|
|
@ -215,8 +217,8 @@ class AdminEmailHandlerTest(TestCase):
|
|||
AdminErrorHandler to fail.
|
||||
Refs #17281.
|
||||
"""
|
||||
message = u'Message \r\n with newlines'
|
||||
expected_subject = u'ERROR: Message \\r\\n with newlines'
|
||||
message = 'Message \r\n with newlines'
|
||||
expected_subject = 'ERROR: Message \\r\\n with newlines'
|
||||
|
||||
self.assertEqual(len(mail.outbox), 0)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
|
||||
|
|
@ -71,4 +73,4 @@ class CarDriver(models.Model):
|
|||
driver = models.ForeignKey('Driver', to_field='name')
|
||||
|
||||
def __unicode__(self, ):
|
||||
return u"pk=%s car=%s driver=%s" % (str(self.pk), self.car, self.driver)
|
||||
return "pk=%s car=%s driver=%s" % (str(self.pk), self.car, self.driver)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
# coding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import asyncore
|
||||
import email
|
||||
import os
|
||||
|
|
@ -137,7 +139,7 @@ class MailTests(TestCase):
|
|||
self.assertEqual(email.message()['To'], '=?utf-8?q?S=C3=BCrname=2C_Firstname?= <to@example.com>, other@example.com')
|
||||
|
||||
def test_unicode_headers(self):
|
||||
email = EmailMessage(u"Gżegżółka", "Content", "from@example.com", ["to@example.com"],
|
||||
email = EmailMessage("Gżegżółka", "Content", "from@example.com", ["to@example.com"],
|
||||
headers={"Sender": '"Firstname Sürname" <sender@example.com>',
|
||||
"Comments": 'My Sürname is non-ASCII'})
|
||||
message = email.message()
|
||||
|
|
@ -158,7 +160,7 @@ class MailTests(TestCase):
|
|||
msg.attach_alternative(html_content, "text/html")
|
||||
msg.encoding = 'iso-8859-1'
|
||||
self.assertEqual(msg.message()['To'], '=?iso-8859-1?q?S=FCrname=2C_Firstname?= <to@example.com>')
|
||||
self.assertEqual(msg.message()['Subject'].encode(), u'=?iso-8859-1?q?Message_from_Firstname_S=FCrname?=')
|
||||
self.assertEqual(msg.message()['Subject'].encode(), '=?iso-8859-1?q?Message_from_Firstname_S=FCrname?=')
|
||||
|
||||
def test_encoding(self):
|
||||
"""
|
||||
|
|
@ -205,11 +207,11 @@ class MailTests(TestCase):
|
|||
content = 'This is the message.'
|
||||
msg = EmailMessage(subject, content, from_email, [to], headers=headers)
|
||||
# Unicode in file name
|
||||
msg.attach(u"une pièce jointe.pdf", b"%PDF-1.4.%...", mimetype="application/pdf")
|
||||
msg.attach("une pièce jointe.pdf", b"%PDF-1.4.%...", mimetype="application/pdf")
|
||||
msg_str = msg.message().as_string()
|
||||
message = email.message_from_string(msg_str)
|
||||
payload = message.get_payload()
|
||||
self.assertEqual(payload[1].get_filename(), u'une pièce jointe.pdf')
|
||||
self.assertEqual(payload[1].get_filename(), 'une pièce jointe.pdf')
|
||||
|
||||
def test_dummy_backend(self):
|
||||
"""
|
||||
|
|
@ -310,7 +312,7 @@ class MailTests(TestCase):
|
|||
self.assertFalse(b'Content-Transfer-Encoding: quoted-printable' in s)
|
||||
self.assertTrue(b'Content-Transfer-Encoding: 8bit' in s)
|
||||
|
||||
msg = EmailMessage('Subject', u'Body with non latin characters: А Б В Г Д Е Ж Ѕ З И І К Л М Н О П.', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
|
||||
msg = EmailMessage('Subject', 'Body with non latin characters: А Б В Г Д Е Ж Ѕ З И І К Л М Н О П.', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
|
||||
s = msg.message().as_string()
|
||||
self.assertFalse(b'Content-Transfer-Encoding: quoted-printable' in s)
|
||||
self.assertTrue(b'Content-Transfer-Encoding: 8bit' in s)
|
||||
|
|
@ -444,7 +446,7 @@ class BaseEmailBackendTests(object):
|
|||
"""
|
||||
Regression test for #14301
|
||||
"""
|
||||
self.assertTrue(send_mail('Subject', 'Content', 'from@öäü.com', [u'to@öäü.com']))
|
||||
self.assertTrue(send_mail('Subject', 'Content', 'from@öäü.com', ['to@öäü.com']))
|
||||
message = self.get_the_message()
|
||||
self.assertEqual(message.get('subject'), 'Subject')
|
||||
self.assertEqual(message.get('from'), 'from@xn--4ca9at.com')
|
||||
|
|
@ -452,7 +454,7 @@ class BaseEmailBackendTests(object):
|
|||
|
||||
self.flush_mailbox()
|
||||
m = EmailMessage('Subject', 'Content', 'from@öäü.com',
|
||||
[u'to@öäü.com'], cc=[u'cc@öäü.com'])
|
||||
['to@öäü.com'], cc=['cc@öäü.com'])
|
||||
m.send()
|
||||
message = self.get_the_message()
|
||||
self.assertEqual(message.get('subject'), 'Subject')
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
"""
|
||||
Regression tests for a few ForeignKey bugs.
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
|
@ -43,4 +44,4 @@ class Relation(models.Model):
|
|||
right = models.ForeignKey(Record, related_name='right_set')
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s - %s" % (self.left.category.name, self.right.category.name)
|
||||
return "%s - %s" % (self.left.category.name, self.right.category.name)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
from decimal import Decimal
|
||||
|
|
@ -78,8 +78,8 @@ class DecimalFieldTests(test.TestCase):
|
|||
|
||||
def test_format(self):
|
||||
f = models.DecimalField(max_digits=5, decimal_places=1)
|
||||
self.assertEqual(f._format(f.to_python(2)), u'2.0')
|
||||
self.assertEqual(f._format(f.to_python('2.6')), u'2.6')
|
||||
self.assertEqual(f._format(f.to_python(2)), '2.0')
|
||||
self.assertEqual(f._format(f.to_python('2.6')), '2.6')
|
||||
self.assertEqual(f._format(None), None)
|
||||
|
||||
def test_get_db_prep_lookup(self):
|
||||
|
|
@ -92,7 +92,7 @@ class DecimalFieldTests(test.TestCase):
|
|||
We should be able to filter decimal fields using strings (#8023)
|
||||
"""
|
||||
Foo.objects.create(id=1, a='abc', d=Decimal("12.34"))
|
||||
self.assertEqual(list(Foo.objects.filter(d=u'1.23')), [])
|
||||
self.assertEqual(list(Foo.objects.filter(d='1.23')), [])
|
||||
|
||||
def test_save_without_float_conversion(self):
|
||||
"""
|
||||
|
|
@ -168,7 +168,7 @@ class BooleanFieldTests(unittest.TestCase):
|
|||
Test that BooleanField with choices and defaults doesn't generate a
|
||||
formfield with the blank option (#9640, #10549).
|
||||
"""
|
||||
choices = [(1, u'Si'), (2, 'No')]
|
||||
choices = [(1, 'Si'), (2, 'No')]
|
||||
f = models.BooleanField(choices=choices, default=1, null=True)
|
||||
self.assertEqual(f.formfield().choices, [('', '---------')] + choices)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
|
|
@ -13,7 +15,7 @@ class Triple(models.Model):
|
|||
right = models.IntegerField()
|
||||
|
||||
class Meta:
|
||||
unique_together = (('left', 'middle'), (u'middle', u'right'))
|
||||
unique_together = (('left', 'middle'), ('middle', 'right'))
|
||||
|
||||
class FilePathModel(models.Model):
|
||||
path = models.FilePathField(path=os.path.dirname(__file__), match=".*\.py$", blank=True)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from datetime import date
|
||||
|
||||
|
|
@ -134,7 +134,7 @@ class ManyToManyCallableInitialTests(TestCase):
|
|||
# Create a ModelForm, instantiate it, and check that the output is as expected
|
||||
ModelForm = modelform_factory(Article, formfield_callback=formfield_for_dbfield)
|
||||
form = ModelForm()
|
||||
self.assertHTMLEqual(form.as_ul(), u"""<li><label for="id_headline">Headline:</label> <input id="id_headline" type="text" name="headline" maxlength="100" /></li>
|
||||
self.assertHTMLEqual(form.as_ul(), """<li><label for="id_headline">Headline:</label> <input id="id_headline" type="text" name="headline" maxlength="100" /></li>
|
||||
<li><label for="id_publications">Publications:</label> <select multiple="multiple" name="publications" id="id_publications">
|
||||
<option value="%d" selected="selected">First Book</option>
|
||||
<option value="%d" selected="selected">Second Book</option>
|
||||
|
|
@ -194,7 +194,7 @@ class OneToOneFieldTests(TestCase):
|
|||
publication = Publication.objects.create(title="Pravda",
|
||||
date_published=date(1991, 8, 22))
|
||||
author = Author.objects.create(publication=publication, full_name='John Doe')
|
||||
form = AuthorForm({'publication':u'', 'full_name':'John Doe'}, instance=author)
|
||||
form = AuthorForm({'publication':'', 'full_name':'John Doe'}, instance=author)
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertEqual(form.cleaned_data['publication'], None)
|
||||
author = form.save()
|
||||
|
|
@ -212,7 +212,7 @@ class OneToOneFieldTests(TestCase):
|
|||
publication = Publication.objects.create(title="Pravda",
|
||||
date_published=date(1991, 8, 22))
|
||||
author = Author1.objects.create(publication=publication, full_name='John Doe')
|
||||
form = AuthorForm({'publication':u'', 'full_name':'John Doe'}, instance=author)
|
||||
form = AuthorForm({'publication':'', 'full_name':'John Doe'}, instance=author)
|
||||
self.assertTrue(not form.is_valid())
|
||||
|
||||
|
||||
|
|
@ -419,7 +419,7 @@ class FileFieldTests(unittest.TestCase):
|
|||
data={'myfile-clear': 'true'})
|
||||
self.assertTrue(not form.is_valid())
|
||||
self.assertEqual(form.errors['myfile'],
|
||||
[u'Please either submit a file or check the clear checkbox, not both.'])
|
||||
['Please either submit a file or check the clear checkbox, not both.'])
|
||||
rendered = unicode(form)
|
||||
self.assertTrue('something.txt' in rendered)
|
||||
self.assertTrue('myfile-clear' in rendered)
|
||||
|
|
@ -435,8 +435,8 @@ class EditionForm(forms.ModelForm):
|
|||
|
||||
class UniqueErrorsTests(TestCase):
|
||||
def setUp(self):
|
||||
self.author1 = Person.objects.create(name=u'Author #1')
|
||||
self.author2 = Person.objects.create(name=u'Author #2')
|
||||
self.author1 = Person.objects.create(name='Author #1')
|
||||
self.author2 = Person.objects.create(name='Author #2')
|
||||
self.pub1 = Publication.objects.create(title='Pub #1', date_published=date(2000, 10, 31))
|
||||
self.pub2 = Publication.objects.create(title='Pub #2', date_published=date(2004, 1, 5))
|
||||
form = EditionForm(data={'author': self.author1.pk, 'publication': self.pub1.pk, 'edition': 1, 'isbn': '9783161484100'})
|
||||
|
|
@ -444,13 +444,13 @@ class UniqueErrorsTests(TestCase):
|
|||
|
||||
def test_unique_error_message(self):
|
||||
form = EditionForm(data={'author': self.author1.pk, 'publication': self.pub2.pk, 'edition': 1, 'isbn': '9783161484100'})
|
||||
self.assertEqual(form.errors, {'isbn': [u'Edition with this Isbn already exists.']})
|
||||
self.assertEqual(form.errors, {'isbn': ['Edition with this Isbn already exists.']})
|
||||
|
||||
def test_unique_together_error_message(self):
|
||||
form = EditionForm(data={'author': self.author1.pk, 'publication': self.pub1.pk, 'edition': 2, 'isbn': '9783161489999'})
|
||||
self.assertEqual(form.errors, {'__all__': [u'Edition with this Author and Publication already exists.']})
|
||||
self.assertEqual(form.errors, {'__all__': ['Edition with this Author and Publication already exists.']})
|
||||
form = EditionForm(data={'author': self.author2.pk, 'publication': self.pub1.pk, 'edition': 1, 'isbn': '9783161487777'})
|
||||
self.assertEqual(form.errors, {'__all__': [u'Edition with this Publication and Edition already exists.']})
|
||||
self.assertEqual(form.errors, {'__all__': ['Edition with this Publication and Edition already exists.']})
|
||||
|
||||
|
||||
class EmptyFieldsTestCase(TestCase):
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django import forms
|
||||
from django.forms.formsets import BaseFormSet, DELETION_FIELD_NAME
|
||||
|
|
@ -22,13 +22,13 @@ class InlineFormsetTests(TestCase):
|
|||
|
||||
# Now create a new User and UserSite instance
|
||||
data = {
|
||||
'serial': u'1',
|
||||
'username': u'apollo13',
|
||||
'usersite_set-TOTAL_FORMS': u'1',
|
||||
'usersite_set-INITIAL_FORMS': u'0',
|
||||
'usersite_set-MAX_NUM_FORMS': u'0',
|
||||
'usersite_set-0-data': u'10',
|
||||
'usersite_set-0-user': u'apollo13'
|
||||
'serial': '1',
|
||||
'username': 'apollo13',
|
||||
'usersite_set-TOTAL_FORMS': '1',
|
||||
'usersite_set-INITIAL_FORMS': '0',
|
||||
'usersite_set-MAX_NUM_FORMS': '0',
|
||||
'usersite_set-0-data': '10',
|
||||
'usersite_set-0-user': 'apollo13'
|
||||
}
|
||||
user = User()
|
||||
form = Form(data)
|
||||
|
|
@ -42,47 +42,47 @@ class InlineFormsetTests(TestCase):
|
|||
form_set.save()
|
||||
usersite = UserSite.objects.all().values()
|
||||
self.assertEqual(usersite[0]['data'], 10)
|
||||
self.assertEqual(usersite[0]['user_id'], u'apollo13')
|
||||
self.assertEqual(usersite[0]['user_id'], 'apollo13')
|
||||
else:
|
||||
self.fail('Errors found on formset:%s' % form_set.errors)
|
||||
|
||||
# Now update the UserSite instance
|
||||
data = {
|
||||
'usersite_set-TOTAL_FORMS': u'1',
|
||||
'usersite_set-INITIAL_FORMS': u'1',
|
||||
'usersite_set-MAX_NUM_FORMS': u'0',
|
||||
'usersite_set-TOTAL_FORMS': '1',
|
||||
'usersite_set-INITIAL_FORMS': '1',
|
||||
'usersite_set-MAX_NUM_FORMS': '0',
|
||||
'usersite_set-0-id': unicode(usersite[0]['id']),
|
||||
'usersite_set-0-data': u'11',
|
||||
'usersite_set-0-user': u'apollo13'
|
||||
'usersite_set-0-data': '11',
|
||||
'usersite_set-0-user': 'apollo13'
|
||||
}
|
||||
form_set = FormSet(data, instance=user)
|
||||
if form_set.is_valid():
|
||||
form_set.save()
|
||||
usersite = UserSite.objects.all().values()
|
||||
self.assertEqual(usersite[0]['data'], 11)
|
||||
self.assertEqual(usersite[0]['user_id'], u'apollo13')
|
||||
self.assertEqual(usersite[0]['user_id'], 'apollo13')
|
||||
else:
|
||||
self.fail('Errors found on formset:%s' % form_set.errors)
|
||||
|
||||
# Now add a new UserSite instance
|
||||
data = {
|
||||
'usersite_set-TOTAL_FORMS': u'2',
|
||||
'usersite_set-INITIAL_FORMS': u'1',
|
||||
'usersite_set-MAX_NUM_FORMS': u'0',
|
||||
'usersite_set-TOTAL_FORMS': '2',
|
||||
'usersite_set-INITIAL_FORMS': '1',
|
||||
'usersite_set-MAX_NUM_FORMS': '0',
|
||||
'usersite_set-0-id': unicode(usersite[0]['id']),
|
||||
'usersite_set-0-data': u'11',
|
||||
'usersite_set-0-user': u'apollo13',
|
||||
'usersite_set-1-data': u'42',
|
||||
'usersite_set-1-user': u'apollo13'
|
||||
'usersite_set-0-data': '11',
|
||||
'usersite_set-0-user': 'apollo13',
|
||||
'usersite_set-1-data': '42',
|
||||
'usersite_set-1-user': 'apollo13'
|
||||
}
|
||||
form_set = FormSet(data, instance=user)
|
||||
if form_set.is_valid():
|
||||
form_set.save()
|
||||
usersite = UserSite.objects.all().values().order_by('data')
|
||||
self.assertEqual(usersite[0]['data'], 11)
|
||||
self.assertEqual(usersite[0]['user_id'], u'apollo13')
|
||||
self.assertEqual(usersite[0]['user_id'], 'apollo13')
|
||||
self.assertEqual(usersite[1]['data'], 42)
|
||||
self.assertEqual(usersite[1]['user_id'], u'apollo13')
|
||||
self.assertEqual(usersite[1]['user_id'], 'apollo13')
|
||||
else:
|
||||
self.fail('Errors found on formset:%s' % form_set.errors)
|
||||
|
||||
|
|
@ -98,11 +98,11 @@ class InlineFormsetTests(TestCase):
|
|||
|
||||
# Now create a new Restaurant and Manager instance
|
||||
data = {
|
||||
'name': u"Guido's House of Pasta",
|
||||
'manager_set-TOTAL_FORMS': u'1',
|
||||
'manager_set-INITIAL_FORMS': u'0',
|
||||
'manager_set-MAX_NUM_FORMS': u'0',
|
||||
'manager_set-0-name': u'Guido Van Rossum'
|
||||
'name': "Guido's House of Pasta",
|
||||
'manager_set-TOTAL_FORMS': '1',
|
||||
'manager_set-INITIAL_FORMS': '0',
|
||||
'manager_set-MAX_NUM_FORMS': '0',
|
||||
'manager_set-0-name': 'Guido Van Rossum'
|
||||
}
|
||||
restaurant = User()
|
||||
form = Form(data)
|
||||
|
|
@ -121,11 +121,11 @@ class InlineFormsetTests(TestCase):
|
|||
|
||||
# Now update the Manager instance
|
||||
data = {
|
||||
'manager_set-TOTAL_FORMS': u'1',
|
||||
'manager_set-INITIAL_FORMS': u'1',
|
||||
'manager_set-MAX_NUM_FORMS': u'0',
|
||||
'manager_set-TOTAL_FORMS': '1',
|
||||
'manager_set-INITIAL_FORMS': '1',
|
||||
'manager_set-MAX_NUM_FORMS': '0',
|
||||
'manager_set-0-id': unicode(manager[0]['id']),
|
||||
'manager_set-0-name': u'Terry Gilliam'
|
||||
'manager_set-0-name': 'Terry Gilliam'
|
||||
}
|
||||
form_set = FormSet(data, instance=restaurant)
|
||||
if form_set.is_valid():
|
||||
|
|
@ -137,12 +137,12 @@ class InlineFormsetTests(TestCase):
|
|||
|
||||
# Now add a new Manager instance
|
||||
data = {
|
||||
'manager_set-TOTAL_FORMS': u'2',
|
||||
'manager_set-INITIAL_FORMS': u'1',
|
||||
'manager_set-MAX_NUM_FORMS': u'0',
|
||||
'manager_set-TOTAL_FORMS': '2',
|
||||
'manager_set-INITIAL_FORMS': '1',
|
||||
'manager_set-MAX_NUM_FORMS': '0',
|
||||
'manager_set-0-id': unicode(manager[0]['id']),
|
||||
'manager_set-0-name': u'Terry Gilliam',
|
||||
'manager_set-1-name': u'John Cleese'
|
||||
'manager_set-0-name': 'Terry Gilliam',
|
||||
'manager_set-1-name': 'John Cleese'
|
||||
}
|
||||
form_set = FormSet(data, instance=restaurant)
|
||||
if form_set.is_valid():
|
||||
|
|
@ -185,12 +185,12 @@ class InlineFormsetTests(TestCase):
|
|||
|
||||
# Add a new host, modify previous host, and save-as-new
|
||||
data = {
|
||||
'host_set-TOTAL_FORMS': u'2',
|
||||
'host_set-INITIAL_FORMS': u'1',
|
||||
'host_set-MAX_NUM_FORMS': u'0',
|
||||
'host_set-TOTAL_FORMS': '2',
|
||||
'host_set-INITIAL_FORMS': '1',
|
||||
'host_set-MAX_NUM_FORMS': '0',
|
||||
'host_set-0-id': unicode(host1.id),
|
||||
'host_set-0-hostname': u'tranquility.hub.dal.net',
|
||||
'host_set-1-hostname': u'matrix.de.eu.dal.net'
|
||||
'host_set-0-hostname': 'tranquility.hub.dal.net',
|
||||
'host_set-1-hostname': 'matrix.de.eu.dal.net'
|
||||
}
|
||||
|
||||
# To save a formset as new, it needs a new hub instance
|
||||
|
|
@ -212,7 +212,7 @@ class InlineFormsetTests(TestCase):
|
|||
formset = FormSet(instance=user, initial=[{'data': 41}, {'data': 42}])
|
||||
self.assertEqual(formset.forms[0].initial['data'], 7)
|
||||
self.assertEqual(formset.extra_forms[0].initial['data'], 41)
|
||||
self.assertTrue(u'value="42"' in formset.extra_forms[1].as_p())
|
||||
self.assertTrue('value="42"' in formset.extra_forms[1].as_p())
|
||||
|
||||
|
||||
class FormsetTests(TestCase):
|
||||
|
|
@ -222,15 +222,15 @@ class FormsetTests(TestCase):
|
|||
'''
|
||||
Formset = modelformset_factory(User)
|
||||
data = {
|
||||
'form-TOTAL_FORMS': u'2',
|
||||
'form-INITIAL_FORMS': u'0',
|
||||
'form-MAX_NUM_FORMS': u'0',
|
||||
'form-TOTAL_FORMS': '2',
|
||||
'form-INITIAL_FORMS': '0',
|
||||
'form-MAX_NUM_FORMS': '0',
|
||||
'form-0-id': '',
|
||||
'form-0-username': u'apollo13',
|
||||
'form-0-serial': u'1',
|
||||
'form-0-username': 'apollo13',
|
||||
'form-0-serial': '1',
|
||||
'form-1-id': '',
|
||||
'form-1-username': u'apollo13',
|
||||
'form-1-serial': u'2',
|
||||
'form-1-username': 'apollo13',
|
||||
'form-1-serial': '2',
|
||||
}
|
||||
formset = Formset(data)
|
||||
# check if the returned error classes are correct
|
||||
|
|
@ -244,17 +244,17 @@ class FormsetTests(TestCase):
|
|||
def test_initial_data(self):
|
||||
User.objects.create(username="bibi", serial=1)
|
||||
Formset = modelformset_factory(User, extra=2)
|
||||
formset = Formset(initial=[{'username': u'apollo11'}, {'username': u'apollo12'}])
|
||||
formset = Formset(initial=[{'username': 'apollo11'}, {'username': 'apollo12'}])
|
||||
self.assertEqual(formset.forms[0].initial['username'], "bibi")
|
||||
self.assertEqual(formset.extra_forms[0].initial['username'], "apollo11")
|
||||
self.assertTrue(u'value="apollo12"' in formset.extra_forms[1].as_p())
|
||||
self.assertTrue('value="apollo12"' in formset.extra_forms[1].as_p())
|
||||
|
||||
def test_extraneous_query_is_not_run(self):
|
||||
Formset = modelformset_factory(Network)
|
||||
data = {u'test-TOTAL_FORMS': u'1',
|
||||
u'test-INITIAL_FORMS': u'0',
|
||||
u'test-MAX_NUM_FORMS': u'',
|
||||
u'test-0-name': u'Random Place', }
|
||||
data = {'test-TOTAL_FORMS': '1',
|
||||
'test-INITIAL_FORMS': '0',
|
||||
'test-MAX_NUM_FORMS': '',
|
||||
'test-0-name': 'Random Place', }
|
||||
with self.assertNumQueries(1):
|
||||
formset = Formset(data, prefix="test")
|
||||
formset.save()
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
import datetime
|
||||
|
||||
from django.db import models
|
||||
|
|
@ -10,20 +12,20 @@ class Place(models.Model):
|
|||
ordering = ('name',)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s the place" % self.name
|
||||
return "%s the place" % self.name
|
||||
|
||||
class Restaurant(Place):
|
||||
serves_hot_dogs = models.BooleanField()
|
||||
serves_pizza = models.BooleanField()
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s the restaurant" % self.name
|
||||
return "%s the restaurant" % self.name
|
||||
|
||||
class ItalianRestaurant(Restaurant):
|
||||
serves_gnocchi = models.BooleanField()
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s the italian restaurant" % self.name
|
||||
return "%s the italian restaurant" % self.name
|
||||
|
||||
class ParkingLot(Place):
|
||||
# An explicit link to the parent (we can control the attribute name).
|
||||
|
|
@ -31,7 +33,7 @@ class ParkingLot(Place):
|
|||
capacity = models.IntegerField()
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s the parking lot" % self.name
|
||||
return "%s the parking lot" % self.name
|
||||
|
||||
class ParkingLot2(Place):
|
||||
# In lieu of any other connector, an existing OneToOneField will be
|
||||
|
|
@ -108,7 +110,7 @@ class AuditBase(models.Model):
|
|||
|
||||
class Meta:
|
||||
abstract = True
|
||||
verbose_name_plural = u'Audits'
|
||||
verbose_name_plural = 'Audits'
|
||||
|
||||
class CertificationAudit(AuditBase):
|
||||
class Meta(AuditBase.Meta):
|
||||
|
|
|
|||
|
|
@ -1,8 +1,7 @@
|
|||
"""
|
||||
Regression tests for Model inheritance behavior.
|
||||
"""
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
from operator import attrgetter
|
||||
|
|
@ -53,14 +52,14 @@ class ModelInheritanceTest(TestCase):
|
|||
|
||||
dicts = list(Restaurant.objects.values('name','serves_hot_dogs'))
|
||||
self.assertEqual(dicts, [{
|
||||
'name': u"Guido's House of Pasta",
|
||||
'name': "Guido's House of Pasta",
|
||||
'serves_hot_dogs': True
|
||||
}])
|
||||
|
||||
dicts = list(ItalianRestaurant.objects.values(
|
||||
'name','serves_hot_dogs','serves_gnocchi'))
|
||||
self.assertEqual(dicts, [{
|
||||
'name': u"Guido's House of Pasta",
|
||||
'name': "Guido's House of Pasta",
|
||||
'serves_gnocchi': True,
|
||||
'serves_hot_dogs': True,
|
||||
}])
|
||||
|
|
@ -68,7 +67,7 @@ class ModelInheritanceTest(TestCase):
|
|||
dicts = list(ParkingLot.objects.values('name','capacity'))
|
||||
self.assertEqual(dicts, [{
|
||||
'capacity': 100,
|
||||
'name': u'Main St',
|
||||
'name': 'Main St',
|
||||
}])
|
||||
|
||||
# You can also update objects when using a raw save.
|
||||
|
|
@ -95,14 +94,14 @@ class ModelInheritanceTest(TestCase):
|
|||
|
||||
dicts = list(Restaurant.objects.values('name','serves_hot_dogs'))
|
||||
self.assertEqual(dicts, [{
|
||||
'name': u"Guido's All New House of Pasta",
|
||||
'name': "Guido's All New House of Pasta",
|
||||
'serves_hot_dogs': False,
|
||||
}])
|
||||
|
||||
dicts = list(ItalianRestaurant.objects.values(
|
||||
'name', 'serves_hot_dogs', 'serves_gnocchi'))
|
||||
self.assertEqual(dicts, [{
|
||||
'name': u"Guido's All New House of Pasta",
|
||||
'name': "Guido's All New House of Pasta",
|
||||
'serves_gnocchi': False,
|
||||
'serves_hot_dogs': False,
|
||||
}])
|
||||
|
|
@ -110,7 +109,7 @@ class ModelInheritanceTest(TestCase):
|
|||
dicts = list(ParkingLot.objects.values('name','capacity'))
|
||||
self.assertEqual(dicts, [{
|
||||
'capacity': 50,
|
||||
'name': u'Derelict lot',
|
||||
'name': 'Derelict lot',
|
||||
}])
|
||||
|
||||
# If you try to raw_save a parent attribute onto a child object,
|
||||
|
|
@ -124,7 +123,7 @@ class ModelInheritanceTest(TestCase):
|
|||
dicts = list(ItalianRestaurant.objects.values(
|
||||
'name','serves_hot_dogs','serves_gnocchi'))
|
||||
self.assertEqual(dicts, [{
|
||||
'name': u"Guido's All New House of Pasta",
|
||||
'name': "Guido's All New House of Pasta",
|
||||
'serves_gnocchi': False,
|
||||
'serves_hot_dogs': False,
|
||||
}])
|
||||
|
|
@ -372,7 +371,7 @@ class ModelInheritanceTest(TestCase):
|
|||
# verbose_name.
|
||||
self.assertEqual(
|
||||
InternalCertificationAudit._meta.verbose_name_plural,
|
||||
u'Audits'
|
||||
'Audits'
|
||||
)
|
||||
|
||||
def test_inherited_nullable_exclude(self):
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
Regression tests for the interaction between model inheritance and
|
||||
select_related().
|
||||
"""
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
|
@ -13,14 +14,14 @@ class Place(models.Model):
|
|||
ordering = ('name',)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s the place" % self.name
|
||||
return "%s the place" % self.name
|
||||
|
||||
class Restaurant(Place):
|
||||
serves_sushi = models.BooleanField()
|
||||
serves_steak = models.BooleanField()
|
||||
|
||||
def __unicode__(self):
|
||||
return u"%s the restaurant" % self.name
|
||||
return "%s the restaurant" % self.name
|
||||
|
||||
class Person(models.Model):
|
||||
name = models.CharField(max_length=50)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import datetime
|
||||
from operator import attrgetter
|
||||
|
|
@ -38,7 +38,7 @@ class ModelTests(TestCase):
|
|||
|
||||
# Empty strings should be returned as Unicode
|
||||
a = Article.objects.get(pk=a.pk)
|
||||
self.assertEqual(a.misc_data, u'')
|
||||
self.assertEqual(a.misc_data, '')
|
||||
self.assertIs(type(a.misc_data), unicode)
|
||||
|
||||
def test_long_textfield(self):
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue