mirror of
https://github.com/django/django.git
synced 2025-10-31 09:41:08 +00:00
Fixed #29038 -- Removed closing slash from HTML void tags.
This commit is contained in:
@@ -39,7 +39,7 @@ def build_tbody_html(pk, href, extra_fields):
|
||||
'<tbody><tr class="row1">'
|
||||
'<td class="action-checkbox">'
|
||||
'<input type="checkbox" name="_selected_action" value="{}" '
|
||||
'class="action-select" /></td>'
|
||||
'class="action-select"></td>'
|
||||
'<th class="field-name"><a href="{}">name</a></th>'
|
||||
'{}</tr></tbody>'
|
||||
).format(pk, href, extra_fields)
|
||||
@@ -209,7 +209,7 @@ class ChangeListTests(TestCase):
|
||||
# make sure that hidden fields are in the correct place
|
||||
hiddenfields_div = (
|
||||
'<div class="hiddenfields">'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" />'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id">'
|
||||
'</div>'
|
||||
) % new_child.id
|
||||
self.assertInHTML(hiddenfields_div, table_output, msg_prefix='Failed to find hidden fields')
|
||||
@@ -217,7 +217,7 @@ class ChangeListTests(TestCase):
|
||||
# make sure that list editable fields are rendered in divs correctly
|
||||
editable_name_field = (
|
||||
'<input name="form-0-name" value="name" class="vTextField" '
|
||||
'maxlength="30" type="text" id="id_form-0-name" />'
|
||||
'maxlength="30" type="text" id="id_form-0-name">'
|
||||
)
|
||||
self.assertInHTML(
|
||||
'<td class="field-name">%s</td>' % editable_name_field,
|
||||
|
||||
@@ -28,7 +28,7 @@ class AdminDocViewTests(TestDataMixin, AdminDocsTestCase):
|
||||
self.client.logout()
|
||||
response = self.client.get(reverse('django-admindocs-docroot'), follow=True)
|
||||
# Should display the login screen
|
||||
self.assertContains(response, '<input type="hidden" name="next" value="/admindocs/" />', html=True)
|
||||
self.assertContains(response, '<input type="hidden" name="next" value="/admindocs/">', html=True)
|
||||
|
||||
def test_bookmarklets(self):
|
||||
response = self.client.get(reverse('django-admindocs-bookmarklets'))
|
||||
|
||||
@@ -161,7 +161,7 @@ class TestInline(TestDataMixin, TestCase):
|
||||
'<img src="/static/admin/img/icon-unknown.svg" '
|
||||
'class="help help-tooltip" width="10" height="10" '
|
||||
'alt="(Awesome tabular help text is awesome.)" '
|
||||
'title="Awesome tabular help text is awesome." />',
|
||||
'title="Awesome tabular help text is awesome.">',
|
||||
1
|
||||
)
|
||||
# ReadOnly fields
|
||||
@@ -171,7 +171,7 @@ class TestInline(TestDataMixin, TestCase):
|
||||
'<img src="/static/admin/img/icon-unknown.svg" '
|
||||
'class="help help-tooltip" width="10" height="10" '
|
||||
'alt="(Help text for ReadOnlyInline)" '
|
||||
'title="Help text for ReadOnlyInline" />',
|
||||
'title="Help text for ReadOnlyInline">',
|
||||
1
|
||||
)
|
||||
|
||||
@@ -184,7 +184,7 @@ class TestInline(TestDataMixin, TestCase):
|
||||
self.assertNotContains(response, '<td class="field-position">')
|
||||
self.assertInHTML(
|
||||
'<input id="id_somechildmodel_set-1-position" '
|
||||
'name="somechildmodel_set-1-position" type="hidden" value="1" />',
|
||||
'name="somechildmodel_set-1-position" type="hidden" value="1">',
|
||||
response.rendered_content,
|
||||
)
|
||||
|
||||
@@ -193,26 +193,26 @@ class TestInline(TestDataMixin, TestCase):
|
||||
Multiple inlines with related_name='+' have correct form prefixes.
|
||||
"""
|
||||
response = self.client.get(reverse('admin:admin_inlines_capofamiglia_add'))
|
||||
self.assertContains(response, '<input type="hidden" name="-1-0-id" id="id_-1-0-id" />', html=True)
|
||||
self.assertContains(response, '<input type="hidden" name="-1-0-id" id="id_-1-0-id">', html=True)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" name="-1-0-capo_famiglia" id="id_-1-0-capo_famiglia" />',
|
||||
'<input type="hidden" name="-1-0-capo_famiglia" id="id_-1-0-capo_famiglia">',
|
||||
html=True
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input id="id_-1-0-name" type="text" class="vTextField" name="-1-0-name" maxlength="100" />',
|
||||
'<input id="id_-1-0-name" type="text" class="vTextField" name="-1-0-name" maxlength="100">',
|
||||
html=True
|
||||
)
|
||||
self.assertContains(response, '<input type="hidden" name="-2-0-id" id="id_-2-0-id" />', html=True)
|
||||
self.assertContains(response, '<input type="hidden" name="-2-0-id" id="id_-2-0-id">', html=True)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" name="-2-0-capo_famiglia" id="id_-2-0-capo_famiglia" />',
|
||||
'<input type="hidden" name="-2-0-capo_famiglia" id="id_-2-0-capo_famiglia">',
|
||||
html=True
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input id="id_-2-0-name" type="text" class="vTextField" name="-2-0-name" maxlength="100" />',
|
||||
'<input id="id_-2-0-name" type="text" class="vTextField" name="-2-0-name" maxlength="100">',
|
||||
html=True
|
||||
)
|
||||
|
||||
@@ -265,12 +265,12 @@ class TestInline(TestDataMixin, TestCase):
|
||||
# ModelAdmin
|
||||
max_forms_input = (
|
||||
'<input id="id_binarytree_set-MAX_NUM_FORMS" '
|
||||
'name="binarytree_set-MAX_NUM_FORMS" type="hidden" value="%d" />'
|
||||
'name="binarytree_set-MAX_NUM_FORMS" type="hidden" value="%d">'
|
||||
)
|
||||
# The total number of forms will remain the same in either case
|
||||
total_forms_hidden = (
|
||||
'<input id="id_binarytree_set-TOTAL_FORMS" '
|
||||
'name="binarytree_set-TOTAL_FORMS" type="hidden" value="2" />'
|
||||
'name="binarytree_set-TOTAL_FORMS" type="hidden" value="2">'
|
||||
)
|
||||
response = self.client.get(reverse('admin:admin_inlines_binarytree_add'))
|
||||
self.assertInHTML(max_forms_input % 3, response.rendered_content)
|
||||
@@ -293,11 +293,11 @@ class TestInline(TestDataMixin, TestCase):
|
||||
modeladmin.inlines = [MinNumInline]
|
||||
min_forms = (
|
||||
'<input id="id_binarytree_set-MIN_NUM_FORMS" '
|
||||
'name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="2" />'
|
||||
'name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="2">'
|
||||
)
|
||||
total_forms = (
|
||||
'<input id="id_binarytree_set-TOTAL_FORMS" '
|
||||
'name="binarytree_set-TOTAL_FORMS" type="hidden" value="5" />'
|
||||
'name="binarytree_set-TOTAL_FORMS" type="hidden" value="5">'
|
||||
)
|
||||
request = self.factory.get(reverse('admin:admin_inlines_binarytree_add'))
|
||||
request.user = User(username='super', is_superuser=True)
|
||||
@@ -322,11 +322,11 @@ class TestInline(TestDataMixin, TestCase):
|
||||
modeladmin.inlines = [MinNumInline]
|
||||
min_forms = (
|
||||
'<input id="id_binarytree_set-MIN_NUM_FORMS" '
|
||||
'name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="%d" />'
|
||||
'name="binarytree_set-MIN_NUM_FORMS" type="hidden" value="%d">'
|
||||
)
|
||||
total_forms = (
|
||||
'<input id="id_binarytree_set-TOTAL_FORMS" '
|
||||
'name="binarytree_set-TOTAL_FORMS" type="hidden" value="%d" />'
|
||||
'name="binarytree_set-TOTAL_FORMS" type="hidden" value="%d">'
|
||||
)
|
||||
request = self.factory.get(reverse('admin:admin_inlines_binarytree_add'))
|
||||
request.user = User(username='super', is_superuser=True)
|
||||
@@ -345,13 +345,13 @@ class TestInline(TestDataMixin, TestCase):
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input id="id_nonautopkbook_set-0-rand_pk" '
|
||||
'name="nonautopkbook_set-0-rand_pk" type="hidden" />',
|
||||
'name="nonautopkbook_set-0-rand_pk" type="hidden">',
|
||||
html=True
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input id="id_nonautopkbook_set-2-0-rand_pk" '
|
||||
'name="nonautopkbook_set-2-0-rand_pk" type="hidden" />',
|
||||
'name="nonautopkbook_set-2-0-rand_pk" type="hidden">',
|
||||
html=True
|
||||
)
|
||||
|
||||
@@ -360,13 +360,13 @@ class TestInline(TestDataMixin, TestCase):
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input id="id_nonautopkbookchild_set-0-nonautopkbook_ptr" '
|
||||
'name="nonautopkbookchild_set-0-nonautopkbook_ptr" type="hidden" />',
|
||||
'name="nonautopkbookchild_set-0-nonautopkbook_ptr" type="hidden">',
|
||||
html=True
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input id="id_nonautopkbookchild_set-2-nonautopkbook_ptr" '
|
||||
'name="nonautopkbookchild_set-2-nonautopkbook_ptr" type="hidden" />',
|
||||
'name="nonautopkbookchild_set-2-nonautopkbook_ptr" type="hidden">',
|
||||
html=True
|
||||
)
|
||||
|
||||
@@ -375,13 +375,13 @@ class TestInline(TestDataMixin, TestCase):
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input class="vIntegerField" id="id_editablepkbook_set-0-manual_pk" '
|
||||
'name="editablepkbook_set-0-manual_pk" type="number" />',
|
||||
'name="editablepkbook_set-0-manual_pk" type="number">',
|
||||
html=True, count=1
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input class="vIntegerField" id="id_editablepkbook_set-2-0-manual_pk" '
|
||||
'name="editablepkbook_set-2-0-manual_pk" type="number" />',
|
||||
'name="editablepkbook_set-2-0-manual_pk" type="number">',
|
||||
html=True, count=1
|
||||
)
|
||||
|
||||
@@ -614,7 +614,7 @@ class TestInlinePermissions(TestCase):
|
||||
self.assertContains(response, '<h2>Inner2s</h2>')
|
||||
self.assertContains(response, 'Add another Inner2')
|
||||
self.assertContains(response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" '
|
||||
'value="3" name="inner2_set-TOTAL_FORMS" />', html=True)
|
||||
'value="3" name="inner2_set-TOTAL_FORMS">', html=True)
|
||||
|
||||
def test_inline_change_m2m_add_perm(self):
|
||||
permission = Permission.objects.get(codename='add_book', content_type=self.book_ct)
|
||||
@@ -634,11 +634,11 @@ class TestInlinePermissions(TestCase):
|
||||
self.assertContains(response, '<h2>Author-book relationships</h2>')
|
||||
self.assertContains(response, 'Add another Author-book relationship')
|
||||
self.assertContains(response, '<input type="hidden" id="id_Author_books-TOTAL_FORMS" '
|
||||
'value="4" name="Author_books-TOTAL_FORMS" />', html=True)
|
||||
'value="4" name="Author_books-TOTAL_FORMS">', html=True)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_Author_books-0-id" value="%i" '
|
||||
'name="Author_books-0-id" />' % self.author_book_auto_m2m_intermediate_id,
|
||||
'name="Author_books-0-id">' % self.author_book_auto_m2m_intermediate_id,
|
||||
html=True
|
||||
)
|
||||
self.assertContains(response, 'id="id_Author_books-0-DELETE"')
|
||||
@@ -654,12 +654,12 @@ class TestInlinePermissions(TestCase):
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="3" '
|
||||
'name="inner2_set-TOTAL_FORMS" />',
|
||||
'name="inner2_set-TOTAL_FORMS">',
|
||||
html=True
|
||||
)
|
||||
self.assertNotContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id,
|
||||
html=True
|
||||
)
|
||||
|
||||
@@ -671,18 +671,18 @@ class TestInlinePermissions(TestCase):
|
||||
self.assertContains(response, '<h2>Inner2s</h2>')
|
||||
# Just the one form for existing instances
|
||||
self.assertContains(
|
||||
response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="1" name="inner2_set-TOTAL_FORMS" />',
|
||||
response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="1" name="inner2_set-TOTAL_FORMS">',
|
||||
html=True
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id,
|
||||
html=True
|
||||
)
|
||||
# max-num 0 means we can't add new ones
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_inner2_set-MAX_NUM_FORMS" value="0" name="inner2_set-MAX_NUM_FORMS" />',
|
||||
'<input type="hidden" id="id_inner2_set-MAX_NUM_FORMS" value="0" name="inner2_set-MAX_NUM_FORMS">',
|
||||
html=True
|
||||
)
|
||||
|
||||
@@ -696,12 +696,12 @@ class TestInlinePermissions(TestCase):
|
||||
self.assertContains(response, '<h2>Inner2s</h2>')
|
||||
# One form for existing instance and three extra for new
|
||||
self.assertContains(
|
||||
response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="4" name="inner2_set-TOTAL_FORMS" />',
|
||||
response, '<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="4" name="inner2_set-TOTAL_FORMS">',
|
||||
html=True
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id,
|
||||
html=True
|
||||
)
|
||||
|
||||
@@ -716,12 +716,12 @@ class TestInlinePermissions(TestCase):
|
||||
# One form for existing instance only, no new
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="1" name="inner2_set-TOTAL_FORMS" />',
|
||||
'<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="1" name="inner2_set-TOTAL_FORMS">',
|
||||
html=True
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id,
|
||||
html=True
|
||||
)
|
||||
self.assertContains(response, 'id="id_inner2_set-0-DELETE"')
|
||||
@@ -739,12 +739,12 @@ class TestInlinePermissions(TestCase):
|
||||
# One form for existing instance only, three for new
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="4" name="inner2_set-TOTAL_FORMS" />',
|
||||
'<input type="hidden" id="id_inner2_set-TOTAL_FORMS" value="4" name="inner2_set-TOTAL_FORMS">',
|
||||
html=True
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id" />' % self.inner2_id,
|
||||
'<input type="hidden" id="id_inner2_set-0-id" value="%i" name="inner2_set-0-id">' % self.inner2_id,
|
||||
html=True
|
||||
)
|
||||
self.assertContains(response, 'id="id_inner2_set-0-DELETE"')
|
||||
|
||||
@@ -163,7 +163,7 @@ class UtilsTests(SimpleTestCase):
|
||||
# Regression test for #13071: NullBooleanField has special
|
||||
# handling.
|
||||
display_value = display_for_field(None, models.NullBooleanField(), self.empty_value)
|
||||
expected = '<img src="%sadmin/img/icon-unknown.svg" alt="None" />' % settings.STATIC_URL
|
||||
expected = '<img src="%sadmin/img/icon-unknown.svg" alt="None">' % settings.STATIC_URL
|
||||
self.assertHTMLEqual(display_value, expected)
|
||||
|
||||
display_value = display_for_field(None, models.DecimalField(), self.empty_value)
|
||||
@@ -204,11 +204,11 @@ class UtilsTests(SimpleTestCase):
|
||||
def test_list_display_for_value_boolean(self):
|
||||
self.assertEqual(
|
||||
display_for_value(True, '', boolean=True),
|
||||
'<img src="/static/admin/img/icon-yes.svg" alt="True" />'
|
||||
'<img src="/static/admin/img/icon-yes.svg" alt="True">'
|
||||
)
|
||||
self.assertEqual(
|
||||
display_for_value(False, '', boolean=True),
|
||||
'<img src="/static/admin/img/icon-no.svg" alt="False" />'
|
||||
'<img src="/static/admin/img/icon-no.svg" alt="False">'
|
||||
)
|
||||
self.assertEqual(display_for_value(True, ''), 'True')
|
||||
self.assertEqual(display_for_value(False, ''), 'False')
|
||||
|
||||
@@ -1027,7 +1027,7 @@ class AdminCustomTemplateTests(AdminViewBasicTestCase):
|
||||
# When a site has multiple passwords in the browser's password manager,
|
||||
# a browser pop up asks which user the new password is for. To prevent
|
||||
# this, the username is added to the change password form.
|
||||
self.assertContains(response, '<input type="text" name="username" value="super" style="display: none" />')
|
||||
self.assertContains(response, '<input type="text" name="username" value="super" style="display: none">')
|
||||
|
||||
def test_extended_bodyclass_template_index(self):
|
||||
"""
|
||||
@@ -2969,8 +2969,8 @@ class AdminViewListEditable(TestCase):
|
||||
self.assertContains(
|
||||
response,
|
||||
'<div class="hiddenfields">\n'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" />'
|
||||
'<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" />\n</div>'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id">'
|
||||
'<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id">\n</div>'
|
||||
% (story2.id, story1.id),
|
||||
html=True
|
||||
)
|
||||
@@ -2999,8 +2999,8 @@ class AdminViewListEditable(TestCase):
|
||||
self.assertContains(
|
||||
response,
|
||||
'<div class="hiddenfields">\n'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" />'
|
||||
'<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" />\n</div>'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id">'
|
||||
'<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id">\n</div>'
|
||||
% (story2.id, story1.id),
|
||||
html=True
|
||||
)
|
||||
@@ -3057,7 +3057,7 @@ class AdminSearchTest(TestCase):
|
||||
"""
|
||||
response = self.client.get(reverse('admin:auth_user_changelist') + '?q=joe&%s=id' % TO_FIELD_VAR)
|
||||
self.assertContains(response, "\n1 user\n")
|
||||
self.assertContains(response, '<input type="hidden" name="%s" value="id"/>' % TO_FIELD_VAR, html=True)
|
||||
self.assertContains(response, '<input type="hidden" name="%s" value="id">' % TO_FIELD_VAR, html=True)
|
||||
|
||||
def test_exact_matches(self):
|
||||
response = self.client.get(reverse('admin:admin_views_recommendation_changelist') + '?q=bar')
|
||||
@@ -4388,10 +4388,10 @@ class ReadonlyTest(AdminFieldExtractionMixin, TestCase):
|
||||
self.assertContains(response, "Unknown coolness.")
|
||||
self.assertContains(response, "foo")
|
||||
|
||||
# Multiline text in a readonly field gets <br /> tags
|
||||
self.assertContains(response, 'Multiline<br />test<br />string')
|
||||
self.assertContains(response, '<div class="readonly">Multiline<br />html<br />content</div>', html=True)
|
||||
self.assertContains(response, 'InlineMultiline<br />test<br />string')
|
||||
# Multiline text in a readonly field gets <br> tags
|
||||
self.assertContains(response, 'Multiline<br>test<br>string')
|
||||
self.assertContains(response, '<div class="readonly">Multiline<br>html<br>content</div>', html=True)
|
||||
self.assertContains(response, 'InlineMultiline<br>test<br>string')
|
||||
|
||||
self.assertContains(response, formats.localize(datetime.date.today() - datetime.timedelta(days=7)))
|
||||
|
||||
@@ -4432,9 +4432,9 @@ class ReadonlyTest(AdminFieldExtractionMixin, TestCase):
|
||||
)
|
||||
response = self.client.get(reverse('admin:admin_views_post_change', args=(p.pk,)))
|
||||
# Checking readonly field.
|
||||
self.assertContains(response, 'test<br /><br />test<br /><br />test<br /><br />test')
|
||||
self.assertContains(response, 'test<br><br>test<br><br>test<br><br>test')
|
||||
# Checking readonly field in inline.
|
||||
self.assertContains(response, 'test<br />link')
|
||||
self.assertContains(response, 'test<br>link')
|
||||
|
||||
def test_readonly_post(self):
|
||||
data = {
|
||||
@@ -5267,7 +5267,7 @@ class AdminViewLogoutTests(TestCase):
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTemplateUsed(response, 'admin/login.html')
|
||||
self.assertEqual(response.request['PATH_INFO'], reverse('admin:login'))
|
||||
self.assertContains(response, '<input type="hidden" name="next" value="%s" />' % reverse('admin:index'))
|
||||
self.assertContains(response, '<input type="hidden" name="next" value="%s">' % reverse('admin:index'))
|
||||
|
||||
|
||||
@override_settings(ROOT_URLCONF='admin_views.urls')
|
||||
|
||||
@@ -274,13 +274,13 @@ class AdminDateWidgetTest(SimpleTestCase):
|
||||
w = widgets.AdminDateWidget()
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', datetime(2007, 12, 1, 9, 30)),
|
||||
'<input value="2007-12-01" type="text" class="vDateField" name="test" size="10" />',
|
||||
'<input value="2007-12-01" type="text" class="vDateField" name="test" size="10">',
|
||||
)
|
||||
# pass attrs to widget
|
||||
w = widgets.AdminDateWidget(attrs={'size': 20, 'class': 'myDateField'})
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', datetime(2007, 12, 1, 9, 30)),
|
||||
'<input value="2007-12-01" type="text" class="myDateField" name="test" size="20" />',
|
||||
'<input value="2007-12-01" type="text" class="myDateField" name="test" size="20">',
|
||||
)
|
||||
|
||||
|
||||
@@ -289,13 +289,13 @@ class AdminTimeWidgetTest(SimpleTestCase):
|
||||
w = widgets.AdminTimeWidget()
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', datetime(2007, 12, 1, 9, 30)),
|
||||
'<input value="09:30:00" type="text" class="vTimeField" name="test" size="8" />',
|
||||
'<input value="09:30:00" type="text" class="vTimeField" name="test" size="8">',
|
||||
)
|
||||
# pass attrs to widget
|
||||
w = widgets.AdminTimeWidget(attrs={'size': 20, 'class': 'myTimeField'})
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', datetime(2007, 12, 1, 9, 30)),
|
||||
'<input value="09:30:00" type="text" class="myTimeField" name="test" size="20" />',
|
||||
'<input value="09:30:00" type="text" class="myTimeField" name="test" size="20">',
|
||||
)
|
||||
|
||||
|
||||
@@ -306,9 +306,9 @@ class AdminSplitDateTimeWidgetTest(SimpleTestCase):
|
||||
w.render('test', datetime(2007, 12, 1, 9, 30)),
|
||||
'<p class="datetime">'
|
||||
'Date: <input value="2007-12-01" type="text" class="vDateField" '
|
||||
'name="test_0" size="10" /><br />'
|
||||
'name="test_0" size="10"><br>'
|
||||
'Time: <input value="09:30:00" type="text" class="vTimeField" '
|
||||
'name="test_1" size="8" /></p>'
|
||||
'name="test_1" size="8"></p>'
|
||||
)
|
||||
|
||||
def test_localization(self):
|
||||
@@ -320,9 +320,9 @@ class AdminSplitDateTimeWidgetTest(SimpleTestCase):
|
||||
w.render('test', datetime(2007, 12, 1, 9, 30)),
|
||||
'<p class="datetime">'
|
||||
'Datum: <input value="01.12.2007" type="text" '
|
||||
'class="vDateField" name="test_0"size="10" /><br />'
|
||||
'class="vDateField" name="test_0"size="10"><br>'
|
||||
'Zeit: <input value="09:30:00" type="text" class="vTimeField" '
|
||||
'name="test_1" size="8" /></p>'
|
||||
'name="test_1" size="8"></p>'
|
||||
)
|
||||
|
||||
|
||||
@@ -331,14 +331,14 @@ class AdminURLWidgetTest(SimpleTestCase):
|
||||
w = widgets.AdminURLFieldWidget()
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', ''),
|
||||
'<input class="vURLField" name="test" type="url" />'
|
||||
'<input class="vURLField" name="test" type="url">'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', 'http://example.com'),
|
||||
'<p class="url">Currently:<a href="http://example.com">'
|
||||
'http://example.com</a><br />'
|
||||
'http://example.com</a><br>'
|
||||
'Change:<input class="vURLField" name="test" type="url" '
|
||||
'value="http://example.com" /></p>'
|
||||
'value="http://example.com"></p>'
|
||||
)
|
||||
|
||||
def test_render_idn(self):
|
||||
@@ -346,9 +346,9 @@ class AdminURLWidgetTest(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', 'http://example-äüö.com'),
|
||||
'<p class="url">Currently: <a href="http://xn--example--7za4pnc.com">'
|
||||
'http://example-äüö.com</a><br />'
|
||||
'http://example-äüö.com</a><br>'
|
||||
'Change:<input class="vURLField" name="test" type="url" '
|
||||
'value="http://example-äüö.com" /></p>'
|
||||
'value="http://example-äüö.com"></p>'
|
||||
)
|
||||
|
||||
def test_render_quoting(self):
|
||||
@@ -420,15 +420,15 @@ class AdminFileWidgetTests(TestDataMixin, TestCase):
|
||||
'<p class="file-upload">Currently: <a href="%(STORAGE_URL)salbums/'
|
||||
r'hybrid_theory.jpg">albums\hybrid_theory.jpg</a> '
|
||||
'<span class="clearable-file-input">'
|
||||
'<input type="checkbox" name="test-clear" id="test-clear_id" /> '
|
||||
'<label for="test-clear_id">Clear</label></span><br />'
|
||||
'Change: <input type="file" name="test" /></p>' % {
|
||||
'<input type="checkbox" name="test-clear" id="test-clear_id"> '
|
||||
'<label for="test-clear_id">Clear</label></span><br>'
|
||||
'Change: <input type="file" name="test"></p>' % {
|
||||
'STORAGE_URL': default_storage.url(''),
|
||||
},
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', SimpleUploadedFile('test', b'content')),
|
||||
'<input type="file" name="test" />',
|
||||
'<input type="file" name="test">',
|
||||
)
|
||||
|
||||
def test_render_required(self):
|
||||
@@ -437,8 +437,8 @@ class AdminFileWidgetTests(TestDataMixin, TestCase):
|
||||
self.assertHTMLEqual(
|
||||
widget.render('test', self.album.cover_art),
|
||||
'<p class="file-upload">Currently: <a href="%(STORAGE_URL)salbums/'
|
||||
r'hybrid_theory.jpg">albums\hybrid_theory.jpg</a><br />'
|
||||
'Change: <input type="file" name="test" /></p>' % {
|
||||
r'hybrid_theory.jpg">albums\hybrid_theory.jpg</a><br>'
|
||||
'Change: <input type="file" name="test"></p>' % {
|
||||
'STORAGE_URL': default_storage.url(''),
|
||||
},
|
||||
)
|
||||
@@ -457,7 +457,7 @@ class AdminFileWidgetTests(TestDataMixin, TestCase):
|
||||
)
|
||||
self.assertNotContains(
|
||||
response,
|
||||
'<input type="file" name="cover_art" id="id_cover_art" />',
|
||||
'<input type="file" name="cover_art" id="id_cover_art">',
|
||||
html=True,
|
||||
)
|
||||
response = self.client.get(reverse('admin:admin_widgets_album_add'))
|
||||
@@ -482,7 +482,7 @@ class ForeignKeyRawIdWidgetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', band.pk, attrs={}),
|
||||
'<input type="text" name="test" value="%(bandpk)s" '
|
||||
'class="vForeignKeyRawIdAdminField" />'
|
||||
'class="vForeignKeyRawIdAdminField">'
|
||||
'<a href="/admin_widgets/band/?_to_field=id" class="related-lookup" '
|
||||
'id="lookup_id_test" title="Lookup"></a> <strong>'
|
||||
'<a href="/admin_widgets/band/%(bandpk)s/change/">Linkin Park</a>'
|
||||
@@ -502,7 +502,7 @@ class ForeignKeyRawIdWidgetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', core.parent_id, attrs={}),
|
||||
'<input type="text" name="test" value="86" '
|
||||
'class="vForeignKeyRawIdAdminField" />'
|
||||
'class="vForeignKeyRawIdAdminField">'
|
||||
'<a href="/admin_widgets/inventory/?_to_field=barcode" '
|
||||
'class="related-lookup" id="lookup_id_test" title="Lookup"></a>'
|
||||
' <strong><a href="/admin_widgets/inventory/%(pk)s/change/">'
|
||||
@@ -519,7 +519,7 @@ class ForeignKeyRawIdWidgetTest(TestCase):
|
||||
w = widgets.ForeignKeyRawIdWidget(rel, widget_admin_site)
|
||||
self.assertHTMLEqual(
|
||||
w.render('honeycomb_widget', big_honeycomb.pk, attrs={}),
|
||||
'<input type="text" name="honeycomb_widget" value="%(hcombpk)s" />'
|
||||
'<input type="text" name="honeycomb_widget" value="%(hcombpk)s">'
|
||||
' <strong>%(hcomb)s</strong>'
|
||||
% {'hcombpk': big_honeycomb.pk, 'hcomb': big_honeycomb}
|
||||
)
|
||||
@@ -534,7 +534,7 @@ class ForeignKeyRawIdWidgetTest(TestCase):
|
||||
w = widgets.ForeignKeyRawIdWidget(rel, widget_admin_site)
|
||||
self.assertHTMLEqual(
|
||||
w.render('individual_widget', subject1.pk, attrs={}),
|
||||
'<input type="text" name="individual_widget" value="%(subj1pk)s" />'
|
||||
'<input type="text" name="individual_widget" value="%(subj1pk)s">'
|
||||
' <strong>%(subj1)s</strong>'
|
||||
% {'subj1pk': subject1.pk, 'subj1': subject1}
|
||||
)
|
||||
@@ -552,7 +552,7 @@ class ForeignKeyRawIdWidgetTest(TestCase):
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', child_of_hidden.parent_id, attrs={}),
|
||||
'<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField" />'
|
||||
'<input type="text" name="test" value="93" class="vForeignKeyRawIdAdminField">'
|
||||
'<a href="/admin_widgets/inventory/?_to_field=barcode" '
|
||||
'class="related-lookup" id="lookup_id_test" title="Lookup"></a>'
|
||||
' <strong><a href="/admin_widgets/inventory/%(pk)s/change/">'
|
||||
@@ -574,7 +574,7 @@ class ManyToManyRawIdWidgetTest(TestCase):
|
||||
w = widgets.ManyToManyRawIdWidget(rel, widget_admin_site)
|
||||
self.assertHTMLEqual(
|
||||
w.render('test', [m1.pk, m2.pk], attrs={}), (
|
||||
'<input type="text" name="test" value="%(m1pk)s,%(m2pk)s" class="vManyToManyRawIdAdminField" />'
|
||||
'<input type="text" name="test" value="%(m1pk)s,%(m2pk)s" class="vManyToManyRawIdAdminField">'
|
||||
'<a href="/admin_widgets/member/" class="related-lookup" id="lookup_id_test" title="Lookup"></a>'
|
||||
) % {'m1pk': m1.pk, 'm2pk': m2.pk}
|
||||
)
|
||||
@@ -599,12 +599,12 @@ class ManyToManyRawIdWidgetTest(TestCase):
|
||||
w = widgets.ManyToManyRawIdWidget(rel, widget_admin_site)
|
||||
self.assertHTMLEqual(
|
||||
w.render('company_widget1', [c1.pk, c2.pk], attrs={}),
|
||||
'<input type="text" name="company_widget1" value="%(c1pk)s,%(c2pk)s" />' % {'c1pk': c1.pk, 'c2pk': c2.pk}
|
||||
'<input type="text" name="company_widget1" value="%(c1pk)s,%(c2pk)s">' % {'c1pk': c1.pk, 'c2pk': c2.pk}
|
||||
)
|
||||
|
||||
self.assertHTMLEqual(
|
||||
w.render('company_widget2', [c1.pk]),
|
||||
'<input type="text" name="company_widget2" value="%(c1pk)s" />' % {'c1pk': c1.pk}
|
||||
'<input type="text" name="company_widget2" value="%(c1pk)s">' % {'c1pk': c1.pk}
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie
|
||||
def post_form_view(request):
|
||||
"""Return a POST form (without a token)."""
|
||||
return HttpResponse(content="""
|
||||
<html><body><h1>\u00a1Unicode!<form method="post"><input type="text" /></form></body></html>
|
||||
<html><body><h1>\u00a1Unicode!<form method="post"><input type="text"></form></body></html>
|
||||
""", mimetype='text/html')
|
||||
|
||||
|
||||
|
||||
@@ -145,7 +145,7 @@ class CharFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_charfield_disabled(self):
|
||||
f = CharField(disabled=True)
|
||||
self.assertWidgetRendersTo(f, '<input type="text" name="f" id="id_f" disabled required />')
|
||||
self.assertWidgetRendersTo(f, '<input type="text" name="f" id="id_f" disabled required>')
|
||||
|
||||
def test_null_characters_prohibited(self):
|
||||
f = CharField()
|
||||
|
||||
@@ -22,7 +22,7 @@ class DateFieldTest(SimpleTestCase):
|
||||
# accept the input from the "as_hidden" rendering as well.
|
||||
self.assertHTMLEqual(
|
||||
a['mydate'].as_hidden(),
|
||||
'<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate" />',
|
||||
'<input type="hidden" name="mydate" value="2008-4-1" id="id_mydate">',
|
||||
)
|
||||
|
||||
b = GetDate({'mydate': '2008-4-1'})
|
||||
|
||||
@@ -11,7 +11,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_decimalfield_1(self):
|
||||
f = DecimalField(max_digits=4, decimal_places=2)
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" step="0.01" type="number" name="f" required />')
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" step="0.01" type="number" name="f" required>')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
f.clean('')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
@@ -78,7 +78,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
)
|
||||
self.assertWidgetRendersTo(
|
||||
f,
|
||||
'<input step="0.01" name="f" min="0.5" max="1.5" type="number" id="id_f" required />',
|
||||
'<input step="0.01" name="f" min="0.5" max="1.5" type="number" id="id_f" required>',
|
||||
)
|
||||
with self.assertRaisesMessage(ValidationError, "'Ensure this value is less than or equal to 1.5.'"):
|
||||
f.clean('1.6')
|
||||
@@ -136,7 +136,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
f = DecimalField(max_digits=20)
|
||||
self.assertEqual(f.widget_attrs(NumberInput()), {'step': 'any'})
|
||||
f = DecimalField(max_digits=6, widget=NumberInput(attrs={'step': '0.01'}))
|
||||
self.assertWidgetRendersTo(f, '<input step="0.01" name="f" type="number" id="id_f" required />')
|
||||
self.assertWidgetRendersTo(f, '<input step="0.01" name="f" type="number" id="id_f" required>')
|
||||
|
||||
def test_decimalfield_localized(self):
|
||||
"""
|
||||
@@ -144,7 +144,7 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
number input specific attributes.
|
||||
"""
|
||||
f = DecimalField(localize=True)
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" name="f" type="text" required />')
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" name="f" type="text" required>')
|
||||
|
||||
def test_decimalfield_changed(self):
|
||||
f = DecimalField(max_digits=2, decimal_places=2)
|
||||
|
||||
@@ -8,7 +8,7 @@ class EmailFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_emailfield_1(self):
|
||||
f = EmailField()
|
||||
self.assertWidgetRendersTo(f, '<input type="email" name="f" id="id_f" required />')
|
||||
self.assertWidgetRendersTo(f, '<input type="email" name="f" id="id_f" required>')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
f.clean('')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
@@ -41,7 +41,7 @@ class EmailFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
f = EmailField(min_length=10, max_length=15)
|
||||
self.assertWidgetRendersTo(
|
||||
f,
|
||||
'<input id="id_f" type="email" name="f" maxlength="15" minlength="10" required />',
|
||||
'<input id="id_f" type="email" name="f" maxlength="15" minlength="10" required>',
|
||||
)
|
||||
with self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 10 characters (it has 9).'"):
|
||||
f.clean('a@foo.com')
|
||||
|
||||
@@ -10,7 +10,7 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_floatfield_1(self):
|
||||
f = FloatField()
|
||||
self.assertWidgetRendersTo(f, '<input step="any" type="number" name="f" id="id_f" required />')
|
||||
self.assertWidgetRendersTo(f, '<input step="any" type="number" name="f" id="id_f" required>')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
f.clean('')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
@@ -49,7 +49,7 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
f = FloatField(max_value=1.5, min_value=0.5)
|
||||
self.assertWidgetRendersTo(
|
||||
f,
|
||||
'<input step="any" name="f" min="0.5" max="1.5" type="number" id="id_f" required />',
|
||||
'<input step="any" name="f" min="0.5" max="1.5" type="number" id="id_f" required>',
|
||||
)
|
||||
with self.assertRaisesMessage(ValidationError, "'Ensure this value is less than or equal to 1.5.'"):
|
||||
f.clean('1.6')
|
||||
@@ -64,7 +64,7 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
f = FloatField(widget=NumberInput(attrs={'step': 0.01, 'max': 1.0, 'min': 0.0}))
|
||||
self.assertWidgetRendersTo(
|
||||
f,
|
||||
'<input step="0.01" name="f" min="0.0" max="1.0" type="number" id="id_f" required />',
|
||||
'<input step="0.01" name="f" min="0.0" max="1.0" type="number" id="id_f" required>',
|
||||
)
|
||||
|
||||
def test_floatfield_localized(self):
|
||||
@@ -73,7 +73,7 @@ class FloatFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
number input specific attributes.
|
||||
"""
|
||||
f = FloatField(localize=True)
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" name="f" type="text" required />')
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" name="f" type="text" required>')
|
||||
|
||||
def test_floatfield_changed(self):
|
||||
f = FloatField()
|
||||
|
||||
@@ -8,7 +8,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_integerfield_1(self):
|
||||
f = IntegerField()
|
||||
self.assertWidgetRendersTo(f, '<input type="number" name="f" id="id_f" required />')
|
||||
self.assertWidgetRendersTo(f, '<input type="number" name="f" id="id_f" required>')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
f.clean('')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
@@ -50,7 +50,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_integerfield_3(self):
|
||||
f = IntegerField(max_value=10)
|
||||
self.assertWidgetRendersTo(f, '<input max="10" type="number" name="f" id="id_f" required />')
|
||||
self.assertWidgetRendersTo(f, '<input max="10" type="number" name="f" id="id_f" required>')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
f.clean(None)
|
||||
self.assertEqual(1, f.clean(1))
|
||||
@@ -65,7 +65,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_integerfield_4(self):
|
||||
f = IntegerField(min_value=10)
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" type="number" name="f" min="10" required />')
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" type="number" name="f" min="10" required>')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
f.clean(None)
|
||||
with self.assertRaisesMessage(ValidationError, "'Ensure this value is greater than or equal to 10.'"):
|
||||
@@ -79,7 +79,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_integerfield_5(self):
|
||||
f = IntegerField(min_value=10, max_value=20)
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" max="20" type="number" name="f" min="10" required />')
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" max="20" type="number" name="f" min="10" required>')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
f.clean(None)
|
||||
with self.assertRaisesMessage(ValidationError, "'Ensure this value is greater than or equal to 10.'"):
|
||||
@@ -100,7 +100,7 @@ class IntegerFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
number input specific attributes.
|
||||
"""
|
||||
f1 = IntegerField(localize=True)
|
||||
self.assertWidgetRendersTo(f1, '<input id="id_f" name="f" type="text" required />')
|
||||
self.assertWidgetRendersTo(f1, '<input id="id_f" name="f" type="text" required>')
|
||||
|
||||
def test_integerfield_float(self):
|
||||
f = IntegerField()
|
||||
|
||||
@@ -128,15 +128,15 @@ class MultiValueFieldTest(SimpleTestCase):
|
||||
form.as_table(),
|
||||
"""
|
||||
<tr><th><label for="id_field1_0">Field1:</label></th>
|
||||
<td><input type="text" name="field1_0" id="id_field1_0" required />
|
||||
<td><input type="text" name="field1_0" id="id_field1_0" required>
|
||||
<select multiple name="field1_1" id="id_field1_1" required>
|
||||
<option value="J">John</option>
|
||||
<option value="P">Paul</option>
|
||||
<option value="G">George</option>
|
||||
<option value="R">Ringo</option>
|
||||
</select>
|
||||
<input type="text" name="field1_2_0" id="id_field1_2_0" required />
|
||||
<input type="text" name="field1_2_1" id="id_field1_2_1" required /></td></tr>
|
||||
<input type="text" name="field1_2_0" id="id_field1_2_0" required>
|
||||
<input type="text" name="field1_2_1" id="id_field1_2_1" required></td></tr>
|
||||
""",
|
||||
)
|
||||
|
||||
@@ -151,15 +151,15 @@ class MultiValueFieldTest(SimpleTestCase):
|
||||
form.as_table(),
|
||||
"""
|
||||
<tr><th><label for="id_field1_0">Field1:</label></th>
|
||||
<td><input type="text" name="field1_0" value="some text" id="id_field1_0" required />
|
||||
<td><input type="text" name="field1_0" value="some text" id="id_field1_0" required>
|
||||
<select multiple name="field1_1" id="id_field1_1" required>
|
||||
<option value="J" selected>John</option>
|
||||
<option value="P" selected>Paul</option>
|
||||
<option value="G">George</option>
|
||||
<option value="R">Ringo</option>
|
||||
</select>
|
||||
<input type="text" name="field1_2_0" value="2007-04-25" id="id_field1_2_0" required />
|
||||
<input type="text" name="field1_2_1" value="06:24:00" id="id_field1_2_1" required /></td></tr>
|
||||
<input type="text" name="field1_2_0" value="2007-04-25" id="id_field1_2_0" required>
|
||||
<input type="text" name="field1_2_1" value="06:24:00" id="id_field1_2_1" required></td></tr>
|
||||
""",
|
||||
)
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@ class NullBooleanFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
hidden_nullbool2 = NullBooleanField(widget=HiddenInput, initial=False)
|
||||
f = HiddenNullBooleanForm()
|
||||
self.assertHTMLEqual(
|
||||
'<input type="hidden" name="hidden_nullbool1" value="True" id="id_hidden_nullbool1" />'
|
||||
'<input type="hidden" name="hidden_nullbool2" value="False" id="id_hidden_nullbool2" />',
|
||||
'<input type="hidden" name="hidden_nullbool1" value="True" id="id_hidden_nullbool1">'
|
||||
'<input type="hidden" name="hidden_nullbool2" value="False" id="id_hidden_nullbool2">',
|
||||
str(f)
|
||||
)
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ class URLFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_urlfield_1(self):
|
||||
f = URLField()
|
||||
self.assertWidgetRendersTo(f, '<input type="url" name="f" id="id_f" required />')
|
||||
self.assertWidgetRendersTo(f, '<input type="url" name="f" id="id_f" required>')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
f.clean('')
|
||||
with self.assertRaisesMessage(ValidationError, "'This field is required.'"):
|
||||
@@ -88,7 +88,7 @@ class URLFieldTest(FormFieldAssertionsMixin, SimpleTestCase):
|
||||
|
||||
def test_urlfield_5(self):
|
||||
f = URLField(min_length=15, max_length=20)
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" type="url" name="f" maxlength="20" minlength="15" required />')
|
||||
self.assertWidgetRendersTo(f, '<input id="id_f" type="url" name="f" maxlength="20" minlength="15" required>')
|
||||
with self.assertRaisesMessage(ValidationError, "'Ensure this value has at least 15 characters (it has 12).'"):
|
||||
f.clean('http://f.com')
|
||||
self.assertEqual('http://example.com', f.clean('http://example.com'))
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -87,12 +87,12 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
formset = self.make_choiceformset()
|
||||
self.assertHTMLEqual(
|
||||
str(formset),
|
||||
"""<input type="hidden" name="choices-TOTAL_FORMS" value="1" />
|
||||
<input type="hidden" name="choices-INITIAL_FORMS" value="0" />
|
||||
<input type="hidden" name="choices-MIN_NUM_FORMS" value="0" />
|
||||
<input type="hidden" name="choices-MAX_NUM_FORMS" value="1000" />
|
||||
<tr><th>Choice:</th><td><input type="text" name="choices-0-choice" /></td></tr>
|
||||
<tr><th>Votes:</th><td><input type="number" name="choices-0-votes" /></td></tr>"""
|
||||
"""<input type="hidden" name="choices-TOTAL_FORMS" value="1">
|
||||
<input type="hidden" name="choices-INITIAL_FORMS" value="0">
|
||||
<input type="hidden" name="choices-MIN_NUM_FORMS" value="0">
|
||||
<input type="hidden" name="choices-MAX_NUM_FORMS" value="1000">
|
||||
<tr><th>Choice:</th><td><input type="text" name="choices-0-choice"></td></tr>
|
||||
<tr><th>Votes:</th><td><input type="number" name="choices-0-votes"></td></tr>"""
|
||||
)
|
||||
# FormSet are treated similarly to Forms. FormSet has an is_valid()
|
||||
# method, and a cleaned_data or errors attribute depending on whether
|
||||
@@ -199,10 +199,10 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
form_output.append(form.as_ul())
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" /></li>"""
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100"></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes"></li>"""
|
||||
)
|
||||
|
||||
def test_blank_form_unfilled(self):
|
||||
@@ -244,12 +244,12 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
form_output.append(form.as_ul())
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" /></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" /></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes" /></li>"""
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes"></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes"></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes"></li>"""
|
||||
)
|
||||
# Since every form was displayed as blank, they are also accepted as
|
||||
# blank. This may seem a little strange, but min_num is used to require
|
||||
@@ -285,10 +285,10 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
self.assertTrue(formset.forms[1].empty_permitted)
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" /></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" /></li>"""
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes"></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes"></li>"""
|
||||
)
|
||||
|
||||
def test_min_num_displaying_more_than_one_blank_form_with_zero_extra(self):
|
||||
@@ -300,12 +300,12 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
form_output.append(form.as_ul())
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" /></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" /></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes" /></li>"""
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes"></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes"></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes"></li>"""
|
||||
)
|
||||
|
||||
def test_single_form_completed(self):
|
||||
@@ -439,21 +439,21 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
form_output.append(form.as_ul())
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" /></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes" /></li>
|
||||
<li>Choice: <input type="text" name="choices-3-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-3-votes" /></li>"""
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100"></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes"></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes"></li>
|
||||
<li>Choice: <input type="text" name="choices-3-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-3-votes"></li>"""
|
||||
)
|
||||
# Retrieving an empty form works. Tt shows up in the form list.
|
||||
self.assertTrue(formset.empty_form.empty_permitted)
|
||||
self.assertHTMLEqual(
|
||||
formset.empty_form.as_ul(),
|
||||
"""<li>Choice: <input type="text" name="choices-__prefix__-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-__prefix__-votes" /></li>"""
|
||||
"""<li>Choice: <input type="text" name="choices-__prefix__-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-__prefix__-votes"></li>"""
|
||||
)
|
||||
|
||||
def test_formset_with_deletion(self):
|
||||
@@ -470,15 +470,15 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
form_output.append(form.as_ul())
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-0-DELETE" /></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" value="Fergie" /></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" value="900" /></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-1-DELETE" /></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes" /></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-2-DELETE" /></li>"""
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100"></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-0-DELETE"></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" value="Fergie"></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" value="900"></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-1-DELETE"></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes"></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-2-DELETE"></li>"""
|
||||
)
|
||||
# To delete something, set that form's special delete field to 'on'.
|
||||
# Let's go ahead and delete Fergie.
|
||||
@@ -580,15 +580,15 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
form_output.append(form.as_ul())
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li>
|
||||
<li>Order: <input type="number" name="choices-0-ORDER" value="1" /></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" value="Fergie" /></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" value="900" /></li>
|
||||
<li>Order: <input type="number" name="choices-1-ORDER" value="2" /></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes" /></li>
|
||||
<li>Order: <input type="number" name="choices-2-ORDER" /></li>"""
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100"></li>
|
||||
<li>Order: <input type="number" name="choices-0-ORDER" value="1"></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" value="Fergie"></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" value="900"></li>
|
||||
<li>Order: <input type="number" name="choices-1-ORDER" value="2"></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes"></li>
|
||||
<li>Order: <input type="number" name="choices-2-ORDER"></li>"""
|
||||
)
|
||||
data = {
|
||||
'choices-TOTAL_FORMS': '3', # the number of forms rendered
|
||||
@@ -684,22 +684,22 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
form_output.append(form.as_ul())
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li>
|
||||
<li>Order: <input type="number" name="choices-0-ORDER" value="1" /></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-0-DELETE" /></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" value="Fergie" /></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" value="900" /></li>
|
||||
<li>Order: <input type="number" name="choices-1-ORDER" value="2" /></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-1-DELETE" /></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice" value="The Decemberists" /></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes" value="500" /></li>
|
||||
<li>Order: <input type="number" name="choices-2-ORDER" value="3" /></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-2-DELETE" /></li>
|
||||
<li>Choice: <input type="text" name="choices-3-choice" /></li>
|
||||
<li>Votes: <input type="number" name="choices-3-votes" /></li>
|
||||
<li>Order: <input type="number" name="choices-3-ORDER" /></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-3-DELETE" /></li>"""
|
||||
"""<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100"></li>
|
||||
<li>Order: <input type="number" name="choices-0-ORDER" value="1"></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-0-DELETE"></li>
|
||||
<li>Choice: <input type="text" name="choices-1-choice" value="Fergie"></li>
|
||||
<li>Votes: <input type="number" name="choices-1-votes" value="900"></li>
|
||||
<li>Order: <input type="number" name="choices-1-ORDER" value="2"></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-1-DELETE"></li>
|
||||
<li>Choice: <input type="text" name="choices-2-choice" value="The Decemberists"></li>
|
||||
<li>Votes: <input type="number" name="choices-2-votes" value="500"></li>
|
||||
<li>Order: <input type="number" name="choices-2-ORDER" value="3"></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-2-DELETE"></li>
|
||||
<li>Choice: <input type="text" name="choices-3-choice"></li>
|
||||
<li>Votes: <input type="number" name="choices-3-votes"></li>
|
||||
<li>Order: <input type="number" name="choices-3-ORDER"></li>
|
||||
<li>Delete: <input type="checkbox" name="choices-3-DELETE"></li>"""
|
||||
)
|
||||
# Let's delete Fergie, and put The Decemberists ahead of Calexico.
|
||||
data = {
|
||||
@@ -803,11 +803,11 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<tr><th><label for="id_form-0-name">Name:</label></th>
|
||||
<td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>
|
||||
<td><input type="text" name="form-0-name" id="id_form-0-name"></td></tr>
|
||||
<tr><th><label for="id_form-1-name">Name:</label></th>
|
||||
<td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>
|
||||
<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>
|
||||
<tr><th><label for="id_form-2-name">Name:</label></th>
|
||||
<td><input type="text" name="form-2-name" id="id_form-2-name" /></td></tr>"""
|
||||
<td><input type="text" name="form-2-name" id="id_form-2-name"></td></tr>"""
|
||||
)
|
||||
# If max_num is 0 then no form is rendered at all.
|
||||
LimitedFavoriteDrinkFormSet = formset_factory(FavoriteDrinkForm, extra=3, max_num=0)
|
||||
@@ -826,9 +826,9 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<tr><th><label for="id_form-0-name">Name:</label></th><td>
|
||||
<input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>
|
||||
<input type="text" name="form-0-name" id="id_form-0-name"></td></tr>
|
||||
<tr><th><label for="id_form-1-name">Name:</label></th>
|
||||
<td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>"""
|
||||
<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>"""
|
||||
)
|
||||
|
||||
def test_limiting_extra_lest_than_max_num(self):
|
||||
@@ -841,7 +841,7 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<tr><th><label for="id_form-0-name">Name:</label></th>
|
||||
<td><input type="text" name="form-0-name" id="id_form-0-name" /></td></tr>"""
|
||||
<td><input type="text" name="form-0-name" id="id_form-0-name"></td></tr>"""
|
||||
)
|
||||
|
||||
def test_max_num_with_initial_data(self):
|
||||
@@ -860,9 +860,9 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<tr><th><label for="id_form-0-name">Name:</label></th>
|
||||
<td><input type="text" name="form-0-name" value="Fernet and Coke" id="id_form-0-name" /></td></tr>
|
||||
<td><input type="text" name="form-0-name" value="Fernet and Coke" id="id_form-0-name"></td></tr>
|
||||
<tr><th><label for="id_form-1-name">Name:</label></th>
|
||||
<td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>"""
|
||||
<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>"""
|
||||
)
|
||||
|
||||
def test_max_num_zero(self):
|
||||
@@ -891,9 +891,9 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<tr><th><label for="id_form-0-name">Name:</label></th>
|
||||
<td><input id="id_form-0-name" name="form-0-name" type="text" value="Fernet and Coke" /></td></tr>
|
||||
<td><input id="id_form-0-name" name="form-0-name" type="text" value="Fernet and Coke"></td></tr>
|
||||
<tr><th><label for="id_form-1-name">Name:</label></th>
|
||||
<td><input id="id_form-1-name" name="form-1-name" type="text" value="Bloody Mary" /></td></tr>"""
|
||||
<td><input id="id_form-1-name" name="form-1-name" type="text" value="Bloody Mary"></td></tr>"""
|
||||
)
|
||||
|
||||
def test_more_initial_than_max_num(self):
|
||||
@@ -914,11 +914,11 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<tr><th><label for="id_form-0-name">Name:</label></th>
|
||||
<td><input id="id_form-0-name" name="form-0-name" type="text" value="Gin Tonic" /></td></tr>
|
||||
<td><input id="id_form-0-name" name="form-0-name" type="text" value="Gin Tonic"></td></tr>
|
||||
<tr><th><label for="id_form-1-name">Name:</label></th>
|
||||
<td><input id="id_form-1-name" name="form-1-name" type="text" value="Bloody Mary" /></td></tr>
|
||||
<td><input id="id_form-1-name" name="form-1-name" type="text" value="Bloody Mary"></td></tr>
|
||||
<tr><th><label for="id_form-2-name">Name:</label></th>
|
||||
<td><input id="id_form-2-name" name="form-2-name" type="text" value="Jack and Coke" /></td></tr>"""
|
||||
<td><input id="id_form-2-name" name="form-2-name" type="text" value="Jack and Coke"></td></tr>"""
|
||||
)
|
||||
|
||||
def test_more_initial_form_result_in_one(self):
|
||||
@@ -937,9 +937,9 @@ class FormsFormsetTestCase(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
'\n'.join(form_output),
|
||||
"""<tr><th><label for="id_form-0-name">Name:</label></th>
|
||||
<td><input type="text" name="form-0-name" value="Gin Tonic" id="id_form-0-name" /></td></tr>
|
||||
<td><input type="text" name="form-0-name" value="Gin Tonic" id="id_form-0-name"></td></tr>
|
||||
<tr><th><label for="id_form-1-name">Name:</label></th>
|
||||
<td><input type="text" name="form-1-name" id="id_form-1-name" /></td></tr>"""
|
||||
<td><input type="text" name="form-1-name" id="id_form-1-name"></td></tr>"""
|
||||
)
|
||||
|
||||
def test_management_form_prefix(self):
|
||||
@@ -1195,36 +1195,36 @@ class FormsetAsFooTests(SimpleTestCase):
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertHTMLEqual(
|
||||
formset.as_table(),
|
||||
"""<input type="hidden" name="choices-TOTAL_FORMS" value="1" />
|
||||
<input type="hidden" name="choices-INITIAL_FORMS" value="0" />
|
||||
<input type="hidden" name="choices-MIN_NUM_FORMS" value="0" />
|
||||
<input type="hidden" name="choices-MAX_NUM_FORMS" value="0" />
|
||||
<tr><th>Choice:</th><td><input type="text" name="choices-0-choice" value="Calexico" /></td></tr>
|
||||
<tr><th>Votes:</th><td><input type="number" name="choices-0-votes" value="100" /></td></tr>"""
|
||||
"""<input type="hidden" name="choices-TOTAL_FORMS" value="1">
|
||||
<input type="hidden" name="choices-INITIAL_FORMS" value="0">
|
||||
<input type="hidden" name="choices-MIN_NUM_FORMS" value="0">
|
||||
<input type="hidden" name="choices-MAX_NUM_FORMS" value="0">
|
||||
<tr><th>Choice:</th><td><input type="text" name="choices-0-choice" value="Calexico"></td></tr>
|
||||
<tr><th>Votes:</th><td><input type="number" name="choices-0-votes" value="100"></td></tr>"""
|
||||
)
|
||||
|
||||
def test_as_p(self):
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertHTMLEqual(
|
||||
formset.as_p(),
|
||||
"""<input type="hidden" name="choices-TOTAL_FORMS" value="1" />
|
||||
<input type="hidden" name="choices-INITIAL_FORMS" value="0" />
|
||||
<input type="hidden" name="choices-MIN_NUM_FORMS" value="0" />
|
||||
<input type="hidden" name="choices-MAX_NUM_FORMS" value="0" />
|
||||
<p>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></p>
|
||||
<p>Votes: <input type="number" name="choices-0-votes" value="100" /></p>"""
|
||||
"""<input type="hidden" name="choices-TOTAL_FORMS" value="1">
|
||||
<input type="hidden" name="choices-INITIAL_FORMS" value="0">
|
||||
<input type="hidden" name="choices-MIN_NUM_FORMS" value="0">
|
||||
<input type="hidden" name="choices-MAX_NUM_FORMS" value="0">
|
||||
<p>Choice: <input type="text" name="choices-0-choice" value="Calexico"></p>
|
||||
<p>Votes: <input type="number" name="choices-0-votes" value="100"></p>"""
|
||||
)
|
||||
|
||||
def test_as_ul(self):
|
||||
formset = ChoiceFormSet(data, auto_id=False, prefix='choices')
|
||||
self.assertHTMLEqual(
|
||||
formset.as_ul(),
|
||||
"""<input type="hidden" name="choices-TOTAL_FORMS" value="1" />
|
||||
<input type="hidden" name="choices-INITIAL_FORMS" value="0" />
|
||||
<input type="hidden" name="choices-MIN_NUM_FORMS" value="0" />
|
||||
<input type="hidden" name="choices-MAX_NUM_FORMS" value="0" />
|
||||
<li>Choice: <input type="text" name="choices-0-choice" value="Calexico" /></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100" /></li>"""
|
||||
"""<input type="hidden" name="choices-TOTAL_FORMS" value="1">
|
||||
<input type="hidden" name="choices-INITIAL_FORMS" value="0">
|
||||
<input type="hidden" name="choices-MIN_NUM_FORMS" value="0">
|
||||
<input type="hidden" name="choices-MAX_NUM_FORMS" value="0">
|
||||
<li>Choice: <input type="text" name="choices-0-choice" value="Calexico"></li>
|
||||
<li>Votes: <input type="number" name="choices-0-votes" value="100"></li>"""
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ class FormsI18nTests(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
f.as_p(),
|
||||
'<p><label for="id_username">username:</label>'
|
||||
'<input id="id_username" type="text" name="username" maxlength="10" required /></p>'
|
||||
'<input id="id_username" type="text" name="username" maxlength="10" required></p>'
|
||||
)
|
||||
|
||||
# Translations are done at rendering time, so multi-lingual apps can define forms)
|
||||
@@ -23,13 +23,13 @@ class FormsI18nTests(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
f.as_p(),
|
||||
'<p><label for="id_username">Benutzername:</label>'
|
||||
'<input id="id_username" type="text" name="username" maxlength="10" required /></p>'
|
||||
'<input id="id_username" type="text" name="username" maxlength="10" required></p>'
|
||||
)
|
||||
with translation.override('pl'):
|
||||
self.assertHTMLEqual(
|
||||
f.as_p(),
|
||||
'<p><label for="id_username">u\u017cytkownik:</label>'
|
||||
'<input id="id_username" type="text" name="username" maxlength="10" required /></p>'
|
||||
'<input id="id_username" type="text" name="username" maxlength="10" required></p>'
|
||||
)
|
||||
|
||||
def test_non_ascii_label(self):
|
||||
@@ -59,12 +59,12 @@ class FormsI18nTests(SimpleTestCase):
|
||||
'<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label>'
|
||||
'<ul id="id_somechoice">\n'
|
||||
'<li><label for="id_somechoice_0">'
|
||||
'<input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" required /> '
|
||||
'<input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" required> '
|
||||
'En tied\xe4</label></li>\n'
|
||||
'<li><label for="id_somechoice_1">'
|
||||
'<input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" required /> '
|
||||
'<input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" required> '
|
||||
'Mies</label></li>\n<li><label for="id_somechoice_2">'
|
||||
'<input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" required /> '
|
||||
'<input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" required> '
|
||||
'Nainen</label></li>\n</ul></p>'
|
||||
)
|
||||
|
||||
@@ -78,12 +78,12 @@ class FormsI18nTests(SimpleTestCase):
|
||||
'\u043d\u043e\u0435 \u043f\u043e\u043b\u0435.</li></ul>\n'
|
||||
'<p><label for="id_somechoice_0">\xc5\xf8\xdf:</label>'
|
||||
' <ul id="id_somechoice">\n<li><label for="id_somechoice_0">'
|
||||
'<input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" required /> '
|
||||
'<input type="radio" id="id_somechoice_0" value="\xc5" name="somechoice" required> '
|
||||
'En tied\xe4</label></li>\n'
|
||||
'<li><label for="id_somechoice_1">'
|
||||
'<input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" required /> '
|
||||
'<input type="radio" id="id_somechoice_1" value="\xf8" name="somechoice" required> '
|
||||
'Mies</label></li>\n<li><label for="id_somechoice_2">'
|
||||
'<input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" required /> '
|
||||
'<input type="radio" id="id_somechoice_2" value="\xdf" name="somechoice" required> '
|
||||
'Nainen</label></li>\n</ul></p>'
|
||||
)
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
)
|
||||
self.assertEqual(
|
||||
str(m),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>"""
|
||||
@@ -40,8 +40,8 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
m3 = Media(Foo)
|
||||
self.assertEqual(
|
||||
str(m3),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>"""
|
||||
@@ -72,8 +72,8 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
w1 = MyWidget1()
|
||||
self.assertEqual(
|
||||
str(w1.media),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>"""
|
||||
@@ -82,8 +82,8 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
# Media objects can be interrogated by media type
|
||||
self.assertEqual(
|
||||
str(w1.media['css']),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />"""
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">"""
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
@@ -122,9 +122,9 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
w3 = MyWidget3()
|
||||
self.assertEqual(
|
||||
str(w1.media + w2.media + w3.media),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
@@ -134,8 +134,8 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
# media addition hasn't affected the original objects
|
||||
self.assertEqual(
|
||||
str(w1.media),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>"""
|
||||
@@ -150,7 +150,7 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
js = ('/path/to/js1', '/path/to/js1')
|
||||
|
||||
w4 = MyWidget4()
|
||||
self.assertEqual(str(w4.media), """<link href="/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
self.assertEqual(str(w4.media), """<link href="/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>""")
|
||||
|
||||
def test_media_property(self):
|
||||
@@ -165,7 +165,7 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
media = property(_media)
|
||||
|
||||
w4 = MyWidget4()
|
||||
self.assertEqual(str(w4.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet" />
|
||||
self.assertEqual(str(w4.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/some/js"></script>""")
|
||||
|
||||
# Media properties can reference the media of their parents
|
||||
@@ -175,8 +175,8 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
media = property(_media)
|
||||
|
||||
w5 = MyWidget5()
|
||||
self.assertEqual(str(w5.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/other/path" type="text/css" media="all" rel="stylesheet" />
|
||||
self.assertEqual(str(w5.media), """<link href="/some/path" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/other/path" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/some/js"></script>
|
||||
<script type="text/javascript" src="/other/js"></script>""")
|
||||
|
||||
@@ -198,9 +198,9 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
w6 = MyWidget6()
|
||||
self.assertEqual(
|
||||
str(w6.media),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/other/path" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/other/path" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
@@ -226,8 +226,8 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
w7 = MyWidget7()
|
||||
self.assertEqual(
|
||||
str(w7.media),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>"""
|
||||
@@ -244,9 +244,9 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
w8 = MyWidget8()
|
||||
self.assertEqual(
|
||||
str(w8.media),
|
||||
"""<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
@@ -278,8 +278,8 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
w9 = MyWidget9()
|
||||
self.assertEqual(
|
||||
str(w9.media),
|
||||
"""<link href="/some/path" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/other/path" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="/some/path" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/other/path" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/some/js"></script>
|
||||
<script type="text/javascript" src="/other/js"></script>"""
|
||||
)
|
||||
@@ -294,8 +294,8 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
js = ('/path/to/js1', '/path/to/js4')
|
||||
|
||||
w10 = MyWidget10()
|
||||
self.assertEqual(str(w10.media), """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
self.assertEqual(str(w10.media), """<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="/path/to/js4"></script>""")
|
||||
|
||||
@@ -319,9 +319,9 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
w11 = MyWidget11()
|
||||
self.assertEqual(
|
||||
str(w11.media),
|
||||
"""<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
@@ -348,9 +348,9 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
w12 = MyWidget12()
|
||||
self.assertEqual(
|
||||
str(w12.media),
|
||||
"""<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="/path/to/js4"></script>"""
|
||||
)
|
||||
@@ -373,10 +373,10 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
multimedia = MultimediaWidget()
|
||||
self.assertEqual(
|
||||
str(multimedia.media),
|
||||
"""<link href="/file4" type="text/css" media="print" rel="stylesheet" />
|
||||
<link href="/file3" type="text/css" media="screen" rel="stylesheet" />
|
||||
<link href="/file1" type="text/css" media="screen, print" rel="stylesheet" />
|
||||
<link href="/file2" type="text/css" media="screen, print" rel="stylesheet" />
|
||||
"""<link href="/file4" type="text/css" media="print" rel="stylesheet">
|
||||
<link href="/file3" type="text/css" media="screen" rel="stylesheet">
|
||||
<link href="/file1" type="text/css" media="screen, print" rel="stylesheet">
|
||||
<link href="/file2" type="text/css" media="screen, print" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="/path/to/js4"></script>"""
|
||||
)
|
||||
@@ -417,9 +417,9 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
mymulti = MyMultiWidget()
|
||||
self.assertEqual(
|
||||
str(mymulti.media),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
@@ -459,9 +459,9 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
f1 = MyForm()
|
||||
self.assertEqual(
|
||||
str(f1.media),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
@@ -474,9 +474,9 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
f2 = AnotherForm()
|
||||
self.assertEqual(
|
||||
str(f1.media + f2.media),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
@@ -496,10 +496,10 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
f3 = FormWithMedia()
|
||||
self.assertEqual(
|
||||
str(f3.media),
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/some/form/css" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
@@ -515,10 +515,10 @@ class FormsMediaTestCase(SimpleTestCase):
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
<script type="text/javascript" src="/path/to/js4"></script>
|
||||
<script type="text/javascript" src="/some/form/javascript"></script>"""
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />"""
|
||||
"""<link href="http://media.example.com/static/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css3" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/some/form/css" type="text/css" media="all" rel="stylesheet">"""
|
||||
)
|
||||
|
||||
def test_html_safe(self):
|
||||
|
||||
@@ -109,24 +109,24 @@ class ModelFormCallableModelDefault(TestCase):
|
||||
<option value="1" selected>ChoiceOption 1</option>
|
||||
<option value="2">ChoiceOption 2</option>
|
||||
<option value="3">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-choice" value="1" id="initial-id_choice" /></p>
|
||||
</select><input type="hidden" name="initial-choice" value="1" id="initial-id_choice"></p>
|
||||
<p><label for="id_choice_int">Choice int:</label> <select name="choice_int" id="id_choice_int">
|
||||
<option value="1" selected>ChoiceOption 1</option>
|
||||
<option value="2">ChoiceOption 2</option>
|
||||
<option value="3">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-choice_int" value="1" id="initial-id_choice_int" /></p>
|
||||
</select><input type="hidden" name="initial-choice_int" value="1" id="initial-id_choice_int"></p>
|
||||
<p><label for="id_multi_choice">Multi choice:</label>
|
||||
<select multiple name="multi_choice" id="id_multi_choice" required>
|
||||
<option value="1" selected>ChoiceOption 1</option>
|
||||
<option value="2">ChoiceOption 2</option>
|
||||
<option value="3">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-multi_choice" value="1" id="initial-id_multi_choice_0" /></p>
|
||||
</select><input type="hidden" name="initial-multi_choice" value="1" id="initial-id_multi_choice_0"></p>
|
||||
<p><label for="id_multi_choice_int">Multi choice int:</label>
|
||||
<select multiple name="multi_choice_int" id="id_multi_choice_int" required>
|
||||
<option value="1" selected>ChoiceOption 1</option>
|
||||
<option value="2">ChoiceOption 2</option>
|
||||
<option value="3">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-multi_choice_int" value="1" id="initial-id_multi_choice_int_0" /></p>"""
|
||||
</select><input type="hidden" name="initial-multi_choice_int" value="1" id="initial-id_multi_choice_int_0"></p>"""
|
||||
)
|
||||
|
||||
def test_initial_instance_value(self):
|
||||
@@ -145,26 +145,26 @@ class ModelFormCallableModelDefault(TestCase):
|
||||
<option value="1">ChoiceOption 1</option>
|
||||
<option value="2" selected>ChoiceOption 2</option>
|
||||
<option value="3">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-choice" value="2" id="initial-id_choice" /></p>
|
||||
</select><input type="hidden" name="initial-choice" value="2" id="initial-id_choice"></p>
|
||||
<p><label for="id_choice_int">Choice int:</label> <select name="choice_int" id="id_choice_int">
|
||||
<option value="1">ChoiceOption 1</option>
|
||||
<option value="2" selected>ChoiceOption 2</option>
|
||||
<option value="3">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-choice_int" value="2" id="initial-id_choice_int" /></p>
|
||||
</select><input type="hidden" name="initial-choice_int" value="2" id="initial-id_choice_int"></p>
|
||||
<p><label for="id_multi_choice">Multi choice:</label>
|
||||
<select multiple name="multi_choice" id="id_multi_choice" required>
|
||||
<option value="1">ChoiceOption 1</option>
|
||||
<option value="2" selected>ChoiceOption 2</option>
|
||||
<option value="3" selected>ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-multi_choice" value="2" id="initial-id_multi_choice_0" />
|
||||
<input type="hidden" name="initial-multi_choice" value="3" id="initial-id_multi_choice_1" /></p>
|
||||
</select><input type="hidden" name="initial-multi_choice" value="2" id="initial-id_multi_choice_0">
|
||||
<input type="hidden" name="initial-multi_choice" value="3" id="initial-id_multi_choice_1"></p>
|
||||
<p><label for="id_multi_choice_int">Multi choice int:</label>
|
||||
<select multiple name="multi_choice_int" id="id_multi_choice_int" required>
|
||||
<option value="1">ChoiceOption 1</option>
|
||||
<option value="2" selected>ChoiceOption 2</option>
|
||||
<option value="3" selected>ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-multi_choice_int" value="2" id="initial-id_multi_choice_int_0" />
|
||||
<input type="hidden" name="initial-multi_choice_int" value="3" id="initial-id_multi_choice_int_1" /></p>"""
|
||||
</select><input type="hidden" name="initial-multi_choice_int" value="2" id="initial-id_multi_choice_int_0">
|
||||
<input type="hidden" name="initial-multi_choice_int" value="3" id="initial-id_multi_choice_int_1"></p>"""
|
||||
)
|
||||
|
||||
|
||||
@@ -308,7 +308,7 @@ class EmptyLabelTestCase(TestCase):
|
||||
f = EmptyCharLabelChoiceForm()
|
||||
self.assertHTMLEqual(
|
||||
f.as_p(),
|
||||
"""<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required /></p>
|
||||
"""<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required></p>
|
||||
<p><label for="id_choice">Choice:</label> <select id="id_choice" name="choice">
|
||||
<option value="" selected>No Preference</option>
|
||||
<option value="f">Foo</option>
|
||||
@@ -320,7 +320,7 @@ class EmptyLabelTestCase(TestCase):
|
||||
f = EmptyCharLabelNoneChoiceForm()
|
||||
self.assertHTMLEqual(
|
||||
f.as_p(),
|
||||
"""<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required /></p>
|
||||
"""<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required></p>
|
||||
<p><label for="id_choice_string_w_none">Choice string w none:</label>
|
||||
<select id="id_choice_string_w_none" name="choice_string_w_none">
|
||||
<option value="" selected>No Preference</option>
|
||||
@@ -350,7 +350,7 @@ class EmptyLabelTestCase(TestCase):
|
||||
f = EmptyIntegerLabelChoiceForm()
|
||||
self.assertHTMLEqual(
|
||||
f.as_p(),
|
||||
"""<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required /></p>
|
||||
"""<p><label for="id_name">Name:</label> <input id="id_name" maxlength="10" name="name" type="text" required></p>
|
||||
<p><label for="id_choice_integer">Choice integer:</label>
|
||||
<select id="id_choice_integer" name="choice_integer">
|
||||
<option value="" selected>No Preference</option>
|
||||
@@ -370,7 +370,7 @@ class EmptyLabelTestCase(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
f.as_p(),
|
||||
"""<p><label for="id_name">Name:</label>
|
||||
<input id="id_name" maxlength="10" name="name" type="text" value="none-test" required /></p>
|
||||
<input id="id_name" maxlength="10" name="name" type="text" value="none-test" required></p>
|
||||
<p><label for="id_choice_integer">Choice integer:</label>
|
||||
<select id="id_choice_integer" name="choice_integer">
|
||||
<option value="" selected>No Preference</option>
|
||||
@@ -384,7 +384,7 @@ class EmptyLabelTestCase(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
f.as_p(),
|
||||
"""<p><label for="id_name">Name:</label>
|
||||
<input id="id_name" maxlength="10" name="name" type="text" value="foo-test" required /></p>
|
||||
<input id="id_name" maxlength="10" name="name" type="text" value="foo-test" required></p>
|
||||
<p><label for="id_choice_integer">Choice integer:</label>
|
||||
<select id="id_choice_integer" name="choice_integer">
|
||||
<option value="">No Preference</option>
|
||||
|
||||
@@ -7,18 +7,18 @@ class CheckboxInputTest(WidgetTest):
|
||||
widget = CheckboxInput()
|
||||
|
||||
def test_render_empty(self):
|
||||
self.check_html(self.widget, 'is_cool', '', html='<input type="checkbox" name="is_cool" />')
|
||||
self.check_html(self.widget, 'is_cool', '', html='<input type="checkbox" name="is_cool">')
|
||||
|
||||
def test_render_none(self):
|
||||
self.check_html(self.widget, 'is_cool', None, html='<input type="checkbox" name="is_cool" />')
|
||||
self.check_html(self.widget, 'is_cool', None, html='<input type="checkbox" name="is_cool">')
|
||||
|
||||
def test_render_false(self):
|
||||
self.check_html(self.widget, 'is_cool', False, html='<input type="checkbox" name="is_cool" />')
|
||||
self.check_html(self.widget, 'is_cool', False, html='<input type="checkbox" name="is_cool">')
|
||||
|
||||
def test_render_true(self):
|
||||
self.check_html(
|
||||
self.widget, 'is_cool', True,
|
||||
html='<input checked type="checkbox" name="is_cool" />'
|
||||
html='<input checked type="checkbox" name="is_cool">'
|
||||
)
|
||||
|
||||
def test_render_value(self):
|
||||
@@ -28,7 +28,7 @@ class CheckboxInputTest(WidgetTest):
|
||||
"""
|
||||
self.check_html(
|
||||
self.widget, 'is_cool', 'foo',
|
||||
html='<input checked type="checkbox" name="is_cool" value="foo" />',
|
||||
html='<input checked type="checkbox" name="is_cool" value="foo">',
|
||||
)
|
||||
|
||||
def test_render_int(self):
|
||||
@@ -37,11 +37,11 @@ class CheckboxInputTest(WidgetTest):
|
||||
"""
|
||||
self.check_html(
|
||||
self.widget, 'is_cool', 0,
|
||||
html='<input checked type="checkbox" name="is_cool" value="0" />',
|
||||
html='<input checked type="checkbox" name="is_cool" value="0">',
|
||||
)
|
||||
self.check_html(
|
||||
self.widget, 'is_cool', 1,
|
||||
html='<input checked type="checkbox" name="is_cool" value="1" />',
|
||||
html='<input checked type="checkbox" name="is_cool" value="1">',
|
||||
)
|
||||
|
||||
def test_render_check_test(self):
|
||||
@@ -51,16 +51,16 @@ class CheckboxInputTest(WidgetTest):
|
||||
"""
|
||||
widget = CheckboxInput(check_test=lambda value: value.startswith('hello'))
|
||||
self.check_html(widget, 'greeting', '', html=(
|
||||
'<input type="checkbox" name="greeting" />'
|
||||
'<input type="checkbox" name="greeting">'
|
||||
))
|
||||
self.check_html(widget, 'greeting', 'hello', html=(
|
||||
'<input checked type="checkbox" name="greeting" value="hello" />'
|
||||
'<input checked type="checkbox" name="greeting" value="hello">'
|
||||
))
|
||||
self.check_html(widget, 'greeting', 'hello there', html=(
|
||||
'<input checked type="checkbox" name="greeting" value="hello there" />'
|
||||
'<input checked type="checkbox" name="greeting" value="hello there">'
|
||||
))
|
||||
self.check_html(widget, 'greeting', 'hello & goodbye', html=(
|
||||
'<input checked type="checkbox" name="greeting" value="hello & goodbye" />'
|
||||
'<input checked type="checkbox" name="greeting" value="hello & goodbye">'
|
||||
))
|
||||
|
||||
def test_render_check_exception(self):
|
||||
|
||||
@@ -13,20 +13,20 @@ class CheckboxSelectMultipleTest(WidgetTest):
|
||||
def test_render_value(self):
|
||||
self.check_html(self.widget(choices=self.beatles), 'beatles', ['J'], html=(
|
||||
"""<ul>
|
||||
<li><label><input checked type="checkbox" name="beatles" value="J" /> John</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
|
||||
<li><label><input checked type="checkbox" name="beatles" value="J"> John</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="P"> Paul</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="G"> George</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="R"> Ringo</label></li>
|
||||
</ul>"""
|
||||
))
|
||||
|
||||
def test_render_value_multiple(self):
|
||||
self.check_html(self.widget(choices=self.beatles), 'beatles', ['J', 'P'], html=(
|
||||
"""<ul>
|
||||
<li><label><input checked type="checkbox" name="beatles" value="J" /> John</label></li>
|
||||
<li><label><input checked type="checkbox" name="beatles" value="P" /> Paul</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
|
||||
<li><label><input checked type="checkbox" name="beatles" value="J"> John</label></li>
|
||||
<li><label><input checked type="checkbox" name="beatles" value="P"> Paul</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="G"> George</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="R"> Ringo</label></li>
|
||||
</ul>"""
|
||||
))
|
||||
|
||||
@@ -36,10 +36,10 @@ class CheckboxSelectMultipleTest(WidgetTest):
|
||||
"""
|
||||
self.check_html(self.widget(choices=self.beatles), 'beatles', None, html=(
|
||||
"""<ul>
|
||||
<li><label><input type="checkbox" name="beatles" value="J" /> John</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="P" /> Paul</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="G" /> George</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="R" /> Ringo</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="J"> John</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="P"> Paul</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="G"> George</label></li>
|
||||
<li><label><input type="checkbox" name="beatles" value="R"> Ringo</label></li>
|
||||
</ul>"""
|
||||
))
|
||||
|
||||
@@ -52,25 +52,25 @@ class CheckboxSelectMultipleTest(WidgetTest):
|
||||
html = """
|
||||
<ul id="media">
|
||||
<li>
|
||||
<label for="media_0"><input id="media_0" name="nestchoice" type="checkbox" value="unknown" /> Unknown</label>
|
||||
<label for="media_0"><input id="media_0" name="nestchoice" type="checkbox" value="unknown"> Unknown</label>
|
||||
</li>
|
||||
<li>Audio<ul id="media_1">
|
||||
<li>
|
||||
<label for="media_1_0">
|
||||
<input checked id="media_1_0" name="nestchoice" type="checkbox" value="vinyl" /> Vinyl
|
||||
<input checked id="media_1_0" name="nestchoice" type="checkbox" value="vinyl"> Vinyl
|
||||
</label>
|
||||
</li>
|
||||
<li>
|
||||
<label for="media_1_1"><input id="media_1_1" name="nestchoice" type="checkbox" value="cd" /> CD</label>
|
||||
<label for="media_1_1"><input id="media_1_1" name="nestchoice" type="checkbox" value="cd"> CD</label>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>Video<ul id="media_2">
|
||||
<li>
|
||||
<label for="media_2_0"><input id="media_2_0" name="nestchoice" type="checkbox" value="vhs" /> VHS</label>
|
||||
<label for="media_2_0"><input id="media_2_0" name="nestchoice" type="checkbox" value="vhs"> VHS</label>
|
||||
</li>
|
||||
<li>
|
||||
<label for="media_2_1">
|
||||
<input checked id="media_2_1" name="nestchoice" type="checkbox" value="dvd" /> DVD
|
||||
<input checked id="media_2_1" name="nestchoice" type="checkbox" value="dvd"> DVD
|
||||
</label>
|
||||
</li>
|
||||
</ul></li>
|
||||
@@ -90,25 +90,25 @@ class CheckboxSelectMultipleTest(WidgetTest):
|
||||
html = """
|
||||
<ul>
|
||||
<li>
|
||||
<label><input name="nestchoice" type="checkbox" value="unknown" /> Unknown</label>
|
||||
<label><input name="nestchoice" type="checkbox" value="unknown"> Unknown</label>
|
||||
</li>
|
||||
<li>Audio<ul>
|
||||
<li>
|
||||
<label>
|
||||
<input checked name="nestchoice" type="checkbox" value="vinyl" /> Vinyl
|
||||
<input checked name="nestchoice" type="checkbox" value="vinyl"> Vinyl
|
||||
</label>
|
||||
</li>
|
||||
<li>
|
||||
<label><input name="nestchoice" type="checkbox" value="cd" /> CD</label>
|
||||
<label><input name="nestchoice" type="checkbox" value="cd"> CD</label>
|
||||
</li>
|
||||
</ul></li>
|
||||
<li>Video<ul>
|
||||
<li>
|
||||
<label><input name="nestchoice" type="checkbox" value="vhs" /> VHS</label>
|
||||
<label><input name="nestchoice" type="checkbox" value="vhs"> VHS</label>
|
||||
</li>
|
||||
<li>
|
||||
<label>
|
||||
<input checked name="nestchoice" type="checkbox" value="dvd" /> DVD
|
||||
<input checked name="nestchoice" type="checkbox" value="dvd"> DVD
|
||||
</label>
|
||||
</li>
|
||||
</ul></li>
|
||||
@@ -124,11 +124,11 @@ class CheckboxSelectMultipleTest(WidgetTest):
|
||||
html = """
|
||||
<ul id="abc">
|
||||
<li>
|
||||
<label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0" /> A</label>
|
||||
<label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0"> A</label>
|
||||
</li>
|
||||
<li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li>
|
||||
<li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1"> B</label></li>
|
||||
<li>
|
||||
<label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2" /> C</label>
|
||||
<label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2"> C</label>
|
||||
</li>
|
||||
</ul>
|
||||
"""
|
||||
@@ -142,11 +142,11 @@ class CheckboxSelectMultipleTest(WidgetTest):
|
||||
html = """
|
||||
<ul id="abc">
|
||||
<li>
|
||||
<label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0" /> A</label>
|
||||
<label for="abc_0"><input checked type="checkbox" name="letters" value="a" id="abc_0"> A</label>
|
||||
</li>
|
||||
<li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1" /> B</label></li>
|
||||
<li><label for="abc_1"><input type="checkbox" name="letters" value="b" id="abc_1"> B</label></li>
|
||||
<li>
|
||||
<label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2" /> C</label>
|
||||
<label for="abc_2"><input checked type="checkbox" name="letters" value="c" id="abc_2"> C</label>
|
||||
</li>
|
||||
</ul>
|
||||
"""
|
||||
@@ -161,9 +161,9 @@ class CheckboxSelectMultipleTest(WidgetTest):
|
||||
]
|
||||
html = """
|
||||
<ul>
|
||||
<li><label><input type="checkbox" name="numbers" value="1" /> One</label></li>
|
||||
<li><label><input type="checkbox" name="numbers" value="1000" /> One thousand</label></li>
|
||||
<li><label><input type="checkbox" name="numbers" value="1000000" /> One million</label></li>
|
||||
<li><label><input type="checkbox" name="numbers" value="1"> One</label></li>
|
||||
<li><label><input type="checkbox" name="numbers" value="1000"> One thousand</label></li>
|
||||
<li><label><input type="checkbox" name="numbers" value="1000000"> One million</label></li>
|
||||
</ul>
|
||||
"""
|
||||
self.check_html(self.widget(choices=choices), 'numbers', None, html=html)
|
||||
@@ -174,8 +174,8 @@ class CheckboxSelectMultipleTest(WidgetTest):
|
||||
]
|
||||
html = """
|
||||
<ul>
|
||||
<li><label><input type="checkbox" name="times" value="00:00:00" /> midnight</label></li>
|
||||
<li><label><input type="checkbox" name="times" value="12:00:00" /> noon</label></li>
|
||||
<li><label><input type="checkbox" name="times" value="00:00:00"> midnight</label></li>
|
||||
<li><label><input type="checkbox" name="times" value="12:00:00"> noon</label></li>
|
||||
</ul>
|
||||
"""
|
||||
self.check_html(self.widget(choices=choices), 'times', None, html=html)
|
||||
|
||||
@@ -26,9 +26,9 @@ class ClearableFileInputTest(WidgetTest):
|
||||
self.check_html(self.widget, 'myfile', FakeFieldFile(), html=(
|
||||
"""
|
||||
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" />
|
||||
<input type="checkbox" name="myfile-clear" id="myfile-clear_id">
|
||||
<label for="myfile-clear_id">Clear</label><br>
|
||||
Change: <input type="file" name="myfile">
|
||||
"""
|
||||
))
|
||||
|
||||
@@ -47,9 +47,9 @@ class ClearableFileInputTest(WidgetTest):
|
||||
"""
|
||||
Currently: <a href="something?chapter=1&sect=2&copy=3&lang=en">
|
||||
something<div onclick="alert('oops')">.jpg</a>
|
||||
<input type="checkbox" name="my<div>file-clear" id="my<div>file-clear_id" />
|
||||
<label for="my<div>file-clear_id">Clear</label><br />
|
||||
Change: <input type="file" name="my<div>file" />
|
||||
<input type="checkbox" name="my<div>file-clear" id="my<div>file-clear_id">
|
||||
<label for="my<div>file-clear_id">Clear</label><br>
|
||||
Change: <input type="file" name="my<div>file">
|
||||
"""
|
||||
))
|
||||
|
||||
@@ -62,8 +62,8 @@ class ClearableFileInputTest(WidgetTest):
|
||||
widget.is_required = True
|
||||
self.check_html(widget, 'myfile', FakeFieldFile(), html=(
|
||||
"""
|
||||
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">
|
||||
"""
|
||||
))
|
||||
|
||||
@@ -72,7 +72,7 @@ class ClearableFileInputTest(WidgetTest):
|
||||
A ClearableFileInput instantiated with no initial value does not render
|
||||
a clear checkbox.
|
||||
"""
|
||||
self.check_html(self.widget, 'myfile', None, html='<input type="file" name="myfile" />')
|
||||
self.check_html(self.widget, 'myfile', None, html='<input type="file" name="myfile">')
|
||||
|
||||
def test_render_as_subwidget(self):
|
||||
"""A ClearableFileInput as a subwidget of MultiWidget."""
|
||||
@@ -80,9 +80,9 @@ class ClearableFileInputTest(WidgetTest):
|
||||
self.check_html(widget, 'myfile', [FakeFieldFile()], html=(
|
||||
"""
|
||||
Currently: <a href="something">something</a>
|
||||
<input type="checkbox" name="myfile_0-clear" id="myfile_0-clear_id" />
|
||||
<label for="myfile_0-clear_id">Clear</label><br />
|
||||
Change: <input type="file" name="myfile_0" />
|
||||
<input type="checkbox" name="myfile_0-clear" id="myfile_0-clear_id">
|
||||
<label for="myfile_0-clear_id">Clear</label><br>
|
||||
Change: <input type="file" name="myfile_0">
|
||||
"""
|
||||
))
|
||||
|
||||
@@ -148,7 +148,7 @@ class ClearableFileInputTest(WidgetTest):
|
||||
return 'value'
|
||||
|
||||
html = self.widget.render('myfile', NoURLFieldFile())
|
||||
self.assertHTMLEqual(html, '<input name="myfile" type="file" />')
|
||||
self.assertHTMLEqual(html, '<input name="myfile" type="file">')
|
||||
|
||||
def test_use_required_attribute(self):
|
||||
# False when initial data exists. The file input is left blank by the
|
||||
|
||||
@@ -11,15 +11,15 @@ class DateInputTest(WidgetTest):
|
||||
widget = DateInput()
|
||||
|
||||
def test_render_none(self):
|
||||
self.check_html(self.widget, 'date', None, html='<input type="text" name="date" />')
|
||||
self.check_html(self.widget, 'date', None, html='<input type="text" name="date">')
|
||||
|
||||
def test_render_value(self):
|
||||
d = date(2007, 9, 17)
|
||||
self.assertEqual(str(d), '2007-09-17')
|
||||
|
||||
self.check_html(self.widget, 'date', d, html='<input type="text" name="date" value="2007-09-17" />')
|
||||
self.check_html(self.widget, 'date', d, html='<input type="text" name="date" value="2007-09-17">')
|
||||
self.check_html(self.widget, 'date', date(2007, 9, 17), html=(
|
||||
'<input type="text" name="date" value="2007-09-17" />'
|
||||
'<input type="text" name="date" value="2007-09-17">'
|
||||
))
|
||||
|
||||
def test_string(self):
|
||||
@@ -27,7 +27,7 @@ class DateInputTest(WidgetTest):
|
||||
Should be able to initialize from a string value.
|
||||
"""
|
||||
self.check_html(self.widget, 'date', '2007-09-17', html=(
|
||||
'<input type="text" name="date" value="2007-09-17" />'
|
||||
'<input type="text" name="date" value="2007-09-17">'
|
||||
))
|
||||
|
||||
def test_format(self):
|
||||
@@ -36,12 +36,12 @@ class DateInputTest(WidgetTest):
|
||||
"""
|
||||
d = date(2007, 9, 17)
|
||||
widget = DateInput(format='%d/%m/%Y', attrs={'type': 'date'})
|
||||
self.check_html(widget, 'date', d, html='<input type="date" name="date" value="17/09/2007" />')
|
||||
self.check_html(widget, 'date', d, html='<input type="date" name="date" value="17/09/2007">')
|
||||
|
||||
@override_settings(USE_L10N=True)
|
||||
@translation.override('de-at')
|
||||
def test_l10n(self):
|
||||
self.check_html(
|
||||
self.widget, 'date', date(2007, 9, 17),
|
||||
html='<input type="text" name="date" value="17.09.2007" />',
|
||||
html='<input type="text" name="date" value="17.09.2007">',
|
||||
)
|
||||
|
||||
@@ -11,7 +11,7 @@ class DateTimeInputTest(WidgetTest):
|
||||
widget = DateTimeInput()
|
||||
|
||||
def test_render_none(self):
|
||||
self.check_html(self.widget, 'date', None, '<input type="text" name="date" />')
|
||||
self.check_html(self.widget, 'date', None, '<input type="text" name="date">')
|
||||
|
||||
def test_render_value(self):
|
||||
"""
|
||||
@@ -20,13 +20,13 @@ class DateTimeInputTest(WidgetTest):
|
||||
d = datetime(2007, 9, 17, 12, 51, 34, 482548)
|
||||
self.assertEqual(str(d), '2007-09-17 12:51:34.482548')
|
||||
self.check_html(self.widget, 'date', d, html=(
|
||||
'<input type="text" name="date" value="2007-09-17 12:51:34" />'
|
||||
'<input type="text" name="date" value="2007-09-17 12:51:34">'
|
||||
))
|
||||
self.check_html(self.widget, 'date', datetime(2007, 9, 17, 12, 51, 34), html=(
|
||||
'<input type="text" name="date" value="2007-09-17 12:51:34" />'
|
||||
'<input type="text" name="date" value="2007-09-17 12:51:34">'
|
||||
))
|
||||
self.check_html(self.widget, 'date', datetime(2007, 9, 17, 12, 51), html=(
|
||||
'<input type="text" name="date" value="2007-09-17 12:51:00" />'
|
||||
'<input type="text" name="date" value="2007-09-17 12:51:00">'
|
||||
))
|
||||
|
||||
def test_render_formatted(self):
|
||||
@@ -37,14 +37,14 @@ class DateTimeInputTest(WidgetTest):
|
||||
format='%d/%m/%Y %H:%M', attrs={'type': 'datetime'},
|
||||
)
|
||||
d = datetime(2007, 9, 17, 12, 51, 34, 482548)
|
||||
self.check_html(widget, 'date', d, html='<input type="datetime" name="date" value="17/09/2007 12:51" />')
|
||||
self.check_html(widget, 'date', d, html='<input type="datetime" name="date" value="17/09/2007 12:51">')
|
||||
|
||||
@override_settings(USE_L10N=True)
|
||||
@translation.override('de-at')
|
||||
def test_l10n(self):
|
||||
d = datetime(2007, 9, 17, 12, 51, 34, 482548)
|
||||
self.check_html(self.widget, 'date', d, html=(
|
||||
'<input type="text" name="date" value="17.09.2007 12:51:34" />'
|
||||
'<input type="text" name="date" value="17.09.2007 12:51:34">'
|
||||
))
|
||||
|
||||
@override_settings(USE_L10N=True)
|
||||
@@ -54,10 +54,10 @@ class DateTimeInputTest(WidgetTest):
|
||||
with self.settings(USE_L10N=False):
|
||||
self.check_html(
|
||||
self.widget, 'date', d,
|
||||
html='<input type="text" name="date" value="2007-09-17 12:51:34" />',
|
||||
html='<input type="text" name="date" value="2007-09-17 12:51:34">',
|
||||
)
|
||||
with translation.override('es'):
|
||||
self.check_html(
|
||||
self.widget, 'date', d,
|
||||
html='<input type="text" name="date" value="17/09/2007 12:51:34" />',
|
||||
html='<input type="text" name="date" value="17/09/2007 12:51:34">',
|
||||
)
|
||||
|
||||
@@ -11,9 +11,9 @@ class FileInputTest(WidgetTest):
|
||||
FileInput widgets never render the value attribute. The old value
|
||||
isn't useful if a form is updated or an error occurred.
|
||||
"""
|
||||
self.check_html(self.widget, 'email', 'test@example.com', html='<input type="file" name="email" />')
|
||||
self.check_html(self.widget, 'email', '', html='<input type="file" name="email" />')
|
||||
self.check_html(self.widget, 'email', None, html='<input type="file" name="email" />')
|
||||
self.check_html(self.widget, 'email', 'test@example.com', html='<input type="file" name="email">')
|
||||
self.check_html(self.widget, 'email', '', html='<input type="file" name="email">')
|
||||
self.check_html(self.widget, 'email', None, html='<input type="file" name="email">')
|
||||
|
||||
def test_value_omitted_from_data(self):
|
||||
self.assertIs(self.widget.value_omitted_from_data({}, {}, 'field'), True)
|
||||
|
||||
@@ -7,7 +7,7 @@ class HiddenInputTest(WidgetTest):
|
||||
widget = HiddenInput()
|
||||
|
||||
def test_render(self):
|
||||
self.check_html(self.widget, 'email', '', html='<input type="hidden" name="email" />')
|
||||
self.check_html(self.widget, 'email', '', html='<input type="hidden" name="email">')
|
||||
|
||||
def test_use_required_attribute(self):
|
||||
# Always False to avoid browser validation on inputs hidden from the
|
||||
|
||||
@@ -8,8 +8,8 @@ class InputTests(WidgetTest):
|
||||
def test_attrs_with_type(self):
|
||||
attrs = {'type': 'date'}
|
||||
widget = Input(attrs)
|
||||
self.check_html(widget, 'name', 'value', '<input type="date" name="name" value="value" />')
|
||||
self.check_html(widget, 'name', 'value', '<input type="date" name="name" value="value">')
|
||||
# reuse the same attrs for another widget
|
||||
self.check_html(Input(attrs), 'name', 'value', '<input type="date" name="name" value="value" />')
|
||||
self.check_html(Input(attrs), 'name', 'value', '<input type="date" name="name" value="value">')
|
||||
attrs['type'] = 'number' # shouldn't change the widget type
|
||||
self.check_html(widget, 'name', 'value', '<input type="date" name="name" value="value" />')
|
||||
self.check_html(widget, 'name', 'value', '<input type="date" name="name" value="value">')
|
||||
|
||||
@@ -9,30 +9,30 @@ class MultipleHiddenInputTest(WidgetTest):
|
||||
def test_render_single(self):
|
||||
self.check_html(
|
||||
self.widget, 'email', ['test@example.com'],
|
||||
html='<input type="hidden" name="email" value="test@example.com" />',
|
||||
html='<input type="hidden" name="email" value="test@example.com">',
|
||||
)
|
||||
|
||||
def test_render_multiple(self):
|
||||
self.check_html(
|
||||
self.widget, 'email', ['test@example.com', 'foo@example.com'],
|
||||
html=(
|
||||
'<input type="hidden" name="email" value="test@example.com" />\n'
|
||||
'<input type="hidden" name="email" value="foo@example.com" />'
|
||||
'<input type="hidden" name="email" value="test@example.com">\n'
|
||||
'<input type="hidden" name="email" value="foo@example.com">'
|
||||
),
|
||||
)
|
||||
|
||||
def test_render_attrs(self):
|
||||
self.check_html(
|
||||
self.widget, 'email', ['test@example.com'], attrs={'class': 'fun'},
|
||||
html='<input type="hidden" name="email" value="test@example.com" class="fun" />',
|
||||
html='<input type="hidden" name="email" value="test@example.com" class="fun">',
|
||||
)
|
||||
|
||||
def test_render_attrs_multiple(self):
|
||||
self.check_html(
|
||||
self.widget, 'email', ['test@example.com', 'foo@example.com'], attrs={'class': 'fun'},
|
||||
html=(
|
||||
'<input type="hidden" name="email" value="test@example.com" class="fun" />\n'
|
||||
'<input type="hidden" name="email" value="foo@example.com" 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">'
|
||||
),
|
||||
)
|
||||
|
||||
@@ -41,18 +41,18 @@ class MultipleHiddenInputTest(WidgetTest):
|
||||
self.check_html(widget, 'email', [], '')
|
||||
self.check_html(
|
||||
widget, 'email', ['foo@example.com'],
|
||||
html='<input type="hidden" class="fun" value="foo@example.com" name="email" />',
|
||||
html='<input type="hidden" class="fun" value="foo@example.com" name="email">',
|
||||
)
|
||||
self.check_html(
|
||||
widget, 'email', ['foo@example.com', 'test@example.com'],
|
||||
html=(
|
||||
'<input type="hidden" class="fun" value="foo@example.com" name="email" />\n'
|
||||
'<input type="hidden" class="fun" value="test@example.com" name="email" />'
|
||||
'<input type="hidden" class="fun" value="foo@example.com" name="email">\n'
|
||||
'<input type="hidden" class="fun" value="test@example.com" name="email">'
|
||||
),
|
||||
)
|
||||
self.check_html(
|
||||
widget, 'email', ['foo@example.com'], attrs={'class': 'special'},
|
||||
html='<input type="hidden" class="special" value="foo@example.com" name="email" />',
|
||||
html='<input type="hidden" class="special" value="foo@example.com" name="email">',
|
||||
)
|
||||
|
||||
def test_render_empty(self):
|
||||
@@ -68,8 +68,8 @@ class MultipleHiddenInputTest(WidgetTest):
|
||||
self.check_html(
|
||||
self.widget, 'letters', ['a', 'b', 'c'], attrs={'id': 'hideme'},
|
||||
html=(
|
||||
'<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" />'
|
||||
'<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">'
|
||||
),
|
||||
)
|
||||
|
||||
@@ -88,16 +88,16 @@ class MultiWidgetTest(WidgetTest):
|
||||
)
|
||||
)
|
||||
self.check_html(widget, 'name', ['john', 'lennon'], html=(
|
||||
'<input type="text" class="big" value="john" name="name_0" />'
|
||||
'<input type="text" class="small" value="lennon" name="name_1" />'
|
||||
'<input type="text" class="big" value="john" name="name_0">'
|
||||
'<input type="text" class="small" value="lennon" name="name_1">'
|
||||
))
|
||||
self.check_html(widget, 'name', 'john__lennon', html=(
|
||||
'<input type="text" class="big" value="john" name="name_0" />'
|
||||
'<input type="text" class="small" value="lennon" name="name_1" />'
|
||||
'<input type="text" class="big" value="john" name="name_0">'
|
||||
'<input type="text" class="small" value="lennon" name="name_1">'
|
||||
))
|
||||
self.check_html(widget, 'name', 'john__lennon', attrs={'id': 'foo'}, html=(
|
||||
'<input id="foo_0" type="text" class="big" value="john" name="name_0" />'
|
||||
'<input id="foo_1" type="text" class="small" value="lennon" name="name_1" />'
|
||||
'<input id="foo_0" type="text" class="big" value="john" name="name_0">'
|
||||
'<input id="foo_1" type="text" class="small" value="lennon" name="name_1">'
|
||||
))
|
||||
|
||||
def test_constructor_attrs(self):
|
||||
@@ -109,21 +109,21 @@ class MultiWidgetTest(WidgetTest):
|
||||
attrs={'id': 'bar'},
|
||||
)
|
||||
self.check_html(widget, 'name', ['john', 'lennon'], html=(
|
||||
'<input id="bar_0" type="text" class="big" value="john" name="name_0" />'
|
||||
'<input id="bar_1" type="text" class="small" value="lennon" name="name_1" />'
|
||||
'<input id="bar_0" type="text" class="big" value="john" name="name_0">'
|
||||
'<input id="bar_1" type="text" class="small" value="lennon" name="name_1">'
|
||||
))
|
||||
|
||||
def test_constructor_attrs_with_type(self):
|
||||
attrs = {'type': 'number'}
|
||||
widget = MyMultiWidget(widgets=(TextInput, TextInput()), attrs=attrs)
|
||||
self.check_html(widget, 'code', ['1', '2'], html=(
|
||||
'<input type="number" value="1" name="code_0" />'
|
||||
'<input type="number" value="2" name="code_1" />'
|
||||
'<input type="number" value="1" name="code_0">'
|
||||
'<input type="number" value="2" name="code_1">'
|
||||
))
|
||||
widget = MyMultiWidget(widgets=(TextInput(attrs), TextInput(attrs)), attrs={'class': 'bar'})
|
||||
self.check_html(widget, 'code', ['1', '2'], html=(
|
||||
'<input type="number" value="1" name="code_0" class="bar" />'
|
||||
'<input type="number" value="2" name="code_1" class="bar" />'
|
||||
'<input type="number" value="1" name="code_0" class="bar">'
|
||||
'<input type="number" value="2" name="code_1" class="bar">'
|
||||
))
|
||||
|
||||
def test_value_omitted_from_data(self):
|
||||
@@ -154,23 +154,23 @@ class MultiWidgetTest(WidgetTest):
|
||||
widget = ComplexMultiWidget()
|
||||
self.check_html(widget, 'name', 'some text,JP,2007-04-25 06:24:00', html=(
|
||||
"""
|
||||
<input type="text" name="name_0" value="some text" />
|
||||
<input type="text" name="name_0" value="some text">
|
||||
<select multiple name="name_1">
|
||||
<option value="J" selected>John</option>
|
||||
<option value="P" selected>Paul</option>
|
||||
<option value="G">George</option>
|
||||
<option value="R">Ringo</option>
|
||||
</select>
|
||||
<input type="text" name="name_2_0" value="2007-04-25" />
|
||||
<input type="text" name="name_2_1" value="06:24:00" />
|
||||
<input type="text" name="name_2_0" value="2007-04-25">
|
||||
<input type="text" name="name_2_1" value="06:24:00">
|
||||
"""
|
||||
))
|
||||
|
||||
def test_no_whitespace_between_widgets(self):
|
||||
widget = MyMultiWidget(widgets=(TextInput, TextInput()))
|
||||
self.check_html(widget, 'code', None, html=(
|
||||
'<input type="text" name="code_0" />'
|
||||
'<input type="text" name="code_1" />'
|
||||
'<input type="text" name="code_0">'
|
||||
'<input type="text" name="code_1">'
|
||||
), strict=True)
|
||||
|
||||
def test_deepcopy(self):
|
||||
|
||||
@@ -11,5 +11,5 @@ class NumberInputTests(WidgetTest):
|
||||
widget = NumberInput(attrs={'max': 12345, 'min': 1234, 'step': 9999})
|
||||
self.check_html(
|
||||
widget, 'name', 'value',
|
||||
'<input type="number" name="name" value="value" max="12345" min="1234" step="9999" />'
|
||||
'<input type="number" name="name" value="value" max="12345" min="1234" step="9999">'
|
||||
)
|
||||
|
||||
@@ -7,10 +7,10 @@ class PasswordInputTest(WidgetTest):
|
||||
widget = PasswordInput()
|
||||
|
||||
def test_render(self):
|
||||
self.check_html(self.widget, 'password', '', html='<input type="password" name="password" />')
|
||||
self.check_html(self.widget, 'password', '', html='<input type="password" name="password">')
|
||||
|
||||
def test_render_ignore_value(self):
|
||||
self.check_html(self.widget, 'password', 'secret', html='<input type="password" name="password" />')
|
||||
self.check_html(self.widget, 'password', 'secret', html='<input type="password" name="password">')
|
||||
|
||||
def test_render_value_true(self):
|
||||
"""
|
||||
@@ -18,9 +18,9 @@ class PasswordInputTest(WidgetTest):
|
||||
render its value. For security reasons, this is off by default.
|
||||
"""
|
||||
widget = PasswordInput(render_value=True)
|
||||
self.check_html(widget, 'password', '', html='<input type="password" name="password" />')
|
||||
self.check_html(widget, 'password', None, html='<input type="password" name="password" />')
|
||||
self.check_html(widget, 'password', '', html='<input type="password" name="password">')
|
||||
self.check_html(widget, 'password', None, html='<input type="password" name="password">')
|
||||
self.check_html(
|
||||
widget, 'password', 'test@example.com',
|
||||
html='<input type="password" name="password" value="test@example.com" />',
|
||||
html='<input type="password" name="password" value="test@example.com">',
|
||||
)
|
||||
|
||||
@@ -13,11 +13,11 @@ class RadioSelectTest(WidgetTest):
|
||||
choices = (('', '------'),) + self.beatles
|
||||
self.check_html(self.widget(choices=choices), 'beatle', 'J', html=(
|
||||
"""<ul>
|
||||
<li><label><input type="radio" name="beatle" value="" /> ------</label></li>
|
||||
<li><label><input checked type="radio" name="beatle" value="J" /> John</label></li>
|
||||
<li><label><input type="radio" name="beatle" value="P" /> Paul</label></li>
|
||||
<li><label><input type="radio" name="beatle" value="G" /> George</label></li>
|
||||
<li><label><input type="radio" name="beatle" value="R" /> Ringo</label></li>
|
||||
<li><label><input type="radio" name="beatle" value=""> ------</label></li>
|
||||
<li><label><input checked type="radio" name="beatle" value="J"> John</label></li>
|
||||
<li><label><input type="radio" name="beatle" value="P"> Paul</label></li>
|
||||
<li><label><input type="radio" name="beatle" value="G"> George</label></li>
|
||||
<li><label><input type="radio" name="beatle" value="R"> Ringo</label></li>
|
||||
</ul>"""
|
||||
))
|
||||
|
||||
@@ -30,19 +30,19 @@ class RadioSelectTest(WidgetTest):
|
||||
html = """
|
||||
<ul id="media">
|
||||
<li>
|
||||
<label for="media_0"><input id="media_0" name="nestchoice" type="radio" value="unknown" /> Unknown</label>
|
||||
<label for="media_0"><input id="media_0" name="nestchoice" type="radio" value="unknown"> Unknown</label>
|
||||
</li>
|
||||
<li>Audio<ul id="media_1">
|
||||
<li>
|
||||
<label for="media_1_0"><input id="media_1_0" name="nestchoice" type="radio" value="vinyl" /> Vinyl</label>
|
||||
<label for="media_1_0"><input id="media_1_0" name="nestchoice" type="radio" value="vinyl"> Vinyl</label>
|
||||
</li>
|
||||
<li><label for="media_1_1"><input id="media_1_1" name="nestchoice" type="radio" value="cd" /> CD</label></li>
|
||||
<li><label for="media_1_1"><input id="media_1_1" name="nestchoice" type="radio" value="cd"> CD</label></li>
|
||||
</ul></li>
|
||||
<li>Video<ul id="media_2">
|
||||
<li><label for="media_2_0"><input id="media_2_0" name="nestchoice" type="radio" value="vhs" /> VHS</label></li>
|
||||
<li><label for="media_2_0"><input id="media_2_0" name="nestchoice" type="radio" value="vhs"> VHS</label></li>
|
||||
<li>
|
||||
<label for="media_2_1">
|
||||
<input checked id="media_2_1" name="nestchoice" type="radio" value="dvd" /> DVD
|
||||
<input checked id="media_2_1" name="nestchoice" type="radio" value="dvd"> DVD
|
||||
</label>
|
||||
</li>
|
||||
</ul></li>
|
||||
@@ -62,11 +62,11 @@ class RadioSelectTest(WidgetTest):
|
||||
html = """
|
||||
<ul id="foo">
|
||||
<li>
|
||||
<label for="foo_0"><input checked type="radio" id="foo_0" value="J" name="beatle" /> John</label>
|
||||
<label for="foo_0"><input checked type="radio" id="foo_0" value="J" name="beatle"> John</label>
|
||||
</li>
|
||||
<li><label for="foo_1"><input type="radio" id="foo_1" value="P" name="beatle" /> Paul</label></li>
|
||||
<li><label for="foo_2"><input type="radio" id="foo_2" value="G" name="beatle" /> George</label></li>
|
||||
<li><label for="foo_3"><input type="radio" id="foo_3" value="R" name="beatle" /> Ringo</label></li>
|
||||
<li><label for="foo_1"><input type="radio" id="foo_1" value="P" name="beatle"> Paul</label></li>
|
||||
<li><label for="foo_2"><input type="radio" id="foo_2" value="G" name="beatle"> George</label></li>
|
||||
<li><label for="foo_3"><input type="radio" id="foo_3" value="R" name="beatle"> Ringo</label></li>
|
||||
</ul>
|
||||
"""
|
||||
self.check_html(widget, 'beatle', 'J', html=html)
|
||||
@@ -79,11 +79,11 @@ class RadioSelectTest(WidgetTest):
|
||||
html = """
|
||||
<ul id="bar">
|
||||
<li>
|
||||
<label for="bar_0"><input checked type="radio" id="bar_0" value="J" name="beatle" /> John</label>
|
||||
<label for="bar_0"><input checked type="radio" id="bar_0" value="J" name="beatle"> John</label>
|
||||
</li>
|
||||
<li><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle" /> Paul</label></li>
|
||||
<li><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle" /> George</label></li>
|
||||
<li><label for="bar_3"><input type="radio" id="bar_3" value="R" name="beatle" /> Ringo</label></li>
|
||||
<li><label for="bar_1"><input type="radio" id="bar_1" value="P" name="beatle"> Paul</label></li>
|
||||
<li><label for="bar_2"><input type="radio" id="bar_2" value="G" name="beatle"> George</label></li>
|
||||
<li><label for="bar_3"><input type="radio" id="bar_3" value="R" name="beatle"> Ringo</label></li>
|
||||
</ul>
|
||||
"""
|
||||
self.check_html(self.widget(choices=self.beatles), 'beatle', 'J', attrs={'id': 'bar'}, html=html)
|
||||
@@ -95,10 +95,10 @@ class RadioSelectTest(WidgetTest):
|
||||
"""
|
||||
html = """
|
||||
<ul class="bar">
|
||||
<li><label><input checked type="radio" class="bar" value="J" name="beatle" /> John</label></li>
|
||||
<li><label><input type="radio" class="bar" value="P" name="beatle" /> Paul</label></li>
|
||||
<li><label><input type="radio" class="bar" value="G" name="beatle" /> George</label></li>
|
||||
<li><label><input type="radio" class="bar" value="R" name="beatle" /> Ringo</label></li>
|
||||
<li><label><input checked type="radio" class="bar" value="J" name="beatle"> John</label></li>
|
||||
<li><label><input type="radio" class="bar" value="P" name="beatle"> Paul</label></li>
|
||||
<li><label><input type="radio" class="bar" value="G" name="beatle"> George</label></li>
|
||||
<li><label><input type="radio" class="bar" value="R" name="beatle"> Ringo</label></li>
|
||||
</ul>
|
||||
"""
|
||||
self.check_html(self.widget(choices=self.beatles), 'beatle', 'J', attrs={'class': 'bar'}, html=html)
|
||||
@@ -112,9 +112,9 @@ class RadioSelectTest(WidgetTest):
|
||||
]
|
||||
html = """
|
||||
<ul>
|
||||
<li><label><input type="radio" name="number" value="1" /> One</label></li>
|
||||
<li><label><input type="radio" name="number" value="1000" /> One thousand</label></li>
|
||||
<li><label><input type="radio" name="number" value="1000000" /> One million</label></li>
|
||||
<li><label><input type="radio" name="number" value="1"> One</label></li>
|
||||
<li><label><input type="radio" name="number" value="1000"> One thousand</label></li>
|
||||
<li><label><input type="radio" name="number" value="1000000"> One million</label></li>
|
||||
</ul>
|
||||
"""
|
||||
self.check_html(self.widget(choices=choices), 'number', None, html=html)
|
||||
@@ -125,8 +125,8 @@ class RadioSelectTest(WidgetTest):
|
||||
]
|
||||
html = """
|
||||
<ul>
|
||||
<li><label><input type="radio" name="time" value="00:00:00" /> midnight</label></li>
|
||||
<li><label><input type="radio" name="time" value="12:00:00" /> noon</label></li>
|
||||
<li><label><input type="radio" name="time" value="00:00:00"> midnight</label></li>
|
||||
<li><label><input type="radio" name="time" value="12:00:00"> noon</label></li>
|
||||
</ul>
|
||||
"""
|
||||
self.check_html(self.widget(choices=choices), 'time', None, html=html)
|
||||
|
||||
@@ -10,37 +10,37 @@ class SplitDateTimeWidgetTest(WidgetTest):
|
||||
|
||||
def test_render_empty(self):
|
||||
self.check_html(self.widget, 'date', '', html=(
|
||||
'<input type="text" name="date_0" /><input type="text" name="date_1" />'
|
||||
'<input type="text" name="date_0"><input type="text" name="date_1">'
|
||||
))
|
||||
|
||||
def test_render_none(self):
|
||||
self.check_html(self.widget, 'date', None, html=(
|
||||
'<input type="text" name="date_0" /><input type="text" name="date_1" />'
|
||||
'<input type="text" name="date_0"><input type="text" name="date_1">'
|
||||
))
|
||||
|
||||
def test_render_datetime(self):
|
||||
self.check_html(self.widget, 'date', datetime(2006, 1, 10, 7, 30), html=(
|
||||
'<input type="text" name="date_0" value="2006-01-10" />'
|
||||
'<input type="text" name="date_1" value="07:30:00" />'
|
||||
'<input type="text" name="date_0" value="2006-01-10">'
|
||||
'<input type="text" name="date_1" value="07:30:00">'
|
||||
))
|
||||
|
||||
def test_render_date_and_time(self):
|
||||
self.check_html(self.widget, 'date', [date(2006, 1, 10), time(7, 30)], html=(
|
||||
'<input type="text" name="date_0" value="2006-01-10" />'
|
||||
'<input type="text" name="date_1" value="07:30:00" />'
|
||||
'<input type="text" name="date_0" value="2006-01-10">'
|
||||
'<input type="text" name="date_1" value="07:30:00">'
|
||||
))
|
||||
|
||||
def test_constructor_attrs(self):
|
||||
widget = SplitDateTimeWidget(attrs={'class': 'pretty'})
|
||||
self.check_html(widget, 'date', datetime(2006, 1, 10, 7, 30), html=(
|
||||
'<input type="text" class="pretty" value="2006-01-10" name="date_0" />'
|
||||
'<input type="text" class="pretty" value="07:30:00" name="date_1" />'
|
||||
'<input type="text" class="pretty" value="2006-01-10" name="date_0">'
|
||||
'<input type="text" class="pretty" value="07:30:00" name="date_1">'
|
||||
))
|
||||
|
||||
def test_constructor_different_attrs(self):
|
||||
html = (
|
||||
'<input type="text" class="foo" value="2006-01-10" name="date_0" />'
|
||||
'<input type="text" class="bar" value="07:30:00" name="date_1" />'
|
||||
'<input type="text" class="foo" value="2006-01-10" name="date_0">'
|
||||
'<input type="text" class="bar" value="07:30:00" name="date_1">'
|
||||
)
|
||||
widget = SplitDateTimeWidget(date_attrs={'class': 'foo'}, time_attrs={'class': 'bar'})
|
||||
self.check_html(widget, 'date', datetime(2006, 1, 10, 7, 30), html=html)
|
||||
@@ -58,6 +58,6 @@ class SplitDateTimeWidgetTest(WidgetTest):
|
||||
date_format='%d/%m/%Y', time_format='%H:%M',
|
||||
)
|
||||
self.check_html(widget, 'date', datetime(2006, 1, 10, 7, 30), html=(
|
||||
'<input type="text" name="date_0" value="10/01/2006" />'
|
||||
'<input type="text" name="date_1" value="07:30" />'
|
||||
'<input type="text" name="date_0" value="10/01/2006">'
|
||||
'<input type="text" name="date_1" value="07:30">'
|
||||
))
|
||||
|
||||
@@ -12,22 +12,22 @@ class SplitHiddenDateTimeWidgetTest(WidgetTest):
|
||||
|
||||
def test_render_empty(self):
|
||||
self.check_html(self.widget, 'date', '', html=(
|
||||
'<input type="hidden" name="date_0" /><input type="hidden" name="date_1" />'
|
||||
'<input type="hidden" name="date_0"><input type="hidden" name="date_1">'
|
||||
))
|
||||
|
||||
def test_render_value(self):
|
||||
d = datetime(2007, 9, 17, 12, 51, 34, 482548)
|
||||
self.check_html(self.widget, 'date', d, html=(
|
||||
'<input type="hidden" name="date_0" value="2007-09-17" />'
|
||||
'<input type="hidden" name="date_1" value="12:51:34" />'
|
||||
'<input type="hidden" name="date_0" value="2007-09-17">'
|
||||
'<input type="hidden" name="date_1" value="12:51:34">'
|
||||
))
|
||||
self.check_html(self.widget, 'date', datetime(2007, 9, 17, 12, 51, 34), html=(
|
||||
'<input type="hidden" name="date_0" value="2007-09-17" />'
|
||||
'<input type="hidden" name="date_1" value="12:51:34" />'
|
||||
'<input type="hidden" name="date_0" value="2007-09-17">'
|
||||
'<input type="hidden" name="date_1" value="12:51:34">'
|
||||
))
|
||||
self.check_html(self.widget, 'date', datetime(2007, 9, 17, 12, 51), html=(
|
||||
'<input type="hidden" name="date_0" value="2007-09-17" />'
|
||||
'<input type="hidden" name="date_1" value="12:51:00" />'
|
||||
'<input type="hidden" name="date_0" value="2007-09-17">'
|
||||
'<input type="hidden" name="date_1" value="12:51:00">'
|
||||
))
|
||||
|
||||
@override_settings(USE_L10N=True)
|
||||
@@ -36,15 +36,15 @@ class SplitHiddenDateTimeWidgetTest(WidgetTest):
|
||||
d = datetime(2007, 9, 17, 12, 51)
|
||||
self.check_html(self.widget, 'date', d, html=(
|
||||
"""
|
||||
<input type="hidden" name="date_0" value="17.09.2007" />
|
||||
<input type="hidden" name="date_1" value="12:51:00" />
|
||||
<input type="hidden" name="date_0" value="17.09.2007">
|
||||
<input type="hidden" name="date_1" value="12:51:00">
|
||||
"""
|
||||
))
|
||||
|
||||
def test_constructor_different_attrs(self):
|
||||
html = (
|
||||
'<input type="hidden" class="foo" value="2006-01-10" name="date_0" />'
|
||||
'<input type="hidden" class="bar" value="07:30:00" name="date_1" />'
|
||||
'<input type="hidden" class="foo" value="2006-01-10" name="date_0">'
|
||||
'<input type="hidden" class="bar" value="07:30:00" name="date_1">'
|
||||
)
|
||||
widget = SplitHiddenDateTimeWidget(date_attrs={'class': 'foo'}, time_attrs={'class': 'bar'})
|
||||
self.check_html(widget, 'date', datetime(2006, 1, 10, 7, 30), html=html)
|
||||
|
||||
@@ -8,14 +8,14 @@ class TextInputTest(WidgetTest):
|
||||
widget = TextInput()
|
||||
|
||||
def test_render(self):
|
||||
self.check_html(self.widget, 'email', '', html='<input type="text" name="email" />')
|
||||
self.check_html(self.widget, 'email', '', html='<input type="text" name="email">')
|
||||
|
||||
def test_render_none(self):
|
||||
self.check_html(self.widget, 'email', None, html='<input type="text" name="email" />')
|
||||
self.check_html(self.widget, 'email', None, html='<input type="text" name="email">')
|
||||
|
||||
def test_render_value(self):
|
||||
self.check_html(self.widget, 'email', 'test@example.com', html=(
|
||||
'<input type="text" name="email" value="test@example.com" />'
|
||||
'<input type="text" name="email" value="test@example.com">'
|
||||
))
|
||||
|
||||
def test_render_boolean(self):
|
||||
@@ -24,22 +24,22 @@ class TextInputTest(WidgetTest):
|
||||
"False").
|
||||
"""
|
||||
self.check_html(self.widget, 'get_spam', False, html=(
|
||||
'<input type="text" name="get_spam" value="False" />'
|
||||
'<input type="text" name="get_spam" value="False">'
|
||||
))
|
||||
self.check_html(self.widget, 'get_spam', True, html=(
|
||||
'<input type="text" name="get_spam" value="True" />'
|
||||
'<input type="text" name="get_spam" value="True">'
|
||||
))
|
||||
|
||||
def test_render_quoted(self):
|
||||
self.check_html(
|
||||
self.widget, 'email', 'some "quoted" & ampersanded value',
|
||||
html='<input type="text" name="email" value="some "quoted" & ampersanded value" />',
|
||||
html='<input type="text" name="email" value="some "quoted" & ampersanded value">',
|
||||
)
|
||||
|
||||
def test_render_custom_attrs(self):
|
||||
self.check_html(
|
||||
self.widget, 'email', 'test@example.com', attrs={'class': 'fun'},
|
||||
html='<input type="text" name="email" value="test@example.com" class="fun" />',
|
||||
html='<input type="text" name="email" value="test@example.com" class="fun">',
|
||||
)
|
||||
|
||||
def test_render_unicode(self):
|
||||
@@ -47,16 +47,16 @@ class TextInputTest(WidgetTest):
|
||||
self.widget, 'email', 'ŠĐĆŽćžšđ', attrs={'class': 'fun'},
|
||||
html=(
|
||||
'<input type="text" name="email" '
|
||||
'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" class="fun" />'
|
||||
'value="\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111" class="fun">'
|
||||
),
|
||||
)
|
||||
|
||||
def test_constructor_attrs(self):
|
||||
widget = TextInput(attrs={'class': 'fun', 'type': 'email'})
|
||||
self.check_html(widget, 'email', '', html='<input type="email" class="fun" name="email" />')
|
||||
self.check_html(widget, 'email', '', html='<input type="email" class="fun" name="email">')
|
||||
self.check_html(
|
||||
widget, 'email', 'foo@example.com',
|
||||
html='<input type="email" class="fun" value="foo@example.com" name="email" />',
|
||||
html='<input type="email" class="fun" value="foo@example.com" name="email">',
|
||||
)
|
||||
|
||||
def test_attrs_precedence(self):
|
||||
@@ -67,12 +67,12 @@ class TextInputTest(WidgetTest):
|
||||
widget = TextInput(attrs={'class': 'pretty'})
|
||||
self.check_html(
|
||||
widget, 'email', '', attrs={'class': 'special'},
|
||||
html='<input type="text" class="special" name="email" />',
|
||||
html='<input type="text" class="special" name="email">',
|
||||
)
|
||||
|
||||
def test_attrs_safestring(self):
|
||||
widget = TextInput(attrs={'onBlur': mark_safe("function('foo')")})
|
||||
self.check_html(widget, 'email', '', html='<input onBlur="function(\'foo\')" type="text" name="email" />')
|
||||
self.check_html(widget, 'email', '', html='<input onBlur="function(\'foo\')" type="text" name="email">')
|
||||
|
||||
def test_use_required_attribute(self):
|
||||
# Text inputs can safely trigger the browser validation.
|
||||
|
||||
@@ -11,7 +11,7 @@ class TimeInputTest(WidgetTest):
|
||||
widget = TimeInput()
|
||||
|
||||
def test_render_none(self):
|
||||
self.check_html(self.widget, 'time', None, html='<input type="text" name="time" />')
|
||||
self.check_html(self.widget, 'time', None, html='<input type="text" name="time">')
|
||||
|
||||
def test_render_value(self):
|
||||
"""
|
||||
@@ -19,18 +19,18 @@ class TimeInputTest(WidgetTest):
|
||||
"""
|
||||
t = time(12, 51, 34, 482548)
|
||||
self.assertEqual(str(t), '12:51:34.482548')
|
||||
self.check_html(self.widget, 'time', t, html='<input type="text" name="time" value="12:51:34" />')
|
||||
self.check_html(self.widget, 'time', t, html='<input type="text" name="time" value="12:51:34">')
|
||||
self.check_html(self.widget, 'time', time(12, 51, 34), html=(
|
||||
'<input type="text" name="time" value="12:51:34" />'
|
||||
'<input type="text" name="time" value="12:51:34">'
|
||||
))
|
||||
self.check_html(self.widget, 'time', time(12, 51), html=(
|
||||
'<input type="text" name="time" value="12:51:00" />'
|
||||
'<input type="text" name="time" value="12:51:00">'
|
||||
))
|
||||
|
||||
def test_string(self):
|
||||
"""Initializing from a string value."""
|
||||
self.check_html(self.widget, 'time', '13:12:11', html=(
|
||||
'<input type="text" name="time" value="13:12:11" />'
|
||||
'<input type="text" name="time" value="13:12:11">'
|
||||
))
|
||||
|
||||
def test_format(self):
|
||||
@@ -39,10 +39,10 @@ class TimeInputTest(WidgetTest):
|
||||
"""
|
||||
t = time(12, 51, 34, 482548)
|
||||
widget = TimeInput(format='%H:%M', attrs={'type': 'time'})
|
||||
self.check_html(widget, 'time', t, html='<input type="time" name="time" value="12:51" />')
|
||||
self.check_html(widget, 'time', t, html='<input type="time" name="time" value="12:51">')
|
||||
|
||||
@override_settings(USE_L10N=True)
|
||||
@translation.override('de-at')
|
||||
def test_l10n(self):
|
||||
t = time(12, 51, 34, 482548)
|
||||
self.check_html(self.widget, 'time', t, html='<input type="text" name="time" value="12:51:34" />')
|
||||
self.check_html(self.widget, 'time', t, html='<input type="text" name="time" value="12:51:34">')
|
||||
|
||||
@@ -19,8 +19,8 @@ class WidgetTests(WidgetTest):
|
||||
self.assertIs(widget.value_omitted_from_data({'field': 'value'}, {}, 'field'), False)
|
||||
|
||||
def test_no_trailing_newline_in_attrs(self):
|
||||
self.check_html(Input(), 'name', 'value', strict=True, html='<input type="None" name="name" value="value" />')
|
||||
self.check_html(Input(), 'name', 'value', strict=True, html='<input type="None" name="name" value="value">')
|
||||
|
||||
def test_attr_false_not_rendered(self):
|
||||
html = '<input type="None" name="name" value="value" />'
|
||||
html = '<input type="None" name="name" value="value">'
|
||||
self.check_html(Input(), 'name', 'value', html=html, attrs={'readonly': False})
|
||||
|
||||
@@ -30,24 +30,24 @@ class GenericInlineFormsetTests(TestCase):
|
||||
''.join(form.as_p() for form in formset.forms),
|
||||
"""<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-tag">
|
||||
Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-0-tag" type="text"
|
||||
name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50" /></p>
|
||||
name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50"></p>
|
||||
<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">Delete:</label>
|
||||
<input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-0-DELETE"
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE" />
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">
|
||||
<input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id"
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p>"""
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-id"></p>"""
|
||||
)
|
||||
formset = GenericFormSet(instance=Animal())
|
||||
self.assertHTMLEqual(
|
||||
''.join(form.as_p() for form in formset.forms),
|
||||
"""<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-tag">
|
||||
Tag:</label> <input id="id_generic_relations-taggeditem-content_type-object_id-0-tag"
|
||||
type="text" name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50" /></p>
|
||||
type="text" name="generic_relations-taggeditem-content_type-object_id-0-tag" maxlength="50"></p>
|
||||
<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">Delete:</label>
|
||||
<input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-0-DELETE"
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE" /><input type="hidden"
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE"><input type="hidden"
|
||||
name="generic_relations-taggeditem-content_type-object_id-0-id"
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p>"""
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-id"></p>"""
|
||||
)
|
||||
platypus = Animal.objects.create(
|
||||
common_name='Platypus', latin_name='Ornithorhynchus anatinus',
|
||||
@@ -60,29 +60,29 @@ id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p>"""
|
||||
''.join(form.as_p() for form in formset.forms),
|
||||
"""<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-tag">Tag:</label>
|
||||
<input id="id_generic_relations-taggeditem-content_type-object_id-0-tag" type="text"
|
||||
name="generic_relations-taggeditem-content_type-object_id-0-tag" value="shiny" maxlength="50" /></p>
|
||||
name="generic_relations-taggeditem-content_type-object_id-0-tag" value="shiny" maxlength="50"></p>
|
||||
<p><label for="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">Delete:</label>
|
||||
<input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-0-DELETE"
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE" />
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-0-DELETE">
|
||||
<input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id"
|
||||
value="%s" id="id_generic_relations-taggeditem-content_type-object_id-0-id" /></p>
|
||||
value="%s" id="id_generic_relations-taggeditem-content_type-object_id-0-id"></p>
|
||||
<p><label for="id_generic_relations-taggeditem-content_type-object_id-1-tag">Tag:</label>
|
||||
<input id="id_generic_relations-taggeditem-content_type-object_id-1-tag" type="text"
|
||||
name="generic_relations-taggeditem-content_type-object_id-1-tag" maxlength="50" /></p>
|
||||
name="generic_relations-taggeditem-content_type-object_id-1-tag" maxlength="50"></p>
|
||||
<p><label for="id_generic_relations-taggeditem-content_type-object_id-1-DELETE">Delete:</label>
|
||||
<input type="checkbox" name="generic_relations-taggeditem-content_type-object_id-1-DELETE"
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-1-DELETE" />
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-1-DELETE">
|
||||
<input type="hidden" name="generic_relations-taggeditem-content_type-object_id-1-id"
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-1-id" /></p>""" % tagged_item_id
|
||||
id="id_generic_relations-taggeditem-content_type-object_id-1-id"></p>""" % tagged_item_id
|
||||
)
|
||||
lion = Animal.objects.create(common_name='Lion', latin_name='Panthera leo')
|
||||
formset = GenericFormSet(instance=lion, prefix='x')
|
||||
self.assertHTMLEqual(
|
||||
''.join(form.as_p() for form in formset.forms),
|
||||
"""<p><label for="id_x-0-tag">Tag:</label>
|
||||
<input id="id_x-0-tag" type="text" name="x-0-tag" maxlength="50" /></p>
|
||||
<p><label for="id_x-0-DELETE">Delete:</label> <input type="checkbox" name="x-0-DELETE" id="id_x-0-DELETE" />
|
||||
<input type="hidden" name="x-0-id" id="id_x-0-id" /></p>"""
|
||||
<input id="id_x-0-tag" type="text" name="x-0-tag" maxlength="50"></p>
|
||||
<p><label for="id_x-0-DELETE">Delete:</label> <input type="checkbox" name="x-0-DELETE" id="id_x-0-DELETE">
|
||||
<input type="hidden" name="x-0-id" id="id_x-0-id"></p>"""
|
||||
)
|
||||
|
||||
def test_options(self):
|
||||
@@ -101,7 +101,7 @@ id="id_generic_relations-taggeditem-content_type-object_id-1-id" /></p>""" % tag
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<input type="hidden" name="generic_relations-taggeditem-content_type-object_id-0-id" value="%s" '
|
||||
'id="id_generic_relations-taggeditem-content_type-object_id-0-id" />' % harmless.pk
|
||||
'id="id_generic_relations-taggeditem-content_type-object_id-0-id">' % harmless.pk
|
||||
)
|
||||
self.assertEqual(formset.forms[0].instance, harmless)
|
||||
self.assertEqual(formset.forms[1].instance, mammal)
|
||||
|
||||
@@ -909,13 +909,13 @@ class FormattingTests(SimpleTestCase):
|
||||
self.assertHTMLEqual(
|
||||
form6.as_ul(),
|
||||
'<li><label for="id_name">Name:</label>'
|
||||
'<input id="id_name" type="text" name="name" value="acme" maxlength="50" required /></li>'
|
||||
'<input id="id_name" type="text" name="name" value="acme" maxlength="50" required></li>'
|
||||
'<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" required /></li>'
|
||||
'<input type="text" name="date_added" value="31.12.2009 06:00:00" id="id_date_added" required></li>'
|
||||
'<li><label for="id_cents_paid">Cents paid:</label>'
|
||||
'<input type="text" name="cents_paid" value="59,47" id="id_cents_paid" required /></li>'
|
||||
'<input type="text" name="cents_paid" value="59,47" id="id_cents_paid" required></li>'
|
||||
'<li><label for="id_products_delivered">Products delivered:</label>'
|
||||
'<input type="text" name="products_delivered" value="12000" id="id_products_delivered" required />'
|
||||
'<input type="text" name="products_delivered" value="12000" id="id_products_delivered" required>'
|
||||
'</li>'
|
||||
)
|
||||
self.assertEqual(localize_input(datetime.datetime(2009, 12, 31, 6, 0, 0)), '31.12.2009 06:00:00')
|
||||
@@ -924,7 +924,7 @@ class FormattingTests(SimpleTestCase):
|
||||
# Checking for the localized "products_delivered" field
|
||||
self.assertInHTML(
|
||||
'<input type="text" name="products_delivered" '
|
||||
'value="12.000" id="id_products_delivered" required />',
|
||||
'value="12.000" id="id_products_delivered" required>',
|
||||
form6.as_ul()
|
||||
)
|
||||
|
||||
@@ -1073,18 +1073,18 @@ class FormattingTests(SimpleTestCase):
|
||||
|
||||
self.assertHTMLEqual(
|
||||
template.render(context),
|
||||
'<input id="id_date_added" name="date_added" type="text" value="31.12.2009 06:00:00" required />;'
|
||||
'<input id="id_cents_paid" name="cents_paid" type="text" value="59,47" required />'
|
||||
'<input id="id_date_added" name="date_added" type="text" value="31.12.2009 06:00:00" required>;'
|
||||
'<input id="id_cents_paid" name="cents_paid" type="text" value="59,47" required>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
template_as_text.render(context),
|
||||
'<input id="id_date_added" name="date_added" type="text" value="31.12.2009 06:00:00" required />;'
|
||||
' <input id="id_cents_paid" name="cents_paid" type="text" value="59,47" required />'
|
||||
'<input id="id_date_added" name="date_added" type="text" value="31.12.2009 06:00:00" required>;'
|
||||
' <input id="id_cents_paid" name="cents_paid" type="text" value="59,47" required>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
template_as_hidden.render(context),
|
||||
'<input id="id_date_added" name="date_added" type="hidden" value="31.12.2009 06:00:00" />;'
|
||||
'<input id="id_cents_paid" name="cents_paid" type="hidden" value="59,47" />'
|
||||
'<input id="id_date_added" name="date_added" type="hidden" value="31.12.2009 06:00:00">;'
|
||||
'<input id="id_cents_paid" name="cents_paid" type="hidden" value="59,47">'
|
||||
)
|
||||
|
||||
def test_format_arbitrary_settings(self):
|
||||
|
||||
@@ -536,11 +536,11 @@ class ModelFormBaseTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
str(SubclassMeta()),
|
||||
"""<tr><th><label for="id_name">Name:</label></th>
|
||||
<td><input id="id_name" type="text" name="name" maxlength="20" required /></td></tr>
|
||||
<td><input id="id_name" type="text" name="name" maxlength="20" required></td></tr>
|
||||
<tr><th><label for="id_slug">Slug:</label></th>
|
||||
<td><input id="id_slug" type="text" name="slug" maxlength="20" required /></td></tr>
|
||||
<td><input id="id_slug" type="text" name="slug" maxlength="20" required></td></tr>
|
||||
<tr><th><label for="id_checkbox">Checkbox:</label></th>
|
||||
<td><input type="checkbox" name="checkbox" id="id_checkbox" required /></td></tr>"""
|
||||
<td><input type="checkbox" name="checkbox" id="id_checkbox" required></td></tr>"""
|
||||
)
|
||||
|
||||
def test_orderfields_form(self):
|
||||
@@ -554,9 +554,9 @@ class ModelFormBaseTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
str(OrderFields()),
|
||||
"""<tr><th><label for="id_url">The URL:</label></th>
|
||||
<td><input id="id_url" type="text" name="url" maxlength="40" required /></td></tr>
|
||||
<td><input id="id_url" type="text" name="url" maxlength="40" required></td></tr>
|
||||
<tr><th><label for="id_name">Name:</label></th>
|
||||
<td><input id="id_name" type="text" name="name" maxlength="20" required /></td></tr>"""
|
||||
<td><input id="id_name" type="text" name="name" maxlength="20" required></td></tr>"""
|
||||
)
|
||||
|
||||
def test_orderfields2_form(self):
|
||||
@@ -742,11 +742,11 @@ class TestFieldOverridesByFormMeta(SimpleTestCase):
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
str(form['url']),
|
||||
'<input id="id_url" type="text" class="url" name="url" maxlength="40" required />',
|
||||
'<input id="id_url" type="text" class="url" name="url" maxlength="40" required>',
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
str(form['slug']),
|
||||
'<input id="id_slug" type="text" name="slug" maxlength="20" required />',
|
||||
'<input id="id_slug" type="text" name="slug" maxlength="20" required>',
|
||||
)
|
||||
|
||||
def test_label_overrides(self):
|
||||
@@ -1123,29 +1123,29 @@ class ModelFormBasicTests(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
str(f),
|
||||
"""<tr><th><label for="id_name">Name:</label></th>
|
||||
<td><input id="id_name" type="text" name="name" maxlength="20" required /></td></tr>
|
||||
<td><input id="id_name" type="text" name="name" maxlength="20" required></td></tr>
|
||||
<tr><th><label for="id_slug">Slug:</label></th>
|
||||
<td><input id="id_slug" type="text" name="slug" maxlength="20" required /></td></tr>
|
||||
<td><input id="id_slug" type="text" name="slug" maxlength="20" required></td></tr>
|
||||
<tr><th><label for="id_url">The URL:</label></th>
|
||||
<td><input id="id_url" type="text" name="url" maxlength="40" required /></td></tr>"""
|
||||
<td><input id="id_url" type="text" name="url" maxlength="40" required></td></tr>"""
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
str(f.as_ul()),
|
||||
"""<li><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="20" required /></li>
|
||||
<li><label for="id_slug">Slug:</label> <input id="id_slug" type="text" name="slug" maxlength="20" required /></li>
|
||||
<li><label for="id_url">The URL:</label> <input id="id_url" type="text" name="url" maxlength="40" required /></li>"""
|
||||
"""<li><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="20" required></li>
|
||||
<li><label for="id_slug">Slug:</label> <input id="id_slug" type="text" name="slug" maxlength="20" required></li>
|
||||
<li><label for="id_url">The URL:</label> <input id="id_url" type="text" name="url" maxlength="40" required></li>"""
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
str(f["name"]),
|
||||
"""<input id="id_name" type="text" name="name" maxlength="20" required />""")
|
||||
"""<input id="id_name" type="text" name="name" maxlength="20" required>""")
|
||||
|
||||
def test_auto_id(self):
|
||||
f = BaseCategoryForm(auto_id=False)
|
||||
self.assertHTMLEqual(
|
||||
str(f.as_ul()),
|
||||
"""<li>Name: <input type="text" name="name" maxlength="20" required /></li>
|
||||
<li>Slug: <input type="text" name="slug" maxlength="20" required /></li>
|
||||
<li>The URL: <input type="text" name="url" maxlength="40" required /></li>"""
|
||||
"""<li>Name: <input type="text" name="name" maxlength="20" required></li>
|
||||
<li>Slug: <input type="text" name="slug" maxlength="20" required></li>
|
||||
<li>The URL: <input type="text" name="url" maxlength="40" required></li>"""
|
||||
)
|
||||
|
||||
def test_initial_values(self):
|
||||
@@ -1159,9 +1159,9 @@ class ModelFormBasicTests(TestCase):
|
||||
})
|
||||
self.assertHTMLEqual(
|
||||
f.as_ul(),
|
||||
'''<li>Headline: <input type="text" name="headline" value="Your headline here" maxlength="50" required /></li>
|
||||
<li>Slug: <input type="text" name="slug" maxlength="50" required /></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" required /></li>
|
||||
'''<li>Headline: <input type="text" name="headline" value="Your headline here" maxlength="50" required></li>
|
||||
<li>Slug: <input type="text" name="slug" maxlength="50" required></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" required></li>
|
||||
<li>Writer: <select name="writer" required>
|
||||
<option value="" selected>---------</option>
|
||||
<option value="%s">Bob Woodward</option>
|
||||
@@ -1185,7 +1185,7 @@ class ModelFormBasicTests(TestCase):
|
||||
f = RoykoForm(auto_id=False, instance=self.w_royko)
|
||||
self.assertHTMLEqual(
|
||||
str(f),
|
||||
'''<tr><th>Name:</th><td><input type="text" name="name" value="Mike Royko" maxlength="50" required /><br />
|
||||
'''<tr><th>Name:</th><td><input type="text" name="name" value="Mike Royko" maxlength="50" required><br>
|
||||
<span class="helptext">Use both first and last names.</span></td></tr>'''
|
||||
)
|
||||
|
||||
@@ -1201,9 +1201,9 @@ class ModelFormBasicTests(TestCase):
|
||||
f = ArticleForm(auto_id=False, instance=art)
|
||||
self.assertHTMLEqual(
|
||||
f.as_ul(),
|
||||
'''<li>Headline: <input type="text" name="headline" value="Test article" maxlength="50" required /></li>
|
||||
<li>Slug: <input type="text" name="slug" value="test-article" maxlength="50" required /></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required /></li>
|
||||
'''<li>Headline: <input type="text" name="headline" value="Test article" maxlength="50" required></li>
|
||||
<li>Slug: <input type="text" name="slug" value="test-article" maxlength="50" required></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required></li>
|
||||
<li>Writer: <select name="writer" required>
|
||||
<option value="">---------</option>
|
||||
<option value="%s">Bob Woodward</option>
|
||||
@@ -1256,7 +1256,7 @@ class ModelFormBasicTests(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
form.as_ul(),
|
||||
"""<li><label for="id_headline">Headline:</label>
|
||||
<input id="id_headline" type="text" name="headline" maxlength="50" required /></li>
|
||||
<input id="id_headline" type="text" name="headline" maxlength="50" required></li>
|
||||
<li><label for="id_categories">Categories:</label>
|
||||
<select multiple name="categories" id="id_categories">
|
||||
<option value="%d" selected>Entertainment</option>
|
||||
@@ -1318,9 +1318,9 @@ class ModelFormBasicTests(TestCase):
|
||||
f = ArticleForm(auto_id=False)
|
||||
self.assertHTMLEqual(
|
||||
str(f),
|
||||
'''<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" required /></td></tr>
|
||||
<tr><th>Slug:</th><td><input type="text" name="slug" maxlength="50" required /></td></tr>
|
||||
<tr><th>Pub date:</th><td><input type="text" name="pub_date" required /></td></tr>
|
||||
'''<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" required></td></tr>
|
||||
<tr><th>Slug:</th><td><input type="text" name="slug" maxlength="50" required></td></tr>
|
||||
<tr><th>Pub date:</th><td><input type="text" name="pub_date" required></td></tr>
|
||||
<tr><th>Writer:</th><td><select name="writer" required>
|
||||
<option value="" selected>---------</option>
|
||||
<option value="%s">Bob Woodward</option>
|
||||
@@ -1348,9 +1348,9 @@ class ModelFormBasicTests(TestCase):
|
||||
f = ArticleForm(auto_id=False, instance=new_art)
|
||||
self.assertHTMLEqual(
|
||||
f.as_ul(),
|
||||
'''<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" required /></li>
|
||||
<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" required /></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required /></li>
|
||||
'''<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" required></li>
|
||||
<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" required></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required></li>
|
||||
<li>Writer: <select name="writer" required>
|
||||
<option value="">---------</option>
|
||||
<option value="%s">Bob Woodward</option>
|
||||
@@ -1384,8 +1384,8 @@ class ModelFormBasicTests(TestCase):
|
||||
f = PartialArticleForm(auto_id=False)
|
||||
self.assertHTMLEqual(
|
||||
str(f),
|
||||
'''<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" required /></td></tr>
|
||||
<tr><th>Pub date:</th><td><input type="text" name="pub_date" required /></td></tr>''')
|
||||
'''<tr><th>Headline:</th><td><input type="text" name="headline" maxlength="50" required></td></tr>
|
||||
<tr><th>Pub date:</th><td><input type="text" name="pub_date" required></td></tr>''')
|
||||
|
||||
class PartialArticleFormWithSlug(forms.ModelForm):
|
||||
class Meta:
|
||||
@@ -1403,9 +1403,9 @@ class ModelFormBasicTests(TestCase):
|
||||
}, auto_id=False, instance=art)
|
||||
self.assertHTMLEqual(
|
||||
f.as_ul(),
|
||||
'''<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" required /></li>
|
||||
<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" required /></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required /></li>'''
|
||||
'''<li>Headline: <input type="text" name="headline" value="New headline" maxlength="50" required></li>
|
||||
<li>Slug: <input type="text" name="slug" value="new-headline" maxlength="50" required></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" value="1988-01-04" required></li>'''
|
||||
)
|
||||
self.assertTrue(f.is_valid())
|
||||
new_art = f.save()
|
||||
@@ -1492,9 +1492,9 @@ class ModelFormBasicTests(TestCase):
|
||||
f = ArticleForm(auto_id=False)
|
||||
self.assertHTMLEqual(
|
||||
f.as_ul(),
|
||||
'''<li>Headline: <input type="text" name="headline" maxlength="50" required /></li>
|
||||
<li>Slug: <input type="text" name="slug" maxlength="50" required /></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" required /></li>
|
||||
'''<li>Headline: <input type="text" name="headline" maxlength="50" required></li>
|
||||
<li>Slug: <input type="text" name="slug" maxlength="50" required></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" required></li>
|
||||
<li>Writer: <select name="writer" required>
|
||||
<option value="" selected>---------</option>
|
||||
<option value="%s">Bob Woodward</option>
|
||||
@@ -1517,9 +1517,9 @@ class ModelFormBasicTests(TestCase):
|
||||
w_bernstein = Writer.objects.create(name='Carl Bernstein')
|
||||
self.assertHTMLEqual(
|
||||
f.as_ul(),
|
||||
'''<li>Headline: <input type="text" name="headline" maxlength="50" required /></li>
|
||||
<li>Slug: <input type="text" name="slug" maxlength="50" required /></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" required /></li>
|
||||
'''<li>Headline: <input type="text" name="headline" maxlength="50" required></li>
|
||||
<li>Slug: <input type="text" name="slug" maxlength="50" required></li>
|
||||
<li>Pub date: <input type="text" name="pub_date" required></li>
|
||||
<li>Writer: <select name="writer" required>
|
||||
<option value="" selected>---------</option>
|
||||
<option value="%s">Bob Woodward</option>
|
||||
@@ -1786,9 +1786,9 @@ class ModelChoiceFieldTests(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
field.widget.render('name', []),
|
||||
'''<ul>
|
||||
<li><label><input type="checkbox" name="name" value="%d" data-slug="entertainment" />Entertainment</label></li>
|
||||
<li><label><input type="checkbox" name="name" value="%d" data-slug="its-test" />It's a test</label></li>
|
||||
<li><label><input type="checkbox" name="name" value="%d" data-slug="third-test" />Third</label></li>
|
||||
<li><label><input type="checkbox" name="name" value="%d" data-slug="entertainment">Entertainment</label></li>
|
||||
<li><label><input type="checkbox" name="name" value="%d" data-slug="its-test">It's a test</label></li>
|
||||
<li><label><input type="checkbox" name="name" value="%d" data-slug="third-test">Third</label></li>
|
||||
</ul>''' % (self.c1.pk, self.c2.pk, self.c3.pk),
|
||||
)
|
||||
|
||||
@@ -2059,7 +2059,7 @@ class ModelOneToOneFieldTests(TestCase):
|
||||
<option value="%s">Bob Woodward</option>
|
||||
<option value="%s">Mike Royko</option>
|
||||
</select></p>
|
||||
<p><label for="id_age">Age:</label> <input type="number" name="age" id="id_age" min="0" required /></p>''' % (
|
||||
<p><label for="id_age">Age:</label> <input type="number" name="age" id="id_age" min="0" required></p>''' % (
|
||||
self.w_woodward.pk, self.w_royko.pk,
|
||||
)
|
||||
)
|
||||
@@ -2081,7 +2081,7 @@ class ModelOneToOneFieldTests(TestCase):
|
||||
<option value="%s">Mike Royko</option>
|
||||
</select></p>
|
||||
<p><label for="id_age">Age:</label>
|
||||
<input type="number" name="age" value="65" id="id_age" min="0" required /></p>''' % (
|
||||
<input type="number" name="age" value="65" id="id_age" min="0" required></p>''' % (
|
||||
self.w_woodward.pk, self.w_royko.pk,
|
||||
)
|
||||
)
|
||||
@@ -2194,7 +2194,7 @@ class FileAndImageFieldTests(TestCase):
|
||||
form = DocumentForm(instance=doc)
|
||||
self.assertHTMLEqual(
|
||||
str(form['myfile']),
|
||||
'<input id="id_myfile" name="myfile" type="file" />'
|
||||
'<input id="id_myfile" name="myfile" type="file">'
|
||||
)
|
||||
|
||||
def test_file_field_data(self):
|
||||
@@ -2569,7 +2569,7 @@ class OtherModelFormTests(TestCase):
|
||||
f = ModelFormWithMedia()
|
||||
self.assertHTMLEqual(
|
||||
str(f.media),
|
||||
'''<link href="/some/form/css" type="text/css" media="all" rel="stylesheet" />
|
||||
'''<link href="/some/form/css" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/some/form/javascript"></script>'''
|
||||
)
|
||||
|
||||
@@ -2644,9 +2644,9 @@ class OtherModelFormTests(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
str(CategoryForm()),
|
||||
'''<tr><th><label for="id_description">Description:</label></th>
|
||||
<td><input type="text" name="description" id="id_description" required /></td></tr>
|
||||
<td><input type="text" name="description" id="id_description" required></td></tr>
|
||||
<tr><th><label for="id_url">The URL:</label></th>
|
||||
<td><input id="id_url" type="text" name="url" maxlength="40" required /></td></tr>'''
|
||||
<td><input id="id_url" type="text" name="url" maxlength="40" required></td></tr>'''
|
||||
)
|
||||
# to_field_name should also work on ModelMultipleChoiceField ##################
|
||||
|
||||
@@ -2665,7 +2665,7 @@ class OtherModelFormTests(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
str(CustomFieldForExclusionForm()),
|
||||
'''<tr><th><label for="id_name">Name:</label></th>
|
||||
<td><input id="id_name" type="text" name="name" maxlength="10" required /></td></tr>'''
|
||||
<td><input id="id_name" type="text" name="name" maxlength="10" required></td></tr>'''
|
||||
)
|
||||
|
||||
def test_iterable_model_m2m(self):
|
||||
@@ -2679,7 +2679,7 @@ class OtherModelFormTests(TestCase):
|
||||
self.maxDiff = 1024
|
||||
self.assertHTMLEqual(
|
||||
form.as_p(),
|
||||
"""<p><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="50" required /></p>
|
||||
"""<p><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="50" required></p>
|
||||
<p><label for="id_colours">Colours:</label>
|
||||
<select multiple name="colours" id="id_colours" required>
|
||||
<option value="%(blue_pk)s">Blue</option>
|
||||
@@ -2699,19 +2699,19 @@ class OtherModelFormTests(TestCase):
|
||||
form.as_p(),
|
||||
"""
|
||||
<p><label for="id_title">Title:</label>
|
||||
<input id="id_title" maxlength="30" name="title" type="text" required /></p>
|
||||
<input id="id_title" maxlength="30" name="title" type="text" required></p>
|
||||
<p><label for="id_date_published">Date published:</label>
|
||||
<input id="id_date_published" name="date_published" type="text" value="{0}" required />
|
||||
<input id="initial-id_date_published" name="initial-date_published" type="hidden" value="{0}" /></p>
|
||||
<input id="id_date_published" name="date_published" type="text" value="{0}" required>
|
||||
<input id="initial-id_date_published" name="initial-date_published" type="hidden" value="{0}"></p>
|
||||
<p><label for="id_mode">Mode:</label> <select id="id_mode" name="mode">
|
||||
<option value="di" selected>direct</option>
|
||||
<option value="de">delayed</option></select>
|
||||
<input id="initial-id_mode" name="initial-mode" type="hidden" value="di" /></p>
|
||||
<input id="initial-id_mode" name="initial-mode" type="hidden" value="di"></p>
|
||||
<p><label for="id_category">Category:</label> <select id="id_category" name="category">
|
||||
<option value="1">Games</option>
|
||||
<option value="2">Comics</option>
|
||||
<option value="3" selected>Novel</option></select>
|
||||
<input id="initial-id_category" name="initial-category" type="hidden" value="3" />
|
||||
<input id="initial-id_category" name="initial-category" type="hidden" value="3">
|
||||
""".format(today_str)
|
||||
)
|
||||
empty_data = {
|
||||
|
||||
@@ -152,20 +152,20 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_form-0-name">Name:</label>'
|
||||
'<input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" />'
|
||||
'<input type="hidden" name="form-0-id" id="id_form-0-id" /></p>'
|
||||
'<input id="id_form-0-name" type="text" name="form-0-name" maxlength="100">'
|
||||
'<input type="hidden" name="form-0-id" id="id_form-0-id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_form-1-name">Name:</label>'
|
||||
'<input id="id_form-1-name" type="text" name="form-1-name" maxlength="100" />'
|
||||
'<input type="hidden" name="form-1-id" id="id_form-1-id" /></p>'
|
||||
'<input id="id_form-1-name" type="text" name="form-1-name" maxlength="100">'
|
||||
'<input type="hidden" name="form-1-id" id="id_form-1-id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[2].as_p(),
|
||||
'<p><label for="id_form-2-name">Name:</label>'
|
||||
' <input id="id_form-2-name" type="text" name="form-2-name" maxlength="100" />'
|
||||
'<input type="hidden" name="form-2-id" id="id_form-2-id" /></p>'
|
||||
' <input id="id_form-2-name" type="text" name="form-2-name" maxlength="100">'
|
||||
'<input type="hidden" name="form-2-id" id="id_form-2-id"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -202,20 +202,20 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_form-0-name">Name:</label>'
|
||||
'<input id="id_form-0-name" type="text" name="form-0-name" value="Arthur Rimbaud" maxlength="100" />'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" /></p>' % author2.id
|
||||
'<input id="id_form-0-name" type="text" name="form-0-name" value="Arthur Rimbaud" maxlength="100">'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id"></p>' % author2.id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_form-1-name">Name:</label>'
|
||||
'<input id="id_form-1-name" type="text" name="form-1-name" value="Charles Baudelaire" maxlength="100" />'
|
||||
'<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" /></p>' % author1.id
|
||||
'<input id="id_form-1-name" type="text" name="form-1-name" value="Charles Baudelaire" maxlength="100">'
|
||||
'<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id"></p>' % author1.id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[2].as_p(),
|
||||
'<p><label for="id_form-2-name">Name:</label>'
|
||||
'<input id="id_form-2-name" type="text" name="form-2-name" maxlength="100" />'
|
||||
'<input type="hidden" name="form-2-id" id="id_form-2-id" /></p>'
|
||||
'<input id="id_form-2-name" type="text" name="form-2-name" maxlength="100">'
|
||||
'<input type="hidden" name="form-2-id" id="id_form-2-id"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -253,36 +253,36 @@ class ModelFormsetTest(TestCase):
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_form-0-name">Name:</label>'
|
||||
'<input id="id_form-0-name" type="text" name="form-0-name" '
|
||||
'value="Arthur Rimbaud" maxlength="100" /></p>'
|
||||
'value="Arthur Rimbaud" maxlength="100"></p>'
|
||||
'<p><label for="id_form-0-DELETE">Delete:</label>'
|
||||
'<input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE" />'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id" /></p>' % author2.id
|
||||
'<input type="checkbox" name="form-0-DELETE" id="id_form-0-DELETE">'
|
||||
'<input type="hidden" name="form-0-id" value="%d" id="id_form-0-id"></p>' % author2.id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_form-1-name">Name:</label>'
|
||||
'<input id="id_form-1-name" type="text" name="form-1-name" '
|
||||
'value="Charles Baudelaire" maxlength="100" /></p>'
|
||||
'value="Charles Baudelaire" maxlength="100"></p>'
|
||||
'<p><label for="id_form-1-DELETE">Delete:</label>'
|
||||
'<input type="checkbox" name="form-1-DELETE" id="id_form-1-DELETE" />'
|
||||
'<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id" /></p>' % author1.id
|
||||
'<input type="checkbox" name="form-1-DELETE" id="id_form-1-DELETE">'
|
||||
'<input type="hidden" name="form-1-id" value="%d" id="id_form-1-id"></p>' % author1.id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[2].as_p(),
|
||||
'<p><label for="id_form-2-name">Name:</label>'
|
||||
'<input id="id_form-2-name" type="text" name="form-2-name" '
|
||||
'value="Paul Verlaine" maxlength="100" /></p>'
|
||||
'value="Paul Verlaine" maxlength="100"></p>'
|
||||
'<p><label for="id_form-2-DELETE">Delete:</label>'
|
||||
'<input type="checkbox" name="form-2-DELETE" id="id_form-2-DELETE" />'
|
||||
'<input type="hidden" name="form-2-id" value="%d" id="id_form-2-id" /></p>' % author3.id
|
||||
'<input type="checkbox" name="form-2-DELETE" id="id_form-2-DELETE">'
|
||||
'<input type="hidden" name="form-2-id" value="%d" id="id_form-2-id"></p>' % author3.id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[3].as_p(),
|
||||
'<p><label for="id_form-3-name">Name:</label>'
|
||||
'<input id="id_form-3-name" type="text" name="form-3-name" maxlength="100" /></p>'
|
||||
'<input id="id_form-3-name" type="text" name="form-3-name" maxlength="100"></p>'
|
||||
'<p><label for="id_form-3-DELETE">Delete:</label>'
|
||||
'<input type="checkbox" name="form-3-DELETE" id="id_form-3-DELETE" />'
|
||||
'<input type="hidden" name="form-3-id" id="id_form-3-id" /></p>'
|
||||
'<input type="checkbox" name="form-3-DELETE" id="id_form-3-DELETE">'
|
||||
'<input type="hidden" name="form-3-id" id="id_form-3-id"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -528,10 +528,10 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_form-0-name">Name:</label>'
|
||||
'<input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /></p>'
|
||||
'<input id="id_form-0-name" type="text" name="form-0-name" maxlength="100"></p>'
|
||||
'<p><label for="id_form-0-write_speed">Write speed:</label>'
|
||||
'<input type="number" name="form-0-write_speed" id="id_form-0-write_speed" />'
|
||||
'<input type="hidden" name="form-0-author_ptr" id="id_form-0-author_ptr" /></p>'
|
||||
'<input type="number" name="form-0-write_speed" id="id_form-0-write_speed">'
|
||||
'<input type="hidden" name="form-0-author_ptr" id="id_form-0-author_ptr"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -556,18 +556,18 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_form-0-name">Name:</label>'
|
||||
'<input id="id_form-0-name" type="text" name="form-0-name" value="Ernest Hemingway" maxlength="100" /></p>'
|
||||
'<input id="id_form-0-name" type="text" name="form-0-name" value="Ernest Hemingway" maxlength="100"></p>'
|
||||
'<p><label for="id_form-0-write_speed">Write speed:</label>'
|
||||
'<input type="number" name="form-0-write_speed" value="10" id="id_form-0-write_speed" />'
|
||||
'<input type="hidden" name="form-0-author_ptr" value="%d" id="id_form-0-author_ptr" /></p>' % hemingway_id
|
||||
'<input type="number" name="form-0-write_speed" value="10" id="id_form-0-write_speed">'
|
||||
'<input type="hidden" name="form-0-author_ptr" value="%d" id="id_form-0-author_ptr"></p>' % hemingway_id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_form-1-name">Name:</label>'
|
||||
'<input id="id_form-1-name" type="text" name="form-1-name" maxlength="100" /></p>'
|
||||
'<input id="id_form-1-name" type="text" name="form-1-name" maxlength="100"></p>'
|
||||
'<p><label for="id_form-1-write_speed">Write speed:</label>'
|
||||
'<input type="number" name="form-1-write_speed" id="id_form-1-write_speed" />'
|
||||
'<input type="hidden" name="form-1-author_ptr" id="id_form-1-author_ptr" /></p>'
|
||||
'<input type="number" name="form-1-write_speed" id="id_form-1-write_speed">'
|
||||
'<input type="hidden" name="form-1-author_ptr" id="id_form-1-author_ptr"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -598,23 +598,23 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_book_set-0-title">Title:</label> <input id="id_book_set-0-title" type="text" '
|
||||
'name="book_set-0-title" maxlength="100" /><input type="hidden" name="book_set-0-author" value="%d" '
|
||||
'id="id_book_set-0-author" /><input type="hidden" name="book_set-0-id" id="id_book_set-0-id" />'
|
||||
'name="book_set-0-title" maxlength="100"><input type="hidden" name="book_set-0-author" value="%d" '
|
||||
'id="id_book_set-0-author"><input type="hidden" name="book_set-0-id" id="id_book_set-0-id">'
|
||||
'</p>' % author.id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_book_set-1-title">Title:</label>'
|
||||
'<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author" />'
|
||||
'<input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>' % author.id
|
||||
'<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author">'
|
||||
'<input type="hidden" name="book_set-1-id" id="id_book_set-1-id"></p>' % author.id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[2].as_p(),
|
||||
'<p><label for="id_book_set-2-title">Title:</label>'
|
||||
'<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author" />'
|
||||
'<input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>' % author.id
|
||||
'<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author">'
|
||||
'<input type="hidden" name="book_set-2-id" id="id_book_set-2-id"></p>' % author.id
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -648,25 +648,25 @@ class ModelFormsetTest(TestCase):
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_book_set-0-title">Title:</label>'
|
||||
'<input id="id_book_set-0-title" type="text" name="book_set-0-title" '
|
||||
'value="Les Fleurs du Mal" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-0-author" value="%d" id="id_book_set-0-author" />'
|
||||
'<input type="hidden" name="book_set-0-id" value="%d" id="id_book_set-0-id" /></p>' % (
|
||||
'value="Les Fleurs du Mal" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-0-author" value="%d" id="id_book_set-0-author">'
|
||||
'<input type="hidden" name="book_set-0-id" value="%d" id="id_book_set-0-id"></p>' % (
|
||||
author.id, book1.id,
|
||||
)
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_book_set-1-title">Title:</label>'
|
||||
'<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author" />'
|
||||
'<input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>' % author.id
|
||||
'<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-1-author" value="%d" id="id_book_set-1-author">'
|
||||
'<input type="hidden" name="book_set-1-id" id="id_book_set-1-id"></p>' % author.id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[2].as_p(),
|
||||
'<p><label for="id_book_set-2-title">Title:</label>'
|
||||
'<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author" />'
|
||||
'<input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>' % author.id
|
||||
'<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-2-author" value="%d" id="id_book_set-2-author">'
|
||||
'<input type="hidden" name="book_set-2-id" id="id_book_set-2-id"></p>' % author.id
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -733,17 +733,17 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_test-0-title">Title:</label>'
|
||||
'<input id="id_test-0-title" type="text" name="test-0-title" maxlength="100" />'
|
||||
'<input type="hidden" name="test-0-author" id="id_test-0-author" />'
|
||||
'<input type="hidden" name="test-0-id" id="id_test-0-id" /></p>'
|
||||
'<input id="id_test-0-title" type="text" name="test-0-title" maxlength="100">'
|
||||
'<input type="hidden" name="test-0-author" id="id_test-0-author">'
|
||||
'<input type="hidden" name="test-0-id" id="id_test-0-id"></p>'
|
||||
)
|
||||
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_test-1-title">Title:</label>'
|
||||
'<input id="id_test-1-title" type="text" name="test-1-title" maxlength="100" />'
|
||||
'<input type="hidden" name="test-1-author" id="id_test-1-author" />'
|
||||
'<input type="hidden" name="test-1-id" id="id_test-1-id" /></p>'
|
||||
'<input id="id_test-1-title" type="text" name="test-1-title" maxlength="100">'
|
||||
'<input type="hidden" name="test-1-author" id="id_test-1-author">'
|
||||
'<input type="hidden" name="test-1-id" id="id_test-1-id"></p>'
|
||||
)
|
||||
|
||||
def test_inline_formsets_with_custom_pk(self):
|
||||
@@ -762,12 +762,12 @@ class ModelFormsetTest(TestCase):
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_bookwithcustompk_set-0-my_pk">My pk:</label>'
|
||||
'<input id="id_bookwithcustompk_set-0-my_pk" type="number" '
|
||||
'name="bookwithcustompk_set-0-my_pk" step="1" /></p>'
|
||||
'name="bookwithcustompk_set-0-my_pk" step="1"></p>'
|
||||
'<p><label for="id_bookwithcustompk_set-0-title">Title:</label>'
|
||||
'<input id="id_bookwithcustompk_set-0-title" type="text" '
|
||||
'name="bookwithcustompk_set-0-title" maxlength="100" />'
|
||||
'name="bookwithcustompk_set-0-title" maxlength="100">'
|
||||
'<input type="hidden" name="bookwithcustompk_set-0-author" '
|
||||
'value="1" id="id_bookwithcustompk_set-0-author" /></p>'
|
||||
'value="1" id="id_bookwithcustompk_set-0-author"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -802,14 +802,14 @@ class ModelFormsetTest(TestCase):
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_alternatebook_set-0-title">Title:</label>'
|
||||
'<input id="id_alternatebook_set-0-title" type="text" '
|
||||
'name="alternatebook_set-0-title" maxlength="100" /></p>'
|
||||
'name="alternatebook_set-0-title" maxlength="100"></p>'
|
||||
'<p><label for="id_alternatebook_set-0-notes">Notes:</label>'
|
||||
'<input id="id_alternatebook_set-0-notes" type="text" '
|
||||
'name="alternatebook_set-0-notes" maxlength="100" />'
|
||||
'name="alternatebook_set-0-notes" maxlength="100">'
|
||||
'<input type="hidden" name="alternatebook_set-0-author" value="1" '
|
||||
'id="id_alternatebook_set-0-author" />'
|
||||
'id="id_alternatebook_set-0-author">'
|
||||
'<input type="hidden" name="alternatebook_set-0-book_ptr" '
|
||||
'id="id_alternatebook_set-0-book_ptr" /></p>'
|
||||
'id="id_alternatebook_set-0-book_ptr"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -905,39 +905,39 @@ class ModelFormsetTest(TestCase):
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_book_set-0-title">Title:</label>'
|
||||
'<input id="id_book_set-0-title" type="text" name="book_set-0-title" '
|
||||
'value="Les Paradis Artificiels" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author" />'
|
||||
'<input type="hidden" name="book_set-0-id" value="1" id="id_book_set-0-id" /></p>'
|
||||
'value="Les Paradis Artificiels" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author">'
|
||||
'<input type="hidden" name="book_set-0-id" value="1" id="id_book_set-0-id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_book_set-1-title">Title:</label>'
|
||||
'<input id="id_book_set-1-title" type="text" name="book_set-1-title" '
|
||||
'value="Les Fleurs du Mal" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author" />'
|
||||
'<input type="hidden" name="book_set-1-id" value="2" id="id_book_set-1-id" /></p>'
|
||||
'value="Les Fleurs du Mal" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author">'
|
||||
'<input type="hidden" name="book_set-1-id" value="2" id="id_book_set-1-id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[2].as_p(),
|
||||
'<p><label for="id_book_set-2-title">Title:</label>'
|
||||
'<input id="id_book_set-2-title" type="text" name="book_set-2-title" '
|
||||
'value="Flowers of Evil" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author" />'
|
||||
'<input type="hidden" name="book_set-2-id" value="3" id="id_book_set-2-id" /></p>'
|
||||
'value="Flowers of Evil" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author">'
|
||||
'<input type="hidden" name="book_set-2-id" value="3" id="id_book_set-2-id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[3].as_p(),
|
||||
'<p><label for="id_book_set-3-title">Title:</label>'
|
||||
'<input id="id_book_set-3-title" type="text" name="book_set-3-title" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-3-author" value="1" id="id_book_set-3-author" />'
|
||||
'<input type="hidden" name="book_set-3-id" id="id_book_set-3-id" /></p>'
|
||||
'<input id="id_book_set-3-title" type="text" name="book_set-3-title" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-3-author" value="1" id="id_book_set-3-author">'
|
||||
'<input type="hidden" name="book_set-3-id" id="id_book_set-3-id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[4].as_p(),
|
||||
'<p><label for="id_book_set-4-title">Title:</label>'
|
||||
'<input id="id_book_set-4-title" type="text" name="book_set-4-title" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-4-author" value="1" id="id_book_set-4-author" />'
|
||||
'<input type="hidden" name="book_set-4-id" id="id_book_set-4-id" /></p>'
|
||||
'<input id="id_book_set-4-title" type="text" name="book_set-4-title" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-4-author" value="1" id="id_book_set-4-author">'
|
||||
'<input type="hidden" name="book_set-4-id" id="id_book_set-4-id"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -962,23 +962,23 @@ class ModelFormsetTest(TestCase):
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_book_set-0-title">Title:</label>'
|
||||
'<input id="id_book_set-0-title" type="text" name="book_set-0-title" '
|
||||
'value="Flowers of Evil" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author" />'
|
||||
'<input type="hidden" name="book_set-0-id" value="3" id="id_book_set-0-id" /></p>'
|
||||
'value="Flowers of Evil" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-0-author" value="1" id="id_book_set-0-author">'
|
||||
'<input type="hidden" name="book_set-0-id" value="3" id="id_book_set-0-id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_book_set-1-title">Title:</label>'
|
||||
'<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author" />'
|
||||
'<input type="hidden" name="book_set-1-id" id="id_book_set-1-id" /></p>'
|
||||
'<input id="id_book_set-1-title" type="text" name="book_set-1-title" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-1-author" value="1" id="id_book_set-1-author">'
|
||||
'<input type="hidden" name="book_set-1-id" id="id_book_set-1-id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[2].as_p(),
|
||||
'<p><label for="id_book_set-2-title">Title:</label>'
|
||||
'<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100" />'
|
||||
'<input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author" />'
|
||||
'<input type="hidden" name="book_set-2-id" id="id_book_set-2-id" /></p>'
|
||||
'<input id="id_book_set-2-title" type="text" name="book_set-2-title" maxlength="100">'
|
||||
'<input type="hidden" name="book_set-2-author" value="1" id="id_book_set-2-author">'
|
||||
'<input type="hidden" name="book_set-2-id" id="id_book_set-2-id"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -1040,9 +1040,9 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_form-0-my_pk">My pk:</label> <input id="id_form-0-my_pk" type="text" '
|
||||
'name="form-0-my_pk" maxlength="10" /></p>'
|
||||
'name="form-0-my_pk" maxlength="10"></p>'
|
||||
'<p><label for="id_form-0-some_field">Some field:</label>'
|
||||
'<input id="id_form-0-some_field" type="text" name="form-0-some_field" maxlength="100" /></p>'
|
||||
'<input id="id_form-0-some_field" type="text" name="form-0-some_field" maxlength="100"></p>'
|
||||
)
|
||||
|
||||
# Custom primary keys with ForeignKey, OneToOneField and AutoField ############
|
||||
@@ -1055,16 +1055,16 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_owner_set-0-name">Name:</label>'
|
||||
'<input id="id_owner_set-0-name" type="text" name="owner_set-0-name" maxlength="100" />'
|
||||
'<input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place" />'
|
||||
'<input type="hidden" name="owner_set-0-auto_id" id="id_owner_set-0-auto_id" /></p>'
|
||||
'<input id="id_owner_set-0-name" type="text" name="owner_set-0-name" maxlength="100">'
|
||||
'<input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place">'
|
||||
'<input type="hidden" name="owner_set-0-auto_id" id="id_owner_set-0-auto_id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_owner_set-1-name">Name:</label>'
|
||||
'<input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100" />'
|
||||
'<input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place" />'
|
||||
'<input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id" /></p>'
|
||||
'<input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100">'
|
||||
'<input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place">'
|
||||
'<input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -1089,24 +1089,24 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_owner_set-0-name">Name:</label>'
|
||||
'<input id="id_owner_set-0-name" type="text" name="owner_set-0-name" value="Joe Perry" maxlength="100" />'
|
||||
'<input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place" />'
|
||||
'<input type="hidden" name="owner_set-0-auto_id" value="%d" id="id_owner_set-0-auto_id" /></p>'
|
||||
'<input id="id_owner_set-0-name" type="text" name="owner_set-0-name" value="Joe Perry" maxlength="100">'
|
||||
'<input type="hidden" name="owner_set-0-place" value="1" id="id_owner_set-0-place">'
|
||||
'<input type="hidden" name="owner_set-0-auto_id" value="%d" id="id_owner_set-0-auto_id"></p>'
|
||||
% owner1.auto_id
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[1].as_p(),
|
||||
'<p><label for="id_owner_set-1-name">Name:</label>'
|
||||
'<input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100" />'
|
||||
'<input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place" />'
|
||||
'<input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id" /></p>'
|
||||
'<input id="id_owner_set-1-name" type="text" name="owner_set-1-name" maxlength="100">'
|
||||
'<input type="hidden" name="owner_set-1-place" value="1" id="id_owner_set-1-place">'
|
||||
'<input type="hidden" name="owner_set-1-auto_id" id="id_owner_set-1-auto_id"></p>'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[2].as_p(),
|
||||
'<p><label for="id_owner_set-2-name">Name:</label>'
|
||||
'<input id="id_owner_set-2-name" type="text" name="owner_set-2-name" maxlength="100" />'
|
||||
'<input type="hidden" name="owner_set-2-place" value="1" id="id_owner_set-2-place" />'
|
||||
'<input type="hidden" name="owner_set-2-auto_id" id="id_owner_set-2-auto_id" /></p>'
|
||||
'<input id="id_owner_set-2-name" type="text" name="owner_set-2-name" maxlength="100">'
|
||||
'<input type="hidden" name="owner_set-2-place" value="1" id="id_owner_set-2-place">'
|
||||
'<input type="hidden" name="owner_set-2-auto_id" id="id_owner_set-2-auto_id"></p>'
|
||||
)
|
||||
|
||||
data = {
|
||||
@@ -1141,7 +1141,7 @@ class ModelFormsetTest(TestCase):
|
||||
'<option value="%d">Jack Berry at Giordanos</option>'
|
||||
'</select></p>'
|
||||
'<p><label for="id_form-0-age">Age:</label>'
|
||||
'<input type="number" name="form-0-age" id="id_form-0-age" min="0" /></p>'
|
||||
'<input type="number" name="form-0-age" id="id_form-0-age" min="0"></p>'
|
||||
% (owner1.auto_id, owner2.auto_id)
|
||||
)
|
||||
|
||||
@@ -1154,8 +1154,8 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_ownerprofile-0-age">Age:</label>'
|
||||
'<input type="number" name="ownerprofile-0-age" id="id_ownerprofile-0-age" min="0" />'
|
||||
'<input type="hidden" name="ownerprofile-0-owner" value="%d" id="id_ownerprofile-0-owner" /></p>'
|
||||
'<input type="number" name="ownerprofile-0-age" id="id_ownerprofile-0-age" min="0">'
|
||||
'<input type="hidden" name="ownerprofile-0-owner" value="%d" id="id_ownerprofile-0-owner"></p>'
|
||||
% owner1.auto_id
|
||||
)
|
||||
|
||||
@@ -1179,8 +1179,8 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_ownerprofile-0-age">Age:</label>'
|
||||
'<input type="number" name="ownerprofile-0-age" value="54" id="id_ownerprofile-0-age" min="0" />'
|
||||
'<input type="hidden" name="ownerprofile-0-owner" value="%d" id="id_ownerprofile-0-owner" /></p>'
|
||||
'<input type="number" name="ownerprofile-0-age" value="54" id="id_ownerprofile-0-age" min="0">'
|
||||
'<input type="hidden" name="ownerprofile-0-owner" value="%d" id="id_ownerprofile-0-owner"></p>'
|
||||
% owner1.auto_id
|
||||
)
|
||||
|
||||
@@ -1212,11 +1212,11 @@ class ModelFormsetTest(TestCase):
|
||||
self.assertHTMLEqual(
|
||||
formset.forms[0].as_p(),
|
||||
'<p><label for="id_location_set-0-lat">Lat:</label>'
|
||||
'<input id="id_location_set-0-lat" type="text" name="location_set-0-lat" maxlength="100" /></p>'
|
||||
'<input id="id_location_set-0-lat" type="text" name="location_set-0-lat" maxlength="100"></p>'
|
||||
'<p><label for="id_location_set-0-lon">Lon:</label> '
|
||||
'<input id="id_location_set-0-lon" type="text" name="location_set-0-lon" maxlength="100" />'
|
||||
'<input type="hidden" name="location_set-0-place" value="1" id="id_location_set-0-place" />'
|
||||
'<input type="hidden" name="location_set-0-id" id="id_location_set-0-id" /></p>'
|
||||
'<input id="id_location_set-0-lon" type="text" name="location_set-0-lon" maxlength="100">'
|
||||
'<input type="hidden" name="location_set-0-place" value="1" id="id_location_set-0-place">'
|
||||
'<input type="hidden" name="location_set-0-id" id="id_location_set-0-id"></p>'
|
||||
)
|
||||
|
||||
def test_foreign_keys_in_parents(self):
|
||||
@@ -1372,13 +1372,13 @@ class ModelFormsetTest(TestCase):
|
||||
result,
|
||||
'<p><label for="id_membership_set-0-date_joined">Date joined:</label>'
|
||||
'<input type="text" name="membership_set-0-date_joined" '
|
||||
'value="__DATETIME__" id="id_membership_set-0-date_joined" />'
|
||||
'value="__DATETIME__" id="id_membership_set-0-date_joined">'
|
||||
'<input type="hidden" name="initial-membership_set-0-date_joined" value="__DATETIME__" '
|
||||
'id="initial-membership_set-0-id_membership_set-0-date_joined" /></p>'
|
||||
'id="initial-membership_set-0-id_membership_set-0-date_joined"></p>'
|
||||
'<p><label for="id_membership_set-0-karma">Karma:</label>'
|
||||
'<input type="number" name="membership_set-0-karma" id="id_membership_set-0-karma" />'
|
||||
'<input type="hidden" name="membership_set-0-person" value="%d" id="id_membership_set-0-person" />'
|
||||
'<input type="hidden" name="membership_set-0-id" id="id_membership_set-0-id" /></p>'
|
||||
'<input type="number" name="membership_set-0-karma" id="id_membership_set-0-karma">'
|
||||
'<input type="hidden" name="membership_set-0-person" value="%d" id="id_membership_set-0-person">'
|
||||
'<input type="hidden" name="membership_set-0-id" id="id_membership_set-0-id"></p>'
|
||||
% person.id)
|
||||
|
||||
# test for validation with callable defaults. Validations rely on hidden fields
|
||||
@@ -1724,7 +1724,7 @@ class TestModelFormsetOverridesTroughFormMeta(TestCase):
|
||||
form = PoetFormSet.form()
|
||||
self.assertHTMLEqual(
|
||||
"%s" % form['name'],
|
||||
'<input id="id_name" maxlength="100" type="text" class="poet" name="name" required />'
|
||||
'<input id="id_name" maxlength="100" type="text" class="poet" name="name" required>'
|
||||
)
|
||||
|
||||
def test_inlineformset_factory_widgets(self):
|
||||
@@ -1735,7 +1735,7 @@ class TestModelFormsetOverridesTroughFormMeta(TestCase):
|
||||
form = BookFormSet.form()
|
||||
self.assertHTMLEqual(
|
||||
"%s" % form['title'],
|
||||
'<input class="book" id="id_title" maxlength="100" name="title" type="text" required />'
|
||||
'<input class="book" id="id_title" maxlength="100" name="title" type="text" required>'
|
||||
)
|
||||
|
||||
def test_modelformset_factory_labels_overrides(self):
|
||||
|
||||
@@ -805,9 +805,9 @@ class TestSplitFormField(PostgreSQLTestCase):
|
||||
<tr>
|
||||
<th><label for="id_array_0">Array:</label></th>
|
||||
<td>
|
||||
<input id="id_array_0" name="array_0" type="text" required />
|
||||
<input id="id_array_1" name="array_1" type="text" required />
|
||||
<input id="id_array_2" name="array_2" type="text" required />
|
||||
<input id="id_array_0" name="array_0" type="text" required>
|
||||
<input id="id_array_1" name="array_1" type="text" required>
|
||||
<input id="id_array_2" name="array_2" type="text" required>
|
||||
</td>
|
||||
</tr>
|
||||
''')
|
||||
@@ -876,8 +876,8 @@ class TestSplitFormWidget(PostgreSQLWidgetTestCase):
|
||||
self.check_html(
|
||||
SplitArrayWidget(forms.TextInput(), size=2), 'array', None,
|
||||
"""
|
||||
<input name="array_0" type="text" />
|
||||
<input name="array_1" type="text" />
|
||||
<input name="array_0" type="text">
|
||||
<input name="array_1" type="text">
|
||||
"""
|
||||
)
|
||||
|
||||
@@ -887,8 +887,8 @@ class TestSplitFormWidget(PostgreSQLWidgetTestCase):
|
||||
'array', ['val1', 'val2'], attrs={'id': 'foo'},
|
||||
html=(
|
||||
"""
|
||||
<input id="foo_0" name="array_0" type="text" value="val1" />
|
||||
<input id="foo_1" name="array_1" type="text" value="val2" />
|
||||
<input id="foo_0" name="array_0" type="text" value="val1">
|
||||
<input id="foo_1" name="array_1" type="text" value="val2">
|
||||
"""
|
||||
)
|
||||
)
|
||||
|
||||
@@ -468,10 +468,10 @@ class TestFormField(PostgreSQLTestCase):
|
||||
<label for="id_field_0">Field:</label>
|
||||
</th>
|
||||
<td>
|
||||
<input id="id_field_0_0" name="field_0_0" type="text" />
|
||||
<input id="id_field_0_1" name="field_0_1" type="text" />
|
||||
<input id="id_field_1_0" name="field_1_0" type="text" />
|
||||
<input id="id_field_1_1" name="field_1_1" type="text" />
|
||||
<input id="id_field_0_0" name="field_0_0" type="text">
|
||||
<input id="id_field_0_1" name="field_0_1" type="text">
|
||||
<input id="id_field_1_0" name="field_1_0" type="text">
|
||||
<input id="id_field_1_1" name="field_1_1" type="text">
|
||||
</td>
|
||||
</tr>
|
||||
''')
|
||||
@@ -499,8 +499,8 @@ class TestFormField(PostgreSQLTestCase):
|
||||
<tr>
|
||||
<th><label for="id_ints_0">Ints:</label></th>
|
||||
<td>
|
||||
<input id="id_ints_0" name="ints_0" type="number" />
|
||||
<input id="id_ints_1" name="ints_1" type="number" />
|
||||
<input id="id_ints_0" name="ints_0" type="number">
|
||||
<input id="id_ints_1" name="ints_1" type="number">
|
||||
</td>
|
||||
</tr>
|
||||
''')
|
||||
@@ -700,11 +700,11 @@ class TestWidget(PostgreSQLTestCase):
|
||||
f = pg_forms.ranges.DateTimeRangeField()
|
||||
self.assertHTMLEqual(
|
||||
f.widget.render('datetimerange', ''),
|
||||
'<input type="text" name="datetimerange_0" /><input type="text" name="datetimerange_1" />'
|
||||
'<input type="text" name="datetimerange_0"><input type="text" name="datetimerange_1">'
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
f.widget.render('datetimerange', None),
|
||||
'<input type="text" name="datetimerange_0" /><input type="text" name="datetimerange_1" />'
|
||||
'<input type="text" name="datetimerange_0"><input type="text" name="datetimerange_1">'
|
||||
)
|
||||
dt_range = DateTimeTZRange(
|
||||
datetime.datetime(2006, 1, 10, 7, 30),
|
||||
@@ -712,6 +712,6 @@ class TestWidget(PostgreSQLTestCase):
|
||||
)
|
||||
self.assertHTMLEqual(
|
||||
f.widget.render('datetimerange', dt_range),
|
||||
'<input type="text" name="datetimerange_0" value="2006-01-10 07:30:00" />'
|
||||
'<input type="text" name="datetimerange_1" value="2006-02-12 09:50:00" />'
|
||||
'<input type="text" name="datetimerange_0" value="2006-01-10 07:30:00">'
|
||||
'<input type="text" name="datetimerange_1" value="2006-02-12 09:50:00">'
|
||||
)
|
||||
|
||||
@@ -29,8 +29,8 @@ class StaticFilesFormsMediaTestCase(SimpleTestCase):
|
||||
)
|
||||
self.assertEqual(
|
||||
str(m),
|
||||
"""<link href="https://example.com/assets/path/to/css1" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet" />
|
||||
"""<link href="https://example.com/assets/path/to/css1" type="text/css" media="all" rel="stylesheet">
|
||||
<link href="/path/to/css2" type="text/css" media="all" rel="stylesheet">
|
||||
<script type="text/javascript" src="/path/to/js1"></script>
|
||||
<script type="text/javascript" src="http://media.other.com/path/to/js2"></script>
|
||||
<script type="text/javascript" src="https://secure.other.com/path/to/js3"></script>
|
||||
|
||||
@@ -81,7 +81,7 @@ class TemplateStringsTests(SimpleTestCase):
|
||||
template = self.engine.get_template('template_backends/csrf.html')
|
||||
content = template.render(request=request)
|
||||
|
||||
expected = '<input type="hidden" name="csrfmiddlewaretoken" value="([^"]+)" />'
|
||||
expected = '<input type="hidden" name="csrfmiddlewaretoken" value="([^"]+)">'
|
||||
match = re.match(expected, content) or re.match(expected.replace('"', "'"), content)
|
||||
self.assertTrue(match, "hidden csrftoken field not found in output")
|
||||
self.assertTrue(equivalent_tokens(match.group(1), get_token(request)))
|
||||
|
||||
@@ -15,12 +15,12 @@ class LinebreaksTests(SimpleTestCase):
|
||||
@setup({'linebreaks01': '{{ a|linebreaks }} {{ b|linebreaks }}'})
|
||||
def test_linebreaks01(self):
|
||||
output = self.engine.render_to_string('linebreaks01', {"a": "x&\ny", "b": mark_safe("x&\ny")})
|
||||
self.assertEqual(output, "<p>x&<br />y</p> <p>x&<br />y</p>")
|
||||
self.assertEqual(output, "<p>x&<br>y</p> <p>x&<br>y</p>")
|
||||
|
||||
@setup({'linebreaks02': '{% autoescape off %}{{ a|linebreaks }} {{ b|linebreaks }}{% endautoescape %}'})
|
||||
def test_linebreaks02(self):
|
||||
output = self.engine.render_to_string('linebreaks02', {"a": "x&\ny", "b": mark_safe("x&\ny")})
|
||||
self.assertEqual(output, "<p>x&<br />y</p> <p>x&<br />y</p>")
|
||||
self.assertEqual(output, "<p>x&<br>y</p> <p>x&<br>y</p>")
|
||||
|
||||
|
||||
class FunctionTests(SimpleTestCase):
|
||||
@@ -29,13 +29,13 @@ class FunctionTests(SimpleTestCase):
|
||||
self.assertEqual(linebreaks_filter('line 1'), '<p>line 1</p>')
|
||||
|
||||
def test_newline(self):
|
||||
self.assertEqual(linebreaks_filter('line 1\nline 2'), '<p>line 1<br />line 2</p>')
|
||||
self.assertEqual(linebreaks_filter('line 1\nline 2'), '<p>line 1<br>line 2</p>')
|
||||
|
||||
def test_carriage(self):
|
||||
self.assertEqual(linebreaks_filter('line 1\rline 2'), '<p>line 1<br />line 2</p>')
|
||||
self.assertEqual(linebreaks_filter('line 1\rline 2'), '<p>line 1<br>line 2</p>')
|
||||
|
||||
def test_carriage_newline(self):
|
||||
self.assertEqual(linebreaks_filter('line 1\r\nline 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_non_string_input(self):
|
||||
self.assertEqual(linebreaks_filter(123), '<p>123</p>')
|
||||
@@ -43,18 +43,18 @@ class FunctionTests(SimpleTestCase):
|
||||
def test_autoescape(self):
|
||||
self.assertEqual(
|
||||
linebreaks_filter('foo\n<a>bar</a>\nbuz'),
|
||||
'<p>foo<br /><a>bar</a><br />buz</p>',
|
||||
'<p>foo<br><a>bar</a><br>buz</p>',
|
||||
)
|
||||
|
||||
def test_autoescape_off(self):
|
||||
self.assertEqual(
|
||||
linebreaks_filter('foo\n<a>bar</a>\nbuz', autoescape=False),
|
||||
'<p>foo<br /><a>bar</a><br />buz</p>',
|
||||
'<p>foo<br><a>bar</a><br>buz</p>',
|
||||
)
|
||||
|
||||
def test_lazy_string_input(self):
|
||||
add_header = lazy(lambda string: 'Header\n\n' + string, str)
|
||||
self.assertEqual(
|
||||
linebreaks_filter(add_header('line 1\r\nline2')),
|
||||
'<p>Header</p>\n\n<p>line 1<br />line2</p>'
|
||||
'<p>Header</p>\n\n<p>line 1<br>line2</p>'
|
||||
)
|
||||
|
||||
@@ -14,24 +14,24 @@ class LinebreaksbrTests(SimpleTestCase):
|
||||
@setup({'linebreaksbr01': '{{ a|linebreaksbr }} {{ b|linebreaksbr }}'})
|
||||
def test_linebreaksbr01(self):
|
||||
output = self.engine.render_to_string('linebreaksbr01', {"a": "x&\ny", "b": mark_safe("x&\ny")})
|
||||
self.assertEqual(output, "x&<br />y x&<br />y")
|
||||
self.assertEqual(output, "x&<br>y x&<br>y")
|
||||
|
||||
@setup({'linebreaksbr02': '{% autoescape off %}{{ a|linebreaksbr }} {{ b|linebreaksbr }}{% endautoescape %}'})
|
||||
def test_linebreaksbr02(self):
|
||||
output = self.engine.render_to_string('linebreaksbr02', {"a": "x&\ny", "b": mark_safe("x&\ny")})
|
||||
self.assertEqual(output, "x&<br />y x&<br />y")
|
||||
self.assertEqual(output, "x&<br>y x&<br>y")
|
||||
|
||||
|
||||
class FunctionTests(SimpleTestCase):
|
||||
|
||||
def test_newline(self):
|
||||
self.assertEqual(linebreaksbr('line 1\nline 2'), 'line 1<br />line 2')
|
||||
self.assertEqual(linebreaksbr('line 1\nline 2'), 'line 1<br>line 2')
|
||||
|
||||
def test_carriage(self):
|
||||
self.assertEqual(linebreaksbr('line 1\rline 2'), 'line 1<br />line 2')
|
||||
self.assertEqual(linebreaksbr('line 1\rline 2'), 'line 1<br>line 2')
|
||||
|
||||
def test_carriage_newline(self):
|
||||
self.assertEqual(linebreaksbr('line 1\r\nline 2'), 'line 1<br />line 2')
|
||||
self.assertEqual(linebreaksbr('line 1\r\nline 2'), 'line 1<br>line 2')
|
||||
|
||||
def test_non_string_input(self):
|
||||
self.assertEqual(linebreaksbr(123), '123')
|
||||
@@ -39,11 +39,11 @@ class FunctionTests(SimpleTestCase):
|
||||
def test_autoescape(self):
|
||||
self.assertEqual(
|
||||
linebreaksbr('foo\n<a>bar</a>\nbuz'),
|
||||
'foo<br /><a>bar</a><br />buz',
|
||||
'foo<br><a>bar</a><br>buz',
|
||||
)
|
||||
|
||||
def test_autoescape_off(self):
|
||||
self.assertEqual(
|
||||
linebreaksbr('foo\n<a>bar</a>\nbuz', autoescape=False),
|
||||
'foo<br /><a>bar</a><br />buz',
|
||||
'foo<br><a>bar</a><br>buz',
|
||||
)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
<tr><td><label for="id_password">Password:</label></td><td>{{ form.password }}</td></tr>
|
||||
</table>
|
||||
|
||||
<input type="submit" value="login" />
|
||||
<input type="hidden" name="next" value="{{ next }}" />
|
||||
<input type="submit" value="login">
|
||||
<input type="hidden" name="next" value="{{ next }}">
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
@@ -57,8 +57,8 @@ class TestUtilsHtml(SimpleTestCase):
|
||||
def test_linebreaks(self):
|
||||
items = (
|
||||
("para1\n\npara2\r\rpara3", "<p>para1</p>\n\n<p>para2</p>\n\n<p>para3</p>"),
|
||||
("para1\nsub1\rsub2\n\npara2", "<p>para1<br />sub1<br />sub2</p>\n\n<p>para2</p>"),
|
||||
("para1\r\n\r\npara2\rsub1\r\rpara4", "<p>para1</p>\n\n<p>para2<br />sub1</p>\n\n<p>para4</p>"),
|
||||
("para1\nsub1\rsub2\n\npara2", "<p>para1<br>sub1<br>sub2</p>\n\n<p>para2</p>"),
|
||||
("para1\r\n\r\npara2\rsub1\r\rpara4", "<p>para1</p>\n\n<p>para2<br>sub1</p>\n\n<p>para4</p>"),
|
||||
("para1\tmore\n\npara2", "<p>para1\tmore</p>\n\n<p>para2</p>"),
|
||||
)
|
||||
for value, output in items:
|
||||
|
||||
Reference in New Issue
Block a user