From 844a24bbb97af663ebf8dbeab4499acafe105943 Mon Sep 17 00:00:00 2001 From: Carl Meyer Date: Tue, 31 Jan 2012 20:36:11 +0000 Subject: Fixed #16921 -- Added assertHTMLEqual and assertHTMLNotEqual assertions, and converted Django tests to use them where appropriate. Thanks Greg Müllegger. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.djangoproject.com/svn/django/trunk@17414 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- .../regressiontests/forms/tests/error_messages.py | 11 +- tests/regressiontests/forms/tests/extra.py | 35 +- tests/regressiontests/forms/tests/fields.py | 3 +- tests/regressiontests/forms/tests/forms.py | 357 +++++++++--------- tests/regressiontests/forms/tests/formsets.py | 38 +- tests/regressiontests/forms/tests/models.py | 4 +- tests/regressiontests/forms/tests/regressions.py | 28 +- tests/regressiontests/forms/tests/util.py | 27 +- tests/regressiontests/forms/tests/widgets.py | 404 ++++++++++----------- 9 files changed, 457 insertions(+), 450 deletions(-) (limited to 'tests/regressiontests/forms') diff --git a/tests/regressiontests/forms/tests/error_messages.py b/tests/regressiontests/forms/tests/error_messages.py index 1c262d683d..b7b4e986b3 100644 --- a/tests/regressiontests/forms/tests/error_messages.py +++ b/tests/regressiontests/forms/tests/error_messages.py @@ -5,7 +5,6 @@ from __future__ import absolute_import from django.core.files.uploadedfile import SimpleUploadedFile from django.forms import * from django.test import TestCase -from django.utils import unittest from django.utils.safestring import mark_safe from .fields import verify_exists_urls @@ -19,7 +18,7 @@ class AssertFormErrorsMixin(object): except ValidationError, e: self.assertEqual(e.messages, expected) -class FormsErrorMessagesTestCase(unittest.TestCase, AssertFormErrorsMixin): +class FormsErrorMessagesTestCase(TestCase, AssertFormErrorsMixin): def test_charfield(self): e = { 'required': 'REQUIRED', @@ -230,13 +229,13 @@ class FormsErrorMessagesTestCase(unittest.TestCase, AssertFormErrorsMixin): # This form should print errors the default way. form1 = TestForm({'first_name': 'John'}) - self.assertEqual(str(form1['last_name'].errors), '') - self.assertEqual(str(form1.errors['__all__']), '') + self.assertHTMLEqual(str(form1['last_name'].errors), '') + self.assertHTMLEqual(str(form1.errors['__all__']), '') # This one should wrap error groups in the customized way. form2 = TestForm({'first_name': 'John'}, error_class=CustomErrorList) - self.assertEqual(str(form2['last_name'].errors), '

This field is required.

') - self.assertEqual(str(form2.errors['__all__']), '

I like to be awkward.

') + self.assertHTMLEqual(str(form2['last_name'].errors), '

This field is required.

') + self.assertHTMLEqual(str(form2.errors['__all__']), '

I like to be awkward.

