diff options
| author | Claude Paroz <claude@2xlibre.net> | 2012-06-07 18:08:47 +0200 |
|---|---|---|
| committer | Claude Paroz <claude@2xlibre.net> | 2012-06-07 18:08:47 +0200 |
| commit | 4a103086d5c67fa4fcc53c106c9fdf644c742dd8 (patch) | |
| tree | 3df00600c27f6369f7561c3b8ddf2f97d2d341d9 /tests/regressiontests | |
| parent | 706fd9adc0b6587c7f96a834c757708e64fcf615 (diff) | |
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.
Diffstat (limited to 'tests/regressiontests')
142 files changed, 2857 insertions, 2685 deletions
diff --git a/tests/regressiontests/admin_custom_urls/tests.py b/tests/regressiontests/admin_custom_urls/tests.py index 6197827793..4a6235e7d5 100644 --- a/tests/regressiontests/admin_custom_urls/tests.py +++ b/tests/regressiontests/admin_custom_urls/tests.py @@ -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) diff --git a/tests/regressiontests/admin_filters/models.py b/tests/regressiontests/admin_filters/models.py index deb8ee88c3..371c67061f 100644 --- a/tests/regressiontests/admin_filters/models.py +++ b/tests/regressiontests/admin_filters/models.py @@ -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
\ No newline at end of file + return self.name diff --git a/tests/regressiontests/admin_filters/tests.py b/tests/regressiontests/admin_filters/tests.py index 8c9788b985..72cc5d7ee5 100644 --- a/tests/regressiontests/admin_filters/tests.py +++ b/tests/regressiontests/admin_filters/tests.py @@ -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') diff --git a/tests/regressiontests/admin_inlines/models.py b/tests/regressiontests/admin_inlines/models.py index f2add00288..d7526d6020 100644 --- a/tests/regressiontests/admin_inlines/models.py +++ b/tests/regressiontests/admin_inlines/models.py @@ -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)
\ No newline at end of file + last_name = models.CharField(max_length=100) diff --git a/tests/regressiontests/admin_inlines/tests.py b/tests/regressiontests/admin_inlines/tests.py index 2cca67012f..94790af56c 100644 --- a/tests/regressiontests/admin_inlines/tests.py +++ b/tests/regressiontests/admin_inlines/tests.py @@ -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) diff --git a/tests/regressiontests/admin_ordering/tests.py b/tests/regressiontests/admin_ordering/tests.py index b82f150f40..faae834f93 100644 --- a/tests/regressiontests/admin_ordering/tests.py +++ b/tests/regressiontests/admin_ordering/tests.py @@ -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) diff --git a/tests/regressiontests/admin_util/tests.py b/tests/regressiontests/admin_util/tests.py index 055f494dcd..ba2be363ca 100644 --- a/tests/regressiontests/admin_util/tests.py +++ b/tests/regressiontests/admin_util/tests.py @@ -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()) diff --git a/tests/regressiontests/admin_views/admin.py b/tests/regressiontests/admin_views/admin.py index d9607496c3..01a19e6373 100644 --- a/tests/regressiontests/admin_views/admin.py +++ b/tests/regressiontests/admin_views/admin.py @@ -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): diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py index 17533f9f80..5aa775656b 100644 --- a/tests/regressiontests/admin_views/models.py +++ b/tests/regressiontests/admin_views/models.py @@ -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'), ) diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index f9a9b15114..e220011fdc 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -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',)) diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py index 1973d5069f..81a4ec7aba 100644 --- a/tests/regressiontests/admin_widgets/models.py +++ b/tests/regressiontests/admin_widgets/models.py @@ -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): """ diff --git a/tests/regressiontests/admin_widgets/tests.py b/tests/regressiontests/admin_widgets/tests.py index be1d294051..4b115431c1 100644 --- a/tests/regressiontests/admin_widgets/tests.py +++ b/tests/regressiontests/admin_widgets/tests.py @@ -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 diff --git a/tests/regressiontests/aggregation_regress/tests.py b/tests/regressiontests/aggregation_regress/tests.py index 36a54c0b17..e5f12e5781 100644 --- a/tests/regressiontests/aggregation_regress/tests.py +++ b/tests/regressiontests/aggregation_regress/tests.py @@ -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, ) diff --git a/tests/regressiontests/backends/models.py b/tests/regressiontests/backends/models.py index 1a78a87eca..af4952dce8 100644 --- a/tests/regressiontests/backends/models.py +++ b/tests/regressiontests/backends/models.py @@ -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): diff --git a/tests/regressiontests/backends/tests.py b/tests/regressiontests/backends/tests.py index 109e1a5bcc..2569a3236f 100644 --- a/tests/regressiontests/backends/tests.py +++ b/tests/regressiontests/backends/tests.py @@ -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 diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py index 88fe5471cf..264ef74abd 100644 --- a/tests/regressiontests/cache/tests.py +++ b/tests/regressiontests/cache/tests.py @@ -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") diff --git a/tests/regressiontests/comment_tests/tests/comment_view_tests.py b/tests/regressiontests/comment_tests/tests/comment_view_tests.py index 5edc58fe2d..429f3b2bf2 100644 --- a/tests/regressiontests/comment_tests/tests/comment_view_tests.py +++ b/tests/regressiontests/comment_tests/tests/comment_view_tests.py @@ -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) diff --git a/tests/regressiontests/csrf_tests/tests.py b/tests/regressiontests/csrf_tests/tests.py index 2d9b4f755f..52fd3ea1c7 100644 --- a/tests/regressiontests/csrf_tests/tests.py +++ b/tests/regressiontests/csrf_tests/tests.py @@ -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): """ diff --git a/tests/regressiontests/custom_columns_regress/models.py b/tests/regressiontests/custom_columns_regress/models.py index fcb5a4be44..c768c12772 100644 --- a/tests/regressiontests/custom_columns_regress/models.py +++ b/tests/regressiontests/custom_columns_regress/models.py @@ -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' diff --git a/tests/regressiontests/datatypes/tests.py b/tests/regressiontests/datatypes/tests.py index fb94e831ba..f8f6802041 100644 --- a/tests/regressiontests/datatypes/tests.py +++ b/tests/regressiontests/datatypes/tests.py @@ -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)) diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py index 7d0b8d61b6..ffa0a01132 100644 --- a/tests/regressiontests/defaultfilters/tests.py +++ b/tests/regressiontests/defaultfilters/tests.py @@ -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('http://short.com/', 20), '<a href='\ + '"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://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>') 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>') # 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') diff --git a/tests/regressiontests/expressions_regress/models.py b/tests/regressiontests/expressions_regress/models.py index 0ebccb5084..f3b6999377 100644 --- a/tests/regressiontests/expressions_regress/models.py +++ b/tests/regressiontests/expressions_regress/models.py @@ -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) diff --git a/tests/regressiontests/extra_regress/models.py b/tests/regressiontests/extra_regress/models.py index 868331e508..7d2a6fab34 100644 --- a/tests/regressiontests/extra_regress/models.py +++ b/tests/regressiontests/extra_regress/models.py @@ -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) diff --git a/tests/regressiontests/extra_regress/tests.py b/tests/regressiontests/extra_regress/tests.py index 3fcafef5de..f591900afe 100644 --- a/tests/regressiontests/extra_regress/tests.py +++ b/tests/regressiontests/extra_regress/tests.py @@ -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): diff --git a/tests/regressiontests/file_storage/tests.py b/tests/regressiontests/file_storage/tests.py index 87035d96d7..51b2207867 100644 --- a/tests/regressiontests/file_storage/tests.py +++ b/tests/regressiontests/file_storage/tests.py @@ -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). diff --git a/tests/regressiontests/file_uploads/tests.py b/tests/regressiontests/file_uploads/tests.py index c8de8035f9..a7424639b4 100644 --- a/tests/regressiontests/file_uploads/tests.py +++ b/tests/regressiontests/file_uploads/tests.py @@ -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) diff --git a/tests/regressiontests/file_uploads/views.py b/tests/regressiontests/file_uploads/views.py index ae6842d0a7..73b09cbcff 100644 --- a/tests/regressiontests/file_uploads/views.py +++ b/tests/regressiontests/file_uploads/views.py @@ -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() diff --git a/tests/regressiontests/fixtures_regress/models.py b/tests/regressiontests/fixtures_regress/models.py index 5a16f175a1..5d23a21dcd 100644 --- a/tests/regressiontests/fixtures_regress/models.py +++ b/tests/regressiontests/fixtures_regress/models.py @@ -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()) diff --git a/tests/regressiontests/fixtures_regress/tests.py b/tests/regressiontests/fixtures_regress/tests.py index c0b811bea2..405c566826 100644 --- a/tests/regressiontests/fixtures_regress/tests.py +++ b/tests/regressiontests/fixtures_regress/tests.py @@ -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): diff --git a/tests/regressiontests/forms/models.py b/tests/regressiontests/forms/models.py index 939055785a..18e6ddce6d 100644 --- a/tests/regressiontests/forms/models.py +++ b/tests/regressiontests/forms/models.py @@ -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): diff --git a/tests/regressiontests/forms/tests/error_messages.py b/tests/regressiontests/forms/tests/error_messages.py index 7153a3b0a6..f69b419483 100644 --- a/tests/regressiontests/forms/tests/error_messages.py +++ b/tests/regressiontests/forms/tests/error_messages.py @@ -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']) diff --git a/tests/regressiontests/forms/tests/extra.py b/tests/regressiontests/forms/tests/extra.py index c873af7a8c..25b21123c4 100644 --- a/tests/regressiontests/forms/tests/extra.py +++ b/tests/regressiontests/forms/tests/extra.py @@ -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 diff --git a/tests/regressiontests/forms/tests/fields.py b/tests/regressiontests/forms/tests/fields.py index 4d442de382..ebeb19c8fc 100644 --- a/tests/regressiontests/forms/tests/fields.py +++ b/tests/regressiontests/forms/tests/fields.py @@ -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']) diff --git a/tests/regressiontests/forms/tests/forms.py b/tests/regressiontests/forms/tests/forms.py index 16cf46fc29..7e1c8384a0 100644 --- a/tests/regressiontests/forms/tests/forms.py +++ b/tests/regressiontests/forms/tests/forms.py @@ -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'}) diff --git a/tests/regressiontests/forms/tests/formsets.py b/tests/regressiontests/forms/tests/formsets.py index 05ef978c45..3decd1f085 100644 --- a/tests/regressiontests/forms/tests/formsets.py +++ b/tests/regressiontests/forms/tests/formsets.py @@ -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) diff --git a/tests/regressiontests/forms/tests/models.py b/tests/regressiontests/forms/tests/models.py index 7f569651c7..5bea49b840 100644 --- a/tests/regressiontests/forms/tests/models.py +++ b/tests/regressiontests/forms/tests/models.py @@ -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)) diff --git a/tests/regressiontests/forms/tests/regressions.py b/tests/regressiontests/forms/tests/regressions.py index 20c11f99a8..45f51eef2f 100644 --- a/tests/regressiontests/forms/tests/regressions.py +++ b/tests/regressiontests/forms/tests/regressions.py @@ -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): """ diff --git a/tests/regressiontests/forms/tests/util.py b/tests/regressiontests/forms/tests/util.py index dddb8c7e56..280049c97b 100644 --- a/tests/regressiontests/forms/tests/util.py +++ b/tests/regressiontests/forms/tests/util.py @@ -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)), diff --git a/tests/regressiontests/forms/tests/widgets.py b/tests/regressiontests/forms/tests/widgets.py index 8630b45666..d5f6334fe9 100644 --- a/tests/regressiontests/forms/tests/widgets.py +++ b/tests/regressiontests/forms/tests/widgets.py @@ -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): """ diff --git a/tests/regressiontests/generic_inline_admin/tests.py b/tests/regressiontests/generic_inline_admin/tests.py index c6c1eeac5a..c97f4c4f03 100644 --- a/tests/regressiontests/generic_inline_admin/tests.py +++ b/tests/regressiontests/generic_inline_admin/tests.py @@ -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, diff --git a/tests/regressiontests/httpwrappers/tests.py b/tests/regressiontests/httpwrappers/tests.py index 218c5b5b3b..870324bffb 100644 --- a/tests/regressiontests/httpwrappers/tests.py +++ b/tests/regressiontests/httpwrappers/tests.py @@ -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: diff --git a/tests/regressiontests/i18n/contenttypes/tests.py b/tests/regressiontests/i18n/contenttypes/tests.py index baaa6ada42..bed94da8b8 100644 --- a/tests/regressiontests/i18n/contenttypes/tests.py +++ b/tests/regressiontests/i18n/contenttypes/tests.py @@ -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') diff --git a/tests/regressiontests/i18n/patterns/tests.py b/tests/regressiontests/i18n/patterns/tests.py index 8ef7377ecc..73c9f56711 100644 --- a/tests/regressiontests/i18n/patterns/tests.py +++ b/tests/regressiontests/i18n/patterns/tests.py @@ -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/']) diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py index 78e41321af..f91d7c042b 100644 --- a/tests/regressiontests/i18n/tests.py +++ b/tests/regressiontests/i18n/tests.py @@ -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) diff --git a/tests/regressiontests/inline_formsets/tests.py b/tests/regressiontests/inline_formsets/tests.py index 59187ee6d0..8ad84f221f 100644 --- a/tests/regressiontests/inline_formsets/tests.py +++ b/tests/regressiontests/inline_formsets/tests.py @@ -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) diff --git a/tests/regressiontests/introspection/models.py b/tests/regressiontests/introspection/models.py index 02a8d71549..3ca80c5aab 100644 --- a/tests/regressiontests/introspection/models.py +++ b/tests/regressiontests/introspection/models.py @@ -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) diff --git a/tests/regressiontests/introspection/tests.py b/tests/regressiontests/introspection/tests.py index ca58f04494..06736a68cb 100644 --- a/tests/regressiontests/introspection/tests.py +++ b/tests/regressiontests/introspection/tests.py @@ -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() diff --git a/tests/regressiontests/localflavor/ar/tests.py b/tests/regressiontests/localflavor/ar/tests.py index b48fb7cff3..0731c3ce9b 100644 --- a/tests/regressiontests/localflavor/ar/tests.py +++ b/tests/regressiontests/localflavor/ar/tests.py @@ -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) diff --git a/tests/regressiontests/localflavor/at/tests.py b/tests/regressiontests/localflavor/at/tests.py index d47e970123..9123ba4e88 100644 --- a/tests/regressiontests/localflavor/at/tests.py +++ b/tests/regressiontests/localflavor/at/tests.py @@ -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', } diff --git a/tests/regressiontests/localflavor/au/tests.py b/tests/regressiontests/localflavor/au/tests.py index 42673a902b..69472f0935 100644 --- a/tests/regressiontests/localflavor/au/tests.py +++ b/tests/regressiontests/localflavor/au/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/be/tests.py b/tests/regressiontests/localflavor/be/tests.py index 6cfdfb3ffa..69f77eb35f 100644 --- a/tests/regressiontests/localflavor/be/tests.py +++ b/tests/regressiontests/localflavor/be/tests.py @@ -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> diff --git a/tests/regressiontests/localflavor/br/tests.py b/tests/regressiontests/localflavor/br/tests.py index 5777bc3500..abee2d7336 100644 --- a/tests/regressiontests/localflavor/br/tests.py +++ b/tests/regressiontests/localflavor/br/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/ca/tests.py b/tests/regressiontests/localflavor/ca/tests.py index 903321b2cd..8f0eb9c702 100644 --- a/tests/regressiontests/localflavor/ca/tests.py +++ b/tests/regressiontests/localflavor/ca/tests.py @@ -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', } diff --git a/tests/regressiontests/localflavor/ch/tests.py b/tests/regressiontests/localflavor/ch/tests.py index 17660a46d2..f3491855a2 100644 --- a/tests/regressiontests/localflavor/ch/tests.py +++ b/tests/regressiontests/localflavor/ch/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/cl/tests.py b/tests/regressiontests/localflavor/cl/tests.py index 250f5645a0..47cae6bd48 100644 --- a/tests/regressiontests/localflavor/cl/tests.py +++ b/tests/regressiontests/localflavor/cl/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/cn/tests.py b/tests/regressiontests/localflavor/cn/tests.py index ac4331cca9..24bcc6e392 100644 --- a/tests/regressiontests/localflavor/cn/tests.py +++ b/tests/regressiontests/localflavor/cn/tests.py @@ -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, diff --git a/tests/regressiontests/localflavor/co/tests.py b/tests/regressiontests/localflavor/co/tests.py index 4ab1768082..68b20c4308 100644 --- a/tests/regressiontests/localflavor/co/tests.py +++ b/tests/regressiontests/localflavor/co/tests.py @@ -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> diff --git a/tests/regressiontests/localflavor/cz/tests.py b/tests/regressiontests/localflavor/cz/tests.py index b8b46b34bb..e4cc05e0c6 100644 --- a/tests/regressiontests/localflavor/cz/tests.py +++ b/tests/regressiontests/localflavor/cz/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/de/tests.py b/tests/regressiontests/localflavor/de/tests.py index a3f75ce2f1..bdf0bcf44f 100644 --- a/tests/regressiontests/localflavor/de/tests.py +++ b/tests/regressiontests/localflavor/de/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/ec/tests.py b/tests/regressiontests/localflavor/ec/tests.py index 0ebe2f396d..c72d77e558 100644 --- a/tests/regressiontests/localflavor/ec/tests.py +++ b/tests/regressiontests/localflavor/ec/tests.py @@ -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> diff --git a/tests/regressiontests/localflavor/es/tests.py b/tests/regressiontests/localflavor/es/tests.py index c13eac6d61..3fc072cffc 100644 --- a/tests/regressiontests/localflavor/es/tests.py +++ b/tests/regressiontests/localflavor/es/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/fi/tests.py b/tests/regressiontests/localflavor/fi/tests.py index 70fce29f45..bfd2e2a010 100644 --- a/tests/regressiontests/localflavor/fi/tests.py +++ b/tests/regressiontests/localflavor/fi/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/fr/tests.py b/tests/regressiontests/localflavor/fr/tests.py index 9b65e1ec0d..55f8a68b3b 100644 --- a/tests/regressiontests/localflavor/fr/tests.py +++ b/tests/regressiontests/localflavor/fr/tests.py @@ -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> diff --git a/tests/regressiontests/localflavor/gb/tests.py b/tests/regressiontests/localflavor/gb/tests.py index b32162d365..5a267105d5 100644 --- a/tests/regressiontests/localflavor/gb/tests.py +++ b/tests/regressiontests/localflavor/gb/tests.py @@ -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) diff --git a/tests/regressiontests/localflavor/generic/tests.py b/tests/regressiontests/localflavor/generic/tests.py index 12462a0ef2..4db26838fa 100644 --- a/tests/regressiontests/localflavor/generic/tests.py +++ b/tests/regressiontests/localflavor/generic/tests.py @@ -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), diff --git a/tests/regressiontests/localflavor/hr/tests.py b/tests/regressiontests/localflavor/hr/tests.py index 7050d7c5c2..c1b097c03f 100644 --- a/tests/regressiontests/localflavor/hr/tests.py +++ b/tests/regressiontests/localflavor/hr/tests.py @@ -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', } diff --git a/tests/regressiontests/localflavor/id/tests.py b/tests/regressiontests/localflavor/id/tests.py index 580083d3bf..dd712d02a3 100644 --- a/tests/regressiontests/localflavor/id/tests.py +++ b/tests/regressiontests/localflavor/id/tests.py @@ -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, diff --git a/tests/regressiontests/localflavor/ie/tests.py b/tests/regressiontests/localflavor/ie/tests.py index 712f492a65..717fa9d1c7 100644 --- a/tests/regressiontests/localflavor/ie/tests.py +++ b/tests/regressiontests/localflavor/ie/tests.py @@ -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> diff --git a/tests/regressiontests/localflavor/il/tests.py b/tests/regressiontests/localflavor/il/tests.py index a3b91e850e..1b87cf2c19 100644 --- a/tests/regressiontests/localflavor/il/tests.py +++ b/tests/regressiontests/localflavor/il/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/in_/tests.py b/tests/regressiontests/localflavor/in_/tests.py index d079aed1f5..57d50f0ebf 100644 --- a/tests/regressiontests/localflavor/in_/tests.py +++ b/tests/regressiontests/localflavor/in_/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/is_/tests.py b/tests/regressiontests/localflavor/is_/tests.py index 835df6a8a7..3ed15e937b 100644 --- a/tests/regressiontests/localflavor/is_/tests.py +++ b/tests/regressiontests/localflavor/is_/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/it/tests.py b/tests/regressiontests/localflavor/it/tests.py index b774141c2d..680444400f 100644 --- a/tests/regressiontests/localflavor/it/tests.py +++ b/tests/regressiontests/localflavor/it/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/jp/tests.py b/tests/regressiontests/localflavor/jp/tests.py index 7f0e8be184..d31c679bcb 100644 --- a/tests/regressiontests/localflavor/jp/tests.py +++ b/tests/regressiontests/localflavor/jp/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/kw/tests.py b/tests/regressiontests/localflavor/kw/tests.py index c46241f4f4..0cf645b918 100644 --- a/tests/regressiontests/localflavor/kw/tests.py +++ b/tests/regressiontests/localflavor/kw/tests.py @@ -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', } diff --git a/tests/regressiontests/localflavor/mk/tests.py b/tests/regressiontests/localflavor/mk/tests.py index 3a8add6e34..fdc9932f6a 100644 --- a/tests/regressiontests/localflavor/mk/tests.py +++ b/tests/regressiontests/localflavor/mk/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/mx/tests.py b/tests/regressiontests/localflavor/mx/tests.py index 1657596223..5eeceec276 100644 --- a/tests/regressiontests/localflavor/mx/tests.py +++ b/tests/regressiontests/localflavor/mx/tests.py @@ -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, diff --git a/tests/regressiontests/localflavor/nl/tests.py b/tests/regressiontests/localflavor/nl/tests.py index ebe4cc138f..ef8bd3cf35 100644 --- a/tests/regressiontests/localflavor/nl/tests.py +++ b/tests/regressiontests/localflavor/nl/tests.py @@ -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', } diff --git a/tests/regressiontests/localflavor/pl/tests.py b/tests/regressiontests/localflavor/pl/tests.py index bc4d260abc..82c5d615c1 100644 --- a/tests/regressiontests/localflavor/pl/tests.py +++ b/tests/regressiontests/localflavor/pl/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/pt/tests.py b/tests/regressiontests/localflavor/pt/tests.py index 29aa1781eb..051e78084b 100644 --- a/tests/regressiontests/localflavor/pt/tests.py +++ b/tests/regressiontests/localflavor/pt/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/py/tests.py b/tests/regressiontests/localflavor/py/tests.py index 772039d3ef..fb7836dc9a 100644 --- a/tests/regressiontests/localflavor/py/tests.py +++ b/tests/regressiontests/localflavor/py/tests.py @@ -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> diff --git a/tests/regressiontests/localflavor/ro/tests.py b/tests/regressiontests/localflavor/ro/tests.py index 407e614b3e..2e63bdc619 100644 --- a/tests/regressiontests/localflavor/ro/tests.py +++ b/tests/regressiontests/localflavor/ro/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/ru/tests.py b/tests/regressiontests/localflavor/ru/tests.py index bb85fe8181..758c5ae7d8 100644 --- a/tests/regressiontests/localflavor/ru/tests.py +++ b/tests/regressiontests/localflavor/ru/tests.py @@ -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> diff --git a/tests/regressiontests/localflavor/se/tests.py b/tests/regressiontests/localflavor/se/tests.py index ead9053ea2..f61c61e9d4 100644 --- a/tests/regressiontests/localflavor/se/tests.py +++ b/tests/regressiontests/localflavor/se/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/si/tests.py b/tests/regressiontests/localflavor/si/tests.py index 4e8fe25c47..123683bff4 100644 --- a/tests/regressiontests/localflavor/si/tests.py +++ b/tests/regressiontests/localflavor/si/tests.py @@ -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> diff --git a/tests/regressiontests/localflavor/sk/tests.py b/tests/regressiontests/localflavor/sk/tests.py index 319fd827be..b51fee2681 100644 --- a/tests/regressiontests/localflavor/sk/tests.py +++ b/tests/regressiontests/localflavor/sk/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/us/tests.py b/tests/regressiontests/localflavor/us/tests.py index a7f84ac4ae..45967cb9dc 100644 --- a/tests/regressiontests/localflavor/us/tests.py +++ b/tests/regressiontests/localflavor/us/tests.py @@ -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', diff --git a/tests/regressiontests/localflavor/uy/tests.py b/tests/regressiontests/localflavor/uy/tests.py index eda0068d3e..5bbbbe4122 100644 --- a/tests/regressiontests/localflavor/uy/tests.py +++ b/tests/regressiontests/localflavor/uy/tests.py @@ -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) diff --git a/tests/regressiontests/localflavor/za/tests.py b/tests/regressiontests/localflavor/za/tests.py index 948bd7f320..81e8d65eec 100644 --- a/tests/regressiontests/localflavor/za/tests.py +++ b/tests/regressiontests/localflavor/za/tests.py @@ -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', } diff --git a/tests/regressiontests/logging_tests/tests.py b/tests/regressiontests/logging_tests/tests.py index 887897a16f..4ae3c1b1a9 100644 --- a/tests/regressiontests/logging_tests/tests.py +++ b/tests/regressiontests/logging_tests/tests.py @@ -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) diff --git a/tests/regressiontests/m2m_through_regress/models.py b/tests/regressiontests/m2m_through_regress/models.py index ff71348931..1db3de1a4c 100644 --- a/tests/regressiontests/m2m_through_regress/models.py +++ b/tests/regressiontests/m2m_through_regress/models.py @@ -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) diff --git a/tests/regressiontests/mail/tests.py b/tests/regressiontests/mail/tests.py index 85e73c197f..cdd6dd1b9e 100644 --- a/tests/regressiontests/mail/tests.py +++ b/tests/regressiontests/mail/tests.py @@ -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') diff --git a/tests/regressiontests/many_to_one_regress/models.py b/tests/regressiontests/many_to_one_regress/models.py index 53348a753d..1e59c4c8c8 100644 --- a/tests/regressiontests/many_to_one_regress/models.py +++ b/tests/regressiontests/many_to_one_regress/models.py @@ -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) diff --git a/tests/regressiontests/model_fields/tests.py b/tests/regressiontests/model_fields/tests.py index 9c0f888a99..5d3d42ef2a 100644 --- a/tests/regressiontests/model_fields/tests.py +++ b/tests/regressiontests/model_fields/tests.py @@ -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) diff --git a/tests/regressiontests/model_forms_regress/models.py b/tests/regressiontests/model_forms_regress/models.py index d070a9be75..9259e260f0 100644 --- a/tests/regressiontests/model_forms_regress/models.py +++ b/tests/regressiontests/model_forms_regress/models.py @@ -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) diff --git a/tests/regressiontests/model_forms_regress/tests.py b/tests/regressiontests/model_forms_regress/tests.py index d33f52af9a..a0f9bba170 100644 --- a/tests/regressiontests/model_forms_regress/tests.py +++ b/tests/regressiontests/model_forms_regress/tests.py @@ -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): diff --git a/tests/regressiontests/model_formsets_regress/tests.py b/tests/regressiontests/model_formsets_regress/tests.py index f1e935e2ea..68ebe48bde 100644 --- a/tests/regressiontests/model_formsets_regress/tests.py +++ b/tests/regressiontests/model_formsets_regress/tests.py @@ -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() diff --git a/tests/regressiontests/model_inheritance_regress/models.py b/tests/regressiontests/model_inheritance_regress/models.py index 161569bcb3..5481298963 100644 --- a/tests/regressiontests/model_inheritance_regress/models.py +++ b/tests/regressiontests/model_inheritance_regress/models.py @@ -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): diff --git a/tests/regressiontests/model_inheritance_regress/tests.py b/tests/regressiontests/model_inheritance_regress/tests.py index 3cb6f9d603..6855d70071 100644 --- a/tests/regressiontests/model_inheritance_regress/tests.py +++ b/tests/regressiontests/model_inheritance_regress/tests.py @@ -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): diff --git a/tests/regressiontests/model_inheritance_select_related/models.py b/tests/regressiontests/model_inheritance_select_related/models.py index d5f4152d0a..f810531bff 100644 --- a/tests/regressiontests/model_inheritance_select_related/models.py +++ b/tests/regressiontests/model_inheritance_select_related/models.py @@ -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) diff --git a/tests/regressiontests/model_regress/tests.py b/tests/regressiontests/model_regress/tests.py index 77bb4f23eb..7ba9d421d7 100644 --- a/tests/regressiontests/model_regress/tests.py +++ b/tests/regressiontests/model_regress/tests.py @@ -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): diff --git a/tests/regressiontests/modeladmin/tests.py b/tests/regressiontests/modeladmin/tests.py index 04b02eb36b..c2a1ca05ba 100644 --- a/tests/regressiontests/modeladmin/tests.py +++ b/tests/regressiontests/modeladmin/tests.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from datetime import date @@ -15,7 +15,7 @@ from django.core.exceptions import ImproperlyConfigured from django.forms.models import BaseModelFormSet from django.forms.widgets import Select from django.test import TestCase -from django.test.utils import override_settings +from django.test.utils import override_settings, str_prefix from django.utils import unittest from .models import Band, Concert, ValidationTestModel, ValidationTestInlineModel @@ -387,13 +387,13 @@ class ModelAdminTests(TestCase): Select) self.assertEqual( list(cmafa.base_fields['main_band'].widget.choices), - [(u'', u'---------'), (self.band.id, u'The Doors')]) + [('', '---------'), (self.band.id, 'The Doors')]) self.assertEqual( type(cmafa.base_fields['opening_band'].widget.widget), Select) self.assertEqual( list(cmafa.base_fields['opening_band'].widget.choices), - [(u'', u'---------'), (self.band.id, u'The Doors')]) + [('', '---------'), (self.band.id, 'The Doors')]) self.assertEqual(type(cmafa.base_fields['day'].widget), Select) self.assertEqual(list(cmafa.base_fields['day'].widget.choices), @@ -427,7 +427,7 @@ class ModelAdminTests(TestCase): self.assertEqual(cmafa.base_fields['main_band'].widget.attrs, {'class': 'radiolist inline'}) self.assertEqual(list(cmafa.base_fields['main_band'].widget.choices), - [(self.band.id, u'The Doors')]) + [(self.band.id, 'The Doors')]) self.assertEqual( type(cmafa.base_fields['opening_band'].widget.widget), @@ -436,7 +436,7 @@ class ModelAdminTests(TestCase): {'class': 'radiolist'}) self.assertEqual( list(cmafa.base_fields['opening_band'].widget.choices), - [(u'', u'None'), (self.band.id, u'The Doors')]) + [('', 'None'), (self.band.id, 'The Doors')]) self.assertEqual(type(cmafa.base_fields['day'].widget), AdminRadioSelect) @@ -450,7 +450,7 @@ class ModelAdminTests(TestCase): self.assertEqual(cmafa.base_fields['transport'].widget.attrs, {'class': 'radiolist inline'}) self.assertEqual(list(cmafa.base_fields['transport'].widget.choices), - [('', u'None'), (1, 'Plane'), (2, 'Train'), (3, 'Bus')]) + [('', 'None'), (1, 'Plane'), (2, 'Train'), (3, 'Bus')]) class AdminConcertForm(forms.ModelForm): class Meta: @@ -947,7 +947,7 @@ class ValidationTests(unittest.TestCase): self.assertRaisesRegexp( ImproperlyConfigured, - "ValidationTestModelAdmin.list_display\[0\], 'non_existent_field' is not a callable or an attribute of 'ValidationTestModelAdmin' or found in the model 'ValidationTestModel'.", + str_prefix("ValidationTestModelAdmin.list_display\[0\], %(_)s'non_existent_field' is not a callable or an attribute of 'ValidationTestModelAdmin' or found in the model 'ValidationTestModel'."), validate, ValidationTestModelAdmin, ValidationTestModel, diff --git a/tests/regressiontests/multiple_database/tests.py b/tests/regressiontests/multiple_database/tests.py index e2f433ece1..595c5edb3b 100644 --- a/tests/regressiontests/multiple_database/tests.py +++ b/tests/regressiontests/multiple_database/tests.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals import datetime import pickle @@ -172,14 +172,14 @@ class QueryTestCase(TestCase): # Check that queries work across m2m joins self.assertEqual(list(Book.objects.using('default').filter(authors__name='Marty Alchin').values_list('title', flat=True)), - [u'Pro Django']) + ['Pro Django']) self.assertEqual(list(Book.objects.using('other').filter(authors__name='Marty Alchin').values_list('title', flat=True)), []) self.assertEqual(list(Book.objects.using('default').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)), []) self.assertEqual(list(Book.objects.using('other').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)), - [u'Dive into Python']) + ['Dive into Python']) # Reget the objects to clear caches dive = Book.objects.using('other').get(title="Dive into Python") @@ -187,10 +187,10 @@ class QueryTestCase(TestCase): # Retrive related object by descriptor. Related objects should be database-baound self.assertEqual(list(dive.authors.all().values_list('name', flat=True)), - [u'Mark Pilgrim']) + ['Mark Pilgrim']) self.assertEqual(list(mark.book_set.all().values_list('title', flat=True)), - [u'Dive into Python']) + ['Dive into Python']) def test_m2m_forward_operations(self): "M2M forward manipulations are all constrained to a single DB" @@ -211,14 +211,14 @@ class QueryTestCase(TestCase): dive.authors.add(john) self.assertEqual(list(Book.objects.using('other').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)), - [u'Dive into Python']) + ['Dive into Python']) self.assertEqual(list(Book.objects.using('other').filter(authors__name='John Smith').values_list('title', flat=True)), - [u'Dive into Python']) + ['Dive into Python']) # Remove the second author dive.authors.remove(john) self.assertEqual(list(Book.objects.using('other').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)), - [u'Dive into Python']) + ['Dive into Python']) self.assertEqual(list(Book.objects.using('other').filter(authors__name='John Smith').values_list('title', flat=True)), []) @@ -234,7 +234,7 @@ class QueryTestCase(TestCase): self.assertEqual(list(Book.objects.using('other').filter(authors__name='Mark Pilgrim').values_list('title', flat=True)), []) self.assertEqual(list(Book.objects.using('other').filter(authors__name='Jane Brown').values_list('title', flat=True)), - [u'Dive into Python']) + ['Dive into Python']) def test_m2m_reverse_operations(self): "M2M reverse manipulations are all constrained to a single DB" @@ -254,14 +254,14 @@ class QueryTestCase(TestCase): # Add a books to the m2m mark.book_set.add(grease) self.assertEqual(list(Person.objects.using('other').filter(book__title='Dive into Python').values_list('name', flat=True)), - [u'Mark Pilgrim']) + ['Mark Pilgrim']) self.assertEqual(list(Person.objects.using('other').filter(book__title='Greasemonkey Hacks').values_list('name', flat=True)), - [u'Mark Pilgrim']) + ['Mark Pilgrim']) # Remove a book from the m2m mark.book_set.remove(grease) self.assertEqual(list(Person.objects.using('other').filter(book__title='Dive into Python').values_list('name', flat=True)), - [u'Mark Pilgrim']) + ['Mark Pilgrim']) self.assertEqual(list(Person.objects.using('other').filter(book__title='Greasemonkey Hacks').values_list('name', flat=True)), []) @@ -277,7 +277,7 @@ class QueryTestCase(TestCase): self.assertEqual(list(Person.objects.using('other').filter(book__title='Dive into Python').values_list('name', flat=True)), []) self.assertEqual(list(Person.objects.using('other').filter(book__title='Dive into HTML5').values_list('name', flat=True)), - [u'Mark Pilgrim']) + ['Mark Pilgrim']) def test_m2m_cross_database_protection(self): "Operations that involve sharing M2M objects across databases raise an error" @@ -418,14 +418,14 @@ class QueryTestCase(TestCase): # Check that queries work across foreign key joins self.assertEqual(list(Person.objects.using('default').filter(edited__title='Pro Django').values_list('name', flat=True)), - [u'George Vilches']) + ['George Vilches']) self.assertEqual(list(Person.objects.using('other').filter(edited__title='Pro Django').values_list('name', flat=True)), []) self.assertEqual(list(Person.objects.using('default').filter(edited__title='Dive into Python').values_list('name', flat=True)), []) self.assertEqual(list(Person.objects.using('other').filter(edited__title='Dive into Python').values_list('name', flat=True)), - [u'Chris Mills']) + ['Chris Mills']) # Reget the objects to clear caches chris = Person.objects.using('other').get(name="Chris Mills") @@ -433,7 +433,7 @@ class QueryTestCase(TestCase): # Retrive related object by descriptor. Related objects should be database-baound self.assertEqual(list(chris.edited.values_list('title', flat=True)), - [u'Dive into Python']) + ['Dive into Python']) def test_foreign_key_reverse_operations(self): "FK reverse manipulations are all constrained to a single DB" @@ -454,16 +454,16 @@ class QueryTestCase(TestCase): chris.edited.add(html5) self.assertEqual(list(Person.objects.using('other').filter(edited__title='Dive into HTML5').values_list('name', flat=True)), - [u'Chris Mills']) + ['Chris Mills']) self.assertEqual(list(Person.objects.using('other').filter(edited__title='Dive into Python').values_list('name', flat=True)), - [u'Chris Mills']) + ['Chris Mills']) # Remove the second editor chris.edited.remove(html5) self.assertEqual(list(Person.objects.using('other').filter(edited__title='Dive into HTML5').values_list('name', flat=True)), []) self.assertEqual(list(Person.objects.using('other').filter(edited__title='Dive into Python').values_list('name', flat=True)), - [u'Chris Mills']) + ['Chris Mills']) # Clear all edited books chris.edited.clear() @@ -477,7 +477,7 @@ class QueryTestCase(TestCase): self.assertEqual(list(Person.objects.using('other').filter(edited__title='Dive into HTML5').values_list('name', flat=True)), []) self.assertEqual(list(Person.objects.using('other').filter(edited__title='Dive into Water').values_list('name', flat=True)), - [u'Chris Mills']) + ['Chris Mills']) self.assertEqual(list(Person.objects.using('other').filter(edited__title='Dive into Python').values_list('name', flat=True)), []) @@ -532,37 +532,37 @@ class QueryTestCase(TestCase): self.assertEqual(html5._state.db, 'other') # ... but it isn't saved yet self.assertEqual(list(Person.objects.using('other').values_list('name',flat=True)), - [u'Mark Pilgrim']) + ['Mark Pilgrim']) self.assertEqual(list(Book.objects.using('other').values_list('title',flat=True)), - [u'Dive into Python']) + ['Dive into Python']) # When saved (no using required), new objects goes to 'other' chris.save() html5.save() self.assertEqual(list(Person.objects.using('default').values_list('name',flat=True)), - [u'Marty Alchin']) + ['Marty Alchin']) self.assertEqual(list(Person.objects.using('other').values_list('name',flat=True)), - [u'Chris Mills', u'Mark Pilgrim']) + ['Chris Mills', 'Mark Pilgrim']) self.assertEqual(list(Book.objects.using('default').values_list('title',flat=True)), - [u'Pro Django']) + ['Pro Django']) self.assertEqual(list(Book.objects.using('other').values_list('title',flat=True)), - [u'Dive into HTML5', u'Dive into Python']) + ['Dive into HTML5', 'Dive into Python']) # This also works if you assign the FK in the constructor water = Book(title="Dive into Water", published=datetime.date(2001, 1, 1), editor=mark) self.assertEqual(water._state.db, 'other') # ... but it isn't saved yet self.assertEqual(list(Book.objects.using('default').values_list('title',flat=True)), - [u'Pro Django']) + ['Pro Django']) self.assertEqual(list(Book.objects.using('other').values_list('title',flat=True)), - [u'Dive into HTML5', u'Dive into Python']) + ['Dive into HTML5', 'Dive into Python']) # When saved, the new book goes to 'other' water.save() self.assertEqual(list(Book.objects.using('default').values_list('title',flat=True)), - [u'Pro Django']) + ['Pro Django']) self.assertEqual(list(Book.objects.using('other').values_list('title',flat=True)), - [u'Dive into HTML5', u'Dive into Python', u'Dive into Water']) + ['Dive into HTML5', 'Dive into Python', 'Dive into Water']) def test_foreign_key_deletion(self): "Cascaded deletions of Foreign Key relations issue queries on the right database" @@ -611,14 +611,14 @@ class QueryTestCase(TestCase): # Check that queries work across joins self.assertEqual(list(User.objects.using('default').filter(userprofile__flavor='chocolate').values_list('username', flat=True)), - [u'alice']) + ['alice']) self.assertEqual(list(User.objects.using('other').filter(userprofile__flavor='chocolate').values_list('username', flat=True)), []) self.assertEqual(list(User.objects.using('default').filter(userprofile__flavor='crunchy frog').values_list('username', flat=True)), []) self.assertEqual(list(User.objects.using('other').filter(userprofile__flavor='crunchy frog').values_list('username', flat=True)), - [u'bob']) + ['bob']) # Reget the objects to clear caches alice_profile = UserProfile.objects.using('default').get(flavor='chocolate') @@ -666,22 +666,22 @@ class QueryTestCase(TestCase): # ... but it isn't saved yet self.assertEqual(list(User.objects.using('other').values_list('username',flat=True)), - [u'bob']) + ['bob']) self.assertEqual(list(UserProfile.objects.using('other').values_list('flavor',flat=True)), - [u'crunchy frog']) + ['crunchy frog']) # When saved (no using required), new objects goes to 'other' charlie.save() bob_profile.save() new_bob_profile.save() self.assertEqual(list(User.objects.using('default').values_list('username',flat=True)), - [u'alice']) + ['alice']) self.assertEqual(list(User.objects.using('other').values_list('username',flat=True)), - [u'bob', u'charlie']) + ['bob', 'charlie']) self.assertEqual(list(UserProfile.objects.using('default').values_list('flavor',flat=True)), - [u'chocolate']) + ['chocolate']) self.assertEqual(list(UserProfile.objects.using('other').values_list('flavor',flat=True)), - [u'crunchy frog', u'spring surprise']) + ['crunchy frog', 'spring surprise']) # This also works if you assign the O2O relation in the constructor denise = User.objects.db_manager('other').create_user('denise','denise@example.com') @@ -690,16 +690,16 @@ class QueryTestCase(TestCase): self.assertEqual(denise_profile._state.db, 'other') # ... but it isn't saved yet self.assertEqual(list(UserProfile.objects.using('default').values_list('flavor',flat=True)), - [u'chocolate']) + ['chocolate']) self.assertEqual(list(UserProfile.objects.using('other').values_list('flavor',flat=True)), - [u'crunchy frog', u'spring surprise']) + ['crunchy frog', 'spring surprise']) # When saved, the new profile goes to 'other' denise_profile.save() self.assertEqual(list(UserProfile.objects.using('default').values_list('flavor',flat=True)), - [u'chocolate']) + ['chocolate']) self.assertEqual(list(UserProfile.objects.using('other').values_list('flavor',flat=True)), - [u'crunchy frog', u'spring surprise', u'tofu']) + ['crunchy frog', 'spring surprise', 'tofu']) def test_generic_key_separation(self): "Generic fields are constrained to a single database" @@ -728,7 +728,7 @@ class QueryTestCase(TestCase): # Retrive related object by descriptor. Related objects should be database-bound self.assertEqual(list(dive.reviews.all().values_list('source', flat=True)), - [u'Python Weekly']) + ['Python Weekly']) def test_generic_key_reverse_operations(self): "Generic reverse manipulations are all constrained to a single DB" @@ -746,21 +746,21 @@ class QueryTestCase(TestCase): self.assertEqual(list(Review.objects.using('default').filter(object_id=dive.pk).values_list('source', flat=True)), []) self.assertEqual(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source', flat=True)), - [u'Python Weekly']) + ['Python Weekly']) # Add a second review dive.reviews.add(review2) self.assertEqual(list(Review.objects.using('default').filter(object_id=dive.pk).values_list('source', flat=True)), []) self.assertEqual(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source', flat=True)), - [u'Python Monthly', u'Python Weekly']) + ['Python Monthly', 'Python Weekly']) # Remove the second author dive.reviews.remove(review1) self.assertEqual(list(Review.objects.using('default').filter(object_id=dive.pk).values_list('source', flat=True)), []) self.assertEqual(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source', flat=True)), - [u'Python Monthly']) + ['Python Monthly']) # Clear all reviews dive.reviews.clear() @@ -774,7 +774,7 @@ class QueryTestCase(TestCase): self.assertEqual(list(Review.objects.using('default').filter(object_id=dive.pk).values_list('source', flat=True)), []) self.assertEqual(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source', flat=True)), - [u'Python Daily']) + ['Python Daily']) def test_generic_key_cross_database_protection(self): "Operations that involve sharing generic key objects across databases raise an error" @@ -818,16 +818,16 @@ class QueryTestCase(TestCase): self.assertEqual(review3._state.db, 'other') # ... but it isn't saved yet self.assertEqual(list(Review.objects.using('default').filter(object_id=pro.pk).values_list('source', flat=True)), - [u'Python Monthly']) + ['Python Monthly']) self.assertEqual(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source',flat=True)), - [u'Python Weekly']) + ['Python Weekly']) # When saved, John goes to 'other' review3.save() self.assertEqual(list(Review.objects.using('default').filter(object_id=pro.pk).values_list('source', flat=True)), - [u'Python Monthly']) + ['Python Monthly']) self.assertEqual(list(Review.objects.using('other').filter(object_id=dive.pk).values_list('source',flat=True)), - [u'Python Daily', u'Python Weekly']) + ['Python Daily', 'Python Weekly']) def test_generic_key_deletion(self): "Cascaded deletions of Generic Key relations issue queries on the right database" @@ -1103,8 +1103,8 @@ class RouterTestCase(TestCase): # Related object queries stick to the same database # as the original object, regardless of the router - self.assertEqual(list(pro.authors.values_list('name', flat=True)), [u'Marty Alchin']) - self.assertEqual(pro.editor.name, u'Marty Alchin') + self.assertEqual(list(pro.authors.values_list('name', flat=True)), ['Marty Alchin']) + self.assertEqual(pro.editor.name, 'Marty Alchin') # get_or_create is a special case. The get needs to be targeted at # the write database in order to avoid potential transaction @@ -1543,7 +1543,7 @@ class RouterTestCase(TestCase): str(qs.query) # If you evaluate the query, it should work, running on 'other' - self.assertEqual(list(qs.values_list('title', flat=True)), [u'Dive into Python']) + self.assertEqual(list(qs.values_list('title', flat=True)), ['Dive into Python']) class AuthTestCase(TestCase): multi_db = True diff --git a/tests/regressiontests/null_fk/tests.py b/tests/regressiontests/null_fk/tests.py index abcfde9391..96a06b6769 100644 --- a/tests/regressiontests/null_fk/tests.py +++ b/tests/regressiontests/null_fk/tests.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from django.db.models import Q from django.test import TestCase @@ -28,8 +28,8 @@ class NullFkTests(TestCase): self.assertQuerysetEqual( Comment.objects.select_related('post__forum__system_info').all(), [ - (c1.id, u'My first comment', '<Post: First Post>'), - (c2.id, u'My second comment', 'None') + (c1.id, 'My first comment', '<Post: First Post>'), + (c2.id, 'My second comment', 'None') ], transform = lambda c: (c.id, c.comment_text, repr(c.post)) ) @@ -40,8 +40,8 @@ class NullFkTests(TestCase): self.assertQuerysetEqual( Comment.objects.select_related('post__forum__system_info__system_details'), [ - (c1.id, u'My first comment', '<Post: First Post>'), - (c2.id, u'My second comment', 'None') + (c1.id, 'My first comment', '<Post: First Post>'), + (c2.id, 'My second comment', 'None') ], transform = lambda c: (c.id, c.comment_text, repr(c.post)) ) diff --git a/tests/regressiontests/null_fk_ordering/models.py b/tests/regressiontests/null_fk_ordering/models.py index ac714f9ad5..e4a19f1512 100644 --- a/tests/regressiontests/null_fk_ordering/models.py +++ b/tests/regressiontests/null_fk_ordering/models.py @@ -5,6 +5,7 @@ Regression tests for proper working of ForeignKey(null=True). Tests these bugs: xpected results """ +from __future__ import unicode_literals from django.db import models @@ -18,7 +19,7 @@ class Article(models.Model): author = models.ForeignKey(Author, null=True) def __unicode__(self): - return u'Article titled: %s' % (self.title, ) + return 'Article titled: %s' % (self.title, ) class Meta: ordering = ['author__name', ] diff --git a/tests/regressiontests/null_queries/models.py b/tests/regressiontests/null_queries/models.py index ff9916fa2f..886bd75276 100644 --- a/tests/regressiontests/null_queries/models.py +++ b/tests/regressiontests/null_queries/models.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + from django.db import models @@ -5,14 +7,14 @@ class Poll(models.Model): question = models.CharField(max_length=200) def __unicode__(self): - return u"Q: %s " % self.question + return "Q: %s " % self.question class Choice(models.Model): poll = models.ForeignKey(Poll) choice = models.CharField(max_length=200) def __unicode__(self): - return u"Choice: %s in poll %s" % (self.choice, self.poll) + return "Choice: %s in poll %s" % (self.choice, self.poll) # A set of models with an inner one pointing to two outer ones. class OuterA(models.Model): diff --git a/tests/regressiontests/one_to_one_regress/models.py b/tests/regressiontests/one_to_one_regress/models.py index 0e4eef65ca..5d32bf03f8 100644 --- a/tests/regressiontests/one_to_one_regress/models.py +++ b/tests/regressiontests/one_to_one_regress/models.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + from django.db import models @@ -6,7 +8,7 @@ class Place(models.Model): address = models.CharField(max_length=80) def __unicode__(self): - return u"%s the place" % self.name + return "%s the place" % self.name class Restaurant(models.Model): place = models.OneToOneField(Place) @@ -14,14 +16,14 @@ class Restaurant(models.Model): serves_pizza = models.BooleanField() def __unicode__(self): - return u"%s the restaurant" % self.place.name + return "%s the restaurant" % self.place.name class Bar(models.Model): place = models.OneToOneField(Place) serves_cocktails = models.BooleanField() def __unicode__(self): - return u"%s the bar" % self.place.name + return "%s the bar" % self.place.name class UndergroundBar(models.Model): place = models.OneToOneField(Place, null=True) @@ -32,7 +34,7 @@ class Favorites(models.Model): restaurants = models.ManyToManyField(Restaurant) def __unicode__(self): - return u"Favorites for %s" % self.name + return "Favorites for %s" % self.name class Target(models.Model): pass diff --git a/tests/regressiontests/pagination_regress/tests.py b/tests/regressiontests/pagination_regress/tests.py index 9f381a5981..59ac41e062 100644 --- a/tests/regressiontests/pagination_regress/tests.py +++ b/tests/regressiontests/pagination_regress/tests.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.utils.unittest import TestCase @@ -96,9 +98,9 @@ class PaginatorTests(TestCase): ((eleven, 10, 1, True), (11, 1, [1])), # Non-integer inputs ((ten, '4', 1, False), (10, 3, [1, 2, 3])), - ((ten, u'4', 1, False), (10, 3, [1, 2, 3])), + ((ten, '4', 1, False), (10, 3, [1, 2, 3])), + ((ten, 4, '1', False), (10, 3, [1, 2, 3])), ((ten, 4, '1', False), (10, 3, [1, 2, 3])), - ((ten, 4, u'1', False), (10, 3, [1, 2, 3])), ) for params, output in tests: self.check_paginator(params, output) diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py index e4ce9d7b60..8c34b50e93 100644 --- a/tests/regressiontests/queries/models.py +++ b/tests/regressiontests/queries/models.py @@ -1,6 +1,7 @@ """ Various complex queries that have been problematic in the past. """ +from __future__ import unicode_literals import threading @@ -294,14 +295,14 @@ class Eaten(models.Model): meal = models.CharField(max_length=20) def __unicode__(self): - return u"%s at %s" % (self.food, self.meal) + return "%s at %s" % (self.food, self.meal) class Node(models.Model): num = models.IntegerField(unique=True) parent = models.ForeignKey("self", to_field="num", null=True) def __unicode__(self): - return u"%s" % self.num + return "%s" % self.num # Bug #12252 class ObjectA(models.Model): diff --git a/tests/regressiontests/queries/tests.py b/tests/regressiontests/queries/tests.py index 1035a38840..4cc7208a96 100644 --- a/tests/regressiontests/queries/tests.py +++ b/tests/regressiontests/queries/tests.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import,unicode_literals import datetime from operator import attrgetter @@ -11,6 +11,7 @@ from django.db import DatabaseError, connection, connections, DEFAULT_DB_ALIAS from django.db.models import Count from django.db.models.query import Q, ITER_CHUNK_SIZE, EmptyQuerySet from django.test import TestCase, skipUnlessDBFeature +from django.test.utils import str_prefix from django.utils import unittest from django.utils.datastructures import SortedDict @@ -466,7 +467,7 @@ class Queries1Tests(BaseQuerysetTest): # ordering columns. self.assertValueQuerysetEqual( Note.objects.values('misc').distinct().order_by('note', '-misc'), - [{'misc': u'foo'}, {'misc': u'bar'}, {'misc': u'foo'}] + [{'misc': 'foo'}, {'misc': 'bar'}, {'misc': 'foo'}] ) def test_ticket4358(self): @@ -506,7 +507,7 @@ class Queries1Tests(BaseQuerysetTest): # return 'one' and 'two' as strings, not Unicode objects. It's a side-effect of # using constants here and not a real concern. d = Item.objects.extra(select=SortedDict(s), select_params=params).values('a', 'b')[0] - self.assertEqual(d, {'a': u'one', 'b': u'two'}) + self.assertEqual(d, {'a': 'one', 'b': 'two'}) # Order by the number of tags attached to an item. l = Item.objects.extra(select={'count': 'select count(*) from queries_item_tags where queries_item_tags.item_id = queries_item.id'}).order_by('-count') @@ -582,7 +583,7 @@ class Queries1Tests(BaseQuerysetTest): # works. self.assertValueQuerysetEqual( Item.objects.values('note__note').order_by('queries_note.note', 'id'), - [{'note__note': u'n2'}, {'note__note': u'n3'}, {'note__note': u'n3'}, {'note__note': u'n3'}] + [{'note__note': 'n2'}, {'note__note': 'n3'}, {'note__note': 'n3'}, {'note__note': 'n3'}] ) def test_ticket7096(self): @@ -1051,15 +1052,15 @@ class Queries4Tests(BaseQuerysetTest): # A values() or values_list() query across joined models must use outer # joins appropriately. - # Note: In Oracle, we expect a null CharField to return u'' instead of + # Note: In Oracle, we expect a null CharField to return '' instead of # None. if connection.features.interprets_empty_strings_as_nulls: - expected_null_charfield_repr = u'' + expected_null_charfield_repr = '' else: expected_null_charfield_repr = None self.assertValueQuerysetEqual( Report.objects.values_list("creator__extra__info", flat=True).order_by("name"), - [u'e1', u'e2', expected_null_charfield_repr], + ['e1', 'e2', expected_null_charfield_repr], ) # Similarly for select_related(), joins beyond an initial nullable join @@ -1080,7 +1081,7 @@ class Queries4Tests(BaseQuerysetTest): m2 = Member.objects.create(name="m2", details=d2) Child.objects.create(person=m2, parent=m1) obj = m1.children.select_related("person__details")[0] - self.assertEqual(obj.person.details.data, u'd2') + self.assertEqual(obj.person.details.data, 'd2') def test_order_by_resetting(self): # Calling order_by() with no parameters removes any existing ordering on the @@ -1530,12 +1531,12 @@ class RawQueriesTests(TestCase): query = "SELECT * FROM queries_note WHERE note = %s" params = ['n1'] qs = Note.objects.raw(query, params=params) - self.assertEqual(repr(qs), "<RawQuerySet: 'SELECT * FROM queries_note WHERE note = n1'>") + self.assertEqual(repr(qs), str_prefix("<RawQuerySet: %(_)s'SELECT * FROM queries_note WHERE note = n1'>")) query = "SELECT * FROM queries_note WHERE note = %s and misc = %s" params = ['n1', 'foo'] qs = Note.objects.raw(query, params=params) - self.assertEqual(repr(qs), "<RawQuerySet: 'SELECT * FROM queries_note WHERE note = n1 and misc = foo'>") + self.assertEqual(repr(qs), str_prefix("<RawQuerySet: %(_)s'SELECT * FROM queries_note WHERE note = n1 and misc = foo'>")) class GeneratorExpressionTests(TestCase): diff --git a/tests/regressiontests/requests/tests.py b/tests/regressiontests/requests/tests.py index 3d2b196194..146dca2b7b 100644 --- a/tests/regressiontests/requests/tests.py +++ b/tests/regressiontests/requests/tests.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import time import warnings from datetime import datetime, timedelta @@ -6,6 +8,7 @@ from StringIO import StringIO from django.conf import settings from django.core.handlers.wsgi import WSGIRequest, LimitedStream from django.http import HttpRequest, HttpResponse, parse_cookie, build_request_repr, UnreadablePostError +from django.test.utils import str_prefix from django.utils import unittest from django.utils.http import cookie_date from django.utils.timezone import utc @@ -21,15 +24,15 @@ class RequestsTests(unittest.TestCase): def test_httprequest_repr(self): request = HttpRequest() - request.path = u'/somepath/' - request.GET = {u'get-key': u'get-value'} - request.POST = {u'post-key': u'post-value'} - request.COOKIES = {u'post-key': u'post-value'} - request.META = {u'post-key': u'post-value'} - self.assertEqual(repr(request), u"<HttpRequest\npath:/somepath/,\nGET:{u'get-key': u'get-value'},\nPOST:{u'post-key': u'post-value'},\nCOOKIES:{u'post-key': u'post-value'},\nMETA:{u'post-key': u'post-value'}>") + request.path = '/somepath/' + request.GET = {'get-key': 'get-value'} + request.POST = {'post-key': 'post-value'} + request.COOKIES = {'post-key': 'post-value'} + request.META = {'post-key': 'post-value'} + self.assertEqual(repr(request), str_prefix("<HttpRequest\npath:/somepath/,\nGET:{%(_)s'get-key': %(_)s'get-value'},\nPOST:{%(_)s'post-key': %(_)s'post-value'},\nCOOKIES:{%(_)s'post-key': %(_)s'post-value'},\nMETA:{%(_)s'post-key': %(_)s'post-value'}>")) self.assertEqual(build_request_repr(request), repr(request)) - self.assertEqual(build_request_repr(request, path_override='/otherpath/', GET_override={u'a': u'b'}, POST_override={u'c': u'd'}, COOKIES_override={u'e': u'f'}, META_override={u'g': u'h'}), - u"<HttpRequest\npath:/otherpath/,\nGET:{u'a': u'b'},\nPOST:{u'c': u'd'},\nCOOKIES:{u'e': u'f'},\nMETA:{u'g': u'h'}>") + self.assertEqual(build_request_repr(request, path_override='/otherpath/', GET_override={'a': 'b'}, POST_override={'c': 'd'}, COOKIES_override={'e': 'f'}, META_override={'g': 'h'}), + str_prefix("<HttpRequest\npath:/otherpath/,\nGET:{%(_)s'a': %(_)s'b'},\nPOST:{%(_)s'c': %(_)s'd'},\nCOOKIES:{%(_)s'e': %(_)s'f'},\nMETA:{%(_)s'g': %(_)s'h'}>")) def test_wsgirequest(self): request = WSGIRequest({'PATH_INFO': 'bogus', 'REQUEST_METHOD': 'bogus', 'wsgi.input': StringIO('')}) @@ -43,14 +46,14 @@ class RequestsTests(unittest.TestCase): def test_wsgirequest_repr(self): request = WSGIRequest({'PATH_INFO': '/somepath/', 'REQUEST_METHOD': 'get', 'wsgi.input': StringIO('')}) - request.GET = {u'get-key': u'get-value'} - request.POST = {u'post-key': u'post-value'} - request.COOKIES = {u'post-key': u'post-value'} - request.META = {u'post-key': u'post-value'} - self.assertEqual(repr(request), u"<WSGIRequest\npath:/somepath/,\nGET:{u'get-key': u'get-value'},\nPOST:{u'post-key': u'post-value'},\nCOOKIES:{u'post-key': u'post-value'},\nMETA:{u'post-key': u'post-value'}>") + request.GET = {'get-key': 'get-value'} + request.POST = {'post-key': 'post-value'} + request.COOKIES = {'post-key': 'post-value'} + request.META = {'post-key': 'post-value'} + self.assertEqual(repr(request), str_prefix("<WSGIRequest\npath:/somepath/,\nGET:{%(_)s'get-key': %(_)s'get-value'},\nPOST:{%(_)s'post-key': %(_)s'post-value'},\nCOOKIES:{%(_)s'post-key': %(_)s'post-value'},\nMETA:{%(_)s'post-key': %(_)s'post-value'}>")) self.assertEqual(build_request_repr(request), repr(request)) - self.assertEqual(build_request_repr(request, path_override='/otherpath/', GET_override={u'a': u'b'}, POST_override={u'c': u'd'}, COOKIES_override={u'e': u'f'}, META_override={u'g': u'h'}), - u"<WSGIRequest\npath:/otherpath/,\nGET:{u'a': u'b'},\nPOST:{u'c': u'd'},\nCOOKIES:{u'e': u'f'},\nMETA:{u'g': u'h'}>") + self.assertEqual(build_request_repr(request, path_override='/otherpath/', GET_override={'a': 'b'}, POST_override={'c': 'd'}, COOKIES_override={'e': 'f'}, META_override={'g': 'h'}), + str_prefix("<WSGIRequest\npath:/otherpath/,\nGET:{%(_)s'a': %(_)s'b'},\nPOST:{%(_)s'c': %(_)s'd'},\nCOOKIES:{%(_)s'e': %(_)s'f'},\nMETA:{%(_)s'g': %(_)s'h'}>")) def test_parse_cookie(self): self.assertEqual(parse_cookie('invalid:key=true'), {}) @@ -73,10 +76,10 @@ class RequestsTests(unittest.TestCase): # Check if X_FORWARDED_HOST is provided. request = HttpRequest() request.META = { - u'HTTP_X_FORWARDED_HOST': u'forward.com', - u'HTTP_HOST': u'example.com', - u'SERVER_NAME': u'internal.com', - u'SERVER_PORT': 80, + 'HTTP_X_FORWARDED_HOST': 'forward.com', + 'HTTP_HOST': 'example.com', + 'SERVER_NAME': 'internal.com', + 'SERVER_PORT': 80, } # X_FORWARDED_HOST is ignored. self.assertEqual(request.get_host(), 'example.com') @@ -84,25 +87,25 @@ class RequestsTests(unittest.TestCase): # Check if X_FORWARDED_HOST isn't provided. request = HttpRequest() request.META = { - u'HTTP_HOST': u'example.com', - u'SERVER_NAME': u'internal.com', - u'SERVER_PORT': 80, + 'HTTP_HOST': 'example.com', + 'SERVER_NAME': 'internal.com', + 'SERVER_PORT': 80, } self.assertEqual(request.get_host(), 'example.com') # Check if HTTP_HOST isn't provided. request = HttpRequest() request.META = { - u'SERVER_NAME': u'internal.com', - u'SERVER_PORT': 80, + 'SERVER_NAME': 'internal.com', + 'SERVER_PORT': 80, } self.assertEqual(request.get_host(), 'internal.com') # Check if HTTP_HOST isn't provided, and we're on a nonstandard port request = HttpRequest() request.META = { - u'SERVER_NAME': u'internal.com', - u'SERVER_PORT': 8042, + 'SERVER_NAME': 'internal.com', + 'SERVER_PORT': 8042, } self.assertEqual(request.get_host(), 'internal.com:8042') @@ -117,10 +120,10 @@ class RequestsTests(unittest.TestCase): # Check if X_FORWARDED_HOST is provided. request = HttpRequest() request.META = { - u'HTTP_X_FORWARDED_HOST': u'forward.com', - u'HTTP_HOST': u'example.com', - u'SERVER_NAME': u'internal.com', - u'SERVER_PORT': 80, + 'HTTP_X_FORWARDED_HOST': 'forward.com', + 'HTTP_HOST': 'example.com', + 'SERVER_NAME': 'internal.com', + 'SERVER_PORT': 80, } # X_FORWARDED_HOST is obeyed. self.assertEqual(request.get_host(), 'forward.com') @@ -128,25 +131,25 @@ class RequestsTests(unittest.TestCase): # Check if X_FORWARDED_HOST isn't provided. request = HttpRequest() request.META = { - u'HTTP_HOST': u'example.com', - u'SERVER_NAME': u'internal.com', - u'SERVER_PORT': 80, + 'HTTP_HOST': 'example.com', + 'SERVER_NAME': 'internal.com', + 'SERVER_PORT': 80, } self.assertEqual(request.get_host(), 'example.com') # Check if HTTP_HOST isn't provided. request = HttpRequest() request.META = { - u'SERVER_NAME': u'internal.com', - u'SERVER_PORT': 80, + 'SERVER_NAME': 'internal.com', + 'SERVER_PORT': 80, } self.assertEqual(request.get_host(), 'internal.com') # Check if HTTP_HOST isn't provided, and we're on a nonstandard port request = HttpRequest() request.META = { - u'SERVER_NAME': u'internal.com', - u'SERVER_PORT': 8042, + 'SERVER_NAME': 'internal.com', + 'SERVER_PORT': 8042, } self.assertEqual(request.get_host(), 'internal.com:8042') @@ -275,7 +278,7 @@ class RequestsTests(unittest.TestCase): request = WSGIRequest({'REQUEST_METHOD': 'POST', 'CONTENT_LENGTH': len(payload), 'wsgi.input': StringIO(payload)}) - self.assertEqual(request.POST, {u'name': [u'value']}) + self.assertEqual(request.POST, {'name': ['value']}) self.assertEqual(request.body, b'name=value') self.assertEqual(request.read(), b'name=value') @@ -305,12 +308,12 @@ class RequestsTests(unittest.TestCase): '', 'value', '--boundary--' - '']) + '']).encode('utf-8') request = WSGIRequest({'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': 'multipart/form-data; boundary=boundary', 'CONTENT_LENGTH': len(payload), 'wsgi.input': StringIO(payload)}) - self.assertEqual(request.POST, {u'name': [u'value']}) + self.assertEqual(request.POST, {'name': ['value']}) self.assertRaises(Exception, lambda: request.body) def test_POST_multipart_with_content_length_zero(self): @@ -327,7 +330,7 @@ class RequestsTests(unittest.TestCase): '', 'value', '--boundary--' - '']) + '']).encode('utf-8') request = WSGIRequest({'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': 'multipart/form-data; boundary=boundary', 'CONTENT_LENGTH': 0, @@ -350,7 +353,7 @@ class RequestsTests(unittest.TestCase): 'CONTENT_LENGTH': len(payload), 'wsgi.input': StringIO(payload)}) raw_data = request.body - self.assertEqual(request.POST, {u'name': [u'value']}) + self.assertEqual(request.POST, {'name': ['value']}) def test_POST_after_body_read_and_stream_read(self): """ @@ -363,7 +366,7 @@ class RequestsTests(unittest.TestCase): 'wsgi.input': StringIO(payload)}) raw_data = request.body self.assertEqual(request.read(1), b'n') - self.assertEqual(request.POST, {u'name': [u'value']}) + self.assertEqual(request.POST, {'name': ['value']}) def test_POST_after_body_read_and_stream_read_multipart(self): """ @@ -376,7 +379,7 @@ class RequestsTests(unittest.TestCase): '', 'value', '--boundary--' - '']) + '']).encode('utf-8') request = WSGIRequest({'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': 'multipart/form-data; boundary=boundary', 'CONTENT_LENGTH': len(payload), @@ -384,7 +387,7 @@ class RequestsTests(unittest.TestCase): raw_data = request.body # Consume enough data to mess up the parsing: self.assertEqual(request.read(13), b'--boundary\r\nC') - self.assertEqual(request.POST, {u'name': [u'value']}) + self.assertEqual(request.POST, {'name': ['value']}) def test_raw_post_data_returns_body(self): """ diff --git a/tests/regressiontests/select_related_regress/models.py b/tests/regressiontests/select_related_regress/models.py index 43e64f0e69..1af9ff4bca 100644 --- a/tests/regressiontests/select_related_regress/models.py +++ b/tests/regressiontests/select_related_regress/models.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + from django.db import models @@ -5,21 +7,21 @@ class Building(models.Model): name = models.CharField(max_length=10) def __unicode__(self): - return u"Building: %s" % self.name + return "Building: %s" % self.name class Device(models.Model): building = models.ForeignKey('Building') name = models.CharField(max_length=10) def __unicode__(self): - return u"device '%s' in building %s" % (self.name, self.building) + return "device '%s' in building %s" % (self.name, self.building) class Port(models.Model): device = models.ForeignKey('Device') port_number = models.CharField(max_length=10) def __unicode__(self): - return u"%s/%s" % (self.device.name, self.port_number) + return "%s/%s" % (self.device.name, self.port_number) class Connection(models.Model): start = models.ForeignKey(Port, related_name='connection_start', @@ -27,7 +29,7 @@ class Connection(models.Model): end = models.ForeignKey(Port, related_name='connection_end', unique=True) def __unicode__(self): - return u"%s to %s" % (self.start, self.end) + return "%s to %s" % (self.start, self.end) # Another non-tree hierarchy that exercises code paths similar to the above # example, but in a slightly different configuration. diff --git a/tests/regressiontests/select_related_regress/tests.py b/tests/regressiontests/select_related_regress/tests.py index 4cd4f788e2..e35157dbaf 100644 --- a/tests/regressiontests/select_related_regress/tests.py +++ b/tests/regressiontests/select_related_regress/tests.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from django.test import TestCase @@ -34,11 +34,11 @@ class SelectRelatedRegressTests(TestCase): connections=Connection.objects.filter(start__device__building=b, end__device__building=b).order_by('id') self.assertEqual([(c.id, unicode(c.start), unicode(c.end)) for c in connections], - [(c1.id, u'router/4', u'switch/7'), (c2.id, u'switch/7', u'server/1')]) + [(c1.id, 'router/4', 'switch/7'), (c2.id, 'switch/7', 'server/1')]) connections=Connection.objects.filter(start__device__building=b, end__device__building=b).select_related().order_by('id') self.assertEqual([(c.id, unicode(c.start), unicode(c.end)) for c in connections], - [(c1.id, u'router/4', u'switch/7'), (c2.id, u'switch/7', u'server/1')]) + [(c1.id, 'router/4', 'switch/7'), (c2.id, 'switch/7', 'server/1')]) # This final query should only have seven tables (port, device and building # twice each, plus connection once). Thus, 6 joins plus the FROM table. @@ -64,8 +64,8 @@ class SelectRelatedRegressTests(TestCase): e = Enrollment.objects.create(std=s, cls=c) e_related = Enrollment.objects.all().select_related()[0] - self.assertEqual(e_related.std.person.user.name, u"std") - self.assertEqual(e_related.cls.org.person.user.name, u"org") + self.assertEqual(e_related.std.person.user.name, "std") + self.assertEqual(e_related.cls.org.person.user.name, "org") def test_regression_8036(self): """ @@ -114,27 +114,27 @@ class SelectRelatedRegressTests(TestCase): c1 = Client.objects.create(name='Brian Burke', state=wa, status=active) burke = Client.objects.select_related('state').defer('state__name').get(name='Brian Burke') - self.assertEqual(burke.name, u'Brian Burke') - self.assertEqual(burke.state.name, u'Western Australia') + self.assertEqual(burke.name, 'Brian Burke') + self.assertEqual(burke.state.name, 'Western Australia') # Still works if we're dealing with an inherited class sc1 = SpecialClient.objects.create(name='Troy Buswell', state=wa, status=active, value=42) troy = SpecialClient.objects.select_related('state').defer('state__name').get(name='Troy Buswell') - self.assertEqual(troy.name, u'Troy Buswell') + self.assertEqual(troy.name, 'Troy Buswell') self.assertEqual(troy.value, 42) - self.assertEqual(troy.state.name, u'Western Australia') + self.assertEqual(troy.state.name, 'Western Australia') # Still works if we defer an attribute on the inherited class troy = SpecialClient.objects.select_related('state').defer('value', 'state__name').get(name='Troy Buswell') - self.assertEqual(troy.name, u'Troy Buswell') + self.assertEqual(troy.name, 'Troy Buswell') self.assertEqual(troy.value, 42) - self.assertEqual(troy.state.name, u'Western Australia') + self.assertEqual(troy.state.name, 'Western Australia') # Also works if you use only, rather than defer troy = SpecialClient.objects.select_related('state').only('name').get(name='Troy Buswell') - self.assertEqual(troy.name, u'Troy Buswell') + self.assertEqual(troy.name, 'Troy Buswell') self.assertEqual(troy.value, 42) - self.assertEqual(troy.state.name, u'Western Australia') + self.assertEqual(troy.state.name, 'Western Australia') diff --git a/tests/regressiontests/serializers_regress/tests.py b/tests/regressiontests/serializers_regress/tests.py index 6930fbf393..f1b70a1d2e 100644 --- a/tests/regressiontests/serializers_regress/tests.py +++ b/tests/regressiontests/serializers_regress/tests.py @@ -6,7 +6,7 @@ test case that is capable of testing the capabilities of the serializers. This includes all valid data values, plus forward, backwards and self references. """ -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals import datetime import decimal @@ -183,7 +183,7 @@ test_data = [ (data_obj, 15, CharData, None), # (We use something that will fit into a latin1 database encoding here, # because that is still the default used on many system setups.) - (data_obj, 16, CharData, u'\xa5'), + (data_obj, 16, CharData, '\xa5'), (data_obj, 20, DateData, datetime.date(2006,6,16)), (data_obj, 21, DateData, None), (data_obj, 30, DateTimeData, datetime.datetime(2006,6,16,10,42,37)), diff --git a/tests/regressiontests/signed_cookies_tests/tests.py b/tests/regressiontests/signed_cookies_tests/tests.py index 5a0b5f9aa4..800092a2d7 100644 --- a/tests/regressiontests/signed_cookies_tests/tests.py +++ b/tests/regressiontests/signed_cookies_tests/tests.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import time from django.core import signing @@ -15,7 +17,7 @@ class SignedCookieTest(TestCase): request = HttpRequest() request.COOKIES['c'] = response.cookies['c'].value value = request.get_signed_cookie('c') - self.assertEqual(value, u'hello') + self.assertEqual(value, 'hello') def test_can_use_salt(self): response = HttpResponse() @@ -23,7 +25,7 @@ class SignedCookieTest(TestCase): request = HttpRequest() request.COOKIES['a'] = response.cookies['a'].value value = request.get_signed_cookie('a', salt='one') - self.assertEqual(value, u'hello') + self.assertEqual(value, 'hello') self.assertRaises(signing.BadSignature, request.get_signed_cookie, 'a', salt='two') @@ -43,7 +45,7 @@ class SignedCookieTest(TestCase): self.assertEqual(request.get_signed_cookie('c', default=None), None) def test_max_age_argument(self): - value = u'hello' + value = 'hello' _time = time.time time.time = lambda: 123456789 try: diff --git a/tests/regressiontests/signing/tests.py b/tests/regressiontests/signing/tests.py index 1da3345806..f3fe5f3ec7 100644 --- a/tests/regressiontests/signing/tests.py +++ b/tests/regressiontests/signing/tests.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import time from django.core import signing @@ -14,7 +16,7 @@ class TestSigner(TestCase): for s in ( b'hello', b'3098247:529:087:', - u'\u2019'.encode('utf-8'), + '\u2019'.encode('utf-8'), ): self.assertEqual( signer.signature(s), @@ -42,7 +44,7 @@ class TestSigner(TestCase): '3098247529087', '3098247:529:087:', 'jkw osanteuh ,rcuh nthu aou oauh ,ud du', - u'\u2019', + '\u2019', ) for example in examples: self.assertNotEqual( @@ -70,7 +72,7 @@ class TestSigner(TestCase): objects = ( ['a', 'list'], b'a string', - u'a unicode string \u2019', + 'a unicode string \u2019', {'a': 'dictionary'}, ) for o in objects: @@ -98,7 +100,7 @@ class TestSigner(TestCase): class TestTimestampSigner(TestCase): def test_timestamp_signer(self): - value = u'hello' + value = 'hello' _time = time.time time.time = lambda: 123456789 try: diff --git a/tests/regressiontests/staticfiles_tests/tests.py b/tests/regressiontests/staticfiles_tests/tests.py index 3711d92448..8321fc2365 100644 --- a/tests/regressiontests/staticfiles_tests/tests.py +++ b/tests/regressiontests/staticfiles_tests/tests.py @@ -1,4 +1,5 @@ # -*- encoding: utf-8 -*- +from __future__ import unicode_literals import codecs import os @@ -56,9 +57,9 @@ class BaseStaticFilesTestCase(object): testfiles_path = os.path.join(TEST_ROOT, 'apps', 'test', 'static', 'test') # To make sure SVN doesn't hangs itself with the non-ASCII characters # during checkout, we actually create one file dynamically. - self._nonascii_filepath = os.path.join(testfiles_path, u'fi\u015fier.txt') + self._nonascii_filepath = os.path.join(testfiles_path, 'fi\u015fier.txt') with codecs.open(self._nonascii_filepath, 'w', 'utf-8') as f: - f.write(u"fi\u015fier in the app dir") + f.write("fi\u015fier in the app dir") # And also create the stupid hidden file to dwarf the setup.py's # package data handling. self._hidden_filepath = os.path.join(testfiles_path, '.hidden') @@ -76,7 +77,7 @@ class BaseStaticFilesTestCase(object): def assertFileContains(self, filepath, text): self.assertIn(text, self._get_file(smart_unicode(filepath)), - u"'%s' not in '%s'" % (text, filepath)) + "'%s' not in '%s'" % (text, filepath)) def assertFileNotFound(self, filepath): self.assertRaises(IOError, self._get_file, filepath) @@ -173,13 +174,13 @@ class TestDefaults(object): """ Can find a file with non-ASCII character in an app static/ directory. """ - self.assertFileContains(u'test/fişier.txt', u'fişier in the app dir') + self.assertFileContains('test/fişier.txt', 'fişier in the app dir') def test_camelcase_filenames(self): """ Can find a file with capital letters. """ - self.assertFileContains(u'test/camelCase.txt', u'camelCase') + self.assertFileContains('test/camelCase.txt', 'camelCase') class TestFindStatic(CollectionTestCase, TestDefaults): diff --git a/tests/regressiontests/string_lookup/tests.py b/tests/regressiontests/string_lookup/tests.py index b3f90169ca..02f766adce 100644 --- a/tests/regressiontests/string_lookup/tests.py +++ b/tests/regressiontests/string_lookup/tests.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from django.test import TestCase from .models import Foo, Whiz, Bar, Article, Base, Child @@ -49,9 +49,9 @@ class StringLookupTests(TestCase): A properly configured UTF-8 database can handle this. """ - fx = Foo(name='Bjorn', friend=u'François') + fx = Foo(name='Bjorn', friend='François') fx.save() - self.assertEqual(Foo.objects.get(friend__contains=u'\xe7'), fx) + self.assertEqual(Foo.objects.get(friend__contains='\xe7'), fx) # We can also do the above query using UTF-8 strings. self.assertEqual(Foo.objects.get(friend__contains=b'\xc3\xa7'), fx) diff --git a/tests/regressiontests/syndication/feeds.py b/tests/regressiontests/syndication/feeds.py index 41feb89550..748420c9d2 100644 --- a/tests/regressiontests/syndication/feeds.py +++ b/tests/regressiontests/syndication/feeds.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from django.contrib.syndication import views from django.core.exceptions import ObjectDoesNotExist @@ -105,21 +105,21 @@ class MyCustomAtom1Feed(feedgenerator.Atom1Feed): """ def root_attributes(self): attrs = super(MyCustomAtom1Feed, self).root_attributes() - attrs[u'django'] = u'rocks' + attrs['django'] = 'rocks' return attrs def add_root_elements(self, handler): super(MyCustomAtom1Feed, self).add_root_elements(handler) - handler.addQuickElement(u'spam', u'eggs') + handler.addQuickElement('spam', 'eggs') def item_attributes(self, item): attrs = super(MyCustomAtom1Feed, self).item_attributes(item) - attrs[u'bacon'] = u'yum' + attrs['bacon'] = 'yum' return attrs def add_item_elements(self, handler, item): super(MyCustomAtom1Feed, self).add_item_elements(handler, item) - handler.addQuickElement(u'ministry', u'silly walks') + handler.addQuickElement('ministry', 'silly walks') class TestCustomFeed(TestAtomFeed): diff --git a/tests/regressiontests/syndication/tests.py b/tests/regressiontests/syndication/tests.py index 95b4efb4f4..1790d8cae6 100644 --- a/tests/regressiontests/syndication/tests.py +++ b/tests/regressiontests/syndication/tests.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from xml.dom import minidom @@ -199,7 +199,7 @@ class SyndicationFeedTest(FeedTestCase): link = item.getElementsByTagName('link')[0] if link.firstChild.wholeText == 'http://example.com/blog/4/': title = item.getElementsByTagName('title')[0] - self.assertEqual(title.firstChild.wholeText, u'A & B < C > D') + self.assertEqual(title.firstChild.wholeText, 'A & B < C > D') def test_naive_datetime_conversion(self): """ diff --git a/tests/regressiontests/templates/callables.py b/tests/regressiontests/templates/callables.py index 8afa703f63..882a8c6e06 100644 --- a/tests/regressiontests/templates/callables.py +++ b/tests/regressiontests/templates/callables.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + from django import template from django.utils.unittest import TestCase @@ -20,7 +22,7 @@ class CallableVariablesTests(TestCase): # ``my_doodad.__call__`` will be invoked first, yielding a dictionary # without a key ``value``. t = template.Template('{{ my_doodad.value }}') - self.assertEqual(t.render(c), u'') + self.assertEqual(t.render(c), '') # We can confirm that the doodad has been called self.assertEqual(my_doodad.num_calls, 1) @@ -28,7 +30,7 @@ class CallableVariablesTests(TestCase): # But we can access keys on the dict that's returned # by ``__call__``, instead. t = template.Template('{{ my_doodad.the_value }}') - self.assertEqual(t.render(c), u'42') + self.assertEqual(t.render(c), '42') self.assertEqual(my_doodad.num_calls, 2) def test_alters_data(self): @@ -48,9 +50,9 @@ class CallableVariablesTests(TestCase): # Since ``my_doodad.alters_data`` is True, the template system will not # try to call our doodad but will use TEMPLATE_STRING_IF_INVALID t = template.Template('{{ my_doodad.value }}') - self.assertEqual(t.render(c), u'') + self.assertEqual(t.render(c), '') t = template.Template('{{ my_doodad.the_value }}') - self.assertEqual(t.render(c), u'') + self.assertEqual(t.render(c), '') # Double-check that the object was really never called during the # template rendering. @@ -75,9 +77,9 @@ class CallableVariablesTests(TestCase): # as normal, and we don't have access to the dict that it returns when # called. t = template.Template('{{ my_doodad.value }}') - self.assertEqual(t.render(c), u'42') + self.assertEqual(t.render(c), '42') t = template.Template('{{ my_doodad.the_value }}') - self.assertEqual(t.render(c), u'') + self.assertEqual(t.render(c), '') # Double-check that the object was really never called during the # template rendering. @@ -102,9 +104,9 @@ class CallableVariablesTests(TestCase): c = template.Context({"my_doodad": my_doodad}) t = template.Template('{{ my_doodad.value }}') - self.assertEqual(t.render(c), u'42') + self.assertEqual(t.render(c), '42') t = template.Template('{{ my_doodad.the_value }}') - self.assertEqual(t.render(c), u'') + self.assertEqual(t.render(c), '') # Double-check that the object was really never called during the # template rendering. diff --git a/tests/regressiontests/templates/custom.py b/tests/regressiontests/templates/custom.py index 6bbbe35f03..4e295d990e 100644 --- a/tests/regressiontests/templates/custom.py +++ b/tests/regressiontests/templates/custom.py @@ -1,4 +1,4 @@ -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from django import template from django.utils.unittest import TestCase @@ -11,7 +11,7 @@ class CustomFilterTests(TestCase): t = template.Template("{% load custom %}{{ string|trim:5 }}") self.assertEqual( t.render(template.Context({"string": "abcdefghijklmnopqrstuvwxyz"})), - u"abcde" + "abcde" ) @@ -25,50 +25,50 @@ class CustomTagTests(TestCase): c = template.Context({'value': 42}) t = template.Template('{% load custom %}{% no_params %}') - self.assertEqual(t.render(c), u'no_params - Expected result') + self.assertEqual(t.render(c), 'no_params - Expected result') t = template.Template('{% load custom %}{% one_param 37 %}') - self.assertEqual(t.render(c), u'one_param - Expected result: 37') + self.assertEqual(t.render(c), 'one_param - Expected result: 37') t = template.Template('{% load custom %}{% explicit_no_context 37 %}') - self.assertEqual(t.render(c), u'explicit_no_context - Expected result: 37') + self.assertEqual(t.render(c), 'explicit_no_context - Expected result: 37') t = template.Template('{% load custom %}{% no_params_with_context %}') - self.assertEqual(t.render(c), u'no_params_with_context - Expected result (context value: 42)') + self.assertEqual(t.render(c), 'no_params_with_context - Expected result (context value: 42)') t = template.Template('{% load custom %}{% params_and_context 37 %}') - self.assertEqual(t.render(c), u'params_and_context - Expected result (context value: 42): 37') + self.assertEqual(t.render(c), 'params_and_context - Expected result (context value: 42): 37') t = template.Template('{% load custom %}{% simple_two_params 37 42 %}') - self.assertEqual(t.render(c), u'simple_two_params - Expected result: 37, 42') + self.assertEqual(t.render(c), 'simple_two_params - Expected result: 37, 42') t = template.Template('{% load custom %}{% simple_one_default 37 %}') - self.assertEqual(t.render(c), u'simple_one_default - Expected result: 37, hi') + self.assertEqual(t.render(c), 'simple_one_default - Expected result: 37, hi') t = template.Template('{% load custom %}{% simple_one_default 37 two="hello" %}') - self.assertEqual(t.render(c), u'simple_one_default - Expected result: 37, hello') + self.assertEqual(t.render(c), 'simple_one_default - Expected result: 37, hello') t = template.Template('{% load custom %}{% simple_one_default one=99 two="hello" %}') - self.assertEqual(t.render(c), u'simple_one_default - Expected result: 99, hello') + self.assertEqual(t.render(c), 'simple_one_default - Expected result: 99, hello') self.assertRaisesRegexp(template.TemplateSyntaxError, "'simple_one_default' received unexpected keyword argument 'three'", template.Template, '{% load custom %}{% simple_one_default 99 two="hello" three="foo" %}') t = template.Template('{% load custom %}{% simple_one_default 37 42 %}') - self.assertEqual(t.render(c), u'simple_one_default - Expected result: 37, 42') + self.assertEqual(t.render(c), 'simple_one_default - Expected result: 37, 42') t = template.Template('{% load custom %}{% simple_unlimited_args 37 %}') - self.assertEqual(t.render(c), u'simple_unlimited_args - Expected result: 37, hi') + self.assertEqual(t.render(c), 'simple_unlimited_args - Expected result: 37, hi') t = template.Template('{% load custom %}{% simple_unlimited_args 37 42 56 89 %}') - self.assertEqual(t.render(c), u'simple_unlimited_args - Expected result: 37, 42, 56, 89') + self.assertEqual(t.render(c), 'simple_unlimited_args - Expected result: 37, 42, 56, 89') t = template.Template('{% load custom %}{% simple_only_unlimited_args %}') - self.assertEqual(t.render(c), u'simple_only_unlimited_args - Expected result: ') + self.assertEqual(t.render(c), 'simple_only_unlimited_args - Expected result: ') t = template.Template('{% load custom %}{% simple_only_unlimited_args 37 42 56 89 %}') - self.assertEqual(t.render(c), u'simple_only_unlimited_args - Expected result: 37, 42, 56, 89') + self.assertEqual(t.render(c), 'simple_only_unlimited_args - Expected result: 37, 42, 56, 89') self.assertRaisesRegexp(template.TemplateSyntaxError, "'simple_two_params' received too many positional arguments", @@ -79,7 +79,7 @@ class CustomTagTests(TestCase): template.Template, '{% load custom %}{% simple_one_default 37 42 56 %}') t = template.Template('{% load custom %}{% simple_unlimited_args_kwargs 37 40|add:2 56 eggs="scrambled" four=1|add:3 %}') - self.assertEqual(t.render(c), u'simple_unlimited_args_kwargs - Expected result: 37, 42, 56 / eggs=scrambled, four=4') + self.assertEqual(t.render(c), 'simple_unlimited_args_kwargs - Expected result: 37, 42, 56 / eggs=scrambled, four=4') self.assertRaisesRegexp(template.TemplateSyntaxError, "'simple_unlimited_args_kwargs' received some positional argument\(s\) after some keyword argument\(s\)", @@ -109,50 +109,50 @@ class CustomTagTests(TestCase): c = template.Context({'value': 42}) t = template.Template('{% load custom %}{% inclusion_no_params %}') - self.assertEqual(t.render(c), u'inclusion_no_params - Expected result\n') + self.assertEqual(t.render(c), 'inclusion_no_params - Expected result\n') t = template.Template('{% load custom %}{% inclusion_one_param 37 %}') - self.assertEqual(t.render(c), u'inclusion_one_param - Expected result: 37\n') + self.assertEqual(t.render(c), 'inclusion_one_param - Expected result: 37\n') t = template.Template('{% load custom %}{% inclusion_explicit_no_context 37 %}') - self.assertEqual(t.render(c), u'inclusion_explicit_no_context - Expected result: 37\n') + self.assertEqual(t.render(c), 'inclusion_explicit_no_context - Expected result: 37\n') t = template.Template('{% load custom %}{% inclusion_no_params_with_context %}') - self.assertEqual(t.render(c), u'inclusion_no_params_with_context - Expected result (context value: 42)\n') + self.assertEqual(t.render(c), 'inclusion_no_params_with_context - Expected result (context value: 42)\n') t = template.Template('{% load custom %}{% inclusion_params_and_context 37 %}') - self.assertEqual(t.render(c), u'inclusion_params_and_context - Expected result (context value: 42): 37\n') + self.assertEqual(t.render(c), 'inclusion_params_and_context - Expected result (context value: 42): 37\n') t = template.Template('{% load custom %}{% inclusion_two_params 37 42 %}') - self.assertEqual(t.render(c), u'inclusion_two_params - Expected result: 37, 42\n') + self.assertEqual(t.render(c), 'inclusion_two_params - Expected result: 37, 42\n') t = template.Template('{% load custom %}{% inclusion_one_default 37 %}') - self.assertEqual(t.render(c), u'inclusion_one_default - Expected result: 37, hi\n') + self.assertEqual(t.render(c), 'inclusion_one_default - Expected result: 37, hi\n') t = template.Template('{% load custom %}{% inclusion_one_default 37 two="hello" %}') - self.assertEqual(t.render(c), u'inclusion_one_default - Expected result: 37, hello\n') + self.assertEqual(t.render(c), 'inclusion_one_default - Expected result: 37, hello\n') t = template.Template('{% load custom %}{% inclusion_one_default one=99 two="hello" %}') - self.assertEqual(t.render(c), u'inclusion_one_default - Expected result: 99, hello\n') + self.assertEqual(t.render(c), 'inclusion_one_default - Expected result: 99, hello\n') self.assertRaisesRegexp(template.TemplateSyntaxError, "'inclusion_one_default' received unexpected keyword argument 'three'", template.Template, '{% load custom %}{% inclusion_one_default 99 two="hello" three="foo" %}') t = template.Template('{% load custom %}{% inclusion_one_default 37 42 %}') - self.assertEqual(t.render(c), u'inclusion_one_default - Expected result: 37, 42\n') + self.assertEqual(t.render(c), 'inclusion_one_default - Expected result: 37, 42\n') t = template.Template('{% load custom %}{% inclusion_unlimited_args 37 %}') - self.assertEqual(t.render(c), u'inclusion_unlimited_args - Expected result: 37, hi\n') + self.assertEqual(t.render(c), 'inclusion_unlimited_args - Expected result: 37, hi\n') t = template.Template('{% load custom %}{% inclusion_unlimited_args 37 42 56 89 %}') - self.assertEqual(t.render(c), u'inclusion_unlimited_args - Expected result: 37, 42, 56, 89\n') + self.assertEqual(t.render(c), 'inclusion_unlimited_args - Expected result: 37, 42, 56, 89\n') t = template.Template('{% load custom %}{% inclusion_only_unlimited_args %}') - self.assertEqual(t.render(c), u'inclusion_only_unlimited_args - Expected result: \n') + self.assertEqual(t.render(c), 'inclusion_only_unlimited_args - Expected result: \n') t = template.Template('{% load custom %}{% inclusion_only_unlimited_args 37 42 56 89 %}') - self.assertEqual(t.render(c), u'inclusion_only_unlimited_args - Expected result: 37, 42, 56, 89\n') + self.assertEqual(t.render(c), 'inclusion_only_unlimited_args - Expected result: 37, 42, 56, 89\n') self.assertRaisesRegexp(template.TemplateSyntaxError, "'inclusion_two_params' received too many positional arguments", @@ -171,7 +171,7 @@ class CustomTagTests(TestCase): template.Template, '{% load custom %}{% inclusion_unlimited_args %}') t = template.Template('{% load custom %}{% inclusion_unlimited_args_kwargs 37 40|add:2 56 eggs="scrambled" four=1|add:3 %}') - self.assertEqual(t.render(c), u'inclusion_unlimited_args_kwargs - Expected result: 37, 42, 56 / eggs=scrambled, four=4\n') + self.assertEqual(t.render(c), 'inclusion_unlimited_args_kwargs - Expected result: 37, 42, 56 / eggs=scrambled, four=4\n') self.assertRaisesRegexp(template.TemplateSyntaxError, "'inclusion_unlimited_args_kwargs' received some positional argument\(s\) after some keyword argument\(s\)", @@ -191,40 +191,40 @@ class CustomTagTests(TestCase): c = template.Context({'value': 42}) t = template.Template('{% load custom %}{% inclusion_no_params_from_template %}') - self.assertEqual(t.render(c), u'inclusion_no_params_from_template - Expected result\n') + self.assertEqual(t.render(c), 'inclusion_no_params_from_template - Expected result\n') t = template.Template('{% load custom %}{% inclusion_one_param_from_template 37 %}') - self.assertEqual(t.render(c), u'inclusion_one_param_from_template - Expected result: 37\n') + self.assertEqual(t.render(c), 'inclusion_one_param_from_template - Expected result: 37\n') t = template.Template('{% load custom %}{% inclusion_explicit_no_context_from_template 37 %}') - self.assertEqual(t.render(c), u'inclusion_explicit_no_context_from_template - Expected result: 37\n') + self.assertEqual(t.render(c), 'inclusion_explicit_no_context_from_template - Expected result: 37\n') t = template.Template('{% load custom %}{% inclusion_no_params_with_context_from_template %}') - self.assertEqual(t.render(c), u'inclusion_no_params_with_context_from_template - Expected result (context value: 42)\n') + self.assertEqual(t.render(c), 'inclusion_no_params_with_context_from_template - Expected result (context value: 42)\n') t = template.Template('{% load custom %}{% inclusion_params_and_context_from_template 37 %}') - self.assertEqual(t.render(c), u'inclusion_params_and_context_from_template - Expected result (context value: 42): 37\n') + self.assertEqual(t.render(c), 'inclusion_params_and_context_from_template - Expected result (context value: 42): 37\n') t = template.Template('{% load custom %}{% inclusion_two_params_from_template 37 42 %}') - self.assertEqual(t.render(c), u'inclusion_two_params_from_template - Expected result: 37, 42\n') + self.assertEqual(t.render(c), 'inclusion_two_params_from_template - Expected result: 37, 42\n') t = template.Template('{% load custom %}{% inclusion_one_default_from_template 37 %}') - self.assertEqual(t.render(c), u'inclusion_one_default_from_template - Expected result: 37, hi\n') + self.assertEqual(t.render(c), 'inclusion_one_default_from_template - Expected result: 37, hi\n') t = template.Template('{% load custom %}{% inclusion_one_default_from_template 37 42 %}') - self.assertEqual(t.render(c), u'inclusion_one_default_from_template - Expected result: 37, 42\n') + self.assertEqual(t.render(c), 'inclusion_one_default_from_template - Expected result: 37, 42\n') t = template.Template('{% load custom %}{% inclusion_unlimited_args_from_template 37 %}') - self.assertEqual(t.render(c), u'inclusion_unlimited_args_from_template - Expected result: 37, hi\n') + self.assertEqual(t.render(c), 'inclusion_unlimited_args_from_template - Expected result: 37, hi\n') t = template.Template('{% load custom %}{% inclusion_unlimited_args_from_template 37 42 56 89 %}') - self.assertEqual(t.render(c), u'inclusion_unlimited_args_from_template - Expected result: 37, 42, 56, 89\n') + self.assertEqual(t.render(c), 'inclusion_unlimited_args_from_template - Expected result: 37, 42, 56, 89\n') t = template.Template('{% load custom %}{% inclusion_only_unlimited_args_from_template %}') - self.assertEqual(t.render(c), u'inclusion_only_unlimited_args_from_template - Expected result: \n') + self.assertEqual(t.render(c), 'inclusion_only_unlimited_args_from_template - Expected result: \n') t = template.Template('{% load custom %}{% inclusion_only_unlimited_args_from_template 37 42 56 89 %}') - self.assertEqual(t.render(c), u'inclusion_only_unlimited_args_from_template - Expected result: 37, 42, 56, 89\n') + self.assertEqual(t.render(c), 'inclusion_only_unlimited_args_from_template - Expected result: 37, 42, 56, 89\n') def test_inclusion_tag_registration(self): # Test that the decorators preserve the decorated function's docstring, name and attributes. @@ -249,10 +249,10 @@ class CustomTagTests(TestCase): """ c = template.Context({}) t = template.Template('{% load custom %}{% inclusion_tag_current_app %}') - self.assertEqual(t.render(c).strip(), u'None') + self.assertEqual(t.render(c).strip(), 'None') c.current_app = 'advanced' - self.assertEqual(t.render(c).strip(), u'advanced') + self.assertEqual(t.render(c).strip(), 'advanced') def test_15070_use_l10n(self): """ @@ -261,59 +261,59 @@ class CustomTagTests(TestCase): """ c = template.Context({}) t = template.Template('{% load custom %}{% inclusion_tag_use_l10n %}') - self.assertEqual(t.render(c).strip(), u'None') + self.assertEqual(t.render(c).strip(), 'None') c.use_l10n = True - self.assertEqual(t.render(c).strip(), u'True') + self.assertEqual(t.render(c).strip(), 'True') def test_assignment_tags(self): c = template.Context({'value': 42}) t = template.Template('{% load custom %}{% assignment_no_params as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_no_params - Expected result') + self.assertEqual(t.render(c), 'The result is: assignment_no_params - Expected result') t = template.Template('{% load custom %}{% assignment_one_param 37 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_one_param - Expected result: 37') + self.assertEqual(t.render(c), 'The result is: assignment_one_param - Expected result: 37') t = template.Template('{% load custom %}{% assignment_explicit_no_context 37 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_explicit_no_context - Expected result: 37') + self.assertEqual(t.render(c), 'The result is: assignment_explicit_no_context - Expected result: 37') t = template.Template('{% load custom %}{% assignment_no_params_with_context as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_no_params_with_context - Expected result (context value: 42)') + self.assertEqual(t.render(c), 'The result is: assignment_no_params_with_context - Expected result (context value: 42)') t = template.Template('{% load custom %}{% assignment_params_and_context 37 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_params_and_context - Expected result (context value: 42): 37') + self.assertEqual(t.render(c), 'The result is: assignment_params_and_context - Expected result (context value: 42): 37') t = template.Template('{% load custom %}{% assignment_two_params 37 42 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_two_params - Expected result: 37, 42') + self.assertEqual(t.render(c), 'The result is: assignment_two_params - Expected result: 37, 42') t = template.Template('{% load custom %}{% assignment_one_default 37 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_one_default - Expected result: 37, hi') + self.assertEqual(t.render(c), 'The result is: assignment_one_default - Expected result: 37, hi') t = template.Template('{% load custom %}{% assignment_one_default 37 two="hello" as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_one_default - Expected result: 37, hello') + self.assertEqual(t.render(c), 'The result is: assignment_one_default - Expected result: 37, hello') t = template.Template('{% load custom %}{% assignment_one_default one=99 two="hello" as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_one_default - Expected result: 99, hello') + self.assertEqual(t.render(c), 'The result is: assignment_one_default - Expected result: 99, hello') self.assertRaisesRegexp(template.TemplateSyntaxError, "'assignment_one_default' received unexpected keyword argument 'three'", template.Template, '{% load custom %}{% assignment_one_default 99 two="hello" three="foo" as var %}') t = template.Template('{% load custom %}{% assignment_one_default 37 42 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_one_default - Expected result: 37, 42') + self.assertEqual(t.render(c), 'The result is: assignment_one_default - Expected result: 37, 42') t = template.Template('{% load custom %}{% assignment_unlimited_args 37 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_unlimited_args - Expected result: 37, hi') + self.assertEqual(t.render(c), 'The result is: assignment_unlimited_args - Expected result: 37, hi') t = template.Template('{% load custom %}{% assignment_unlimited_args 37 42 56 89 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_unlimited_args - Expected result: 37, 42, 56, 89') + self.assertEqual(t.render(c), 'The result is: assignment_unlimited_args - Expected result: 37, 42, 56, 89') t = template.Template('{% load custom %}{% assignment_only_unlimited_args as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_only_unlimited_args - Expected result: ') + self.assertEqual(t.render(c), 'The result is: assignment_only_unlimited_args - Expected result: ') t = template.Template('{% load custom %}{% assignment_only_unlimited_args 37 42 56 89 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_only_unlimited_args - Expected result: 37, 42, 56, 89') + self.assertEqual(t.render(c), 'The result is: assignment_only_unlimited_args - Expected result: 37, 42, 56, 89') self.assertRaisesRegexp(template.TemplateSyntaxError, "'assignment_one_param' tag takes at least 2 arguments and the second last argument must be 'as'", @@ -344,7 +344,7 @@ class CustomTagTests(TestCase): template.Template, '{% load custom %}{% assignment_unlimited_args as var %}The result is: {{ var }}') t = template.Template('{% load custom %}{% assignment_unlimited_args_kwargs 37 40|add:2 56 eggs="scrambled" four=1|add:3 as var %}The result is: {{ var }}') - self.assertEqual(t.render(c), u'The result is: assignment_unlimited_args_kwargs - Expected result: 37, 42, 56 / eggs=scrambled, four=4') + self.assertEqual(t.render(c), 'The result is: assignment_unlimited_args_kwargs - Expected result: 37, 42, 56 / eggs=scrambled, four=4') self.assertRaisesRegexp(template.TemplateSyntaxError, "'assignment_unlimited_args_kwargs' received some positional argument\(s\) after some keyword argument\(s\)", diff --git a/tests/regressiontests/templates/filters.py b/tests/regressiontests/templates/filters.py index 41f8e43c9e..fd570700af 100644 --- a/tests/regressiontests/templates/filters.py +++ b/tests/regressiontests/templates/filters.py @@ -6,20 +6,22 @@ The tests are hidden inside a function so that things like timestamps and timezones are only evaluated at the moment of execution and will therefore be consistent. """ +from __future__ import unicode_literals from datetime import date, datetime, timedelta +from django.test.utils import str_prefix from django.utils.tzinfo import LocalTimezone, FixedOffset from django.utils.safestring import mark_safe # These two classes are used to test auto-escaping of __unicode__ output. class UnsafeClass: def __unicode__(self): - return u'you & me' + return 'you & me' class SafeClass: def __unicode__(self): - return mark_safe(u'you > me') + return mark_safe('you > me') # RESULT SYNTAX -- # 'template_name': ('template contents', 'context dict', @@ -84,66 +86,66 @@ def get_filter_tests(): 'filter-timeuntil12' : ('{{ a|timeuntil:b }}', {'a': today, 'b': today}, '0 minutes'), 'filter-timeuntil13' : ('{{ a|timeuntil:b }}', {'a': today, 'b': today - timedelta(hours=24)}, '1 day'), - 'filter-addslash01': ("{% autoescape off %}{{ a|addslashes }} {{ b|addslashes }}{% endautoescape %}", {"a": "<a>'", "b": mark_safe("<a>'")}, ur"<a>\' <a>\'"), - 'filter-addslash02': ("{{ a|addslashes }} {{ b|addslashes }}", {"a": "<a>'", "b": mark_safe("<a>'")}, ur"<a>\' <a>\'"), + 'filter-addslash01': ("{% autoescape off %}{{ a|addslashes }} {{ b|addslashes }}{% endautoescape %}", {"a": "<a>'", "b": mark_safe("<a>'")}, r"<a>\' <a>\'"), + 'filter-addslash02': ("{{ a|addslashes }} {{ b|addslashes }}", {"a": "<a>'", "b": mark_safe("<a>'")}, r"<a>\' <a>\'"), - 'filter-capfirst01': ("{% autoescape off %}{{ a|capfirst }} {{ b|capfirst }}{% endautoescape %}", {"a": "fred>", "b": mark_safe("fred>")}, u"Fred> Fred>"), - 'filter-capfirst02': ("{{ a|capfirst }} {{ b|capfirst }}", {"a": "fred>", "b": mark_safe("fred>")}, u"Fred> Fred>"), + 'filter-capfirst01': ("{% autoescape off %}{{ a|capfirst }} {{ b|capfirst }}{% endautoescape %}", {"a": "fred>", "b": mark_safe("fred>")}, "Fred> Fred>"), + 'filter-capfirst02': ("{{ a|capfirst }} {{ b|capfirst }}", {"a": "fred>", "b": mark_safe("fred>")}, "Fred> Fred>"), # Note that applying fix_ampsersands in autoescape mode leads to # double escaping. - 'filter-fix_ampersands01': ("{% autoescape off %}{{ a|fix_ampersands }} {{ b|fix_ampersands }}{% endautoescape %}", {"a": "a&b", "b": mark_safe("a&b")}, u"a&b a&b"), - 'filter-fix_ampersands02': ("{{ a|fix_ampersands }} {{ b|fix_ampersands }}", {"a": "a&b", "b": mark_safe("a&b")}, u"a&amp;b a&b"), + 'filter-fix_ampersands01': ("{% autoescape off %}{{ a|fix_ampersands }} {{ b|fix_ampersands }}{% endautoescape %}", {"a": "a&b", "b": mark_safe("a&b")}, "a&b a&b"), + 'filter-fix_ampersands02': ("{{ a|fix_ampersands }} {{ b|fix_ampersands }}", {"a": "a&b", "b": mark_safe("a&b")}, "a&amp;b a&b"), - 'filter-floatformat01': ("{% autoescape off %}{{ a|floatformat }} {{ b|floatformat }}{% endautoescape %}", {"a": "1.42", "b": mark_safe("1.42")}, u"1.4 1.4"), - 'filter-floatformat02': ("{{ a|floatformat }} {{ b|floatformat }}", {"a": "1.42", "b": mark_safe("1.42")}, u"1.4 1.4"), + 'filter-floatformat01': ("{% autoescape off %}{{ a|floatformat }} {{ b|floatformat }}{% endautoescape %}", {"a": "1.42", "b": mark_safe("1.42")}, "1.4 1.4"), + 'filter-floatformat02': ("{{ a|floatformat }} {{ b|floatformat }}", {"a": "1.42", "b": mark_safe("1.42")}, "1.4 1.4"), # The contents of "linenumbers" is escaped according to the current # autoescape setting. - 'filter-linenumbers01': ("{{ a|linenumbers }} {{ b|linenumbers }}", {"a": "one\n<two>\nthree", "b": mark_safe("one\n<two>\nthree")}, u"1. one\n2. <two>\n3. three 1. one\n2. <two>\n3. three"), - 'filter-linenumbers02': ("{% autoescape off %}{{ a|linenumbers }} {{ b|linenumbers }}{% endautoescape %}", {"a": "one\n<two>\nthree", "b": mark_safe("one\n<two>\nthree")}, u"1. one\n2. <two>\n3. three 1. one\n2. <two>\n3. three"), + 'filter-linenumbers01': ("{{ a|linenumbers }} {{ b|linenumbers }}", {"a": "one\n<two>\nthree", "b": mark_safe("one\n<two>\nthree")}, "1. one\n2. <two>\n3. three 1. one\n2. <two>\n3. three"), + 'filter-linenumbers02': ("{% autoescape off %}{{ a|linenumbers }} {{ b|linenumbers }}{% endautoescape %}", {"a": "one\n<two>\nthree", "b": mark_safe("one\n<two>\nthree")}, "1. one\n2. <two>\n3. three 1. one\n2. <two>\n3. three"), - 'filter-lower01': ("{% autoescape off %}{{ a|lower }} {{ b|lower }}{% endautoescape %}", {"a": "Apple & banana", "b": mark_safe("Apple & banana")}, u"apple & banana apple & banana"), - 'filter-lower02': ("{{ a|lower }} {{ b|lower }}", {"a": "Apple & banana", "b": mark_safe("Apple & banana")}, u"apple & banana apple & banana"), + 'filter-lower01': ("{% autoescape off %}{{ a|lower }} {{ b|lower }}{% endautoescape %}", {"a": "Apple & banana", "b": mark_safe("Apple & banana")}, "apple & banana apple & banana"), + 'filter-lower02': ("{{ a|lower }} {{ b|lower }}", {"a": "Apple & banana", "b": mark_safe("Apple & banana")}, "apple & banana apple & banana"), # The make_list filter can destroy existing escaping, so the results are # escaped. - 'filter-make_list01': ("{% autoescape off %}{{ a|make_list }}{% endautoescape %}", {"a": mark_safe("&")}, u"[u'&']"), - 'filter-make_list02': ("{{ a|make_list }}", {"a": mark_safe("&")}, u"[u'&']"), - 'filter-make_list03': ('{% autoescape off %}{{ a|make_list|stringformat:"s"|safe }}{% endautoescape %}', {"a": mark_safe("&")}, u"[u'&']"), - 'filter-make_list04': ('{{ a|make_list|stringformat:"s"|safe }}', {"a": mark_safe("&")}, u"[u'&']"), + 'filter-make_list01': ("{% autoescape off %}{{ a|make_list }}{% endautoescape %}", {"a": mark_safe("&")}, str_prefix("[%(_)s'&']")), + 'filter-make_list02': ("{{ a|make_list }}", {"a": mark_safe("&")}, "[u'&']"), + 'filter-make_list03': ('{% autoescape off %}{{ a|make_list|stringformat:"s"|safe }}{% endautoescape %}', {"a": mark_safe("&")}, str_prefix("[%(_)s'&']")), + 'filter-make_list04': ('{{ a|make_list|stringformat:"s"|safe }}', {"a": mark_safe("&")}, str_prefix("[%(_)s'&']")), # Running slugify on a pre-escaped string leads to odd behavior, # but the result is still safe. - 'filter-slugify01': ("{% autoescape off %}{{ a|slugify }} {{ b|slugify }}{% endautoescape %}", {"a": "a & b", "b": mark_safe("a & b")}, u"a-b a-amp-b"), - 'filter-slugify02': ("{{ a|slugify }} {{ b|slugify }}", {"a": "a & b", "b": mark_safe("a & b")}, u"a-b a-amp-b"), + 'filter-slugify01': ("{% autoescape off %}{{ a|slugify }} {{ b|slugify }}{% endautoescape %}", {"a": "a & b", "b": mark_safe("a & b")}, "a-b a-amp-b"), + 'filter-slugify02': ("{{ a|slugify }} {{ b|slugify }}", {"a": "a & b", "b": mark_safe("a & b")}, "a-b a-amp-b"), # Notice that escaping is applied *after* any filters, so the string # formatting here only needs to deal with pre-escaped characters. 'filter-stringformat01': ('{% autoescape off %}.{{ a|stringformat:"5s" }}. .{{ b|stringformat:"5s" }}.{% endautoescape %}', - {"a": "a<b", "b": mark_safe("a<b")}, u". a<b. . a<b."), + {"a": "a<b", "b": mark_safe("a<b")}, ". a<b. . a<b."), 'filter-stringformat02': ('.{{ a|stringformat:"5s" }}. .{{ b|stringformat:"5s" }}.', {"a": "a<b", "b": mark_safe("a<b")}, - u". a<b. . a<b."), + ". a<b. . a<b."), # Test the title filter - 'filter-title1' : ('{{ a|title }}', {'a' : 'JOE\'S CRAB SHACK'}, u'Joe's Crab Shack'), - 'filter-title2' : ('{{ a|title }}', {'a' : '555 WEST 53RD STREET'}, u'555 West 53rd Street'), + 'filter-title1' : ('{{ a|title }}', {'a' : 'JOE\'S CRAB SHACK'}, 'Joe's Crab Shack'), + 'filter-title2' : ('{{ a|title }}', {'a' : '555 WEST 53RD STREET'}, '555 West 53rd Street'), 'filter-truncatewords01': ('{% autoescape off %}{{ a|truncatewords:"2" }} {{ b|truncatewords:"2"}}{% endautoescape %}', - {"a": "alpha & bravo", "b": mark_safe("alpha & bravo")}, u"alpha & ... alpha & ..."), + {"a": "alpha & bravo", "b": mark_safe("alpha & bravo")}, "alpha & ... alpha & ..."), 'filter-truncatewords02': ('{{ a|truncatewords:"2" }} {{ b|truncatewords:"2"}}', - {"a": "alpha & bravo", "b": mark_safe("alpha & bravo")}, u"alpha & ... alpha & ..."), + {"a": "alpha & bravo", "b": mark_safe("alpha & bravo")}, "alpha & ... alpha & ..."), - 'filter-truncatechars01': ('{{ a|truncatechars:5 }}', {'a': "Testing, testing"}, u"Te..."), - 'filter-truncatechars02': ('{{ a|truncatechars:7 }}', {'a': "Testing"}, u"Testing"), + 'filter-truncatechars01': ('{{ a|truncatechars:5 }}', {'a': "Testing, testing"}, "Te..."), + 'filter-truncatechars02': ('{{ a|truncatechars:7 }}', {'a': "Testing"}, "Testing"), # The "upper" filter messes up entities (which are case-sensitive), # so it's not safe for non-escaping purposes. - 'filter-upper01': ('{% autoescape off %}{{ a|upper }} {{ b|upper }}{% endautoescape %}', {"a": "a & b", "b": mark_safe("a & b")}, u"A & B A & B"), - 'filter-upper02': ('{{ a|upper }} {{ b|upper }}', {"a": "a & b", "b": mark_safe("a & b")}, u"A & B A &AMP; B"), + 'filter-upper01': ('{% autoescape off %}{{ a|upper }} {{ b|upper }}{% endautoescape %}', {"a": "a & b", "b": mark_safe("a & b")}, "A & B A & B"), + 'filter-upper02': ('{{ a|upper }} {{ b|upper }}', {"a": "a & b", "b": mark_safe("a & b")}, "A & B A &AMP; B"), - 'filter-urlize01': ('{% autoescape off %}{{ a|urlize }} {{ b|urlize }}{% endautoescape %}', {"a": "http://example.com/?x=&y=", "b": mark_safe("http://example.com?x=&y=")}, u'<a href="http://example.com/?x=&y=" rel="nofollow">http://example.com/?x=&y=</a> <a href="http://example.com?x=&y=" rel="nofollow">http://example.com?x=&y=</a>'), - 'filter-urlize02': ('{{ a|urlize }} {{ b|urlize }}', {"a": "http://example.com/?x=&y=", "b": mark_safe("http://example.com?x=&y=")}, u'<a href="http://example.com/?x=&y=" rel="nofollow">http://example.com/?x=&y=</a> <a href="http://example.com?x=&y=" rel="nofollow">http://example.com?x=&y=</a>'), + 'filter-urlize01': ('{% autoescape off %}{{ a|urlize }} {{ b|urlize }}{% endautoescape %}', {"a": "http://example.com/?x=&y=", "b": mark_safe("http://example.com?x=&y=")}, '<a href="http://example.com/?x=&y=" rel="nofollow">http://example.com/?x=&y=</a> <a href="http://example.com?x=&y=" rel="nofollow">http://example.com?x=&y=</a>'), + 'filter-urlize02': ('{{ a|urlize }} {{ b|urlize }}', {"a": "http://example.com/?x=&y=", "b": mark_safe("http://example.com?x=&y=")}, '<a href="http://example.com/?x=&y=" rel="nofollow">http://example.com/?x=&y=</a> <a href="http://example.com?x=&y=" rel="nofollow">http://example.com?x=&y=</a>'), 'filter-urlize03': ('{% autoescape off %}{{ a|urlize }}{% endautoescape %}', {"a": mark_safe("a & b")}, 'a & b'), 'filter-urlize04': ('{{ a|urlize }}', {"a": mark_safe("a & b")}, 'a & b'), @@ -156,73 +158,73 @@ def get_filter_tests(): 'filter-urlize07': ('{{ a|urlize }}', {"a": "Email me at me@example.com"}, 'Email me at <a href="mailto:me@example.com">me@example.com</a>'), 'filter-urlize08': ('{{ a|urlize }}', {"a": "Email me at <me@example.com>"}, 'Email me at <<a href="mailto:me@example.com">me@example.com</a>>'), - 'filter-urlizetrunc01': ('{% autoescape off %}{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}{% endautoescape %}', {"a": '"Unsafe" http://example.com/x=&y=', "b": mark_safe('"Safe" http://example.com?x=&y=')}, u'"Unsafe" <a href="http://example.com/x=&y=" rel="nofollow">http:...</a> "Safe" <a href="http://example.com?x=&y=" rel="nofollow">http:...</a>'), - 'filter-urlizetrunc02': ('{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}', {"a": '"Unsafe" http://example.com/x=&y=', "b": mark_safe('"Safe" http://example.com?x=&y=')}, u'"Unsafe" <a href="http://example.com/x=&y=" rel="nofollow">http:...</a> "Safe" <a href="http://example.com?x=&y=" rel="nofollow">http:...</a>'), + 'filter-urlizetrunc01': ('{% autoescape off %}{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}{% endautoescape %}', {"a": '"Unsafe" http://example.com/x=&y=', "b": mark_safe('"Safe" http://example.com?x=&y=')}, '"Unsafe" <a href="http://example.com/x=&y=" rel="nofollow">http:...</a> "Safe" <a href="http://example.com?x=&y=" rel="nofollow">http:...</a>'), + 'filter-urlizetrunc02': ('{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}', {"a": '"Unsafe" http://example.com/x=&y=', "b": mark_safe('"Safe" http://example.com?x=&y=')}, '"Unsafe" <a href="http://example.com/x=&y=" rel="nofollow">http:...</a> "Safe" <a href="http://example.com?x=&y=" rel="nofollow">http:...</a>'), 'filter-wordcount01': ('{% autoescape off %}{{ a|wordcount }} {{ b|wordcount }}{% endautoescape %}', {"a": "a & b", "b": mark_safe("a & b")}, "3 3"), 'filter-wordcount02': ('{{ a|wordcount }} {{ b|wordcount }}', {"a": "a & b", "b": mark_safe("a & b")}, "3 3"), - 'filter-wordwrap01': ('{% autoescape off %}{{ a|wordwrap:"3" }} {{ b|wordwrap:"3" }}{% endautoescape %}', {"a": "a & b", "b": mark_safe("a & b")}, u"a &\nb a &\nb"), - 'filter-wordwrap02': ('{{ a|wordwrap:"3" }} {{ b|wordwrap:"3" }}', {"a": "a & b", "b": mark_safe("a & b")}, u"a &\nb a &\nb"), + 'filter-wordwrap01': ('{% autoescape off %}{{ a|wordwrap:"3" }} {{ b|wordwrap:"3" }}{% endautoescape %}', {"a": "a & b", "b": mark_safe("a & b")}, "a &\nb a &\nb"), + 'filter-wordwrap02': ('{{ a|wordwrap:"3" }} {{ b|wordwrap:"3" }}', {"a": "a & b", "b": mark_safe("a & b")}, "a &\nb a &\nb"), - 'filter-ljust01': ('{% autoescape off %}.{{ a|ljust:"5" }}. .{{ b|ljust:"5" }}.{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, u".a&b . .a&b ."), - 'filter-ljust02': ('.{{ a|ljust:"5" }}. .{{ b|ljust:"5" }}.', {"a": "a&b", "b": mark_safe("a&b")}, u".a&b . .a&b ."), + 'filter-ljust01': ('{% autoescape off %}.{{ a|ljust:"5" }}. .{{ b|ljust:"5" }}.{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, ".a&b . .a&b ."), + 'filter-ljust02': ('.{{ a|ljust:"5" }}. .{{ b|ljust:"5" }}.', {"a": "a&b", "b": mark_safe("a&b")}, ".a&b . .a&b ."), - 'filter-rjust01': ('{% autoescape off %}.{{ a|rjust:"5" }}. .{{ b|rjust:"5" }}.{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, u". a&b. . a&b."), - 'filter-rjust02': ('.{{ a|rjust:"5" }}. .{{ b|rjust:"5" }}.', {"a": "a&b", "b": mark_safe("a&b")}, u". a&b. . a&b."), + 'filter-rjust01': ('{% autoescape off %}.{{ a|rjust:"5" }}. .{{ b|rjust:"5" }}.{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, ". a&b. . a&b."), + 'filter-rjust02': ('.{{ a|rjust:"5" }}. .{{ b|rjust:"5" }}.', {"a": "a&b", "b": mark_safe("a&b")}, ". a&b. . a&b."), - 'filter-center01': ('{% autoescape off %}.{{ a|center:"5" }}. .{{ b|center:"5" }}.{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, u". a&b . . a&b ."), - 'filter-center02': ('.{{ a|center:"5" }}. .{{ b|center:"5" }}.', {"a": "a&b", "b": mark_safe("a&b")}, u". a&b . . a&b ."), + 'filter-center01': ('{% autoescape off %}.{{ a|center:"5" }}. .{{ b|center:"5" }}.{% endautoescape %}', {"a": "a&b", "b": mark_safe("a&b")}, ". a&b . . a&b ."), + 'filter-center02': ('.{{ a|center:"5" }}. .{{ b|center:"5" }}.', {"a": "a&b", "b": mark_safe("a&b")}, ". a&b . . a&b ."), - 'filter-cut01': ('{% autoescape off %}{{ a|cut:"x" }} {{ b|cut:"x" }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&y")}, u"&y &y"), - 'filter-cut02': ('{{ a|cut:"x" }} {{ b|cut:"x" }}', {"a": "x&y", "b": mark_safe("x&y")}, u"&y &y"), - 'filter-cut03': ('{% autoescape off %}{{ a|cut:"&" }} {{ b|cut:"&" }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&y")}, u"xy xamp;y"), - 'filter-cut04': ('{{ a|cut:"&" }} {{ b|cut:"&" }}', {"a": "x&y", "b": mark_safe("x&y")}, u"xy xamp;y"), + 'filter-cut01': ('{% autoescape off %}{{ a|cut:"x" }} {{ b|cut:"x" }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&y")}, "&y &y"), + 'filter-cut02': ('{{ a|cut:"x" }} {{ b|cut:"x" }}', {"a": "x&y", "b": mark_safe("x&y")}, "&y &y"), + 'filter-cut03': ('{% autoescape off %}{{ a|cut:"&" }} {{ b|cut:"&" }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&y")}, "xy xamp;y"), + 'filter-cut04': ('{{ a|cut:"&" }} {{ b|cut:"&" }}', {"a": "x&y", "b": mark_safe("x&y")}, "xy xamp;y"), # Passing ';' to cut can break existing HTML entities, so those strings # are auto-escaped. - 'filter-cut05': ('{% autoescape off %}{{ a|cut:";" }} {{ b|cut:";" }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&y")}, u"x&y x&y"), - 'filter-cut06': ('{{ a|cut:";" }} {{ b|cut:";" }}', {"a": "x&y", "b": mark_safe("x&y")}, u"x&y x&ampy"), + 'filter-cut05': ('{% autoescape off %}{{ a|cut:";" }} {{ b|cut:";" }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&y")}, "x&y x&y"), + 'filter-cut06': ('{{ a|cut:";" }} {{ b|cut:";" }}', {"a": "x&y", "b": mark_safe("x&y")}, "x&y x&ampy"), # The "escape" filter works the same whether autoescape is on or off, # but it has no effect on strings already marked as safe. - 'filter-escape01': ('{{ a|escape }} {{ b|escape }}', {"a": "x&y", "b": mark_safe("x&y")}, u"x&y x&y"), + 'filter-escape01': ('{{ a|escape }} {{ b|escape }}', {"a": "x&y", "b": mark_safe("x&y")}, "x&y x&y"), 'filter-escape02': ('{% autoescape off %}{{ a|escape }} {{ b|escape }}{% endautoescape %}', {"a": "x&y", "b": mark_safe("x&y")}, "x&y x&y"), # It is only applied once, regardless of the number of times it # appears in a chain. - 'filter-escape03': ('{% autoescape off %}{{ a|escape|escape }}{% endautoescape %}', {"a": "x&y"}, u"x&y"), - 'filter-escape04': ('{{ a|escape|escape }}', {"a": "x&y"}, u"x&y"), + 'filter-escape03': ('{% autoescape off %}{{ a|escape|escape }}{% endautoescape %}', {"a": "x&y"}, "x&y"), + 'filter-escape04': ('{{ a|escape|escape }}', {"a": "x&y"}, "x&y"), # Force_escape is applied immediately. It can be used to provide # double-escaping, for example. - 'filter-force-escape01': ('{% autoescape off %}{{ a|force_escape }}{% endautoescape %}', {"a": "x&y"}, u"x&y"), - 'filter-force-escape02': ('{{ a|force_escape }}', {"a": "x&y"}, u"x&y"), - 'filter-force-escape03': ('{% autoescape off %}{{ a|force_escape|force_escape }}{% endautoescape %}', {"a": "x&y"}, u"x&amp;y"), - 'filter-force-escape04': ('{{ a|force_escape|force_escape }}', {"a": "x&y"}, u"x&amp;y"), + 'filter-force-escape01': ('{% autoescape off %}{{ a|force_escape }}{% endautoescape %}', {"a": "x&y"}, "x&y"), + 'filter-force-escape02': ('{{ a|force_escape }}', {"a": "x&y"}, "x&y"), + 'filter-force-escape03': ('{% autoescape off %}{{ a|force_escape|force_escape }}{% endautoescape %}', {"a": "x&y"}, "x&amp;y"), + 'filter-force-escape04': ('{{ a|force_escape|force_escape }}', {"a": "x&y"}, "x&amp;y"), # Because the result of force_escape is "safe", an additional # escape filter has no effect. - 'filter-force-escape05': ('{% autoescape off %}{{ a|force_escape|escape }}{% endautoescape %}', {"a": "x&y"}, u"x&y"), - 'filter-force-escape06': ('{{ a|force_escape|escape }}', {"a": "x&y"}, u"x&y"), - 'filter-force-escape07': ('{% autoescape off %}{{ a|escape|force_escape }}{% endautoescape %}', {"a": "x&y"}, u"x&y"), - 'filter-force-escape08': ('{{ a|escape|force_escape }}', {"a": "x&y"}, u"x&y"), + 'filter-force-escape05': ('{% autoescape off %}{{ a|force_escape|escape }}{% endautoescape %}', {"a": "x&y"}, "x&y"), + 'filter-force-escape06': ('{{ a|force_escape|escape }}', {"a": "x&y"}, "x&y"), + 'filter-force-escape07': ('{% autoescape off %}{{ a|escape|force_escape }}{% endautoescape %}', {"a": "x&y"}, "x&y"), + 'filter-force-escape08': ('{{ a|escape|force_escape }}', {"a": "x&y"}, "x&y"), # The contents in "linebreaks" and "linebreaksbr" are escaped # according to the current autoescape setting. - 'filter-linebreaks01': ('{{ a|linebreaks }} {{ b|linebreaks }}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, u"<p>x&<br />y</p> <p>x&<br />y</p>"), - 'filter-linebreaks02': ('{% autoescape off %}{{ a|linebreaks }} {{ b|linebreaks }}{% endautoescape %}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, u"<p>x&<br />y</p> <p>x&<br />y</p>"), + 'filter-linebreaks01': ('{{ a|linebreaks }} {{ b|linebreaks }}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, "<p>x&<br />y</p> <p>x&<br />y</p>"), + 'filter-linebreaks02': ('{% autoescape off %}{{ a|linebreaks }} {{ b|linebreaks }}{% endautoescape %}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, "<p>x&<br />y</p> <p>x&<br />y</p>"), - 'filter-linebreaksbr01': ('{{ a|linebreaksbr }} {{ b|linebreaksbr }}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, u"x&<br />y x&<br />y"), - 'filter-linebreaksbr02': ('{% autoescape off %}{{ a|linebreaksbr }} {{ b|linebreaksbr }}{% endautoescape %}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, u"x&<br />y x&<br />y"), + 'filter-linebreaksbr01': ('{{ a|linebreaksbr }} {{ b|linebreaksbr }}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, "x&<br />y x&<br />y"), + 'filter-linebreaksbr02': ('{% autoescape off %}{{ a|linebreaksbr }} {{ b|linebreaksbr }}{% endautoescape %}', {"a": "x&\ny", "b": mark_safe("x&\ny")}, "x&<br />y x&<br />y"), - 'filter-safe01': ("{{ a }} -- {{ a|safe }}", {"a": u"<b>hello</b>"}, "<b>hello</b> -- <b>hello</b>"), - 'filter-safe02': ("{% autoescape off %}{{ a }} -- {{ a|safe }}{% endautoescape %}", {"a": "<b>hello</b>"}, u"<b>hello</b> -- <b>hello</b>"), + 'filter-safe01': ("{{ a }} -- {{ a|safe }}", {"a": "<b>hello</b>"}, "<b>hello</b> -- <b>hello</b>"), + 'filter-safe02': ("{% autoescape off %}{{ a }} -- {{ a|safe }}{% endautoescape %}", {"a": "<b>hello</b>"}, "<b>hello</b> -- <b>hello</b>"), 'filter-safeseq01': ('{{ a|join:", " }} -- {{ a|safeseq|join:", " }}', {"a": ["&", "<"]}, "&, < -- &, <"), 'filter-safeseq02': ('{% autoescape off %}{{ a|join:", " }} -- {{ a|safeseq|join:", " }}{% endautoescape %}', {"a": ["&", "<"]}, "&, < -- &, <"), - 'filter-removetags01': ('{{ a|removetags:"a b" }} {{ b|removetags:"a b" }}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, u"x <p>y</p> x <p>y</p>"), - 'filter-removetags02': ('{% autoescape off %}{{ a|removetags:"a b" }} {{ b|removetags:"a b" }}{% endautoescape %}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, u"x <p>y</p> x <p>y</p>"), + 'filter-removetags01': ('{{ a|removetags:"a b" }} {{ b|removetags:"a b" }}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, "x <p>y</p> x <p>y</p>"), + 'filter-removetags02': ('{% autoescape off %}{{ a|removetags:"a b" }} {{ b|removetags:"a b" }}{% endautoescape %}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, "x <p>y</p> x <p>y</p>"), 'filter-striptags01': ('{{ a|striptags }} {{ b|striptags }}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, "x y x y"), 'filter-striptags02': ('{% autoescape off %}{{ a|striptags }} {{ b|striptags }}{% endautoescape %}', {"a": "<a>x</a> <p><b>y</b></p>", "b": mark_safe("<a>x</a> <p><b>y</b></p>")}, "x y x y"), diff --git a/tests/regressiontests/templates/parser.py b/tests/regressiontests/templates/parser.py index 1609c67e22..6c9deee9ff 100644 --- a/tests/regressiontests/templates/parser.py +++ b/tests/regressiontests/templates/parser.py @@ -1,6 +1,8 @@ """ Testing some internals of the template processing. These are *not* examples to be copied in user code. """ +from __future__ import unicode_literals + from django.template import (TokenParser, FilterExpression, Parser, Variable, TemplateSyntaxError) from django.utils.unittest import TestCase @@ -33,23 +35,23 @@ class ParserTests(TestCase): self.assertFalse(p.more()) def test_filter_parsing(self): - c = {"article": {"section": u"News"}} + c = {"article": {"section": "News"}} p = Parser("") def fe_test(s, val): self.assertEqual(FilterExpression(s, p).resolve(c), val) - fe_test("article.section", u"News") - fe_test("article.section|upper", u"NEWS") - fe_test(u'"News"', u"News") - fe_test(u"'News'", u"News") - fe_test(ur'"Some \"Good\" News"', u'Some "Good" News') - fe_test(ur'"Some \"Good\" News"', u'Some "Good" News') - fe_test(ur"'Some \'Bad\' News'", u"Some 'Bad' News") + fe_test("article.section", "News") + fe_test("article.section|upper", "NEWS") + fe_test('"News"', "News") + fe_test("'News'", "News") + fe_test(r'"Some \"Good\" News"', 'Some "Good" News') + fe_test(r'"Some \"Good\" News"', 'Some "Good" News') + fe_test(r"'Some \'Bad\' News'", "Some 'Bad' News") - fe = FilterExpression(ur'"Some \"Good\" News"', p) + fe = FilterExpression(r'"Some \"Good\" News"', p) self.assertEqual(fe.filters, []) - self.assertEqual(fe.var, u'Some "Good" News') + self.assertEqual(fe.var, 'Some "Good" News') # Filtered variables should reject access of attributes beginning with # underscores. @@ -58,10 +60,10 @@ class ParserTests(TestCase): ) def test_variable_parsing(self): - c = {"article": {"section": u"News"}} + c = {"article": {"section": "News"}} self.assertEqual(Variable("article.section").resolve(c), "News") - self.assertEqual(Variable(u'"News"').resolve(c), "News") - self.assertEqual(Variable(u"'News'").resolve(c), "News") + self.assertEqual(Variable('"News"').resolve(c), "News") + self.assertEqual(Variable("'News'").resolve(c), "News") # Translated strings are handled correctly. self.assertEqual(Variable("_(article.section)").resolve(c), "News") @@ -70,10 +72,10 @@ class ParserTests(TestCase): # Escaped quotes work correctly as well. self.assertEqual( - Variable(ur'"Some \"Good\" News"').resolve(c), 'Some "Good" News' + Variable(r'"Some \"Good\" News"').resolve(c), 'Some "Good" News' ) self.assertEqual( - Variable(ur"'Some \'Better\' News'").resolve(c), "Some 'Better' News" + Variable(r"'Some \'Better\' News'").resolve(c), "Some 'Better' News" ) # Variables should reject access of attributes beginning with diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 957ad2b9ba..989fd72d94 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from django.conf import settings @@ -147,14 +147,14 @@ class SilentAttrClass(object): class UTF8Class: "Class whose __str__ returns non-ASCII data" def __str__(self): - return u'ŠĐĆŽćžšđ'.encode('utf-8') + return 'ŠĐĆŽćžšđ'.encode('utf-8') class Templates(unittest.TestCase): def setUp(self): self.old_static_url = settings.STATIC_URL self.old_media_url = settings.MEDIA_URL - settings.STATIC_URL = u"/static/" - settings.MEDIA_URL = u"/media/" + settings.STATIC_URL = "/static/" + settings.MEDIA_URL = "/media/" def tearDown(self): settings.STATIC_URL = self.old_static_url @@ -193,13 +193,13 @@ class Templates(unittest.TestCase): # UTF-8 bytestrings are permitted. test_template_sources(b'\xc3\x85ngstr\xc3\xb6m', template_dirs, - [u'/dir1/Ångström', u'/dir2/Ångström']) + ['/dir1/Ångström', '/dir2/Ångström']) # Unicode strings are permitted. - test_template_sources(u'Ångström', template_dirs, - [u'/dir1/Ångström', u'/dir2/Ångström']) - test_template_sources(u'Ångström', [b'/Stra\xc3\x9fe'], [u'/Straße/Ångström']) + test_template_sources('Ångström', template_dirs, + ['/dir1/Ångström', '/dir2/Ångström']) + test_template_sources('Ångström', [b'/Stra\xc3\x9fe'], ['/Straße/Ångström']) test_template_sources(b'\xc3\x85ngstr\xc3\xb6m', [b'/Stra\xc3\x9fe'], - [u'/Straße/Ångström']) + ['/Straße/Ångström']) # Invalid UTF-8 encoding in bytestrings is not. Should raise a # semi-useful error message. test_template_sources(b'\xc3\xc3', template_dirs, UnicodeDecodeError) @@ -684,7 +684,7 @@ class Templates(unittest.TestCase): # Make sure that any unicode strings are converted to bytestrings # in the final output. - 'filter-syntax18': (r'{{ var }}', {'var': UTF8Class()}, u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'), + 'filter-syntax18': (r'{{ var }}', {'var': UTF8Class()}, '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'), # Numbers as filter arguments should work 'filter-syntax19': ('{{ var|truncatewords:1 }}', {"var": "hello world"}, "hello ..."), @@ -1239,11 +1239,11 @@ class Templates(unittest.TestCase): 'i18n02': ('{% load i18n %}{% trans "xxxyyyxxx" %}', {}, "xxxyyyxxx"), # simple translation of a variable - 'i18n03': ('{% load i18n %}{% blocktrans %}{{ anton }}{% endblocktrans %}', {'anton': b'\xc3\x85'}, u"Å"), + 'i18n03': ('{% load i18n %}{% blocktrans %}{{ anton }}{% endblocktrans %}', {'anton': b'\xc3\x85'}, "Å"), # simple translation of a variable and filter - 'i18n04': ('{% load i18n %}{% blocktrans with berta=anton|lower %}{{ berta }}{% endblocktrans %}', {'anton': b'\xc3\x85'}, u'å'), - 'legacyi18n04': ('{% load i18n %}{% blocktrans with anton|lower as berta %}{{ berta }}{% endblocktrans %}', {'anton': b'\xc3\x85'}, u'å'), + 'i18n04': ('{% load i18n %}{% blocktrans with berta=anton|lower %}{{ berta }}{% endblocktrans %}', {'anton': b'\xc3\x85'}, 'å'), + 'legacyi18n04': ('{% load i18n %}{% blocktrans with anton|lower as berta %}{{ berta }}{% endblocktrans %}', {'anton': b'\xc3\x85'}, 'å'), # simple translation of a string with interpolation 'i18n05': ('{% load i18n %}{% blocktrans %}xxx{{ anton }}xxx{% endblocktrans %}', {'anton': 'yyy'}, "xxxyyyxxx"), @@ -1279,42 +1279,42 @@ class Templates(unittest.TestCase): # Escaping inside blocktrans and trans works as if it was directly in the # template. - 'i18n17': ('{% load i18n %}{% blocktrans with berta=anton|escape %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α & β'), - 'i18n18': ('{% load i18n %}{% blocktrans with berta=anton|force_escape %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α & β'), - 'i18n19': ('{% load i18n %}{% blocktrans %}{{ andrew }}{% endblocktrans %}', {'andrew': 'a & b'}, u'a & b'), - 'i18n20': ('{% load i18n %}{% trans andrew %}', {'andrew': 'a & b'}, u'a & b'), - 'i18n21': ('{% load i18n %}{% blocktrans %}{{ andrew }}{% endblocktrans %}', {'andrew': mark_safe('a & b')}, u'a & b'), - 'i18n22': ('{% load i18n %}{% trans andrew %}', {'andrew': mark_safe('a & b')}, u'a & b'), - 'legacyi18n17': ('{% load i18n %}{% blocktrans with anton|escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α & β'), - 'legacyi18n18': ('{% load i18n %}{% blocktrans with anton|force_escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, u'α & β'), + 'i18n17': ('{% load i18n %}{% blocktrans with berta=anton|escape %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, 'α & β'), + 'i18n18': ('{% load i18n %}{% blocktrans with berta=anton|force_escape %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, 'α & β'), + 'i18n19': ('{% load i18n %}{% blocktrans %}{{ andrew }}{% endblocktrans %}', {'andrew': 'a & b'}, 'a & b'), + 'i18n20': ('{% load i18n %}{% trans andrew %}', {'andrew': 'a & b'}, 'a & b'), + 'i18n21': ('{% load i18n %}{% blocktrans %}{{ andrew }}{% endblocktrans %}', {'andrew': mark_safe('a & b')}, 'a & b'), + 'i18n22': ('{% load i18n %}{% trans andrew %}', {'andrew': mark_safe('a & b')}, 'a & b'), + 'legacyi18n17': ('{% load i18n %}{% blocktrans with anton|escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, 'α & β'), + 'legacyi18n18': ('{% load i18n %}{% blocktrans with anton|force_escape as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'α & β'}, 'α & β'), # Use filters with the {% trans %} tag, #5972 - 'i18n23': ('{% load i18n %}{% trans "Page not found"|capfirst|slice:"6:" %}', {'LANGUAGE_CODE': 'de'}, u'nicht gefunden'), - 'i18n24': ("{% load i18n %}{% trans 'Page not found'|upper %}", {'LANGUAGE_CODE': 'de'}, u'SEITE NICHT GEFUNDEN'), - 'i18n25': ('{% load i18n %}{% trans somevar|upper %}', {'somevar': 'Page not found', 'LANGUAGE_CODE': 'de'}, u'SEITE NICHT GEFUNDEN'), + 'i18n23': ('{% load i18n %}{% trans "Page not found"|capfirst|slice:"6:" %}', {'LANGUAGE_CODE': 'de'}, 'nicht gefunden'), + 'i18n24': ("{% load i18n %}{% trans 'Page not found'|upper %}", {'LANGUAGE_CODE': 'de'}, 'SEITE NICHT GEFUNDEN'), + 'i18n25': ('{% load i18n %}{% trans somevar|upper %}', {'somevar': 'Page not found', 'LANGUAGE_CODE': 'de'}, 'SEITE NICHT GEFUNDEN'), # translation of plural form with extra field in singular form (#13568) 'i18n26': ('{% load i18n %}{% blocktrans with extra_field=myextra_field count counter=number %}singular {{ extra_field }}{% plural %}plural{% endblocktrans %}', {'number': 1, 'myextra_field': 'test'}, "singular test"), 'legacyi18n26': ('{% load i18n %}{% blocktrans with myextra_field as extra_field count number as counter %}singular {{ extra_field }}{% plural %}plural{% endblocktrans %}', {'number': 1, 'myextra_field': 'test'}, "singular test"), # translation of singular form in russian (#14126) - 'i18n27': ('{% load i18n %}{% blocktrans count counter=number %}{{ counter }} result{% plural %}{{ counter }} results{% endblocktrans %}', {'number': 1, 'LANGUAGE_CODE': 'ru'}, u'1 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'), - 'legacyi18n27': ('{% load i18n %}{% blocktrans count number as counter %}{{ counter }} result{% plural %}{{ counter }} results{% endblocktrans %}', {'number': 1, 'LANGUAGE_CODE': 'ru'}, u'1 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'), + 'i18n27': ('{% load i18n %}{% blocktrans count counter=number %}{{ counter }} result{% plural %}{{ counter }} results{% endblocktrans %}', {'number': 1, 'LANGUAGE_CODE': 'ru'}, '1 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'), + 'legacyi18n27': ('{% load i18n %}{% blocktrans count number as counter %}{{ counter }} result{% plural %}{{ counter }} results{% endblocktrans %}', {'number': 1, 'LANGUAGE_CODE': 'ru'}, '1 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442'), # simple translation of multiple variables - 'i18n28': ('{% load i18n %}{% blocktrans with a=anton b=berta %}{{ a }} + {{ b }}{% endblocktrans %}', {'anton': 'α', 'berta': 'β'}, u'α + β'), - 'legacyi18n28': ('{% load i18n %}{% blocktrans with anton as a and berta as b %}{{ a }} + {{ b }}{% endblocktrans %}', {'anton': 'α', 'berta': 'β'}, u'α + β'), + 'i18n28': ('{% load i18n %}{% blocktrans with a=anton b=berta %}{{ a }} + {{ b }}{% endblocktrans %}', {'anton': 'α', 'berta': 'β'}, 'α + β'), + 'legacyi18n28': ('{% load i18n %}{% blocktrans with anton as a and berta as b %}{{ a }} + {{ b }}{% endblocktrans %}', {'anton': 'α', 'berta': 'β'}, 'α + β'), # retrieving language information 'i18n28_2': ('{% load i18n %}{% get_language_info for "de" as l %}{{ l.code }}: {{ l.name }}/{{ l.name_local }} bidi={{ l.bidi }}', {}, 'de: German/Deutsch bidi=False'), 'i18n29': ('{% load i18n %}{% get_language_info for LANGUAGE_CODE as l %}{{ l.code }}: {{ l.name }}/{{ l.name_local }} bidi={{ l.bidi }}', {'LANGUAGE_CODE': 'fi'}, 'fi: Finnish/suomi bidi=False'), - 'i18n30': ('{% load i18n %}{% get_language_info_list for langcodes as langs %}{% for l in langs %}{{ l.code }}: {{ l.name }}/{{ l.name_local }} bidi={{ l.bidi }}; {% endfor %}', {'langcodes': ['it', 'no']}, u'it: Italian/italiano bidi=False; no: Norwegian/Norsk bidi=False; '), - 'i18n31': ('{% load i18n %}{% get_language_info_list for langcodes as langs %}{% for l in langs %}{{ l.code }}: {{ l.name }}/{{ l.name_local }} bidi={{ l.bidi }}; {% endfor %}', {'langcodes': (('sl', 'Slovenian'), ('fa', 'Persian'))}, u'sl: Slovenian/Sloven\u0161\u010dina bidi=False; fa: Persian/\u0641\u0627\u0631\u0633\u06cc bidi=True; '), - 'i18n32': ('{% load i18n %}{{ "hu"|language_name }} {{ "hu"|language_name_local }} {{ "hu"|language_bidi }}', {}, u'Hungarian Magyar False'), - 'i18n33': ('{% load i18n %}{{ langcode|language_name }} {{ langcode|language_name_local }} {{ langcode|language_bidi }}', {'langcode': 'nl'}, u'Dutch Nederlands False'), + 'i18n30': ('{% load i18n %}{% get_language_info_list for langcodes as langs %}{% for l in langs %}{{ l.code }}: {{ l.name }}/{{ l.name_local }} bidi={{ l.bidi }}; {% endfor %}', {'langcodes': ['it', 'no']}, 'it: Italian/italiano bidi=False; no: Norwegian/Norsk bidi=False; '), + 'i18n31': ('{% load i18n %}{% get_language_info_list for langcodes as langs %}{% for l in langs %}{{ l.code }}: {{ l.name }}/{{ l.name_local }} bidi={{ l.bidi }}; {% endfor %}', {'langcodes': (('sl', 'Slovenian'), ('fa', 'Persian'))}, 'sl: Slovenian/Sloven\u0161\u010dina bidi=False; fa: Persian/\u0641\u0627\u0631\u0633\u06cc bidi=True; '), + 'i18n32': ('{% load i18n %}{{ "hu"|language_name }} {{ "hu"|language_name_local }} {{ "hu"|language_bidi }}', {}, 'Hungarian Magyar False'), + 'i18n33': ('{% load i18n %}{{ langcode|language_name }} {{ langcode|language_name_local }} {{ langcode|language_bidi }}', {'langcode': 'nl'}, 'Dutch Nederlands False'), # blocktrans handling of variables which are not in the context. - 'i18n34': ('{% load i18n %}{% blocktrans %}{{ missing }}{% endblocktrans %}', {}, u''), + 'i18n34': ('{% load i18n %}{% blocktrans %}{{ missing }}{% endblocktrans %}', {}, ''), # trans tag with as var 'i18n35': ('{% load i18n %}{% trans "Page not found" as page_not_found %}{{ page_not_found }}', {'LANGUAGE_CODE': 'de'}, "Seite nicht gefunden"), @@ -1498,11 +1498,11 @@ class Templates(unittest.TestCase): 'url02c': ("{% url 'regressiontests.templates.views.client_action' client.id 'update' %}", {'client': {'id': 1}}, '/url_tag/client/1/update/'), 'url03': ('{% url "regressiontests.templates.views.index" %}', {}, '/url_tag/'), 'url04': ('{% url "named.client" client.id %}', {'client': {'id': 1}}, '/url_tag/named-client/1/'), - 'url05': (u'{% url "метка_оператора" v %}', {'v': u'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), - 'url06': (u'{% url "метка_оператора_2" tag=v %}', {'v': u'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), - 'url07': (u'{% url "regressiontests.templates.views.client2" tag=v %}', {'v': u'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), - 'url08': (u'{% url "метка_оператора" v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), - 'url09': (u'{% url "метка_оператора_2" tag=v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), + 'url05': ('{% url "метка_оператора" v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), + 'url06': ('{% url "метка_оператора_2" tag=v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), + 'url07': ('{% url "regressiontests.templates.views.client2" tag=v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), + 'url08': ('{% url "метка_оператора" v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), + 'url09': ('{% url "метка_оператора_2" tag=v %}', {'v': 'Ω'}, '/url_tag/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4/%CE%A9/'), 'url10': ('{% url "regressiontests.templates.views.client_action" id=client.id action="two words" %}', {'client': {'id': 1}}, '/url_tag/client/1/two%20words/'), 'url11': ('{% url "regressiontests.templates.views.client_action" id=client.id action="==" %}', {'client': {'id': 1}}, '/url_tag/client/1/==/'), 'url12': ('{% url "regressiontests.templates.views.client_action" id=client.id action="," %}', {'client': {'id': 1}}, '/url_tag/client/1/,/'), @@ -1577,7 +1577,7 @@ class Templates(unittest.TestCase): # Strings (ASCII or unicode) already marked as "safe" are not # auto-escaped 'autoescape-tag06': ("{{ first }}", {"first": mark_safe("<b>first</b>")}, "<b>first</b>"), - 'autoescape-tag07': ("{% autoescape on %}{{ first }}{% endautoescape %}", {"first": mark_safe(u"<b>Apple</b>")}, u"<b>Apple</b>"), + 'autoescape-tag07': ("{% autoescape on %}{{ first }}{% endautoescape %}", {"first": mark_safe("<b>Apple</b>")}, "<b>Apple</b>"), # Literal string arguments to filters, if used in the result, are # safe. diff --git a/tests/regressiontests/templates/unicode.py b/tests/regressiontests/templates/unicode.py index 0e0cefeb8e..2c41176b01 100644 --- a/tests/regressiontests/templates/unicode.py +++ b/tests/regressiontests/templates/unicode.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + from django.template import Template, TemplateEncodingError, Context from django.utils.safestring import SafeData from django.utils.unittest import TestCase @@ -7,7 +9,7 @@ from django.utils.unittest import TestCase class UnicodeTests(TestCase): def test_template(self): # Templates can be created from unicode strings. - t1 = Template(u'ŠĐĆŽćžšđ {{ var }}') + t1 = Template('ŠĐĆŽćžšđ {{ var }}') # Templates can also be created from bytestrings. These are assumed to # be encoded using UTF-8. s = b'\xc5\xa0\xc4\x90\xc4\x86\xc5\xbd\xc4\x87\xc5\xbe\xc5\xa1\xc4\x91 {{ var }}' @@ -17,9 +19,9 @@ class UnicodeTests(TestCase): # Contexts can be constructed from unicode or UTF-8 bytestrings. c1 = Context({b"var": b"foo"}) - c2 = Context({u"var": b"foo"}) - c3 = Context({b"var": u"Đđ"}) - c4 = Context({u"var": b"\xc4\x90\xc4\x91"}) + c2 = Context({"var": b"foo"}) + c3 = Context({b"var": "Đđ"}) + c4 = Context({"var": b"\xc4\x90\xc4\x91"}) # Since both templates and all four contexts represent the same thing, # they all render the same (and are returned as unicode objects and diff --git a/tests/regressiontests/templates/urls.py b/tests/regressiontests/templates/urls.py index b977698350..fe7f9c1f30 100644 --- a/tests/regressiontests/templates/urls.py +++ b/tests/regressiontests/templates/urls.py @@ -1,5 +1,5 @@ # coding: utf-8 -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from django.conf.urls import patterns, url from . import views @@ -15,6 +15,6 @@ urlpatterns = patterns('', url(r'^named-client/(\d+)/$', views.client2, name="named.client"), # Unicode strings are permitted everywhere. - url(ur'^Юникод/(\w+)/$', views.client2, name=u"метка_оператора"), - url(ur'^Юникод/(?P<tag>\S+)/$', 'regressiontests.templates.views.client2', name=u"метка_оператора_2"), + url(r'^Юникод/(\w+)/$', views.client2, name="метка_оператора"), + url(r'^Юникод/(?P<tag>\S+)/$', 'regressiontests.templates.views.client2', name="метка_оператора_2"), ) diff --git a/tests/regressiontests/test_client_regress/tests.py b/tests/regressiontests/test_client_regress/tests.py index ece487a211..59f8f423dd 100644 --- a/tests/regressiontests/test_client_regress/tests.py +++ b/tests/regressiontests/test_client_regress/tests.py @@ -2,6 +2,8 @@ """ Regression tests for the Test Client, especially the customized assertions. """ +from __future__ import unicode_literals + import os from django.conf import settings @@ -12,7 +14,7 @@ from django.template import (TemplateDoesNotExist, TemplateSyntaxError, import django.template.context from django.test import Client, TestCase from django.test.client import encode_file, RequestFactory -from django.test.utils import ContextList, override_settings +from django.test.utils import ContextList, override_settings, str_prefix from django.template.response import SimpleTemplateResponse from django.http import HttpResponse @@ -117,14 +119,14 @@ class AssertContainsTests(TestCase): "Unicode characters can be found in template context" #Regression test for #10183 r = self.client.get('/test_client_regress/check_unicode/') - self.assertContains(r, u'さかき') + self.assertContains(r, 'さかき') self.assertContains(r, b'\xe5\xb3\xa0'.decode('utf-8')) def test_unicode_not_contains(self): "Unicode characters can be searched for, and not found in template context" #Regression test for #10183 r = self.client.get('/test_client_regress/check_unicode/') - self.assertNotContains(r, u'はたけ') + self.assertNotContains(r, 'はたけ') self.assertNotContains(r, b'\xe3\x81\xaf\xe3\x81\x9f\xe3\x81\x91'.decode('utf-8')) def test_assert_contains_renders_template_response(self): @@ -488,11 +490,11 @@ class AssertFormErrorTests(TestCase): try: self.assertFormError(response, 'form', 'email', 'Some error.') except AssertionError as e: - self.assertIn("The field 'email' on form 'form' in context 0 does not contain the error 'Some error.' (actual errors: [u'Enter a valid e-mail address.'])", str(e)) + self.assertIn(str_prefix("The field 'email' on form 'form' in context 0 does not contain the error 'Some error.' (actual errors: [%(_)s'Enter a valid e-mail address.'])"), str(e)) try: self.assertFormError(response, 'form', 'email', 'Some error.', msg_prefix='abc') except AssertionError as e: - self.assertIn("abc: The field 'email' on form 'form' in context 0 does not contain the error 'Some error.' (actual errors: [u'Enter a valid e-mail address.'])", str(e)) + self.assertIn(str_prefix("abc: The field 'email' on form 'form' in context 0 does not contain the error 'Some error.' (actual errors: [%(_)s'Enter a valid e-mail address.'])"), str(e)) def test_unknown_nonfield_error(self): """ @@ -784,7 +786,7 @@ class RequestMethodStringDataTests(TestCase): def test_post(self): "Request a view with string data via request method POST" # Regression test for #11371 - data = u'{"test": "json"}' + data = '{"test": "json"}' response = self.client.post('/test_client_regress/request_methods/', data=data, content_type='application/json') self.assertEqual(response.status_code, 200) self.assertEqual(response.content, b'request method: POST') @@ -792,7 +794,7 @@ class RequestMethodStringDataTests(TestCase): def test_put(self): "Request a view with string data via request method PUT" # Regression test for #11371 - data = u'{"test": "json"}' + data = '{"test": "json"}' response = self.client.put('/test_client_regress/request_methods/', data=data, content_type='application/json') self.assertEqual(response.status_code, 200) self.assertEqual(response.content, b'request method: PUT') @@ -853,7 +855,7 @@ class UnicodePayloadTests(TestCase): def test_simple_unicode_payload(self): "A simple ASCII-only unicode JSON document can be POSTed" # Regression test for #10571 - json = u'{"english": "mountain pass"}' + json = '{"english": "mountain pass"}' response = self.client.post("/test_client_regress/parse_unicode_json/", json, content_type="application/json") self.assertEqual(response.content, json) @@ -861,7 +863,7 @@ class UnicodePayloadTests(TestCase): def test_unicode_payload_utf8(self): "A non-ASCII unicode data encoded as UTF-8 can be POSTed" # Regression test for #10571 - json = u'{"dog": "собака"}' + json = '{"dog": "собака"}' response = self.client.post("/test_client_regress/parse_unicode_json/", json, content_type="application/json; charset=utf-8") self.assertEqual(response.content, json.encode('utf-8')) @@ -869,7 +871,7 @@ class UnicodePayloadTests(TestCase): def test_unicode_payload_utf16(self): "A non-ASCII unicode data encoded as UTF-16 can be POSTed" # Regression test for #10571 - json = u'{"dog": "собака"}' + json = '{"dog": "собака"}' response = self.client.post("/test_client_regress/parse_unicode_json/", json, content_type="application/json; charset=utf-16") self.assertEqual(response.content, json.encode('utf-16')) @@ -877,7 +879,7 @@ class UnicodePayloadTests(TestCase): def test_unicode_payload_non_utf(self): "A non-ASCII unicode data as a non-UTF based encoding can be POSTed" #Regression test for #10571 - json = u'{"dog": "собака"}' + json = '{"dog": "собака"}' response = self.client.post("/test_client_regress/parse_unicode_json/", json, content_type="application/json; charset=koi8-r") self.assertEqual(response.content, json.encode('koi8-r')) diff --git a/tests/regressiontests/test_utils/tests.py b/tests/regressiontests/test_utils/tests.py index a277bc999b..46479ebe8b 100644 --- a/tests/regressiontests/test_utils/tests.py +++ b/tests/regressiontests/test_utils/tests.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from django.forms import EmailField, IntegerField from django.http import HttpResponse @@ -475,16 +475,16 @@ class AssertRaisesMsgTest(SimpleTestCase): class AssertFieldOutputTests(SimpleTestCase): def test_assert_field_output(self): - error_invalid = [u'Enter a valid e-mail address.'] + error_invalid = ['Enter a valid e-mail address.'] self.assertFieldOutput(EmailField, {'a@a.com': 'a@a.com'}, {'aaa': error_invalid}) - self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'a@a.com'}, {'aaa': error_invalid + [u'Another error']}) + self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'a@a.com'}, {'aaa': error_invalid + ['Another error']}) self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'Wrong output'}, {'aaa': error_invalid}) - self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'a@a.com'}, {'aaa': [u'Come on, gimme some well formatted data, dude.']}) + self.assertRaises(AssertionError, self.assertFieldOutput, EmailField, {'a@a.com': 'a@a.com'}, {'aaa': ['Come on, gimme some well formatted data, dude.']}) def test_custom_required_message(self): class MyCustomField(IntegerField): default_error_messages = { - 'required': u'This is really required.', + 'required': 'This is really required.', } self.assertFieldOutput(MyCustomField, {}, {}, empty_value=None) diff --git a/tests/regressiontests/text/tests.py b/tests/regressiontests/text/tests.py index e4c4c00938..e61c14d103 100644 --- a/tests/regressiontests/text/tests.py +++ b/tests/regressiontests/text/tests.py @@ -1,4 +1,5 @@ # coding: utf-8 +from __future__ import unicode_literals from django.test import TestCase from django.utils.encoding import iri_to_uri @@ -14,72 +15,72 @@ class TextTests(TestCase): """ def test_get_text_list(self): - self.assertEqual(get_text_list(['a', 'b', 'c', 'd']), u'a, b, c or d') - self.assertEqual(get_text_list(['a', 'b', 'c'], 'and'), u'a, b and c') - self.assertEqual(get_text_list(['a', 'b'], 'and'), u'a and b') - self.assertEqual(get_text_list(['a']), u'a') - self.assertEqual(get_text_list([]), u'') + self.assertEqual(get_text_list(['a', 'b', 'c', 'd']), 'a, b, c or d') + self.assertEqual(get_text_list(['a', 'b', 'c'], 'and'), 'a, b and c') + self.assertEqual(get_text_list(['a', 'b'], 'and'), 'a and b') + self.assertEqual(get_text_list(['a']), 'a') + self.assertEqual(get_text_list([]), '') with override('ar'): - self.assertEqual(get_text_list(['a', 'b', 'c']), u"a، b أو c") + self.assertEqual(get_text_list(['a', 'b', 'c']), "a، b أو c") def test_smart_split(self): self.assertEqual(list(smart_split(r'''This is "a person" test.''')), - [u'This', u'is', u'"a person"', u'test.']) + ['This', 'is', '"a person"', 'test.']) self.assertEqual(list(smart_split(r'''This is "a person's" test.'''))[2], - u'"a person\'s"') + '"a person\'s"') self.assertEqual(list(smart_split(r'''This is "a person\"s" test.'''))[2], - u'"a person\\"s"') + '"a person\\"s"') - self.assertEqual(list(smart_split('''"a 'one''')), [u'"a', u"'one"]) + self.assertEqual(list(smart_split('''"a 'one''')), ['"a', "'one"]) self.assertEqual(list(smart_split(r'''all friends' tests'''))[1], "friends'") - self.assertEqual(list(smart_split(u'url search_page words="something else"')), - [u'url', u'search_page', u'words="something else"']) + self.assertEqual(list(smart_split('url search_page words="something else"')), + ['url', 'search_page', 'words="something else"']) - self.assertEqual(list(smart_split(u"url search_page words='something else'")), - [u'url', u'search_page', u"words='something else'"]) + self.assertEqual(list(smart_split("url search_page words='something else'")), + ['url', 'search_page', "words='something else'"]) - self.assertEqual(list(smart_split(u'url search_page words "something else"')), - [u'url', u'search_page', u'words', u'"something else"']) + self.assertEqual(list(smart_split('url search_page words "something else"')), + ['url', 'search_page', 'words', '"something else"']) - self.assertEqual(list(smart_split(u'url search_page words-"something else"')), - [u'url', u'search_page', u'words-"something else"']) + self.assertEqual(list(smart_split('url search_page words-"something else"')), + ['url', 'search_page', 'words-"something else"']) - self.assertEqual(list(smart_split(u'url search_page words=hello')), - [u'url', u'search_page', u'words=hello']) + self.assertEqual(list(smart_split('url search_page words=hello')), + ['url', 'search_page', 'words=hello']) - self.assertEqual(list(smart_split(u'url search_page words="something else')), - [u'url', u'search_page', u'words="something', u'else']) + self.assertEqual(list(smart_split('url search_page words="something else')), + ['url', 'search_page', 'words="something', 'else']) self.assertEqual(list(smart_split("cut:','|cut:' '")), - [u"cut:','|cut:' '"]) + ["cut:','|cut:' '"]) def test_urlquote(self): - self.assertEqual(urlquote(u'Paris & Orl\xe9ans'), - u'Paris%20%26%20Orl%C3%A9ans') - self.assertEqual(urlquote(u'Paris & Orl\xe9ans', safe="&"), - u'Paris%20&%20Orl%C3%A9ans') + self.assertEqual(urlquote('Paris & Orl\xe9ans'), + 'Paris%20%26%20Orl%C3%A9ans') + self.assertEqual(urlquote('Paris & Orl\xe9ans', safe="&"), + 'Paris%20&%20Orl%C3%A9ans') self.assertEqual( - urlunquote(u'Paris%20%26%20Orl%C3%A9ans'), - u'Paris & Orl\xe9ans') + urlunquote('Paris%20%26%20Orl%C3%A9ans'), + 'Paris & Orl\xe9ans') self.assertEqual( - urlunquote(u'Paris%20&%20Orl%C3%A9ans'), - u'Paris & Orl\xe9ans') - self.assertEqual(urlquote_plus(u'Paris & Orl\xe9ans'), - u'Paris+%26+Orl%C3%A9ans') - self.assertEqual(urlquote_plus(u'Paris & Orl\xe9ans', safe="&"), - u'Paris+&+Orl%C3%A9ans') + urlunquote('Paris%20&%20Orl%C3%A9ans'), + 'Paris & Orl\xe9ans') + self.assertEqual(urlquote_plus('Paris & Orl\xe9ans'), + 'Paris+%26+Orl%C3%A9ans') + self.assertEqual(urlquote_plus('Paris & Orl\xe9ans', safe="&"), + 'Paris+&+Orl%C3%A9ans') self.assertEqual( - urlunquote_plus(u'Paris+%26+Orl%C3%A9ans'), - u'Paris & Orl\xe9ans') + urlunquote_plus('Paris+%26+Orl%C3%A9ans'), + 'Paris & Orl\xe9ans') self.assertEqual( - urlunquote_plus(u'Paris+&+Orl%C3%A9ans'), - u'Paris & Orl\xe9ans') + urlunquote_plus('Paris+&+Orl%C3%A9ans'), + 'Paris & Orl\xe9ans') def test_cookie_date(self): t = 1167616461.0 @@ -90,15 +91,15 @@ class TextTests(TestCase): self.assertEqual(http_date(t), 'Mon, 01 Jan 2007 01:54:21 GMT') def test_iri_to_uri(self): - self.assertEqual(iri_to_uri(u'red%09ros\xe9#red'), + self.assertEqual(iri_to_uri('red%09ros\xe9#red'), 'red%09ros%C3%A9#red') - self.assertEqual(iri_to_uri(u'/blog/for/J\xfcrgen M\xfcnster/'), + self.assertEqual(iri_to_uri('/blog/for/J\xfcrgen M\xfcnster/'), '/blog/for/J%C3%BCrgen%20M%C3%BCnster/') - self.assertEqual(iri_to_uri(u'locations/%s' % urlquote_plus(u'Paris & Orl\xe9ans')), + self.assertEqual(iri_to_uri('locations/%s' % urlquote_plus('Paris & Orl\xe9ans')), 'locations/Paris+%26+Orl%C3%A9ans') def test_iri_to_uri_idempotent(self): - self.assertEqual(iri_to_uri(iri_to_uri(u'red%09ros\xe9#red')), + self.assertEqual(iri_to_uri(iri_to_uri('red%09ros\xe9#red')), 'red%09ros%C3%A9#red') diff --git a/tests/regressiontests/utils/dateformat.py b/tests/regressiontests/utils/dateformat.py index c1910b0f33..0f18bb2a4d 100644 --- a/tests/regressiontests/utils/dateformat.py +++ b/tests/regressiontests/utils/dateformat.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + from datetime import datetime, date import os import time @@ -58,57 +60,57 @@ class DateFormatTests(unittest.TestCase): def test_epoch(self): udt = datetime(1970, 1, 1, tzinfo=utc) - self.assertEqual(format(udt, 'U'), u'0') + self.assertEqual(format(udt, 'U'), '0') def test_empty_format(self): my_birthday = datetime(1979, 7, 8, 22, 00) - self.assertEqual(dateformat.format(my_birthday, ''), u'') + self.assertEqual(dateformat.format(my_birthday, ''), '') def test_am_pm(self): my_birthday = datetime(1979, 7, 8, 22, 00) - self.assertEqual(dateformat.format(my_birthday, 'a'), u'p.m.') + self.assertEqual(dateformat.format(my_birthday, 'a'), 'p.m.') def test_date_formats(self): my_birthday = datetime(1979, 7, 8, 22, 00) timestamp = datetime(2008, 5, 19, 11, 45, 23, 123456) - self.assertEqual(dateformat.format(my_birthday, 'A'), u'PM') - self.assertEqual(dateformat.format(timestamp, 'c'), u'2008-05-19T11:45:23.123456') - self.assertEqual(dateformat.format(my_birthday, 'd'), u'08') - self.assertEqual(dateformat.format(my_birthday, 'j'), u'8') - self.assertEqual(dateformat.format(my_birthday, 'l'), u'Sunday') - self.assertEqual(dateformat.format(my_birthday, 'L'), u'False') - self.assertEqual(dateformat.format(my_birthday, 'm'), u'07') - self.assertEqual(dateformat.format(my_birthday, 'M'), u'Jul') - self.assertEqual(dateformat.format(my_birthday, 'b'), u'jul') - self.assertEqual(dateformat.format(my_birthday, 'n'), u'7') - self.assertEqual(dateformat.format(my_birthday, 'N'), u'July') + self.assertEqual(dateformat.format(my_birthday, 'A'), 'PM') + self.assertEqual(dateformat.format(timestamp, 'c'), '2008-05-19T11:45:23.123456') + self.assertEqual(dateformat.format(my_birthday, 'd'), '08') + self.assertEqual(dateformat.format(my_birthday, 'j'), '8') + self.assertEqual(dateformat.format(my_birthday, 'l'), 'Sunday') + self.assertEqual(dateformat.format(my_birthday, 'L'), 'False') + self.assertEqual(dateformat.format(my_birthday, 'm'), '07') + self.assertEqual(dateformat.format(my_birthday, 'M'), 'Jul') + self.assertEqual(dateformat.format(my_birthday, 'b'), 'jul') + self.assertEqual(dateformat.format(my_birthday, 'n'), '7') + self.assertEqual(dateformat.format(my_birthday, 'N'), 'July') def test_time_formats(self): my_birthday = datetime(1979, 7, 8, 22, 00) - self.assertEqual(dateformat.format(my_birthday, 'P'), u'10 p.m.') - self.assertEqual(dateformat.format(my_birthday, 's'), u'00') - self.assertEqual(dateformat.format(my_birthday, 'S'), u'th') - self.assertEqual(dateformat.format(my_birthday, 't'), u'31') - self.assertEqual(dateformat.format(my_birthday, 'w'), u'0') - self.assertEqual(dateformat.format(my_birthday, 'W'), u'27') - self.assertEqual(dateformat.format(my_birthday, 'y'), u'79') - self.assertEqual(dateformat.format(my_birthday, 'Y'), u'1979') - self.assertEqual(dateformat.format(my_birthday, 'z'), u'189') + self.assertEqual(dateformat.format(my_birthday, 'P'), '10 p.m.') + self.assertEqual(dateformat.format(my_birthday, 's'), '00') + self.assertEqual(dateformat.format(my_birthday, 'S'), 'th') + self.assertEqual(dateformat.format(my_birthday, 't'), '31') + self.assertEqual(dateformat.format(my_birthday, 'w'), '0') + self.assertEqual(dateformat.format(my_birthday, 'W'), '27') + self.assertEqual(dateformat.format(my_birthday, 'y'), '79') + self.assertEqual(dateformat.format(my_birthday, 'Y'), '1979') + self.assertEqual(dateformat.format(my_birthday, 'z'), '189') def test_dateformat(self): my_birthday = datetime(1979, 7, 8, 22, 00) - self.assertEqual(dateformat.format(my_birthday, r'Y z \C\E\T'), u'1979 189 CET') + self.assertEqual(dateformat.format(my_birthday, r'Y z \C\E\T'), '1979 189 CET') - self.assertEqual(dateformat.format(my_birthday, r'jS \o\f F'), u'8th of July') + self.assertEqual(dateformat.format(my_birthday, r'jS \o\f F'), '8th of July') def test_futuredates(self): the_future = datetime(2100, 10, 25, 0, 00) - self.assertEqual(dateformat.format(the_future, r'Y'), u'2100') + self.assertEqual(dateformat.format(the_future, r'Y'), '2100') def test_timezones(self): my_birthday = datetime(1979, 7, 8, 22, 00) @@ -117,19 +119,19 @@ class DateFormatTests(unittest.TestCase): timestamp = datetime(2008, 5, 19, 11, 45, 23, 123456) if self.tz_tests: - self.assertEqual(dateformat.format(my_birthday, 'O'), u'+0100') - self.assertEqual(dateformat.format(my_birthday, 'r'), u'Sun, 8 Jul 1979 22:00:00 +0100') - self.assertEqual(dateformat.format(my_birthday, 'T'), u'CET') - self.assertEqual(dateformat.format(my_birthday, 'U'), u'300315600') - self.assertEqual(dateformat.format(timestamp, 'u'), u'123456') - self.assertEqual(dateformat.format(my_birthday, 'Z'), u'3600') - self.assertEqual(dateformat.format(summertime, 'I'), u'1') - self.assertEqual(dateformat.format(summertime, 'O'), u'+0200') - self.assertEqual(dateformat.format(wintertime, 'I'), u'0') - self.assertEqual(dateformat.format(wintertime, 'O'), u'+0100') + self.assertEqual(dateformat.format(my_birthday, 'O'), '+0100') + self.assertEqual(dateformat.format(my_birthday, 'r'), 'Sun, 8 Jul 1979 22:00:00 +0100') + self.assertEqual(dateformat.format(my_birthday, 'T'), 'CET') + self.assertEqual(dateformat.format(my_birthday, 'U'), '300315600') + self.assertEqual(dateformat.format(timestamp, 'u'), '123456') + self.assertEqual(dateformat.format(my_birthday, 'Z'), '3600') + self.assertEqual(dateformat.format(summertime, 'I'), '1') + self.assertEqual(dateformat.format(summertime, 'O'), '+0200') + self.assertEqual(dateformat.format(wintertime, 'I'), '0') + self.assertEqual(dateformat.format(wintertime, 'O'), '+0100') # Ticket #16924 -- We don't need timezone support to test this # 3h30m to the west of UTC tz = FixedOffset(-3*60 - 30) dt = datetime(2009, 5, 16, 5, 30, 30, tzinfo=tz) - self.assertEqual(dateformat.format(dt, 'O'), u'-0330') + self.assertEqual(dateformat.format(dt, 'O'), '-0330') diff --git a/tests/regressiontests/utils/feedgenerator.py b/tests/regressiontests/utils/feedgenerator.py index 4f1d07852c..b646a5997d 100644 --- a/tests/regressiontests/utils/feedgenerator.py +++ b/tests/regressiontests/utils/feedgenerator.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import datetime from django.utils import feedgenerator, tzinfo, unittest @@ -13,7 +15,7 @@ class FeedgeneratorTest(unittest.TestCase): """ self.assertEqual( feedgenerator.get_tag_uri('http://example.org/foo/bar#headline', datetime.date(2004, 10, 25)), - u'tag:example.org,2004-10-25:/foo/bar/headline') + 'tag:example.org,2004-10-25:/foo/bar/headline') def test_get_tag_uri_with_port(self): """ @@ -22,7 +24,7 @@ class FeedgeneratorTest(unittest.TestCase): """ self.assertEqual( feedgenerator.get_tag_uri('http://www.example.org:8000/2008/11/14/django#headline', datetime.datetime(2008, 11, 14, 13, 37, 0)), - u'tag:www.example.org,2008-11-14:/2008/11/14/django/headline') + 'tag:www.example.org,2008-11-14:/2008/11/14/django/headline') def test_rfc2822_date(self): """ diff --git a/tests/regressiontests/utils/html.py b/tests/regressiontests/utils/html.py index d8b9bde8bf..434873b9e0 100644 --- a/tests/regressiontests/utils/html.py +++ b/tests/regressiontests/utils/html.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import unittest from django.utils import html @@ -113,11 +115,11 @@ class TestUtilsHtml(unittest.TestCase): def test_escapejs(self): f = html.escapejs items = ( - (u'"double quotes" and \'single quotes\'', u'\\u0022double quotes\\u0022 and \\u0027single quotes\\u0027'), - (ur'\ : backslashes, too', u'\\u005C : backslashes, too'), - (u'and lots of whitespace: \r\n\t\v\f\b', u'and lots of whitespace: \\u000D\\u000A\\u0009\\u000B\\u000C\\u0008'), - (ur'<script>and this</script>', u'\\u003Cscript\\u003Eand this\\u003C/script\\u003E'), - (u'paragraph separator:\u2029and line separator:\u2028', u'paragraph separator:\\u2029and line separator:\\u2028'), + ('"double quotes" and \'single quotes\'', '\\u0022double quotes\\u0022 and \\u0027single quotes\\u0027'), + (r'\ : backslashes, too', '\\u005C : backslashes, too'), + ('and lots of whitespace: \r\n\t\v\f\b', 'and lots of whitespace: \\u000D\\u000A\\u0009\\u000B\\u000C\\u0008'), + (r'<script>and this</script>', '\\u003Cscript\\u003Eand this\\u003C/script\\u003E'), + ('paragraph separator:\u2029and line separator:\u2028', 'paragraph separator:\\u2029and line separator:\\u2028'), ) for value, output in items: self.check_output(f, value, output) @@ -125,11 +127,11 @@ class TestUtilsHtml(unittest.TestCase): def test_clean_html(self): f = html.clean_html items = ( - (u'<p>I <i>believe</i> in <b>semantic markup</b>!</p>', u'<p>I <em>believe</em> in <strong>semantic markup</strong>!</p>'), - (u'I escape & I don\'t <a href="#" target="_blank">target</a>', u'I escape & I don\'t <a href="#" >target</a>'), - (u'<p>I kill whitespace</p><br clear="all"><p> </p>', u'<p>I kill whitespace</p>'), + ('<p>I <i>believe</i> in <b>semantic markup</b>!</p>', '<p>I <em>believe</em> in <strong>semantic markup</strong>!</p>'), + ('I escape & I don\'t <a href="#" target="_blank">target</a>', 'I escape & I don\'t <a href="#" >target</a>'), + ('<p>I kill whitespace</p><br clear="all"><p> </p>', '<p>I kill whitespace</p>'), # also a regression test for #7267: this used to raise an UnicodeDecodeError - (u'<p>* foo</p><p>* bar</p>', u'<ul>\n<li> foo</li><li> bar</li>\n</ul>'), + ('<p>* foo</p><p>* bar</p>', '<ul>\n<li> foo</li><li> bar</li>\n</ul>'), ) for value, output in items: self.check_output(f, value, output) diff --git a/tests/regressiontests/utils/ipv6.py b/tests/regressiontests/utils/ipv6.py index 86d1ad1573..1713de82b8 100644 --- a/tests/regressiontests/utils/ipv6.py +++ b/tests/regressiontests/utils/ipv6.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + from django.utils import unittest from django.utils.ipv6 import is_valid_ipv6_address, clean_ipv6_address @@ -36,16 +38,16 @@ class TestUtilsIPv6(unittest.TestCase): self.assertFalse(is_valid_ipv6_address('::zzzz:0a0a')) def test_cleanes_plain_address(self): - self.assertEqual(clean_ipv6_address('DEAD::0:BEEF'), u'dead::beef') - self.assertEqual(clean_ipv6_address('2001:000:a:0000:0:fe:fe:beef'), u'2001:0:a::fe:fe:beef') - self.assertEqual(clean_ipv6_address('2001::a:0000:0:fe:fe:beef'), u'2001:0:a::fe:fe:beef') + self.assertEqual(clean_ipv6_address('DEAD::0:BEEF'), 'dead::beef') + self.assertEqual(clean_ipv6_address('2001:000:a:0000:0:fe:fe:beef'), '2001:0:a::fe:fe:beef') + self.assertEqual(clean_ipv6_address('2001::a:0000:0:fe:fe:beef'), '2001:0:a::fe:fe:beef') def test_cleanes_with_v4_mapping(self): - self.assertEqual(clean_ipv6_address('::ffff:0a0a:0a0a'), u'::ffff:10.10.10.10') - self.assertEqual(clean_ipv6_address('::ffff:1234:1234'), u'::ffff:18.52.18.52') - self.assertEqual(clean_ipv6_address('::ffff:18.52.18.52'), u'::ffff:18.52.18.52') + self.assertEqual(clean_ipv6_address('::ffff:0a0a:0a0a'), '::ffff:10.10.10.10') + self.assertEqual(clean_ipv6_address('::ffff:1234:1234'), '::ffff:18.52.18.52') + self.assertEqual(clean_ipv6_address('::ffff:18.52.18.52'), '::ffff:18.52.18.52') def test_unpacks_ipv4(self): - self.assertEqual(clean_ipv6_address('::ffff:0a0a:0a0a', unpack_ipv4=True), u'10.10.10.10') - self.assertEqual(clean_ipv6_address('::ffff:1234:1234', unpack_ipv4=True), u'18.52.18.52') - self.assertEqual(clean_ipv6_address('::ffff:18.52.18.52', unpack_ipv4=True), u'18.52.18.52') + self.assertEqual(clean_ipv6_address('::ffff:0a0a:0a0a', unpack_ipv4=True), '10.10.10.10') + self.assertEqual(clean_ipv6_address('::ffff:1234:1234', unpack_ipv4=True), '18.52.18.52') + self.assertEqual(clean_ipv6_address('::ffff:18.52.18.52', unpack_ipv4=True), '18.52.18.52') diff --git a/tests/regressiontests/utils/jslex.py b/tests/regressiontests/utils/jslex.py index 7cd93ca36d..a2af7b4bcf 100644 --- a/tests/regressiontests/utils/jslex.py +++ b/tests/regressiontests/utils/jslex.py @@ -23,7 +23,7 @@ class JsTokensTest(TestCase): (''' 'hello' "hello" ''', ["string 'hello'", 'string "hello"']), (r""" 'don\'t' "don\"t" '"' "'" '\'' "\"" """, [r"""string 'don\'t'""", r'''string "don\"t"''', r"""string '"'""", r'''string "'"''', r"""string '\''""", r'''string "\""''']), - (ur'"ƃuıxǝ⅂ ʇdıɹɔsɐʌɐſ\""', [ur'string "ƃuıxǝ⅂ ʇdıɹɔsɐʌɐſ\""']), + (r'"ƃuıxǝ⅂ ʇdıɹɔsɐʌɐſ\""', [r'string "ƃuıxǝ⅂ ʇdıɹɔsɐʌɐſ\""']), # comments ("a//b", ["id a", "linecomment //b"]), ("/****/a/=2//hello", ["comment /****/", "id a", "punct /=", "dnum 2", "linecomment //hello"]), diff --git a/tests/regressiontests/utils/regex_helper.py b/tests/regressiontests/utils/regex_helper.py index 8dc712f5b9..41f4a4f85d 100644 --- a/tests/regressiontests/utils/regex_helper.py +++ b/tests/regressiontests/utils/regex_helper.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + from django.utils import regex_helper from django.utils import unittest @@ -5,44 +7,44 @@ from django.utils import unittest class NormalizeTests(unittest.TestCase): def test_empty(self): pattern = r"" - expected = [(u'', [])] + expected = [('', [])] result = regex_helper.normalize(pattern) self.assertEqual(result, expected) def test_escape(self): pattern = r"\\\^\$\.\|\?\*\+\(\)\[" - expected = [(u'\\^$.|?*+()[', [])] + expected = [('\\^$.|?*+()[', [])] result = regex_helper.normalize(pattern) self.assertEqual(result, expected) def test_group_positional(self): pattern = r"(.*)-(.+)" - expected = [(u'%(_0)s-%(_1)s', ['_0', '_1'])] + expected = [('%(_0)s-%(_1)s', ['_0', '_1'])] result = regex_helper.normalize(pattern) self.assertEqual(result, expected) def test_group_ignored(self): pattern = r"(?i)(?L)(?m)(?s)(?u)(?#)" - expected = [(u'', [])] + expected = [('', [])] result = regex_helper.normalize(pattern) self.assertEqual(result, expected) def test_group_noncapturing(self): pattern = r"(?:non-capturing)" - expected = [(u'non-capturing', [])] + expected = [('non-capturing', [])] result = regex_helper.normalize(pattern) self.assertEqual(result, expected) def test_group_named(self): pattern = r"(?P<first_group_name>.*)-(?P<second_group_name>.*)" - expected = [(u'%(first_group_name)s-%(second_group_name)s', + expected = [('%(first_group_name)s-%(second_group_name)s', ['first_group_name', 'second_group_name'])] result = regex_helper.normalize(pattern) self.assertEqual(result, expected) def test_group_backreference(self): pattern = r"(?P<first_group_name>.*)-(?P=first_group_name)" - expected = [(u'%(first_group_name)s-%(first_group_name)s', + expected = [('%(first_group_name)s-%(first_group_name)s', ['first_group_name'])] result = regex_helper.normalize(pattern) self.assertEqual(result, expected) diff --git a/tests/regressiontests/utils/simplelazyobject.py b/tests/regressiontests/utils/simplelazyobject.py index 4ee822563e..982d2226e6 100644 --- a/tests/regressiontests/utils/simplelazyobject.py +++ b/tests/regressiontests/utils/simplelazyobject.py @@ -1,6 +1,9 @@ +from __future__ import unicode_literals + import copy import pickle +from django.test.utils import str_prefix from django.utils.unittest import TestCase from django.utils.functional import SimpleLazyObject, empty @@ -51,10 +54,11 @@ class TestUtilsSimpleLazyObject(TestCase): self.assertTrue("SimpleLazyObject" in repr(SimpleLazyObject(complex_object))) def test_str(self): - self.assertEqual("I am _ComplexObject('joe')", str(SimpleLazyObject(complex_object))) + self.assertEqual(str_prefix("I am _ComplexObject(%(_)s'joe')"), + str(SimpleLazyObject(complex_object))) def test_unicode(self): - self.assertEqual(u"joe", unicode(SimpleLazyObject(complex_object))) + self.assertEqual("joe", unicode(SimpleLazyObject(complex_object))) def test_class(self): # This is important for classes that use __class__ in things like diff --git a/tests/regressiontests/utils/text.py b/tests/regressiontests/utils/text.py index ad65ec89ee..dd6de63841 100644 --- a/tests/regressiontests/utils/text.py +++ b/tests/regressiontests/utils/text.py @@ -1,4 +1,6 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + import warnings from django.test import SimpleTestCase @@ -10,104 +12,104 @@ class TestUtilsText(SimpleTestCase): # so these tests will need to be adapted accordingly def test_truncate_chars(self): truncator = text.Truncator( - u'The quick brown fox jumped over the lazy dog.' + 'The quick brown fox jumped over the lazy dog.' ) - self.assertEqual(u'The quick brown fox jumped over the lazy dog.', + self.assertEqual('The quick brown fox jumped over the lazy dog.', truncator.chars(100)), - self.assertEqual(u'The quick brown fox ...', + self.assertEqual('The quick brown fox ...', truncator.chars(23)), - self.assertEqual(u'The quick brown fo.....', + self.assertEqual('The quick brown fo.....', truncator.chars(23, '.....')), # Ensure that we normalize our unicode data first - nfc = text.Truncator(u'o\xfco\xfco\xfco\xfc') - nfd = text.Truncator(u'ou\u0308ou\u0308ou\u0308ou\u0308') - self.assertEqual(u'oüoüoüoü', nfc.chars(8)) - self.assertEqual(u'oüoüoüoü', nfd.chars(8)) - self.assertEqual(u'oü...', nfc.chars(5)) - self.assertEqual(u'oü...', nfd.chars(5)) + nfc = text.Truncator('o\xfco\xfco\xfco\xfc') + nfd = text.Truncator('ou\u0308ou\u0308ou\u0308ou\u0308') + self.assertEqual('oüoüoüoü', nfc.chars(8)) + self.assertEqual('oüoüoüoü', nfd.chars(8)) + self.assertEqual('oü...', nfc.chars(5)) + self.assertEqual('oü...', nfd.chars(5)) # Ensure the final length is calculated correctly when there are # combining characters with no precomposed form, and that combining # characters are not split up. - truncator = text.Truncator(u'-B\u030AB\u030A----8') - self.assertEqual(u'-B\u030A...', truncator.chars(5)) - self.assertEqual(u'-B\u030AB\u030A-...', truncator.chars(7)) - self.assertEqual(u'-B\u030AB\u030A----8', truncator.chars(8)) + truncator = text.Truncator('-B\u030AB\u030A----8') + self.assertEqual('-B\u030A...', truncator.chars(5)) + self.assertEqual('-B\u030AB\u030A-...', truncator.chars(7)) + self.assertEqual('-B\u030AB\u030A----8', truncator.chars(8)) # Ensure the length of the end text is correctly calculated when it # contains combining characters with no precomposed form. - truncator = text.Truncator(u'-----') - self.assertEqual(u'---B\u030A', truncator.chars(4, u'B\u030A')) - self.assertEqual(u'-----', truncator.chars(5, u'B\u030A')) + truncator = text.Truncator('-----') + self.assertEqual('---B\u030A', truncator.chars(4, 'B\u030A')) + self.assertEqual('-----', truncator.chars(5, 'B\u030A')) # Make a best effort to shorten to the desired length, but requesting # a length shorter than the ellipsis shouldn't break - self.assertEqual(u'...', text.Truncator(u'asdf').chars(1)) + self.assertEqual('...', text.Truncator('asdf').chars(1)) def test_truncate_words(self): - truncator = text.Truncator(u'The quick brown fox jumped over the lazy ' + truncator = text.Truncator('The quick brown fox jumped over the lazy ' 'dog.') - self.assertEqual(u'The quick brown fox jumped over the lazy dog.', + self.assertEqual('The quick brown fox jumped over the lazy dog.', truncator.words(10)) - self.assertEqual(u'The quick brown fox...', truncator.words(4)) - self.assertEqual(u'The quick brown fox[snip]', + self.assertEqual('The quick brown fox...', truncator.words(4)) + self.assertEqual('The quick brown fox[snip]', truncator.words(4, '[snip]')) def test_truncate_html_words(self): truncator = text.Truncator('<p><strong><em>The quick brown fox jumped ' 'over the lazy dog.</em></strong></p>') - self.assertEqual(u'<p><strong><em>The quick brown fox jumped over the ' + self.assertEqual('<p><strong><em>The quick brown fox jumped over the ' 'lazy dog.</em></strong></p>', truncator.words(10, html=True)) - self.assertEqual(u'<p><strong><em>The quick brown fox...</em>' + self.assertEqual('<p><strong><em>The quick brown fox...</em>' '</strong></p>', truncator.words(4, html=True)) - self.assertEqual(u'<p><strong><em>The quick brown fox....</em>' + self.assertEqual('<p><strong><em>The quick brown fox....</em>' '</strong></p>', truncator.words(4, '....', html=True)) - self.assertEqual(u'<p><strong><em>The quick brown fox</em></strong>' + self.assertEqual('<p><strong><em>The quick brown fox</em></strong>' '</p>', truncator.words(4, '', html=True)) # Test with new line inside tag truncator = text.Truncator('<p>The quick <a href="xyz.html"\n' 'id="mylink">brown fox</a> jumped over the lazy dog.</p>') - self.assertEqual(u'<p>The quick <a href="xyz.html"\n' + self.assertEqual('<p>The quick <a href="xyz.html"\n' 'id="mylink">brown...</a></p>', truncator.words(3, '...', html=True)) def test_old_truncate_words(self): with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") - self.assertEqual(u'The quick brown fox jumped over the lazy dog.', - text.truncate_words(u'The quick brown fox jumped over the lazy dog.', 10)) - self.assertEqual(u'The quick brown fox ...', + self.assertEqual('The quick brown fox jumped over the lazy dog.', + text.truncate_words('The quick brown fox jumped over the lazy dog.', 10)) + self.assertEqual('The quick brown fox ...', text.truncate_words('The quick brown fox jumped over the lazy dog.', 4)) - self.assertEqual(u'The quick brown fox ....', + self.assertEqual('The quick brown fox ....', text.truncate_words('The quick brown fox jumped over the lazy dog.', 4, '....')) self.assertGreater(len(w), 0) def test_old_truncate_html_words(self): with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") - self.assertEqual(u'<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', + self.assertEqual('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 10)) - self.assertEqual(u'<p><strong><em>The quick brown fox ...</em></strong></p>', + self.assertEqual('<p><strong><em>The quick brown fox ...</em></strong></p>', text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 4)) - self.assertEqual(u'<p><strong><em>The quick brown fox ....</em></strong></p>', + self.assertEqual('<p><strong><em>The quick brown fox ....</em></strong></p>', text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 4, '....')) - self.assertEqual(u'<p><strong><em>The quick brown fox</em></strong></p>', + self.assertEqual('<p><strong><em>The quick brown fox</em></strong></p>', text.truncate_html_words('<p><strong><em>The quick brown fox jumped over the lazy dog.</em></strong></p>', 4, None)) self.assertGreater(len(w), 0) def test_wrap(self): digits = '1234 67 9' - self.assertEqual(text.wrap(digits, 100), u'1234 67 9') - self.assertEqual(text.wrap(digits, 9), u'1234 67 9') - self.assertEqual(text.wrap(digits, 8), u'1234 67\n9') + self.assertEqual(text.wrap(digits, 100), '1234 67 9') + self.assertEqual(text.wrap(digits, 9), '1234 67 9') + self.assertEqual(text.wrap(digits, 8), '1234 67\n9') self.assertEqual(text.wrap('short\na long line', 7), - u'short\na long\nline') + 'short\na long\nline') self.assertEqual(text.wrap('do-not-break-long-words please? ok', 8), - u'do-not-break-long-words\nplease?\nok') + 'do-not-break-long-words\nplease?\nok') long_word = 'l%sng' % ('o' * 20) self.assertEqual(text.wrap(long_word, 20), long_word) self.assertEqual(text.wrap('a %s word' % long_word, 10), - u'a\n%s\nword' % long_word) + 'a\n%s\nword' % long_word) diff --git a/tests/regressiontests/utils/timesince.py b/tests/regressiontests/utils/timesince.py index a4d479ad3e..5e641a42c4 100644 --- a/tests/regressiontests/utils/timesince.py +++ b/tests/regressiontests/utils/timesince.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + import datetime import unittest @@ -19,32 +21,32 @@ class TimesinceTests(unittest.TestCase): def test_equal_datetimes(self): """ equal datetimes. """ - self.assertEqual(timesince(self.t, self.t), u'0 minutes') + self.assertEqual(timesince(self.t, self.t), '0 minutes') def test_ignore_microseconds_and_seconds(self): """ Microseconds and seconds are ignored. """ self.assertEqual(timesince(self.t, self.t+self.onemicrosecond), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, self.t+self.onesecond), - u'0 minutes') + '0 minutes') def test_other_units(self): """ Test other units. """ self.assertEqual(timesince(self.t, self.t+self.oneminute), - u'1 minute') - self.assertEqual(timesince(self.t, self.t+self.onehour), u'1 hour') - self.assertEqual(timesince(self.t, self.t+self.oneday), u'1 day') - self.assertEqual(timesince(self.t, self.t+self.oneweek), u'1 week') + '1 minute') + self.assertEqual(timesince(self.t, self.t+self.onehour), '1 hour') + self.assertEqual(timesince(self.t, self.t+self.oneday), '1 day') + self.assertEqual(timesince(self.t, self.t+self.oneweek), '1 week') self.assertEqual(timesince(self.t, self.t+self.onemonth), - u'1 month') - self.assertEqual(timesince(self.t, self.t+self.oneyear), u'1 year') + '1 month') + self.assertEqual(timesince(self.t, self.t+self.oneyear), '1 year') def test_multiple_units(self): """ Test multiple units. """ self.assertEqual(timesince(self.t, - self.t+2*self.oneday+6*self.onehour), u'2 days, 6 hours') + self.t+2*self.oneday+6*self.onehour), '2 days, 6 hours') self.assertEqual(timesince(self.t, - self.t+2*self.oneweek+2*self.oneday), u'2 weeks, 2 days') + self.t+2*self.oneweek+2*self.oneday), '2 weeks, 2 days') def test_display_first_unit(self): """ @@ -53,10 +55,10 @@ class TimesinceTests(unittest.TestCase): """ self.assertEqual(timesince(self.t, self.t+2*self.oneweek+3*self.onehour+4*self.oneminute), - u'2 weeks') + '2 weeks') self.assertEqual(timesince(self.t, - self.t+4*self.oneday+5*self.oneminute), u'4 days') + self.t+4*self.oneday+5*self.oneminute), '4 days') def test_display_second_before_first(self): """ @@ -64,30 +66,30 @@ class TimesinceTests(unittest.TestCase): get 0 minutes. """ self.assertEqual(timesince(self.t, self.t-self.onemicrosecond), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, self.t-self.onesecond), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, self.t-self.oneminute), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, self.t-self.onehour), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, self.t-self.oneday), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, self.t-self.oneweek), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, self.t-self.onemonth), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, self.t-self.oneyear), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, - self.t-2*self.oneday-6*self.onehour), u'0 minutes') + self.t-2*self.oneday-6*self.onehour), '0 minutes') self.assertEqual(timesince(self.t, - self.t-2*self.oneweek-2*self.oneday), u'0 minutes') + self.t-2*self.oneweek-2*self.oneday), '0 minutes') self.assertEqual(timesince(self.t, self.t-2*self.oneweek-3*self.onehour-4*self.oneminute), - u'0 minutes') + '0 minutes') self.assertEqual(timesince(self.t, - self.t-4*self.oneday-5*self.oneminute), u'0 minutes') + self.t-4*self.oneday-5*self.oneminute), '0 minutes') def test_different_timezones(self): """ When using two different timezones. """ @@ -95,28 +97,28 @@ class TimesinceTests(unittest.TestCase): now_tz = datetime.datetime.now(LocalTimezone(now)) now_tz_i = datetime.datetime.now(FixedOffset((3 * 60) + 15)) - self.assertEqual(timesince(now), u'0 minutes') - self.assertEqual(timesince(now_tz), u'0 minutes') - self.assertEqual(timeuntil(now_tz, now_tz_i), u'0 minutes') + self.assertEqual(timesince(now), '0 minutes') + self.assertEqual(timesince(now_tz), '0 minutes') + self.assertEqual(timeuntil(now_tz, now_tz_i), '0 minutes') def test_date_objects(self): """ Both timesince and timeuntil should work on date objects (#17937). """ today = datetime.date.today() - self.assertEqual(timesince(today + self.oneday), u'0 minutes') - self.assertEqual(timeuntil(today - self.oneday), u'0 minutes') + self.assertEqual(timesince(today + self.oneday), '0 minutes') + self.assertEqual(timeuntil(today - self.oneday), '0 minutes') def test_both_date_objects(self): """ Timesince should work with both date objects (#9672) """ today = datetime.date.today() - self.assertEqual(timeuntil(today + self.oneday, today), u'1 day') - self.assertEqual(timeuntil(today - self.oneday, today), u'0 minutes') - self.assertEqual(timeuntil(today + self.oneweek, today), u'1 week') + self.assertEqual(timeuntil(today + self.oneday, today), '1 day') + self.assertEqual(timeuntil(today - self.oneday, today), '0 minutes') + self.assertEqual(timeuntil(today + self.oneweek, today), '1 week') def test_naive_datetime_with_tzinfo_attribute(self): class naive(datetime.tzinfo): def utcoffset(self, dt): return None future = datetime.datetime(2080, 1, 1, tzinfo=naive()) - self.assertEqual(timesince(future), u'0 minutes') + self.assertEqual(timesince(future), '0 minutes') past = datetime.datetime(1980, 1, 1, tzinfo=naive()) - self.assertEqual(timeuntil(past), u'0 minutes') + self.assertEqual(timeuntil(past), '0 minutes') diff --git a/tests/regressiontests/views/__init__.py b/tests/regressiontests/views/__init__.py index 1e12679af2..1193ffe010 100644 --- a/tests/regressiontests/views/__init__.py +++ b/tests/regressiontests/views/__init__.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals class BrokenException(Exception): pass -except_args = (b'Broken!', # plain exception with ASCII text - u'¡Broken!', # non-ASCII unicode data - u'¡Broken!'.encode('utf-8'), # non-ASCII, utf-8 encoded bytestring - b'\xa1Broken!', ) # non-ASCII, latin1 bytestring +except_args = (b'Broken!', # plain exception with ASCII text + '¡Broken!', # non-ASCII unicode data + '¡Broken!'.encode('utf-8'), # non-ASCII, utf-8 encoded bytestring + b'\xa1Broken!', ) # non-ASCII, latin1 bytestring diff --git a/tests/regressiontests/views/generic_urls.py b/tests/regressiontests/views/generic_urls.py index 5bf929eb55..0f214d12d5 100644 --- a/tests/regressiontests/views/generic_urls.py +++ b/tests/regressiontests/views/generic_urls.py @@ -1,5 +1,5 @@ # -*- coding:utf-8 -*- -from __future__ import absolute_import +from __future__ import absolute_import, unicode_literals from django.conf.urls import patterns, url from django.views.generic import RedirectView @@ -32,16 +32,16 @@ urlpatterns = patterns('', (r'^accounts/logout/$', 'django.contrib.auth.views.logout'), # Special URLs for particular regression cases. - url(u'^中文/$', 'regressiontests.views.views.redirect'), - url(u'^中文/target/$', 'regressiontests.views.views.index_page'), + url('^中文/$', 'regressiontests.views.views.redirect'), + url('^中文/target/$', 'regressiontests.views.views.index_page'), ) # rediriects, both temporary and permanent, with non-ASCII targets urlpatterns += patterns('', ('^nonascii_redirect/$', RedirectView.as_view( - url=u'/中文/target/', permanent=False)), + url='/中文/target/', permanent=False)), ('^permanent_nonascii_redirect/$', RedirectView.as_view( - url=u'/中文/target/', permanent=True)), + url='/中文/target/', permanent=True)), ) urlpatterns += patterns('regressiontests.views.views', diff --git a/tests/regressiontests/views/tests/specials.py b/tests/regressiontests/views/tests/specials.py index cd8ac5bb6a..7d652841f8 100644 --- a/tests/regressiontests/views/tests/specials.py +++ b/tests/regressiontests/views/tests/specials.py @@ -1,4 +1,6 @@ # coding: utf-8 +from __future__ import unicode_literals + from django.test import TestCase @@ -17,7 +19,7 @@ class URLHandling(TestCase): characters so this test ensures the creation of the full path with a base non-ASCII part is handled correctly. """ - response = self.client.get(u'/中文/') + response = self.client.get('/中文/') self.assertRedirects(response, self.redirect_target) def test_nonascii_redirect(self): diff --git a/tests/regressiontests/wsgi/tests.py b/tests/regressiontests/wsgi/tests.py index 0e8d7f2ada..9614a81c67 100644 --- a/tests/regressiontests/wsgi/tests.py +++ b/tests/regressiontests/wsgi/tests.py @@ -1,3 +1,5 @@ +from __future__ import unicode_literals + from django.core.exceptions import ImproperlyConfigured from django.core.servers.basehttp import get_internal_wsgi_application from django.core.wsgi import get_wsgi_application @@ -38,7 +40,7 @@ class WSGITest(TestCase): [('Content-Type', 'text/html; charset=utf-8')]) self.assertEqual( unicode(response), - u"Content-Type: text/html; charset=utf-8\n\nHello World!") + "Content-Type: text/html; charset=utf-8\n\nHello World!") class GetInternalWSGIApplicationTest(unittest.TestCase): |
