summaryrefslogtreecommitdiff
path: root/tests/regressiontests
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2012-08-10 12:40:37 +0100
committerAndrew Godwin <andrew@aeracode.org>2012-08-10 12:40:37 +0100
commit184cf9ab798d5b25d855649ddb2ca580949778df (patch)
tree8512633ec04a6979b0953e32e73c9a43d09e5805 /tests/regressiontests
parentc4b2a3262cc79383d6562cfc7e9af20135c8e0bf (diff)
parent7275576235ae2e87f3de7b0facb3f9b0a2368f28 (diff)
Merge branch 'master' into schema-alteration
Diffstat (limited to 'tests/regressiontests')
-rw-r--r--tests/regressiontests/admin_filters/tests.py60
-rw-r--r--tests/regressiontests/admin_views/admin.py2
-rw-r--r--tests/regressiontests/aggregation_regress/tests.py3
-rw-r--r--tests/regressiontests/bash_completion/tests.py4
-rw-r--r--tests/regressiontests/builtin_server/tests.py3
-rw-r--r--tests/regressiontests/cache/tests.py6
-rw-r--r--tests/regressiontests/createsuperuser/tests.py3
-rw-r--r--tests/regressiontests/db_typecasts/tests.py3
-rw-r--r--tests/regressiontests/file_uploads/tests.py2
-rw-r--r--tests/regressiontests/forms/tests/extra.py14
-rw-r--r--tests/regressiontests/forms/tests/forms.py24
-rw-r--r--tests/regressiontests/httpwrappers/tests.py19
-rw-r--r--tests/regressiontests/i18n/commands/compilation.py8
-rw-r--r--tests/regressiontests/i18n/commands/extraction.py2
-rw-r--r--tests/regressiontests/inspectdb/tests.py3
-rw-r--r--tests/regressiontests/mail/tests.py54
-rw-r--r--tests/regressiontests/middleware/tests.py4
-rw-r--r--tests/regressiontests/model_fields/tests.py4
-rw-r--r--tests/regressiontests/multiple_database/tests.py7
-rw-r--r--tests/regressiontests/requests/tests.py2
-rw-r--r--tests/regressiontests/signing/tests.py4
-rw-r--r--tests/regressiontests/staticfiles_tests/tests.py6
-rw-r--r--tests/regressiontests/templates/loaders.py6
-rw-r--r--tests/regressiontests/templates/templatetags/custom.py6
-rw-r--r--tests/regressiontests/templates/tests.py3
-rw-r--r--tests/regressiontests/test_utils/tests.py2
-rw-r--r--tests/regressiontests/utils/baseconv.py3
-rw-r--r--tests/regressiontests/utils/crypto.py28
-rw-r--r--tests/regressiontests/utils/decorators.py2
-rw-r--r--tests/regressiontests/utils/http.py26
-rw-r--r--tests/regressiontests/utils/simplelazyobject.py26
-rw-r--r--tests/regressiontests/views/tests/i18n.py4
32 files changed, 186 insertions, 157 deletions
diff --git a/tests/regressiontests/admin_filters/tests.py b/tests/regressiontests/admin_filters/tests.py
index 72cc5d7ee5..b92c2f4c8b 100644
--- a/tests/regressiontests/admin_filters/tests.py
+++ b/tests/regressiontests/admin_filters/tests.py
@@ -10,7 +10,7 @@ from django.contrib.auth.models import User
from django.core.exceptions import ImproperlyConfigured
from django.test import TestCase, RequestFactory
from django.test.utils import override_settings
-from django.utils.encoding import force_unicode
+from django.utils.encoding import force_text
from .models import Book, Department, Employee
@@ -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), 'date registered')
+ self.assertEqual(force_text(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), 'date registered')
+ self.assertEqual(force_text(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), 'date registered')
+ self.assertEqual(force_text(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), 'date registered')
+ self.assertEqual(force_text(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), 'year')
+ self.assertEqual(force_text(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), 'year')
+ self.assertEqual(force_text(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), 'Verbose Author')
+ self.assertEqual(force_text(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), 'Verbose Author')
+ self.assertEqual(force_text(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), 'Verbose Contributors')
+ self.assertEqual(force_text(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), 'Verbose Contributors')
+ self.assertEqual(force_text(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), 'book')
+ self.assertEqual(force_text(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), 'book')
+ self.assertEqual(force_text(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), 'book')
+ self.assertEqual(force_text(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), 'book')
+ self.assertEqual(force_text(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), 'is best seller')
+ self.assertEqual(force_text(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), 'is best seller')
+ self.assertEqual(force_text(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), 'is best seller')
+ self.assertEqual(force_text(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,7 +434,7 @@ class ListFiltersTests(TestCase):
# Make sure the correct choice is selected
filterspec = changelist.get_filters(request)[0][1]
- self.assertEqual(force_unicode(filterspec.title), 'publication decade')
+ self.assertEqual(force_text(filterspec.title), 'publication decade')
choices = list(filterspec.choices(changelist))
self.assertEqual(choices[0]['display'], 'All')
self.assertEqual(choices[0]['selected'], True)
@@ -451,7 +451,7 @@ class ListFiltersTests(TestCase):
# Make sure the correct choice is selected
filterspec = changelist.get_filters(request)[0][1]
- self.assertEqual(force_unicode(filterspec.title), 'publication decade')
+ self.assertEqual(force_text(filterspec.title), 'publication decade')
choices = list(filterspec.choices(changelist))
self.assertEqual(choices[1]['display'], 'the 1980\'s')
self.assertEqual(choices[1]['selected'], True)
@@ -468,7 +468,7 @@ class ListFiltersTests(TestCase):
# Make sure the correct choice is selected
filterspec = changelist.get_filters(request)[0][1]
- self.assertEqual(force_unicode(filterspec.title), 'publication decade')
+ self.assertEqual(force_text(filterspec.title), 'publication decade')
choices = list(filterspec.choices(changelist))
self.assertEqual(choices[2]['display'], 'the 1990\'s')
self.assertEqual(choices[2]['selected'], True)
@@ -485,7 +485,7 @@ class ListFiltersTests(TestCase):
# Make sure the correct choice is selected
filterspec = changelist.get_filters(request)[0][1]
- self.assertEqual(force_unicode(filterspec.title), 'publication decade')
+ self.assertEqual(force_text(filterspec.title), 'publication decade')
choices = list(filterspec.choices(changelist))
self.assertEqual(choices[3]['display'], 'the 2000\'s')
self.assertEqual(choices[3]['selected'], True)
@@ -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), 'publication decade')
+ self.assertEqual(force_text(filterspec.title), 'publication decade')
choices = list(filterspec.choices(changelist))
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), 'Verbose Author')
+ self.assertEqual(force_text(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,7 +561,7 @@ class ListFiltersTests(TestCase):
changelist = self.get_changelist(request, Book, modeladmin)
filterspec = changelist.get_filters(request)[0][0]
- self.assertEqual(force_unicode(filterspec.title), 'publication decade')
+ self.assertEqual(force_text(filterspec.title), 'publication decade')
choices = list(filterspec.choices(changelist))
self.assertEqual(len(choices), 3)
@@ -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), 'number')
+ self.assertEqual(force_text(filterspec.title), 'number')
choices = list(filterspec.choices(changelist))
self.assertEqual(choices[2]['selected'], True)
self.assertEqual(choices[2]['query_string'], '?no=207')
@@ -614,7 +614,7 @@ class ListFiltersTests(TestCase):
# Make sure the correct choice is selected
filterspec = changelist.get_filters(request)[0][0]
- self.assertEqual(force_unicode(filterspec.title), 'publication decade')
+ self.assertEqual(force_text(filterspec.title), 'publication decade')
choices = list(filterspec.choices(changelist))
self.assertEqual(choices[2]['display'], 'the 1990\'s')
self.assertEqual(choices[2]['selected'], True)
@@ -631,7 +631,7 @@ class ListFiltersTests(TestCase):
# Make sure the correct choice is selected
filterspec = changelist.get_filters(request)[0][0]
- self.assertEqual(force_unicode(filterspec.title), 'publication decade')
+ self.assertEqual(force_text(filterspec.title), 'publication decade')
choices = list(filterspec.choices(changelist))
self.assertEqual(choices[2]['display'], 'the 1990\'s')
self.assertEqual(choices[2]['selected'], True)
@@ -657,7 +657,7 @@ class ListFiltersTests(TestCase):
self.assertEqual(list(queryset), [jack, john])
filterspec = changelist.get_filters(request)[0][-1]
- self.assertEqual(force_unicode(filterspec.title), 'department')
+ self.assertEqual(force_text(filterspec.title), 'department')
choices = list(filterspec.choices(changelist))
self.assertEqual(choices[0]['display'], 'All')
@@ -682,7 +682,7 @@ class ListFiltersTests(TestCase):
self.assertEqual(list(queryset), [john])
filterspec = changelist.get_filters(request)[0][-1]
- self.assertEqual(force_unicode(filterspec.title), 'department')
+ self.assertEqual(force_text(filterspec.title), 'department')
choices = list(filterspec.choices(changelist))
self.assertEqual(choices[0]['display'], 'All')
diff --git a/tests/regressiontests/admin_views/admin.py b/tests/regressiontests/admin_views/admin.py
index 6ec933f89b..293ddfebf6 100644
--- a/tests/regressiontests/admin_views/admin.py
+++ b/tests/regressiontests/admin_views/admin.py
@@ -630,7 +630,7 @@ site.register(UndeletableObject, UndeletableObjectAdmin)
# related OneToOne object registered in admin
# related OneToOne object not registered in admin
# when deleting Book so as exercise all four troublesome (w.r.t escaping
-# and calling force_unicode to avoid problems on Python 2.3) paths through
+# and calling force_text to avoid problems on Python 2.3) paths through
# contrib.admin.util's get_deleted_objects function.
site.register(Book, inlines=[ChapterInline])
site.register(Promo)
diff --git a/tests/regressiontests/aggregation_regress/tests.py b/tests/regressiontests/aggregation_regress/tests.py
index e5f12e5781..e24eb43b87 100644
--- a/tests/regressiontests/aggregation_regress/tests.py
+++ b/tests/regressiontests/aggregation_regress/tests.py
@@ -8,6 +8,7 @@ from operator import attrgetter
from django.core.exceptions import FieldError
from django.db.models import Count, Max, Avg, Sum, StdDev, Variance, F, Q
from django.test import TestCase, Approximate, skipUnlessDBFeature
+from django.utils import six
from .models import Author, Book, Publisher, Clues, Entries, HardbackBook
@@ -16,7 +17,7 @@ class AggregationTests(TestCase):
fixtures = ["aggregation_regress.json"]
def assertObjectAttrs(self, obj, **kwargs):
- for attr, value in kwargs.iteritems():
+ for attr, value in six.iteritems(kwargs):
self.assertEqual(getattr(obj, attr), value)
def test_aggregates_in_where_clause(self):
diff --git a/tests/regressiontests/bash_completion/tests.py b/tests/regressiontests/bash_completion/tests.py
index e4b3bb58f3..ed8cedf1ab 100644
--- a/tests/regressiontests/bash_completion/tests.py
+++ b/tests/regressiontests/bash_completion/tests.py
@@ -3,11 +3,11 @@ A series of tests to establish that the command-line bash completion works.
"""
import os
import sys
-import StringIO
from django.conf import settings
from django.core.management import ManagementUtility
from django.utils import unittest
+from django.utils.six import StringIO
class BashCompletionTests(unittest.TestCase):
@@ -20,7 +20,7 @@ class BashCompletionTests(unittest.TestCase):
def setUp(self):
self.old_DJANGO_AUTO_COMPLETE = os.environ.get('DJANGO_AUTO_COMPLETE')
os.environ['DJANGO_AUTO_COMPLETE'] = '1'
- self.output = StringIO.StringIO()
+ self.output = StringIO()
self.old_stdout = sys.stdout
sys.stdout = self.output
diff --git a/tests/regressiontests/builtin_server/tests.py b/tests/regressiontests/builtin_server/tests.py
index aeb5d9febf..4a3b44176b 100644
--- a/tests/regressiontests/builtin_server/tests.py
+++ b/tests/regressiontests/builtin_server/tests.py
@@ -1,6 +1,5 @@
-from StringIO import StringIO
-
from django.core.servers.basehttp import ServerHandler
+from django.utils.six import StringIO
from django.utils.unittest import TestCase
#
diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py
index 264ef74abd..8fc749aaa2 100644
--- a/tests/regressiontests/cache/tests.py
+++ b/tests/regressiontests/cache/tests.py
@@ -28,7 +28,7 @@ from django.test.utils import (get_warnings_state, restore_warnings_state,
from django.utils import timezone, translation, unittest
from django.utils.cache import (patch_vary_headers, get_cache_key,
learn_cache_key, patch_cache_control, patch_response_headers)
-from django.utils.encoding import force_unicode
+from django.utils.encoding import force_text
from django.views.decorators.cache import cache_page
from .models import Poll, expensive_calculation
@@ -1307,7 +1307,7 @@ class CacheI18nTest(TestCase):
request = self._get_request()
# This is tightly coupled to the implementation,
# but it's the most straightforward way to test the key.
- tz = force_unicode(timezone.get_current_timezone_name(), errors='ignore')
+ tz = force_text(timezone.get_current_timezone_name(), errors='ignore')
tz = tz.encode('ascii', 'ignore').replace(' ', '_')
response = HttpResponse()
key = learn_cache_key(request, response)
@@ -1319,7 +1319,7 @@ class CacheI18nTest(TestCase):
def test_cache_key_no_i18n (self):
request = self._get_request()
lang = translation.get_language()
- tz = force_unicode(timezone.get_current_timezone_name(), errors='ignore')
+ tz = force_text(timezone.get_current_timezone_name(), errors='ignore')
tz = tz.encode('ascii', 'ignore').replace(' ', '_')
response = HttpResponse()
key = learn_cache_key(request, response)
diff --git a/tests/regressiontests/createsuperuser/tests.py b/tests/regressiontests/createsuperuser/tests.py
index 1c1bb0ed38..7303b1f2e7 100644
--- a/tests/regressiontests/createsuperuser/tests.py
+++ b/tests/regressiontests/createsuperuser/tests.py
@@ -1,9 +1,8 @@
-from StringIO import StringIO
-
from django.contrib.auth import models
from django.contrib.auth.management.commands import changepassword
from django.core.management import call_command
from django.test import TestCase
+from django.utils.six import StringIO
class MultiDBChangepasswordManagementCommandTestCase(TestCase):
diff --git a/tests/regressiontests/db_typecasts/tests.py b/tests/regressiontests/db_typecasts/tests.py
index 83bd1e6851..2cf835d94e 100644
--- a/tests/regressiontests/db_typecasts/tests.py
+++ b/tests/regressiontests/db_typecasts/tests.py
@@ -3,6 +3,7 @@
import datetime
from django.db.backends import util as typecasts
+from django.utils import six
from django.utils import unittest
@@ -49,7 +50,7 @@ TEST_CASES = {
class DBTypeCasts(unittest.TestCase):
def test_typeCasts(self):
- for k, v in TEST_CASES.iteritems():
+ for k, v in six.iteritems(TEST_CASES):
for inpt, expected in v:
got = getattr(typecasts, k)(inpt)
self.assertEqual(got, expected, "In %s: %r doesn't match %r. Got %r instead." % (k, inpt, expected, got))
diff --git a/tests/regressiontests/file_uploads/tests.py b/tests/regressiontests/file_uploads/tests.py
index 9fe3ca15a7..d2362d7197 100644
--- a/tests/regressiontests/file_uploads/tests.py
+++ b/tests/regressiontests/file_uploads/tests.py
@@ -7,12 +7,12 @@ import hashlib
import json
import os
import shutil
-from StringIO import StringIO
from django.core.files import temp as tempfile
from django.core.files.uploadedfile import SimpleUploadedFile
from django.http.multipartparser import MultiPartParser
from django.test import TestCase, client
+from django.utils.six import StringIO
from django.utils import unittest
from . import uploadhandler
diff --git a/tests/regressiontests/forms/tests/extra.py b/tests/regressiontests/forms/tests/extra.py
index 28b6c12453..e0e62858d0 100644
--- a/tests/regressiontests/forms/tests/extra.py
+++ b/tests/regressiontests/forms/tests/extra.py
@@ -9,7 +9,7 @@ from django.forms.extras import SelectDateWidget
from django.forms.util import ErrorList
from django.test import TestCase
from django.utils import translation
-from django.utils.encoding import force_unicode, smart_unicode
+from django.utils.encoding import force_text, smart_text
from .error_messages import AssertFormErrorsMixin
@@ -551,7 +551,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
f = GenericIPAddressField(unpack_ipv4=True)
self.assertEqual(f.clean('::ffff:0a0a:0a0a'), '10.10.10.10')
- def test_smart_unicode(self):
+ def test_smart_text(self):
class Test:
def __str__(self):
return 'ŠĐĆŽćžšđ'.encode('utf-8')
@@ -562,10 +562,10 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
def __unicode__(self):
return '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'
- 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')
+ self.assertEqual(smart_text(Test()), '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
+ self.assertEqual(smart_text(TestU()), '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
+ self.assertEqual(smart_text(1), '1')
+ self.assertEqual(smart_text('foo'), 'foo')
def test_accessing_clean(self):
class UserForm(Form):
@@ -591,7 +591,7 @@ class FormsExtraTestCase(TestCase, AssertFormErrorsMixin):
def as_divs(self):
if not self: return ''
- return '<div class="errorlist">%s</div>' % ''.join(['<div class="error">%s</div>' % force_unicode(e) for e in self])
+ return '<div class="errorlist">%s</div>' % ''.join(['<div class="error">%s</div>' % force_text(e) for e in self])
class CommentForm(Form):
name = CharField(max_length=50, required=False)
diff --git a/tests/regressiontests/forms/tests/forms.py b/tests/regressiontests/forms/tests/forms.py
index 7e1c8384a0..a8a28ba806 100644
--- a/tests/regressiontests/forms/tests/forms.py
+++ b/tests/regressiontests/forms/tests/forms.py
@@ -82,11 +82,7 @@ class FormsTestCase(TestCase):
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
- self.fail('Attempts to access cleaned_data when validation fails should fail.')
- except AttributeError:
- pass
+ self.assertEqual(p.cleaned_data, {})
self.assertHTMLEqual(str(p), """<tr><th><label for="id_first_name">First name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="first_name" id="id_first_name" /></td></tr>
<tr><th><label for="id_last_name">Last name:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="last_name" id="id_last_name" /></td></tr>
<tr><th><label for="id_birthday">Birthday:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="birthday" id="id_birthday" /></td></tr>""")
@@ -145,11 +141,7 @@ class FormsTestCase(TestCase):
* This field is required.
* birthday
* This field is required.""")
- try:
- p.cleaned_data
- self.fail('Attempts to access cleaned_data when validation fails should fail.')
- except AttributeError:
- pass
+ self.assertEqual(p.cleaned_data, {'last_name': 'Lennon'})
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.')
@@ -1678,11 +1670,7 @@ class FormsTestCase(TestCase):
form = SongForm(data, empty_permitted=False)
self.assertFalse(form.is_valid())
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.')
- except AttributeError:
- pass
+ self.assertEqual(form.cleaned_data, {})
# Now let's show what happens when empty_permitted=True and the form is empty.
form = SongForm(data, empty_permitted=True)
@@ -1696,11 +1684,7 @@ class FormsTestCase(TestCase):
form = SongForm(data, empty_permitted=False)
self.assertFalse(form.is_valid())
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.')
- except AttributeError:
- pass
+ self.assertEqual(form.cleaned_data, {'artist': 'The Doors'})
# If a field is not given in the data then None is returned for its data. Lets
# make sure that when checking for empty_permitted that None is treated
diff --git a/tests/regressiontests/httpwrappers/tests.py b/tests/regressiontests/httpwrappers/tests.py
index 9b599db6d0..0f61c2d840 100644
--- a/tests/regressiontests/httpwrappers/tests.py
+++ b/tests/regressiontests/httpwrappers/tests.py
@@ -4,8 +4,11 @@ from __future__ import unicode_literals
import copy
import pickle
-from django.http import (QueryDict, HttpResponse, SimpleCookie, BadHeaderError,
- parse_cookie)
+from django.core.exceptions import SuspiciousOperation
+from django.http import (QueryDict, HttpResponse, HttpResponseRedirect,
+ HttpResponsePermanentRedirect,
+ SimpleCookie, BadHeaderError,
+ parse_cookie)
from django.utils import unittest
@@ -309,6 +312,18 @@ class HttpResponseTests(unittest.TestCase):
r = HttpResponse(['abc'])
self.assertRaises(Exception, r.write, 'def')
+ def test_unsafe_redirect(self):
+ bad_urls = [
+ 'data:text/html,<script>window.alert("xss")</script>',
+ 'mailto:test@example.com',
+ 'file:///etc/passwd',
+ ]
+ for url in bad_urls:
+ self.assertRaises(SuspiciousOperation,
+ HttpResponseRedirect, url)
+ self.assertRaises(SuspiciousOperation,
+ HttpResponsePermanentRedirect, url)
+
class CookieTests(unittest.TestCase):
def test_encode(self):
diff --git a/tests/regressiontests/i18n/commands/compilation.py b/tests/regressiontests/i18n/commands/compilation.py
index d88e1feef6..b6119cf43d 100644
--- a/tests/regressiontests/i18n/commands/compilation.py
+++ b/tests/regressiontests/i18n/commands/compilation.py
@@ -1,10 +1,10 @@
import os
-from io import BytesIO
from django.core.management import call_command, CommandError
from django.test import TestCase
from django.test.utils import override_settings
from django.utils import translation
+from django.utils.six import StringIO
test_dir = os.path.abspath(os.path.dirname(__file__))
@@ -26,7 +26,7 @@ class PoFileTests(MessageCompilationTests):
os.chdir(test_dir)
with self.assertRaisesRegexp(CommandError,
"file has a BOM \(Byte Order Mark\)"):
- call_command('compilemessages', locale=self.LOCALE, stderr=BytesIO())
+ call_command('compilemessages', locale=self.LOCALE, stderr=StringIO())
self.assertFalse(os.path.exists(self.MO_FILE))
@@ -42,7 +42,7 @@ class PoFileContentsTests(MessageCompilationTests):
def test_percent_symbol_in_po_file(self):
os.chdir(test_dir)
- call_command('compilemessages', locale=self.LOCALE, stderr=BytesIO())
+ call_command('compilemessages', locale=self.LOCALE, stderr=StringIO())
self.assertTrue(os.path.exists(self.MO_FILE))
@@ -57,7 +57,7 @@ class PercentRenderingTests(MessageCompilationTests):
def test_percent_symbol_escaping(self):
from django.template import Template, Context
os.chdir(test_dir)
- call_command('compilemessages', locale=self.LOCALE, stderr=BytesIO())
+ call_command('compilemessages', locale=self.LOCALE, stderr=StringIO())
with translation.override(self.LOCALE):
t = Template('{% load i18n %}{% trans "Looks like a str fmt spec %% o but shouldn\'t be interpreted as such" %}')
rendered = t.render(Context({}))
diff --git a/tests/regressiontests/i18n/commands/extraction.py b/tests/regressiontests/i18n/commands/extraction.py
index cd6d50893a..29d9e277ff 100644
--- a/tests/regressiontests/i18n/commands/extraction.py
+++ b/tests/regressiontests/i18n/commands/extraction.py
@@ -3,10 +3,10 @@
import os
import re
import shutil
-from StringIO import StringIO
from django.core import management
from django.test import TestCase
+from django.utils.six import StringIO
LOCALE='de'
diff --git a/tests/regressiontests/inspectdb/tests.py b/tests/regressiontests/inspectdb/tests.py
index 29435b8375..aae7bc5cc7 100644
--- a/tests/regressiontests/inspectdb/tests.py
+++ b/tests/regressiontests/inspectdb/tests.py
@@ -1,7 +1,6 @@
-from StringIO import StringIO
-
from django.core.management import call_command
from django.test import TestCase, skipUnlessDBFeature
+from django.utils.six import StringIO
class InspectDBTestCase(TestCase):
diff --git a/tests/regressiontests/mail/tests.py b/tests/regressiontests/mail/tests.py
index 2215f56523..c948662bc3 100644
--- a/tests/regressiontests/mail/tests.py
+++ b/tests/regressiontests/mail/tests.py
@@ -7,7 +7,6 @@ import os
import shutil
import smtpd
import sys
-from StringIO import StringIO
import tempfile
import threading
@@ -18,6 +17,7 @@ from django.core.mail.backends import console, dummy, locmem, filebased, smtp
from django.core.mail.message import BadHeaderError
from django.test import TestCase
from django.test.utils import override_settings
+from django.utils.six import PY3, StringIO
from django.utils.translation import ugettext_lazy
@@ -29,7 +29,7 @@ class MailTests(TestCase):
def test_ascii(self):
email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com'])
message = email.message()
- self.assertEqual(message['Subject'].encode(), 'Subject')
+ self.assertEqual(message['Subject'], 'Subject')
self.assertEqual(message.get_payload(), 'Content')
self.assertEqual(message['From'], 'from@example.com')
self.assertEqual(message['To'], 'to@example.com')
@@ -37,7 +37,7 @@ class MailTests(TestCase):
def test_multiple_recipients(self):
email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com', 'other@example.com'])
message = email.message()
- self.assertEqual(message['Subject'].encode(), 'Subject')
+ self.assertEqual(message['Subject'], 'Subject')
self.assertEqual(message.get_payload(), 'Content')
self.assertEqual(message['From'], 'from@example.com')
self.assertEqual(message['To'], 'to@example.com, other@example.com')
@@ -77,9 +77,10 @@ class MailTests(TestCase):
"""
Test for space continuation character in long (ascii) subject headers (#7747)
"""
- email = EmailMessage('Long subject lines that get wrapped should use a space continuation character to get expected behavior in Outlook and Thunderbird', 'Content', 'from@example.com', ['to@example.com'])
+ email = EmailMessage('Long subject lines that get wrapped should contain a space continuation character to get expected behavior in Outlook and Thunderbird', 'Content', 'from@example.com', ['to@example.com'])
message = email.message()
- self.assertEqual(message['Subject'], 'Long subject lines that get wrapped should use a space continuation\n character to get expected behavior in Outlook and Thunderbird')
+ # Note that in Python 3, maximum line length has increased from 76 to 78
+ self.assertEqual(message['Subject'].encode(), b'Long subject lines that get wrapped should contain a space continuation\n character to get expected behavior in Outlook and Thunderbird')
def test_message_header_overrides(self):
"""
@@ -88,7 +89,7 @@ class MailTests(TestCase):
"""
headers = {"date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"}
email = EmailMessage('subject', 'content', 'from@example.com', ['to@example.com'], headers=headers)
- self.assertEqual(email.message().as_string(), b'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nSubject: subject\nFrom: from@example.com\nTo: to@example.com\ndate: Fri, 09 Nov 2001 01:08:47 -0000\nMessage-ID: foo\n\ncontent')
+ self.assertEqual(email.message().as_string(), 'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nSubject: subject\nFrom: from@example.com\nTo: to@example.com\ndate: Fri, 09 Nov 2001 01:08:47 -0000\nMessage-ID: foo\n\ncontent')
def test_from_header(self):
"""
@@ -160,7 +161,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(), '=?iso-8859-1?q?Message_from_Firstname_S=FCrname?=')
+ self.assertEqual(msg.message()['Subject'], '=?iso-8859-1?q?Message_from_Firstname_S=FCrname?=')
def test_encoding(self):
"""
@@ -170,7 +171,7 @@ class MailTests(TestCase):
email = EmailMessage('Subject', 'Firstname Sürname is a great guy.', 'from@example.com', ['other@example.com'])
email.encoding = 'iso-8859-1'
message = email.message()
- self.assertTrue(message.as_string().startswith(b'Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: from@example.com\nTo: other@example.com'))
+ self.assertTrue(message.as_string().startswith('Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\nSubject: Subject\nFrom: from@example.com\nTo: other@example.com'))
self.assertEqual(message.get_payload(), 'Firstname S=FCrname is a great guy.')
# Make sure MIME attachments also works correctly with other encodings than utf-8
@@ -179,8 +180,8 @@ class MailTests(TestCase):
msg = EmailMultiAlternatives('Subject', text_content, 'from@example.com', ['to@example.com'])
msg.encoding = 'iso-8859-1'
msg.attach_alternative(html_content, "text/html")
- self.assertEqual(msg.message().get_payload(0).as_string(), b'Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\nFirstname S=FCrname is a great guy.')
- self.assertEqual(msg.message().get_payload(1).as_string(), b'Content-Type: text/html; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\n<p>Firstname S=FCrname is a <strong>great</strong> guy.</p>')
+ self.assertEqual(msg.message().get_payload(0).as_string(), 'Content-Type: text/plain; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\nFirstname S=FCrname is a great guy.')
+ self.assertEqual(msg.message().get_payload(1).as_string(), 'Content-Type: text/html; charset="iso-8859-1"\nMIME-Version: 1.0\nContent-Transfer-Encoding: quoted-printable\n\n<p>Firstname S=FCrname is a <strong>great</strong> guy.</p>')
def test_attachments(self):
"""Regression test for #9367"""
@@ -291,31 +292,31 @@ class MailTests(TestCase):
# Regression for #13433 - Make sure that EmailMessage doesn't mangle
# 'From ' in message body.
email = EmailMessage('Subject', 'From the future', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- self.assertFalse(b'>From the future' in email.message().as_string())
+ self.assertFalse('>From the future' in email.message().as_string())
def test_dont_base64_encode(self):
# Ticket #3472
# Shouldn't use Base64 encoding at all
msg = EmailMessage('Subject', 'UTF-8 encoded body', 'bounce@example.com', ['to@example.com'], headers={'From': 'from@example.com'})
- self.assertFalse(b'Content-Transfer-Encoding: base64' in msg.message().as_string())
+ self.assertFalse('Content-Transfer-Encoding: base64' in msg.message().as_string())
# Ticket #11212
# Shouldn't use quoted printable, should detect it can represent content with 7 bit data
msg = EmailMessage('Subject', 'Body with only ASCII 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: 7bit' in s)
+ self.assertFalse('Content-Transfer-Encoding: quoted-printable' in s)
+ self.assertTrue('Content-Transfer-Encoding: 7bit' in s)
# Shouldn't use quoted printable, should detect it can represent content with 8 bit data
msg = EmailMessage('Subject', 'Body with 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)
+ self.assertFalse(str('Content-Transfer-Encoding: quoted-printable') in s)
+ self.assertTrue(str('Content-Transfer-Encoding: 8bit') in s)
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)
+ self.assertFalse(str('Content-Transfer-Encoding: quoted-printable') in s)
+ self.assertTrue(str('Content-Transfer-Encoding: 8bit') in s)
class BaseEmailBackendTests(object):
@@ -440,7 +441,7 @@ class BaseEmailBackendTests(object):
email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com'], cc=['cc@example.com'])
mail.get_connection().send_messages([email])
message = self.get_the_message()
- self.assertStartsWith(message.as_string(), b'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nSubject: Subject\nFrom: from@example.com\nTo: to@example.com\nCc: cc@example.com\nDate: ')
+ self.assertStartsWith(message.as_string(), 'Content-Type: text/plain; charset="utf-8"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nSubject: Subject\nFrom: from@example.com\nTo: to@example.com\nCc: cc@example.com\nDate: ')
def test_idn_send(self):
"""
@@ -519,9 +520,9 @@ class FileBackendTests(BaseEmailBackendTests, TestCase):
def get_mailbox_content(self):
messages = []
for filename in os.listdir(self.tmp_dir):
- with open(os.path.join(self.tmp_dir, filename), 'rb') as fp:
- session = fp.read().split(b'\n' + (b'-' * 79) + b'\n')
- messages.extend(email.message_from_string(m) for m in session if m)
+ with open(os.path.join(self.tmp_dir, filename), 'r') as fp:
+ session = fp.read().split('\n' + ('-' * 79) + '\n')
+ messages.extend(email.message_from_string(str(m)) for m in session if m)
return messages
def test_file_sessions(self):
@@ -571,8 +572,8 @@ class ConsoleBackendTests(BaseEmailBackendTests, TestCase):
self.stream = sys.stdout = StringIO()
def get_mailbox_content(self):
- messages = self.stream.getvalue().split(b'\n' + (b'-' * 79) + b'\n')
- return [email.message_from_string(m) for m in messages if m]
+ messages = self.stream.getvalue().split('\n' + ('-' * 79) + '\n')
+ return [email.message_from_string(str(m)) for m in messages if m]
def test_console_stream_kwarg(self):
"""
@@ -600,7 +601,10 @@ class FakeSMTPServer(smtpd.SMTPServer, threading.Thread):
def process_message(self, peer, mailfrom, rcpttos, data):
m = email.message_from_string(data)
- maddr = email.Utils.parseaddr(m.get('from'))[1]
+ if PY3:
+ maddr = email.utils.parseaddr(m.get('from'))[1]
+ else:
+ maddr = email.Utils.parseaddr(m.get('from'))[1]
if mailfrom != maddr:
return "553 '%s' != '%s'" % (mailfrom, maddr)
with self.sink_lock:
diff --git a/tests/regressiontests/middleware/tests.py b/tests/regressiontests/middleware/tests.py
index ead34f46db..08a385e6cf 100644
--- a/tests/regressiontests/middleware/tests.py
+++ b/tests/regressiontests/middleware/tests.py
@@ -3,7 +3,6 @@
import gzip
import re
import random
-import StringIO
from django.conf import settings
from django.core import mail
@@ -16,6 +15,7 @@ from django.middleware.gzip import GZipMiddleware
from django.test import TestCase, RequestFactory
from django.test.utils import override_settings
from django.utils.six.moves import xrange
+from django.utils.six import StringIO
class CommonMiddlewareTest(TestCase):
def setUp(self):
@@ -526,7 +526,7 @@ class GZipMiddlewareTest(TestCase):
@staticmethod
def decompress(gzipped_string):
- return gzip.GzipFile(mode='rb', fileobj=StringIO.StringIO(gzipped_string)).read()
+ return gzip.GzipFile(mode='rb', fileobj=StringIO(gzipped_string)).read()
def test_compress_response(self):
"""
diff --git a/tests/regressiontests/model_fields/tests.py b/tests/regressiontests/model_fields/tests.py
index e86159463d..7d6071accc 100644
--- a/tests/regressiontests/model_fields/tests.py
+++ b/tests/regressiontests/model_fields/tests.py
@@ -274,6 +274,10 @@ class ValidationTest(test.TestCase):
self.assertRaises(ValidationError, f.clean, None, None)
self.assertRaises(ValidationError, f.clean, '', None)
+ def test_integerfield_validates_zero_against_choices(self):
+ f = models.IntegerField(choices=((1, 1),))
+ self.assertRaises(ValidationError, f.clean, '0', None)
+
def test_charfield_raises_error_on_empty_input(self):
f = models.CharField(null=False)
self.assertRaises(ValidationError, f.clean, None, None)
diff --git a/tests/regressiontests/multiple_database/tests.py b/tests/regressiontests/multiple_database/tests.py
index 595c5edb3b..74a5f2f550 100644
--- a/tests/regressiontests/multiple_database/tests.py
+++ b/tests/regressiontests/multiple_database/tests.py
@@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals
import datetime
import pickle
-from StringIO import StringIO
+from operator import attrgetter
from django.conf import settings
from django.contrib.auth.models import User
@@ -11,6 +11,7 @@ from django.core import management
from django.db import connections, router, DEFAULT_DB_ALIAS
from django.db.models import signals
from django.test import TestCase
+from django.utils.six import StringIO
from .models import Book, Person, Pet, Review, UserProfile
@@ -873,10 +874,10 @@ class QueryTestCase(TestCase):
dive = Book.objects.using('other').create(title="Dive into Python",
published=datetime.date(2009, 5, 4))
val = Book.objects.db_manager("other").raw('SELECT id FROM multiple_database_book')
- self.assertEqual(map(lambda o: o.pk, val), [dive.pk])
+ self.assertQuerysetEqual(val, [dive.pk], attrgetter("pk"))
val = Book.objects.raw('SELECT id FROM multiple_database_book').using('other')
- self.assertEqual(map(lambda o: o.pk, val), [dive.pk])
+ self.assertQuerysetEqual(val, [dive.pk], attrgetter("pk"))
def test_select_related(self):
"Database assignment is retained if an object is retrieved with select_related()"
diff --git a/tests/regressiontests/requests/tests.py b/tests/regressiontests/requests/tests.py
index 146dca2b7b..f192459246 100644
--- a/tests/regressiontests/requests/tests.py
+++ b/tests/regressiontests/requests/tests.py
@@ -3,7 +3,6 @@ from __future__ import unicode_literals
import time
import warnings
from datetime import datetime, timedelta
-from StringIO import StringIO
from django.conf import settings
from django.core.handlers.wsgi import WSGIRequest, LimitedStream
@@ -11,6 +10,7 @@ from django.http import HttpRequest, HttpResponse, parse_cookie, build_request_r
from django.test.utils import str_prefix
from django.utils import unittest
from django.utils.http import cookie_date
+from django.utils.six import StringIO
from django.utils.timezone import utc
diff --git a/tests/regressiontests/signing/tests.py b/tests/regressiontests/signing/tests.py
index f3fe5f3ec7..2368405060 100644
--- a/tests/regressiontests/signing/tests.py
+++ b/tests/regressiontests/signing/tests.py
@@ -4,7 +4,7 @@ import time
from django.core import signing
from django.test import TestCase
-from django.utils.encoding import force_unicode
+from django.utils.encoding import force_text
class TestSigner(TestCase):
@@ -48,7 +48,7 @@ class TestSigner(TestCase):
)
for example in examples:
self.assertNotEqual(
- force_unicode(example), force_unicode(signer.sign(example)))
+ force_text(example), force_text(signer.sign(example)))
self.assertEqual(example, signer.unsign(signer.sign(example)))
def unsign_detects_tampering(self):
diff --git a/tests/regressiontests/staticfiles_tests/tests.py b/tests/regressiontests/staticfiles_tests/tests.py
index 2c038e1713..19951f100b 100644
--- a/tests/regressiontests/staticfiles_tests/tests.py
+++ b/tests/regressiontests/staticfiles_tests/tests.py
@@ -17,7 +17,7 @@ from django.core.files.storage import default_storage
from django.core.management import call_command
from django.test import TestCase
from django.test.utils import override_settings
-from django.utils.encoding import smart_unicode
+from django.utils.encoding import smart_text
from django.utils.functional import empty
from django.utils._os import rmtree_errorhandler
from django.utils import six
@@ -80,7 +80,7 @@ class BaseStaticFilesTestCase(object):
os.unlink(self._backup_filepath)
def assertFileContains(self, filepath, text):
- self.assertIn(text, self._get_file(smart_unicode(filepath)),
+ self.assertIn(text, self._get_file(smart_text(filepath)),
"'%s' not in '%s'" % (text, filepath))
def assertFileNotFound(self, filepath):
@@ -199,7 +199,7 @@ class TestFindStatic(CollectionTestCase, TestDefaults):
out.seek(0)
lines = [l.strip() for l in out.readlines()]
contents = codecs.open(
- smart_unicode(lines[1].strip()), "r", "utf-8").read()
+ smart_text(lines[1].strip()), "r", "utf-8").read()
return contents
def test_all_files(self):
diff --git a/tests/regressiontests/templates/loaders.py b/tests/regressiontests/templates/loaders.py
index 5c11916308..6b635c8f23 100644
--- a/tests/regressiontests/templates/loaders.py
+++ b/tests/regressiontests/templates/loaders.py
@@ -12,13 +12,13 @@ if __name__ == '__main__':
import sys
import pkg_resources
import imp
-import StringIO
import os.path
from django.template import TemplateDoesNotExist, Context
from django.template.loaders.eggs import Loader as EggLoader
from django.template import loader
from django.utils import unittest
+from django.utils.six import StringIO
# Mock classes and objects for pkg_resources functions.
@@ -61,8 +61,8 @@ class EggLoaderTest(unittest.TestCase):
self.empty_egg = create_egg("egg_empty", {})
self.egg_1 = create_egg("egg_1", {
- os.path.normcase('templates/y.html') : StringIO.StringIO("y"),
- os.path.normcase('templates/x.txt') : StringIO.StringIO("x"),
+ os.path.normcase('templates/y.html') : StringIO("y"),
+ os.path.normcase('templates/x.txt') : StringIO("x"),
})
self._old_installed_apps = settings.INSTALLED_APPS
settings.INSTALLED_APPS = []
diff --git a/tests/regressiontests/templates/templatetags/custom.py b/tests/regressiontests/templates/templatetags/custom.py
index 95fcd551de..3f51353880 100644
--- a/tests/regressiontests/templates/templatetags/custom.py
+++ b/tests/regressiontests/templates/templatetags/custom.py
@@ -70,7 +70,7 @@ simple_only_unlimited_args.anything = "Expected simple_only_unlimited_args __dic
def simple_unlimited_args_kwargs(one, two='hi', *args, **kwargs):
"""Expected simple_unlimited_args_kwargs __doc__"""
# Sort the dictionary by key to guarantee the order for testing.
- sorted_kwarg = sorted(kwargs.iteritems(), key=operator.itemgetter(0))
+ sorted_kwarg = sorted(six.iteritems(kwargs), key=operator.itemgetter(0))
return "simple_unlimited_args_kwargs - Expected result: %s / %s" % (
', '.join([six.text_type(arg) for arg in [one, two] + list(args)]),
', '.join(['%s=%s' % (k, v) for (k, v) in sorted_kwarg])
@@ -221,7 +221,7 @@ inclusion_tag_use_l10n.anything = "Expected inclusion_tag_use_l10n __dict__"
def inclusion_unlimited_args_kwargs(one, two='hi', *args, **kwargs):
"""Expected inclusion_unlimited_args_kwargs __doc__"""
# Sort the dictionary by key to guarantee the order for testing.
- sorted_kwarg = sorted(kwargs.iteritems(), key=operator.itemgetter(0))
+ sorted_kwarg = sorted(six.iteritems(kwargs), key=operator.itemgetter(0))
return {"result": "inclusion_unlimited_args_kwargs - Expected result: %s / %s" % (
', '.join([six.text_type(arg) for arg in [one, two] + list(args)]),
', '.join(['%s=%s' % (k, v) for (k, v) in sorted_kwarg])
@@ -292,7 +292,7 @@ assignment_only_unlimited_args.anything = "Expected assignment_only_unlimited_ar
def assignment_unlimited_args_kwargs(one, two='hi', *args, **kwargs):
"""Expected assignment_unlimited_args_kwargs __doc__"""
# Sort the dictionary by key to guarantee the order for testing.
- sorted_kwarg = sorted(kwargs.iteritems(), key=operator.itemgetter(0))
+ sorted_kwarg = sorted(six.iteritems(kwargs), key=operator.itemgetter(0))
return "assignment_unlimited_args_kwargs - Expected result: %s / %s" % (
', '.join([six.text_type(arg) for arg in [one, two] + list(args)]),
', '.join(['%s=%s' % (k, v) for (k, v) in sorted_kwarg])
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index 402cbb19d2..edbb21b6bd 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -30,6 +30,7 @@ from django.utils import unittest
from django.utils.formats import date_format
from django.utils.translation import activate, deactivate, ugettext as _
from django.utils.safestring import mark_safe
+from django.utils import six
from django.utils.tzinfo import LocalTimezone
from .callables import CallableVariablesTests
@@ -402,7 +403,7 @@ class Templates(unittest.TestCase):
template_tests.update(filter_tests)
cache_loader = setup_test_template_loader(
- dict([(name, t[0]) for name, t in template_tests.iteritems()]),
+ dict([(name, t[0]) for name, t in six.iteritems(template_tests)]),
use_cached_loader=True,
)
diff --git a/tests/regressiontests/test_utils/tests.py b/tests/regressiontests/test_utils/tests.py
index 46479ebe8b..f43a855a59 100644
--- a/tests/regressiontests/test_utils/tests.py
+++ b/tests/regressiontests/test_utils/tests.py
@@ -493,7 +493,7 @@ __test__ = {"API_TEST": r"""
# Standard doctests do fairly
>>> import json
>>> from django.utils.xmlutils import SimplerXMLGenerator
->>> from StringIO import StringIO
+>>> from django.utils.six import StringIO
>>> def produce_long():
... return 42L
diff --git a/tests/regressiontests/utils/baseconv.py b/tests/regressiontests/utils/baseconv.py
index 75660d8119..cc413b4e8e 100644
--- a/tests/regressiontests/utils/baseconv.py
+++ b/tests/regressiontests/utils/baseconv.py
@@ -1,10 +1,11 @@
from unittest import TestCase
from django.utils.baseconv import base2, base16, base36, base56, base62, base64, BaseConverter
+from django.utils.six.moves import xrange
class TestBaseConv(TestCase):
def test_baseconv(self):
- nums = [-10 ** 10, 10 ** 10] + range(-100, 100)
+ nums = [-10 ** 10, 10 ** 10] + list(xrange(-100, 100))
for converter in [base2, base16, base36, base56, base62, base64]:
for i in nums:
self.assertEqual(i, converter.decode(converter.encode(i)))
diff --git a/tests/regressiontests/utils/crypto.py b/tests/regressiontests/utils/crypto.py
index 2bdc5ba530..52a286cb27 100644
--- a/tests/regressiontests/utils/crypto.py
+++ b/tests/regressiontests/utils/crypto.py
@@ -1,4 +1,6 @@
+from __future__ import unicode_literals
+import binascii
import math
import timeit
import hashlib
@@ -108,15 +110,15 @@ class TestUtilsCryptoPBKDF2(unittest.TestCase):
"c4007d5298f9033c0241d5ab69305e7b64eceeb8d"
"834cfec"),
},
- # Check leading zeros are not stripped (#17481)
+ # Check leading zeros are not stripped (#17481)
{
- "args": {
- "password": chr(186),
- "salt": "salt",
- "iterations": 1,
- "dklen": 20,
- "digest": hashlib.sha1,
- },
+ "args": {
+ "password": b'\xba',
+ "salt": "salt",
+ "iterations": 1,
+ "dklen": 20,
+ "digest": hashlib.sha1,
+ },
"result": '0053d3b91a7f1e54effebd6d68771e8a6e0b2c5b',
},
]
@@ -124,12 +126,14 @@ class TestUtilsCryptoPBKDF2(unittest.TestCase):
def test_public_vectors(self):
for vector in self.rfc_vectors:
result = pbkdf2(**vector['args'])
- self.assertEqual(result.encode('hex'), vector['result'])
+ self.assertEqual(binascii.hexlify(result).decode('ascii'),
+ vector['result'])
def test_regression_vectors(self):
for vector in self.regression_vectors:
result = pbkdf2(**vector['args'])
- self.assertEqual(result.encode('hex'), vector['result'])
+ self.assertEqual(binascii.hexlify(result).decode('ascii'),
+ vector['result'])
def test_performance_scalability(self):
"""
@@ -140,11 +144,11 @@ class TestUtilsCryptoPBKDF2(unittest.TestCase):
# to run the test suite and false positives caused by imprecise
# measurement.
n1, n2 = 200000, 800000
- elapsed = lambda f: timeit.Timer(f,
+ elapsed = lambda f: timeit.Timer(f,
'from django.utils.crypto import pbkdf2').timeit(number=1)
t1 = elapsed('pbkdf2("password", "salt", iterations=%d)' % n1)
t2 = elapsed('pbkdf2("password", "salt", iterations=%d)' % n2)
measured_scale_exponent = math.log(t2 / t1, n2 / n1)
- # This should be less than 1. We allow up to 1.2 so that tests don't
+ # This should be less than 1. We allow up to 1.2 so that tests don't
# fail nondeterministically too often.
self.assertLess(measured_scale_exponent, 1.2)
diff --git a/tests/regressiontests/utils/decorators.py b/tests/regressiontests/utils/decorators.py
index 96f4dd4e7a..4d503df026 100644
--- a/tests/regressiontests/utils/decorators.py
+++ b/tests/regressiontests/utils/decorators.py
@@ -105,4 +105,4 @@ class DecoratorFromMiddlewareTests(TestCase):
response.render()
self.assertTrue(getattr(request, 'process_response_reached', False))
# Check that process_response saw the rendered content
- self.assertEqual(request.process_response_content, "Hello world")
+ self.assertEqual(request.process_response_content, b"Hello world")
diff --git a/tests/regressiontests/utils/http.py b/tests/regressiontests/utils/http.py
index 67dcd7af89..f22e05496d 100644
--- a/tests/regressiontests/utils/http.py
+++ b/tests/regressiontests/utils/http.py
@@ -1,10 +1,11 @@
import sys
-from django.utils import http
-from django.utils import unittest
-from django.utils.datastructures import MultiValueDict
from django.http import HttpResponse, utils
from django.test import RequestFactory
+from django.utils.datastructures import MultiValueDict
+from django.utils import http
+from django.utils import six
+from django.utils import unittest
class TestUtilsHttp(unittest.TestCase):
@@ -110,22 +111,23 @@ class TestUtilsHttp(unittest.TestCase):
def test_base36(self):
# reciprocity works
- for n in [0, 1, 1000, 1000000, sys.maxint]:
+ for n in [0, 1, 1000, 1000000]:
self.assertEqual(n, http.base36_to_int(http.int_to_base36(n)))
+ if not six.PY3:
+ self.assertEqual(sys.maxint, http.base36_to_int(http.int_to_base36(sys.maxint)))
# bad input
- for n in [-1, sys.maxint+1, '1', 'foo', {1:2}, (1,2,3)]:
- self.assertRaises(ValueError, http.int_to_base36, n)
-
+ self.assertRaises(ValueError, http.int_to_base36, -1)
+ if not six.PY3:
+ self.assertRaises(ValueError, http.int_to_base36, sys.maxint + 1)
+ for n in ['1', 'foo', {1: 2}, (1, 2, 3), 3.141]:
+ self.assertRaises(TypeError, http.int_to_base36, n)
+
for n in ['#', ' ']:
self.assertRaises(ValueError, http.base36_to_int, n)
-
- for n in [123, {1:2}, (1,2,3)]:
+ for n in [123, {1: 2}, (1, 2, 3), 3.141]:
self.assertRaises(TypeError, http.base36_to_int, n)
- # non-integer input
- self.assertRaises(TypeError, http.int_to_base36, 3.141)
-
# more explicit output testing
for n, b36 in [(0, '0'), (1, '1'), (42, '16'), (818469960, 'django')]:
self.assertEqual(http.int_to_base36(n), b36)
diff --git a/tests/regressiontests/utils/simplelazyobject.py b/tests/regressiontests/utils/simplelazyobject.py
index 960a5e3201..3f81e8f608 100644
--- a/tests/regressiontests/utils/simplelazyobject.py
+++ b/tests/regressiontests/utils/simplelazyobject.py
@@ -19,17 +19,27 @@ class _ComplexObject(object):
def __hash__(self):
return hash(self.name)
- def __str__(self):
- return "I am _ComplexObject(%r)" % self.name
+ if six.PY3:
+ def __bytes__(self):
+ return ("I am _ComplexObject(%r)" % self.name).encode("utf-8")
- def __unicode__(self):
- return six.text_type(self.name)
+ def __str__(self):
+ return self.name
+
+ else:
+ def __str__(self):
+ return b"I am _ComplexObject(%r)" % str(self.name)
+
+ def __unicode__(self):
+ return self.name
def __repr__(self):
return "_ComplexObject(%r)" % self.name
+
complex_object = lambda: _ComplexObject("joe")
+
class TestUtilsSimpleLazyObject(TestCase):
"""
Tests for SimpleLazyObject
@@ -54,11 +64,11 @@ class TestUtilsSimpleLazyObject(TestCase):
# proxy __repr__
self.assertTrue("SimpleLazyObject" in repr(SimpleLazyObject(complex_object)))
- def test_str(self):
- self.assertEqual(str_prefix("I am _ComplexObject(%(_)s'joe')"),
- str(SimpleLazyObject(complex_object)))
+ def test_bytes(self):
+ self.assertEqual(b"I am _ComplexObject('joe')",
+ bytes(SimpleLazyObject(complex_object)))
- def test_unicode(self):
+ def test_text(self):
self.assertEqual("joe", six.text_type(SimpleLazyObject(complex_object)))
def test_class(self):
diff --git a/tests/regressiontests/views/tests/i18n.py b/tests/regressiontests/views/tests/i18n.py
index 9993ae959c..cb580267d2 100644
--- a/tests/regressiontests/views/tests/i18n.py
+++ b/tests/regressiontests/views/tests/i18n.py
@@ -5,6 +5,7 @@ import gettext
from os import path
from django.conf import settings
+from django.core.urlresolvers import reverse
from django.test import TestCase
from django.utils.translation import override, activate, get_language
from django.utils.text import javascript_quote
@@ -23,6 +24,9 @@ class I18NTests(TestCase):
self.assertRedirects(response, 'http://testserver/views/')
self.assertEqual(self.client.session['django_language'], lang_code)
+ def test_setlang_reversal(self):
+ self.assertEqual(reverse('set_language'), '/views/i18n/setlang/')
+
def test_jsi18n(self):
"""The javascript_catalog can be deployed with language settings"""
saved_lang = get_language()