') class ModelChoiceFieldErrorMessagesTestCase(TestCase, AssertFormErrorsMixin): diff --git a/tests/regressiontests/forms/tests/extra.py b/tests/regressiontests/forms/tests/extra.py index cbec105e94..3c5dfabb61 100644 --- a/tests/regressiontests/forms/tests/extra.py +++ b/tests/regressiontests/forms/tests/extra.py @@ -8,7 +8,8 @@ from django.conf import settings from django.forms import * from django.forms.extras import SelectDateWidget from django.forms.util import ErrorList -from django.utils import translation, unittest +from django.test import TestCase +from django.utils import translation from django.utils.encoding import force_unicode, smart_unicode from .error_messages import AssertFormErrorsMixin @@ -20,7 +21,7 @@ class GetDate(Form): class GetDateShowHiddenInitial(Form): mydate = DateField(widget=SelectDateWidget, show_hidden_initial=True) -class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin): +class FormsExtraTestCase(TestCase, AssertFormErrorsMixin): ############### # Extra stuff # ############### @@ -28,7 +29,7 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin): # The forms library comes with some extra, higher-level Field and Widget def test_selectdate(self): w = SelectDateWidget(years=('2007','2008','2009','2010','2011','2012','2013','2014','2015','2016')) - self.assertEqual(w.render('mydate', ''), """ @@ -43,6 +44,7 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin): + + """) - self.assertEqual(w.render('mydate', None), w.render('mydate', '')) + self.assertHTMLEqual(w.render('mydate', None), w.render('mydate', '')) - self.assertEqual(w.render('mydate', '2010-04-15'), """ @@ -153,10 +156,10 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin): """) # Accepts a datetime or a string: - self.assertEqual(w.render('mydate', datetime.date(2010, 4, 15)), w.render('mydate', '2010-04-15')) + self.assertHTMLEqual(w.render('mydate', datetime.date(2010, 4, 15)), w.render('mydate', '2010-04-15')) # Invalid dates still render the failed date: - self.assertEqual(w.render('mydate', '2010-02-31'), """ @@ -218,7 +221,7 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin): # Using a SelectDateWidget in a form: w = SelectDateWidget(years=('2007','2008','2009','2010','2011','2012','2013','2014','2015','2016'), required=False) - self.assertEqual(w.render('mydate', ''), """ @@ -280,7 +283,7 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin): """) - self.assertEqual(w.render('mydate', '2010-04-15'), """ @@ -351,7 +354,7 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin): # we must be prepared to accept the input from the "as_hidden" # rendering as well. - self.assertEqual(a['mydate'].as_hidden(), '') + self.assertHTMLEqual(a['mydate'].as_hidden(), '') b = GetDate({'mydate':'2008-4-1'}) self.assertTrue(b.is_valid()) @@ -392,7 +395,7 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin): return u'\n'.join(rendered_widgets) w = ComplexMultiWidget() - self.assertEqual(w.render('name', 'some text,JP,2007-04-25 06:24:00'), """ + self.assertHTMLEqual(w.render('name', 'some text,JP,2007-04-25 06:24:00'), """ + self.assertHTMLEqual(f.as_table(), """ """) f = ComplexFieldForm({'field1_0':'some text','field1_1':['J','P'], 'field1_2_0':'2007-04-25', 'field1_2_1':'06:24:00'}) - self.assertEqual(f.as_table(), """ + self.assertHTMLEqual(f.as_table(), """

+ self.assertHTMLEqual(f.as_p(), """

Name:

Enter a valid e-mail address.

Email:

This field is required.
@@ -617,7 +620,7 @@ class FormsExtraTestCase(unittest.TestCase, AssertFormErrorsMixin): self.assertTrue(FormWithImage().is_multipart()) -class FormsExtraL10NTestCase(unittest.TestCase): +class FormsExtraL10NTestCase(TestCase): def setUp(self): super(FormsExtraL10NTestCase, self).setUp() self.old_use_l10n = getattr(settings, 'USE_L10N', False) @@ -633,7 +636,7 @@ class FormsExtraL10NTestCase(unittest.TestCase): w = SelectDateWidget(years=('2007','2008','2009','2010','2011','2012','2013','2014','2015','2016'), required=False) self.assertEqual(w.value_from_datadict({'date_year': '2010', 'date_month': '8', 'date_day': '13'}, {}, 'date'), '13-08-2010') - self.assertEqual(w.render('date', '13-08-2010'), """ diff --git a/tests/regressiontests/forms/tests/fields.py b/tests/regressiontests/forms/tests/fields.py index 7dd3a27dc1..03e0ff65a3 100644 --- a/tests/regressiontests/forms/tests/fields.py +++ b/tests/regressiontests/forms/tests/fields.py @@ -674,6 +674,7 @@ class FieldsTests(SimpleTestCase): self.assertEqual(u'', f.clean('')) self.assertEqual(u'http://www.google.com/', f.clean('http://www.google.com')) + @verify_exists_urls(('http://example.com/',)) def test_urlfield_5(self): f = URLField(min_length=15, max_length=20) self.assertRaisesMessage(ValidationError, "[u'Ensure this value has at least 15 characters (it has 13).']", f.clean, 'http://f.com') @@ -852,7 +853,7 @@ class FieldsTests(SimpleTestCase): hidden_nullbool1 = NullBooleanField(widget=HiddenInput, initial=True) hidden_nullbool2 = NullBooleanField(widget=HiddenInput, initial=False) f = HiddenNullBooleanForm() - self.assertEqual('', str(f)) + self.assertHTMLEqual('', str(f)) def test_nullbooleanfield_3(self): class HiddenNullBooleanForm(Form): diff --git a/tests/regressiontests/forms/tests/forms.py b/tests/regressiontests/forms/tests/forms.py index 4e9cc16f23..6425a007d1 100644 --- a/tests/regressiontests/forms/tests/forms.py +++ b/tests/regressiontests/forms/tests/forms.py @@ -5,9 +5,9 @@ from django.core.files.uploadedfile import SimpleUploadedFile from django.forms import * from django.http import QueryDict from django.template import Template, Context +from django.test import TestCase from django.utils.datastructures import MultiValueDict, MergeDict from django.utils.safestring import mark_safe -from django.utils.unittest import TestCase class Person(Form): @@ -34,14 +34,14 @@ class FormsTestCase(TestCase): self.assertTrue(p.is_bound) self.assertEqual(p.errors, {}) self.assertTrue(p.is_valid()) - self.assertEqual(p.errors.as_ul(), u'') + self.assertHTMLEqual(p.errors.as_ul(), u'') self.assertEqual(p.errors.as_text(), u'') self.assertEqual(p.cleaned_data["first_name"], u'John') self.assertEqual(p.cleaned_data["last_name"], u'Lennon') self.assertEqual(p.cleaned_data["birthday"], datetime.date(1940, 10, 9)) - self.assertEqual(str(p['first_name']), '') - self.assertEqual(str(p['last_name']), '') - self.assertEqual(str(p['birthday']), '') + self.assertHTMLEqual(str(p['first_name']), '') + self.assertHTMLEqual(str(p['last_name']), '') + self.assertHTMLEqual(str(p['birthday']), '') try: p['nonexistentfield'] self.fail('Attempts to access non-existent fields should fail.') @@ -53,7 +53,7 @@ class FormsTestCase(TestCase): for boundfield in p: form_output.append(str(boundfield)) - self.assertEqual('\n'.join(form_output), """ + self.assertHTMLEqual('\n'.join(form_output), """ """) @@ -67,7 +67,7 @@ class FormsTestCase(TestCase): ['Last name', u'Lennon'], ['Birthday', u'1940-10-9'] ]) - self.assertEqual(str(p), """ + self.assertHTMLEqual(str(p), """ """) @@ -84,16 +84,16 @@ class FormsTestCase(TestCase): self.fail('Attempts to access cleaned_data when validation fails should fail.') except AttributeError: pass - self.assertEqual(str(p), """ + self.assertHTMLEqual(str(p), """ """) - self.assertEqual(p.as_table(), """ + self.assertHTMLEqual(p.as_table(), """ """) - self.assertEqual(p.as_ul(), """
  • + self.assertHTMLEqual(p.as_ul(), """
  • """) - self.assertEqual(p.as_p(), """ + self.assertHTMLEqual(p.as_p(), """

    @@ -113,31 +113,31 @@ class FormsTestCase(TestCase): self.fail('Attempts to access cleaned_data when validation fails should fail.') except AttributeError: pass - self.assertEqual(str(p), """ + self.assertHTMLEqual(str(p), """ """) - self.assertEqual(p.as_table(), """ + self.assertHTMLEqual(p.as_table(), """ """) - self.assertEqual(p.as_ul(), """
  • + self.assertHTMLEqual(p.as_ul(), """
  • """) - self.assertEqual(p.as_p(), """

    + self.assertHTMLEqual(p.as_p(), """

    """) def test_unicode_values(self): # Unicode values are handled properly. p = Person({'first_name': u'John', 'last_name': u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111', 'birthday': '1940-10-9'}) - self.assertEqual(p.as_table(), u'\n\n') - self.assertEqual(p.as_ul(), u'
  • \n
  • \n
  • ') - self.assertEqual(p.as_p(), u'

    \n

    \n

    ') + self.assertHTMLEqual(p.as_table(), u'\n\n') + self.assertHTMLEqual(p.as_ul(), u'
  • \n
  • \n
  • ') + self.assertHTMLEqual(p.as_p(), u'

    \n

    \n

    ') p = Person({'last_name': u'Lennon'}) self.assertEqual(p.errors['first_name'], [u'This field is required.']) self.assertEqual(p.errors['birthday'], [u'This field is required.']) self.assertFalse(p.is_valid()) - self.assertEqual(p.errors.as_ul(), u'') + self.assertHTMLEqual(p.errors.as_ul(), u'') self.assertEqual(p.errors.as_text(), """* first_name * This field is required. * birthday @@ -148,13 +148,13 @@ class FormsTestCase(TestCase): except AttributeError: pass self.assertEqual(p['first_name'].errors, [u'This field is required.']) - self.assertEqual(p['first_name'].errors.as_ul(), u'') + self.assertHTMLEqual(p['first_name'].errors.as_ul(), u'') self.assertEqual(p['first_name'].errors.as_text(), u'* This field is required.') p = Person() - self.assertEqual(str(p['first_name']), '') - self.assertEqual(str(p['last_name']), '') - self.assertEqual(str(p['birthday']), '') + self.assertHTMLEqual(str(p['first_name']), '') + self.assertHTMLEqual(str(p['last_name']), '') + self.assertHTMLEqual(str(p['birthday']), '') def test_cleaned_data_only_fields(self): # cleaned_data will always *only* contain a key for fields defined in the @@ -205,13 +205,13 @@ class FormsTestCase(TestCase): # into which the field's name will be inserted. It will also put a