From 165f44aaaa0b9008f35d8f6a3474db061559ad53 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Fri, 16 Aug 2013 20:12:10 +0200 Subject: [PATCH] Combine consecutive with statements Python 2.7 allows to combine several 'with' instructions. --- django/contrib/auth/tests/test_forms.py | 21 ++- django/contrib/humanize/tests.py | 29 ++-- tests/admin_views/tests.py | 23 ++- tests/admin_widgets/tests.py | 13 +- tests/defaultfilters/tests.py | 37 +++-- tests/forms_tests/tests/test_fields.py | 18 ++- tests/i18n/tests.py | 35 ++--- tests/logging_tests/tests.py | 19 ++- tests/one_to_one_regress/tests.py | 35 ++--- tests/test_utils/tests.py | 71 +++++----- tests/transactions/tests.py | 179 +++++++++++------------- tests/view_tests/tests/test_i18n.py | 64 ++++----- 12 files changed, 249 insertions(+), 295 deletions(-) diff --git a/django/contrib/auth/tests/test_forms.py b/django/contrib/auth/tests/test_forms.py index eef366f1847..fa21d2f9175 100644 --- a/django/contrib/auth/tests/test_forms.py +++ b/django/contrib/auth/tests/test_forms.py @@ -121,17 +121,16 @@ class AuthenticationFormTest(TestCase): [force_text(form.error_messages['inactive'])]) def test_inactive_user_i18n(self): - with self.settings(USE_I18N=True): - with translation.override('pt-br', deactivate=True): - # The user is inactive. - data = { - 'username': 'inactive', - 'password': 'password', - } - form = AuthenticationForm(None, data) - self.assertFalse(form.is_valid()) - self.assertEqual(form.non_field_errors(), - [force_text(form.error_messages['inactive'])]) + with self.settings(USE_I18N=True), translation.override('pt-br', deactivate=True): + # The user is inactive. + data = { + 'username': 'inactive', + 'password': 'password', + } + form = AuthenticationForm(None, data) + self.assertFalse(form.is_valid()) + self.assertEqual(form.non_field_errors(), + [force_text(form.error_messages['inactive'])]) def test_custom_login_allowed_policy(self): # The user is inactive, but our custom form policy allows him to log in. diff --git a/django/contrib/humanize/tests.py b/django/contrib/humanize/tests.py index f1fcbf2bb34..02f73afadb4 100644 --- a/django/contrib/humanize/tests.py +++ b/django/contrib/humanize/tests.py @@ -77,15 +77,14 @@ class HumanizeTests(TransRealMixin, TestCase): '100', '1,000', '10,123', '10,311', '1,000,000', '1,234,567.1234567', '1,234,567.1234567', None) - with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=False): - with translation.override('en'): - self.humanize_tester(test_list, result_list, 'intcomma') + with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=False), \ + translation.override('en'): + self.humanize_tester(test_list, result_list, 'intcomma') def test_intcomma_without_number_grouping(self): # Regression for #17414 - with translation.override('ja'): - with self.settings(USE_L10N=True): - self.humanize_tester([100], ['100'], 'intcomma') + with translation.override('ja'), self.settings(USE_L10N=True): + self.humanize_tester([100], ['100'], 'intcomma') def test_intword(self): test_list = ('100', '1000000', '1200000', '1290000', @@ -104,18 +103,18 @@ class HumanizeTests(TransRealMixin, TestCase): '100', '1000', '10123', '10311', '1000000', None) result_list = ('100', '1.000', '10.123', '10.311', '1.000.000', '1.234.567,25', '100', '1.000', '10.123', '10.311', '1.000.000', None) - with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True): - with translation.override('de'): - self.humanize_tester(test_list, result_list, 'intcomma') + with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True), \ + translation.override('de'): + self.humanize_tester(test_list, result_list, 'intcomma') def test_i18n_intword(self): test_list = ('100', '1000000', '1200000', '1290000', '1000000000', '2000000000', '6000000000000') result_list = ('100', '1,0 Million', '1,2 Millionen', '1,3 Millionen', '1,0 Milliarde', '2,0 Milliarden', '6,0 Billionen') - with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True): - with translation.override('de'): - self.humanize_tester(test_list, result_list, 'intword') + with self.settings(USE_L10N=True, USE_THOUSAND_SEPARATOR=True), \ + translation.override('de'): + self.humanize_tester(test_list, result_list, 'intword') def test_apnumber(self): test_list = [str(x) for x in range(1, 11)] @@ -162,9 +161,9 @@ class HumanizeTests(TransRealMixin, TestCase): orig_humanize_datetime, humanize.datetime = humanize.datetime, MockDateTime try: - with override_settings(TIME_ZONE="America/Chicago", USE_TZ=True): - with translation.override('en'): - self.humanize_tester([dt], ['yesterday'], 'naturalday') + with override_settings(TIME_ZONE="America/Chicago", USE_TZ=True), \ + translation.override('en'): + self.humanize_tester([dt], ['yesterday'], 'naturalday') finally: humanize.datetime = orig_humanize_datetime diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 3ee06751fbc..8be623f4ca5 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -524,31 +524,28 @@ class AdminViewBasicTest(AdminViewBasicTestCase): if the default language is non-English but the selected language is English. See #13388 and #3594 for more details. """ - with self.settings(LANGUAGE_CODE='fr'): - with translation.override('en-us'): - response = self.client.get('/test_admin/admin/jsi18n/') - self.assertNotContains(response, 'Choisir une heure') + with self.settings(LANGUAGE_CODE='fr'), translation.override('en-us'): + response = self.client.get('/test_admin/admin/jsi18n/') + self.assertNotContains(response, 'Choisir une heure') def testI18NLanguageNonEnglishFallback(self): """ Makes sure that the fallback language is still working properly in cases where the selected language cannot be found. """ - with self.settings(LANGUAGE_CODE='fr'): - with translation.override('none'): - response = self.client.get('/test_admin/admin/jsi18n/') - self.assertContains(response, 'Choisir une heure') + with self.settings(LANGUAGE_CODE='fr'), translation.override('none'): + response = self.client.get('/test_admin/admin/jsi18n/') + self.assertContains(response, 'Choisir une heure') def testL10NDeactivated(self): """ Check if L10N is deactivated, the JavaScript i18n view doesn't return localized date/time formats. Refs #14824. """ - with self.settings(LANGUAGE_CODE='ru', USE_L10N=False): - with translation.override('none'): - response = self.client.get('/test_admin/admin/jsi18n/') - self.assertNotContains(response, '%d.%m.%Y %H:%M:%S') - self.assertContains(response, '%Y-%m-%d %H:%M:%S') + with self.settings(LANGUAGE_CODE='ru', USE_L10N=False), translation.override('none'): + response = self.client.get('/test_admin/admin/jsi18n/') + self.assertNotContains(response, '%d.%m.%Y %H:%M:%S') + self.assertContains(response, '%Y-%m-%d %H:%M:%S') def test_disallowed_filtering(self): with patch_logger('django.security.DisallowedModelAdminLookup', 'error') as calls: diff --git a/tests/admin_widgets/tests.py b/tests/admin_widgets/tests.py index bd2b294c331..d2ecf46358f 100644 --- a/tests/admin_widgets/tests.py +++ b/tests/admin_widgets/tests.py @@ -295,13 +295,12 @@ class AdminSplitDateTimeWidgetTest(DjangoTestCase): def test_localization(self): w = widgets.AdminSplitDateTime() - with self.settings(USE_L10N=True): - with translation.override('de-at'): - w.is_localized = True - self.assertHTMLEqual( - w.render('test', datetime(2007, 12, 1, 9, 30)), - '

Datum:
Zeit:

', - ) + with self.settings(USE_L10N=True), translation.override('de-at'): + w.is_localized = True + self.assertHTMLEqual( + w.render('test', datetime(2007, 12, 1, 9, 30)), + '

Datum:
Zeit:

', + ) class AdminURLWidgetTest(DjangoTestCase): diff --git a/tests/defaultfilters/tests.py b/tests/defaultfilters/tests.py index 725b6739030..7db872001dd 100644 --- a/tests/defaultfilters/tests.py +++ b/tests/defaultfilters/tests.py @@ -647,22 +647,21 @@ class DefaultFiltersI18NTests(TransRealMixin, TestCase): def test_localized_filesizeformat(self): # NOTE: \xa0 avoids wrapping between value and unit - with self.settings(USE_L10N=True): - with translation.override('de', deactivate=True): - self.assertEqual(filesizeformat(1023), '1023\xa0Bytes') - self.assertEqual(filesizeformat(1024), '1,0\xa0KB') - self.assertEqual(filesizeformat(10*1024), '10,0\xa0KB') - self.assertEqual(filesizeformat(1024*1024-1), '1024,0\xa0KB') - self.assertEqual(filesizeformat(1024*1024), '1,0\xa0MB') - self.assertEqual(filesizeformat(1024*1024*50), '50,0\xa0MB') - self.assertEqual(filesizeformat(1024*1024*1024-1), '1024,0\xa0MB') - self.assertEqual(filesizeformat(1024*1024*1024), '1,0\xa0GB') - self.assertEqual(filesizeformat(1024*1024*1024*1024), '1,0\xa0TB') - self.assertEqual(filesizeformat(1024*1024*1024*1024*1024), - '1,0\xa0PB') - self.assertEqual(filesizeformat(1024*1024*1024*1024*1024*2000), - '2000,0\xa0PB') - self.assertEqual(filesizeformat(complex(1,-1)), '0\xa0Bytes') - self.assertEqual(filesizeformat(""), '0\xa0Bytes') - self.assertEqual(filesizeformat("\N{GREEK SMALL LETTER ALPHA}"), - '0\xa0Bytes') + with self.settings(USE_L10N=True), translation.override('de', deactivate=True): + self.assertEqual(filesizeformat(1023), '1023\xa0Bytes') + self.assertEqual(filesizeformat(1024), '1,0\xa0KB') + self.assertEqual(filesizeformat(10*1024), '10,0\xa0KB') + self.assertEqual(filesizeformat(1024*1024-1), '1024,0\xa0KB') + self.assertEqual(filesizeformat(1024*1024), '1,0\xa0MB') + self.assertEqual(filesizeformat(1024*1024*50), '50,0\xa0MB') + self.assertEqual(filesizeformat(1024*1024*1024-1), '1024,0\xa0MB') + self.assertEqual(filesizeformat(1024*1024*1024), '1,0\xa0GB') + self.assertEqual(filesizeformat(1024*1024*1024*1024), '1,0\xa0TB') + self.assertEqual(filesizeformat(1024*1024*1024*1024*1024), + '1,0\xa0PB') + self.assertEqual(filesizeformat(1024*1024*1024*1024*1024*2000), + '2000,0\xa0PB') + self.assertEqual(filesizeformat(complex(1,-1)), '0\xa0Bytes') + self.assertEqual(filesizeformat(""), '0\xa0Bytes') + self.assertEqual(filesizeformat("\N{GREEK SMALL LETTER ALPHA}"), + '0\xa0Bytes') diff --git a/tests/forms_tests/tests/test_fields.py b/tests/forms_tests/tests/test_fields.py index f02593e4880..a4e81d31ae1 100644 --- a/tests/forms_tests/tests/test_fields.py +++ b/tests/forms_tests/tests/test_fields.py @@ -286,11 +286,10 @@ class FieldsTests(SimpleTestCase): n = 4.35 self.assertFalse(f._has_changed(n, '4.3500')) - with translation.override('fr'): - with self.settings(USE_L10N=True): - f = FloatField(localize=True) - localized_n = formats.localize_input(n) # -> '4,35' in French - self.assertFalse(f._has_changed(n, localized_n)) + with translation.override('fr'), self.settings(USE_L10N=True): + f = FloatField(localize=True) + localized_n = formats.localize_input(n) # -> '4,35' in French + self.assertFalse(f._has_changed(n, localized_n)) # DecimalField ################################################################ @@ -399,11 +398,10 @@ class FieldsTests(SimpleTestCase): self.assertFalse(f._has_changed(d, '0.10')) self.assertTrue(f._has_changed(d, '0.101')) - with translation.override('fr'): - with self.settings(USE_L10N=True): - f = DecimalField(max_digits=2, decimal_places=2, localize=True) - localized_d = formats.localize_input(d) # -> '0,1' in French - self.assertFalse(f._has_changed(d, localized_d)) + with translation.override('fr'), self.settings(USE_L10N=True): + f = DecimalField(max_digits=2, decimal_places=2, localize=True) + localized_d = formats.localize_input(d) # -> '0,1' in French + self.assertFalse(f._has_changed(d, localized_d)) # DateField ################################################################### diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index 05d1065a75b..12e325b773c 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -746,11 +746,11 @@ class FormattingTests(TransRealMixin, TestCase): self.assertEqual('.', get_format('DECIMAL_SEPARATOR', lang='en')) def test_get_format_modules_stability(self): - with self.settings(FORMAT_MODULE_PATH='i18n.other.locale'): - with translation.override('de', deactivate=True): - old = str("%r") % get_format_modules(reverse=True) - new = str("%r") % get_format_modules(reverse=True) # second try - self.assertEqual(new, old, 'Value returned by get_formats_modules() must be preserved between calls.') + with self.settings(FORMAT_MODULE_PATH='i18n.other.locale'), \ + translation.override('de', deactivate=True): + old = str("%r") % get_format_modules(reverse=True) + new = str("%r") % get_format_modules(reverse=True) # second try + self.assertEqual(new, old, 'Value returned by get_formats_modules() must be preserved between calls.') def test_localize_templatetag_and_filter(self): """ @@ -1062,9 +1062,8 @@ class MultipleLocaleActivationTests(TransRealMixin, TestCase): def test_multiple_locale_filter(self): with translation.override('de'): t = Template("{% load i18n %}{{ 0|yesno:_('yes,no,maybe') }}") - with translation.override(self._old_language): - with translation.override('nl'): - self.assertEqual(t.render(Context({})), 'nee') + with translation.override(self._old_language), translation.override('nl'): + self.assertEqual(t.render(Context({})), 'nee') def test_multiple_locale_filter_deactivate(self): with translation.override('de', deactivate=True): @@ -1083,9 +1082,8 @@ class MultipleLocaleActivationTests(TransRealMixin, TestCase): def test_multiple_locale(self): with translation.override('de'): t = Template("{{ _('No') }}") - with translation.override(self._old_language): - with translation.override('nl'): - self.assertEqual(t.render(Context({})), 'Nee') + with translation.override(self._old_language), translation.override('nl'): + self.assertEqual(t.render(Context({})), 'Nee') def test_multiple_locale_deactivate(self): with translation.override('de', deactivate=True): @@ -1104,9 +1102,8 @@ class MultipleLocaleActivationTests(TransRealMixin, TestCase): def test_multiple_locale_loadi18n(self): with translation.override('de'): t = Template("{% load i18n %}{{ _('No') }}") - with translation.override(self._old_language): - with translation.override('nl'): - self.assertEqual(t.render(Context({})), 'Nee') + with translation.override(self._old_language), translation.override('nl'): + self.assertEqual(t.render(Context({})), 'Nee') def test_multiple_locale_loadi18n_deactivate(self): with translation.override('de', deactivate=True): @@ -1125,9 +1122,8 @@ class MultipleLocaleActivationTests(TransRealMixin, TestCase): def test_multiple_locale_trans(self): with translation.override('de'): t = Template("{% load i18n %}{% trans 'No' %}") - with translation.override(self._old_language): - with translation.override('nl'): - self.assertEqual(t.render(Context({})), 'Nee') + with translation.override(self._old_language), translation.override('nl'): + self.assertEqual(t.render(Context({})), 'Nee') def test_multiple_locale_deactivate_trans(self): with translation.override('de', deactivate=True): @@ -1146,9 +1142,8 @@ class MultipleLocaleActivationTests(TransRealMixin, TestCase): def test_multiple_locale_btrans(self): with translation.override('de'): t = Template("{% load i18n %}{% blocktrans %}No{% endblocktrans %}") - with translation.override(self._old_language): - with translation.override('nl'): - self.assertEqual(t.render(Context({})), 'Nee') + with translation.override(self._old_language), translation.override('nl'): + self.assertEqual(t.render(Context({})), 'Nee') def test_multiple_locale_deactivate_btrans(self): with translation.override('de', deactivate=True): diff --git a/tests/logging_tests/tests.py b/tests/logging_tests/tests.py index 8ba4702aba7..ef9f979e7ee 100644 --- a/tests/logging_tests/tests.py +++ b/tests/logging_tests/tests.py @@ -355,20 +355,19 @@ class SettingsConfigureLogging(TestCase): self.assertTrue(dictConfig.called) +@override_settings(DEBUG=True) class SecurityLoggerTest(TestCase): urls = 'logging_tests.urls' def test_suspicious_operation_creates_log_message(self): - with self.settings(DEBUG=True): - with patch_logger('django.security.SuspiciousOperation', 'error') as calls: - response = self.client.get('/suspicious/') - self.assertEqual(len(calls), 1) - self.assertEqual(calls[0], 'dubious') + with patch_logger('django.security.SuspiciousOperation', 'error') as calls: + response = self.client.get('/suspicious/') + self.assertEqual(len(calls), 1) + self.assertEqual(calls[0], 'dubious') def test_suspicious_operation_uses_sublogger(self): - with self.settings(DEBUG=True): - with patch_logger('django.security.DisallowedHost', 'error') as calls: - response = self.client.get('/suspicious_spec/') - self.assertEqual(len(calls), 1) - self.assertEqual(calls[0], 'dubious') + with patch_logger('django.security.DisallowedHost', 'error') as calls: + response = self.client.get('/suspicious_spec/') + self.assertEqual(len(calls), 1) + self.assertEqual(calls[0], 'dubious') diff --git a/tests/one_to_one_regress/tests.py b/tests/one_to_one_regress/tests.py index 7d82194abb8..0e20f19acb5 100644 --- a/tests/one_to_one_regress/tests.py +++ b/tests/one_to_one_regress/tests.py @@ -141,12 +141,10 @@ class OneToOneRegressionTests(TestCase): """ p = Place(name='Zombie Cats', address='Not sure') p.save() - with self.assertNumQueries(1): - with self.assertRaises(Restaurant.DoesNotExist): - p.restaurant - with self.assertNumQueries(0): - with self.assertRaises(Restaurant.DoesNotExist): - p.restaurant + with self.assertNumQueries(1), self.assertRaises(Restaurant.DoesNotExist): + p.restaurant + with self.assertNumQueries(0), self.assertRaises(Restaurant.DoesNotExist): + p.restaurant def test_reverse_object_cached_when_related_is_accessed(self): """ @@ -199,9 +197,8 @@ class OneToOneRegressionTests(TestCase): self.assertEqual(self.p1.undergroundbar, b) b.place = None b.save() - with self.assertNumQueries(0): - with self.assertRaises(UndergroundBar.DoesNotExist): - self.p1.undergroundbar + with self.assertNumQueries(0), self.assertRaises(UndergroundBar.DoesNotExist): + self.p1.undergroundbar def test_get_reverse_on_unsaved_object(self): """ @@ -213,24 +210,21 @@ class OneToOneRegressionTests(TestCase): p = Place() # When there's no instance of the origin of the one-to-one - with self.assertNumQueries(0): - with self.assertRaises(UndergroundBar.DoesNotExist): - p.undergroundbar + with self.assertNumQueries(0), self.assertRaises(UndergroundBar.DoesNotExist): + p.undergroundbar UndergroundBar.objects.create() # When there's one instance of the origin # (p.undergroundbar used to return that instance) - with self.assertNumQueries(0): - with self.assertRaises(UndergroundBar.DoesNotExist): - p.undergroundbar + with self.assertNumQueries(0), self.assertRaises(UndergroundBar.DoesNotExist): + p.undergroundbar UndergroundBar.objects.create() # When there are several instances of the origin - with self.assertNumQueries(0): - with self.assertRaises(UndergroundBar.DoesNotExist): - p.undergroundbar + with self.assertNumQueries(0), self.assertRaises(UndergroundBar.DoesNotExist): + p.undergroundbar def test_set_reverse_on_unsaved_object(self): """ @@ -239,6 +233,5 @@ class OneToOneRegressionTests(TestCase): """ p = Place() b = UndergroundBar.objects.create() - with self.assertNumQueries(0): - with self.assertRaises(ValueError): - p.undergroundbar = b + with self.assertNumQueries(0), self.assertRaises(ValueError): + p.undergroundbar = b diff --git a/tests/test_utils/tests.py b/tests/test_utils/tests.py index eb850cc3be1..1b3c78b2e22 100644 --- a/tests/test_utils/tests.py +++ b/tests/test_utils/tests.py @@ -152,9 +152,8 @@ class CaptureQueriesContextManagerTests(TestCase): self.assertEqual(2, len(captured_queries)) def test_failure(self): - with self.assertRaises(TypeError): - with CaptureQueriesContext(connection): - raise TypeError + with self.assertRaises(TypeError), CaptureQueriesContext(connection): + raise TypeError def test_with_client(self): with CaptureQueriesContext(connection) as captured_queries: @@ -190,14 +189,12 @@ class AssertNumQueriesContextManagerTests(TestCase): Person.objects.count() def test_failure(self): - with self.assertRaises(AssertionError) as exc_info: - with self.assertNumQueries(2): - Person.objects.count() + with self.assertRaises(AssertionError) as exc_info, self.assertNumQueries(2): + Person.objects.count() self.assertIn("1 queries executed, 2 expected", str(exc_info.exception)) - with self.assertRaises(TypeError): - with self.assertNumQueries(4000): - raise TypeError + with self.assertRaises(TypeError), self.assertNumQueries(4000): + raise TypeError def test_with_client(self): person = Person.objects.create(name="test") @@ -232,13 +229,13 @@ class AssertTemplateUsedContextManagerTests(TestCase): render_to_string('template_used/base.html') def test_nested_usage(self): - with self.assertTemplateUsed('template_used/base.html'): - with self.assertTemplateUsed('template_used/include.html'): - render_to_string('template_used/include.html') + with self.assertTemplateUsed('template_used/base.html'), \ + self.assertTemplateUsed('template_used/include.html'): + render_to_string('template_used/include.html') - with self.assertTemplateUsed('template_used/extends.html'): - with self.assertTemplateUsed('template_used/base.html'): - render_to_string('template_used/extends.html') + with self.assertTemplateUsed('template_used/extends.html'), \ + self.assertTemplateUsed('template_used/base.html'): + render_to_string('template_used/extends.html') with self.assertTemplateUsed('template_used/base.html'): with self.assertTemplateUsed('template_used/alternative.html'): @@ -258,38 +255,34 @@ class AssertTemplateUsedContextManagerTests(TestCase): pass def test_error_message(self): - with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html'): - with self.assertTemplateUsed('template_used/base.html'): - pass + with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html'), \ + self.assertTemplateUsed('template_used/base.html'): + pass - with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html'): - with self.assertTemplateUsed(template_name='template_used/base.html'): - pass + with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html'), \ + self.assertTemplateUsed(template_name='template_used/base.html'): + pass - with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html.*template_used/alternative\.html$'): - with self.assertTemplateUsed('template_used/base.html'): - render_to_string('template_used/alternative.html') + with six.assertRaisesRegex(self, AssertionError, r'^template_used/base\.html.*template_used/alternative\.html$'), \ + self.assertTemplateUsed('template_used/base.html'): + render_to_string('template_used/alternative.html') def test_failure(self): - with self.assertRaises(TypeError): - with self.assertTemplateUsed(): - pass + with self.assertRaises(TypeError), self.assertTemplateUsed(): + pass - with self.assertRaises(AssertionError): - with self.assertTemplateUsed(''): - pass + with self.assertRaises(AssertionError), self.assertTemplateUsed(''): + pass - with self.assertRaises(AssertionError): - with self.assertTemplateUsed(''): - render_to_string('template_used/base.html') + with self.assertRaises(AssertionError), self.assertTemplateUsed(''): + render_to_string('template_used/base.html') - with self.assertRaises(AssertionError): - with self.assertTemplateUsed(template_name=''): - pass + with self.assertRaises(AssertionError), self.assertTemplateUsed(template_name=''): + pass - with self.assertRaises(AssertionError): - with self.assertTemplateUsed('template_used/base.html'): - render_to_string('template_used/alternative.html') + with self.assertRaises(AssertionError), \ + self.assertTemplateUsed('template_used/base.html'): + render_to_string('template_used/alternative.html') class HTMLEqualTests(TestCase): diff --git a/tests/transactions/tests.py b/tests/transactions/tests.py index 9cf8b4d7428..d7cbbd0f3c5 100644 --- a/tests/transactions/tests.py +++ b/tests/transactions/tests.py @@ -65,10 +65,9 @@ class AtomicTests(TransactionTestCase): self.assertQuerysetEqual(Reporter.objects.all(), ['']) def test_rollback(self): - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(): - Reporter.objects.create(first_name="Haddock") - raise Exception("Oops, that's his last name") + with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic(): + Reporter.objects.create(first_name="Haddock") + raise Exception("Oops, that's his last name") self.assertQuerysetEqual(Reporter.objects.all(), []) def test_nested_commit_commit(self): @@ -82,30 +81,27 @@ class AtomicTests(TransactionTestCase): def test_nested_commit_rollback(self): with transaction.atomic(): Reporter.objects.create(first_name="Tintin") - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(): - Reporter.objects.create(first_name="Haddock") - raise Exception("Oops, that's his last name") + with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic(): + Reporter.objects.create(first_name="Haddock") + raise Exception("Oops, that's his last name") self.assertQuerysetEqual(Reporter.objects.all(), ['']) def test_nested_rollback_commit(self): - with six.assertRaisesRegex(self, Exception, "Oops"): + with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic(): + Reporter.objects.create(last_name="Tintin") with transaction.atomic(): - Reporter.objects.create(last_name="Tintin") - with transaction.atomic(): - Reporter.objects.create(last_name="Haddock") - raise Exception("Oops, that's his first name") + Reporter.objects.create(last_name="Haddock") + raise Exception("Oops, that's his first name") self.assertQuerysetEqual(Reporter.objects.all(), []) def test_nested_rollback_rollback(self): - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(): - Reporter.objects.create(last_name="Tintin") - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(): - Reporter.objects.create(first_name="Haddock") - raise Exception("Oops, that's his last name") - raise Exception("Oops, that's his first name") + with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic(): + Reporter.objects.create(last_name="Tintin") + with six.assertRaisesRegex(self, Exception, "Oops"): + with transaction.atomic(): + Reporter.objects.create(first_name="Haddock") + raise Exception("Oops, that's his last name") + raise Exception("Oops, that's his first name") self.assertQuerysetEqual(Reporter.objects.all(), []) def test_merged_commit_commit(self): @@ -119,31 +115,29 @@ class AtomicTests(TransactionTestCase): def test_merged_commit_rollback(self): with transaction.atomic(): Reporter.objects.create(first_name="Tintin") - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(savepoint=False): - Reporter.objects.create(first_name="Haddock") - raise Exception("Oops, that's his last name") + with six.assertRaisesRegex(self, Exception, "Oops"), \ + transaction.atomic(savepoint=False): + Reporter.objects.create(first_name="Haddock") + raise Exception("Oops, that's his last name") # Writes in the outer block are rolled back too. self.assertQuerysetEqual(Reporter.objects.all(), []) def test_merged_rollback_commit(self): - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(): - Reporter.objects.create(last_name="Tintin") - with transaction.atomic(savepoint=False): - Reporter.objects.create(last_name="Haddock") - raise Exception("Oops, that's his first name") + with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic(): + Reporter.objects.create(last_name="Tintin") + with transaction.atomic(savepoint=False): + Reporter.objects.create(last_name="Haddock") + raise Exception("Oops, that's his first name") self.assertQuerysetEqual(Reporter.objects.all(), []) def test_merged_rollback_rollback(self): - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(): - Reporter.objects.create(last_name="Tintin") - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(savepoint=False): - Reporter.objects.create(first_name="Haddock") - raise Exception("Oops, that's his last name") - raise Exception("Oops, that's his first name") + with six.assertRaisesRegex(self, Exception, "Oops"), transaction.atomic(): + Reporter.objects.create(last_name="Tintin") + with six.assertRaisesRegex(self, Exception, "Oops"): + with transaction.atomic(savepoint=False): + Reporter.objects.create(first_name="Haddock") + raise Exception("Oops, that's his last name") + raise Exception("Oops, that's his first name") self.assertQuerysetEqual(Reporter.objects.all(), []) def test_reuse_commit_commit(self): @@ -159,32 +153,29 @@ class AtomicTests(TransactionTestCase): atomic = transaction.atomic() with atomic: Reporter.objects.create(first_name="Tintin") - with six.assertRaisesRegex(self, Exception, "Oops"): - with atomic: - Reporter.objects.create(first_name="Haddock") - raise Exception("Oops, that's his last name") + with six.assertRaisesRegex(self, Exception, "Oops"), atomic: + Reporter.objects.create(first_name="Haddock") + raise Exception("Oops, that's his last name") self.assertQuerysetEqual(Reporter.objects.all(), ['']) def test_reuse_rollback_commit(self): atomic = transaction.atomic() - with six.assertRaisesRegex(self, Exception, "Oops"): + with six.assertRaisesRegex(self, Exception, "Oops"), atomic: + Reporter.objects.create(last_name="Tintin") with atomic: - Reporter.objects.create(last_name="Tintin") - with atomic: - Reporter.objects.create(last_name="Haddock") - raise Exception("Oops, that's his first name") + Reporter.objects.create(last_name="Haddock") + raise Exception("Oops, that's his first name") self.assertQuerysetEqual(Reporter.objects.all(), []) def test_reuse_rollback_rollback(self): atomic = transaction.atomic() - with six.assertRaisesRegex(self, Exception, "Oops"): - with atomic: - Reporter.objects.create(last_name="Tintin") - with six.assertRaisesRegex(self, Exception, "Oops"): - with atomic: - Reporter.objects.create(first_name="Haddock") - raise Exception("Oops, that's his last name") - raise Exception("Oops, that's his first name") + with six.assertRaisesRegex(self, Exception, "Oops"), atomic: + Reporter.objects.create(last_name="Tintin") + with six.assertRaisesRegex(self, Exception, "Oops"): + with atomic: + Reporter.objects.create(first_name="Haddock") + raise Exception("Oops, that's his last name") + raise Exception("Oops, that's his first name") self.assertQuerysetEqual(Reporter.objects.all(), []) def test_force_rollback(self): @@ -200,10 +191,9 @@ class AtomicTests(TransactionTestCase): Reporter.objects.create(first_name="Tintin") sid = transaction.savepoint() # trigger a database error inside an inner atomic without savepoint - with self.assertRaises(DatabaseError): - with transaction.atomic(savepoint=False): - connection.cursor().execute( - "SELECT no_such_col FROM transactions_reporter") + with self.assertRaises(DatabaseError), transaction.atomic(savepoint=False): + connection.cursor().execute( + "SELECT no_such_col FROM transactions_reporter") transaction.savepoint_rollback(sid) # atomic block should rollback, but prevent it, as we just did it. self.assertTrue(transaction.get_rollback()) @@ -263,10 +253,10 @@ class AtomicMergeTests(TransactionTestCase): Reporter.objects.create(first_name="Tintin") with transaction.atomic(savepoint=False): Reporter.objects.create(first_name="Archibald", last_name="Haddock") - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(savepoint=False): - Reporter.objects.create(first_name="Tournesol") - raise Exception("Oops, that's his last name") + with six.assertRaisesRegex(self, Exception, "Oops"), \ + transaction.atomic(savepoint=False): + Reporter.objects.create(first_name="Tournesol") + raise Exception("Oops, that's his last name") # It wasn't possible to roll back self.assertEqual(Reporter.objects.count(), 3) # It wasn't possible to roll back @@ -279,10 +269,10 @@ class AtomicMergeTests(TransactionTestCase): Reporter.objects.create(first_name="Tintin") with transaction.atomic(): Reporter.objects.create(first_name="Archibald", last_name="Haddock") - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(savepoint=False): - Reporter.objects.create(first_name="Tournesol") - raise Exception("Oops, that's his last name") + with six.assertRaisesRegex(self, Exception, "Oops"), \ + transaction.atomic(savepoint=False): + Reporter.objects.create(first_name="Tournesol") + raise Exception("Oops, that's his last name") # It wasn't possible to roll back self.assertEqual(Reporter.objects.count(), 3) # The first block with a savepoint must roll back @@ -293,10 +283,10 @@ class AtomicMergeTests(TransactionTestCase): with transaction.atomic(): Reporter.objects.create(first_name="Tintin") # Inner block without a savepoint fails - with six.assertRaisesRegex(self, Exception, "Oops"): - with transaction.atomic(savepoint=False): - Reporter.objects.create(first_name="Haddock") - raise Exception("Oops, that's his last name") + with six.assertRaisesRegex(self, Exception, "Oops"), \ + transaction.atomic(savepoint=False): + Reporter.objects.create(first_name="Haddock") + raise Exception("Oops, that's his last name") # It wasn't possible to roll back self.assertEqual(Reporter.objects.count(), 2) # Inner block with a savepoint succeeds @@ -316,9 +306,9 @@ class AtomicErrorsTests(TransactionTestCase): def test_atomic_prevents_setting_autocommit(self): autocommit = transaction.get_autocommit() - with transaction.atomic(): - with self.assertRaises(transaction.TransactionManagementError): - transaction.set_autocommit(not autocommit) + with transaction.atomic(), \ + self.assertRaises(transaction.TransactionManagementError): + transaction.set_autocommit(not autocommit) # Make sure autocommit wasn't changed. self.assertEqual(connection.autocommit, autocommit) @@ -552,9 +542,8 @@ class TransactionContextManagerTests(IgnoreDeprecationWarningsMixin, Transaction The autocommit context manager works exactly the same as the default behavior. """ - with self.assertRaises(Exception): - with transaction.autocommit(): - self.create_reporter_and_fail() + with self.assertRaises(Exception), transaction.autocommit(): + self.create_reporter_and_fail() self.assertEqual(Reporter.objects.count(), 1) @@ -563,9 +552,8 @@ class TransactionContextManagerTests(IgnoreDeprecationWarningsMixin, Transaction """ The autocommit context manager also works with a using argument. """ - with self.assertRaises(Exception): - with transaction.autocommit(using="default"): - self.create_reporter_and_fail() + with self.assertRaises(Exception), transaction.autocommit(using="default"): + self.create_reporter_and_fail() self.assertEqual(Reporter.objects.count(), 1) @@ -575,9 +563,8 @@ class TransactionContextManagerTests(IgnoreDeprecationWarningsMixin, Transaction With the commit_on_success context manager, the transaction is only committed if the block doesn't throw an exception. """ - with self.assertRaises(Exception): - with transaction.commit_on_success(): - self.create_reporter_and_fail() + with self.assertRaises(Exception), transaction.commit_on_success(): + self.create_reporter_and_fail() self.assertEqual(Reporter.objects.count(), 0) @@ -586,9 +573,8 @@ class TransactionContextManagerTests(IgnoreDeprecationWarningsMixin, Transaction """ The commit_on_success context manager also works with a using argument. """ - with self.assertRaises(Exception): - with transaction.commit_on_success(using="default"): - self.create_reporter_and_fail() + with self.assertRaises(Exception), transaction.commit_on_success(using="default"): + self.create_reporter_and_fail() self.assertEqual(Reporter.objects.count(), 0) @@ -633,18 +619,18 @@ class TransactionContextManagerTests(IgnoreDeprecationWarningsMixin, Transaction """ If you forget, you'll get bad errors. """ - with self.assertRaises(transaction.TransactionManagementError): - with transaction.commit_manually(): - Reporter.objects.create(first_name="Scott", last_name="Browning") + with self.assertRaises(transaction.TransactionManagementError), \ + transaction.commit_manually(): + Reporter.objects.create(first_name="Scott", last_name="Browning") @skipUnlessDBFeature('supports_transactions') def test_manually_managed_with_using(self): """ The commit_manually function also works with a using argument. """ - with self.assertRaises(transaction.TransactionManagementError): - with transaction.commit_manually(using="default"): - Reporter.objects.create(first_name="Walter", last_name="Cronkite") + with self.assertRaises(transaction.TransactionManagementError), \ + transaction.commit_manually(using="default"): + Reporter.objects.create(first_name="Walter", last_name="Cronkite") @skipUnlessDBFeature('requires_rollback_on_dirty_transaction') def test_bad_sql(self): @@ -654,8 +640,7 @@ class TransactionContextManagerTests(IgnoreDeprecationWarningsMixin, Transaction be rolled back. The bug is only visible using the psycopg2 backend, though the fix is generally a good idea. """ - with self.assertRaises(IntegrityError): - with transaction.commit_on_success(): - cursor = connection.cursor() - cursor.execute("INSERT INTO transactions_reporter (first_name, last_name) VALUES ('Douglas', 'Adams');") + with self.assertRaises(IntegrityError), transaction.commit_on_success(): + cursor = connection.cursor() + cursor.execute("INSERT INTO transactions_reporter (first_name, last_name) VALUES ('Douglas', 'Adams');") transaction.rollback() diff --git a/tests/view_tests/tests/test_i18n.py b/tests/view_tests/tests/test_i18n.py index cfee4f5093a..50677947b6b 100644 --- a/tests/view_tests/tests/test_i18n.py +++ b/tests/view_tests/tests/test_i18n.py @@ -85,20 +85,18 @@ class JsI18NTests(TestCase): languages and you've set settings.LANGUAGE_CODE to some other language than English. """ - with self.settings(LANGUAGE_CODE='es'): - with override('en-us'): - response = self.client.get('/views/jsi18n/') - self.assertNotContains(response, 'esto tiene que ser traducido') + with self.settings(LANGUAGE_CODE='es'), override('en-us'): + response = self.client.get('/views/jsi18n/') + self.assertNotContains(response, 'esto tiene que ser traducido') def test_jsi18n_fallback_language(self): """ Let's make sure that the fallback language is still working properly in cases where the selected language cannot be found. """ - with self.settings(LANGUAGE_CODE='fr'): - with override('fi'): - response = self.client.get('/views/jsi18n/') - self.assertContains(response, 'il faut le traduire') + with self.settings(LANGUAGE_CODE='fr'), override('fi'): + response = self.client.get('/views/jsi18n/') + self.assertContains(response, 'il faut le traduire') def testI18NLanguageNonEnglishDefault(self): """ @@ -107,10 +105,9 @@ class JsI18NTests(TestCase): is English and there is not 'en' translation available. See #13388, #3594 and #13726 for more details. """ - with self.settings(LANGUAGE_CODE='fr'): - with override('en-us'): - response = self.client.get('/views/jsi18n/') - self.assertNotContains(response, 'Choisir une heure') + with self.settings(LANGUAGE_CODE='fr'), override('en-us'): + response = self.client.get('/views/jsi18n/') + self.assertNotContains(response, 'Choisir une heure') def test_nonenglish_default_english_userpref(self): """ @@ -119,20 +116,19 @@ class JsI18NTests(TestCase): with the proper English translations. See #13726 for more details. """ extended_apps = list(settings.INSTALLED_APPS) + ['view_tests.app0'] - with self.settings(LANGUAGE_CODE='fr', INSTALLED_APPS=extended_apps): - with override('en-us'): - response = self.client.get('/views/jsi18n_english_translation/') - self.assertContains(response, javascript_quote('this app0 string is to be translated')) + with self.settings(LANGUAGE_CODE='fr', INSTALLED_APPS=extended_apps), \ + override('en-us'): + response = self.client.get('/views/jsi18n_english_translation/') + self.assertContains(response, javascript_quote('this app0 string is to be translated')) def testI18NLanguageNonEnglishFallback(self): """ Makes sure that the fallback language is still working properly in cases where the selected language cannot be found. """ - with self.settings(LANGUAGE_CODE='fr'): - with override('none'): - response = self.client.get('/views/jsi18n/') - self.assertContains(response, 'Choisir une heure') + with self.settings(LANGUAGE_CODE='fr'), override('none'): + response = self.client.get('/views/jsi18n/') + self.assertContains(response, 'Choisir une heure') class JsI18NTestsMultiPackage(TestCase): @@ -149,10 +145,11 @@ class JsI18NTestsMultiPackage(TestCase): #3594 and #13514 for more details. """ extended_apps = list(settings.INSTALLED_APPS) + ['view_tests.app1', 'view_tests.app2'] - with self.settings(LANGUAGE_CODE='en-us', INSTALLED_APPS=extended_apps): - with override('fr'): - response = self.client.get('/views/jsi18n_multi_packages1/') - self.assertContains(response, javascript_quote('il faut traduire cette chaîne de caractères de app1')) + with self.settings(LANGUAGE_CODE='en-us', INSTALLED_APPS=extended_apps), \ + override('fr'): + response = self.client.get('/views/jsi18n_multi_packages1/') + self.assertContains(response, + javascript_quote('il faut traduire cette chaîne de caractères de app1')) def testI18NDifferentNonEnLangs(self): """ @@ -160,20 +157,21 @@ class JsI18NTestsMultiPackage(TestCase): English. """ extended_apps = list(settings.INSTALLED_APPS) + ['view_tests.app3', 'view_tests.app4'] - with self.settings(LANGUAGE_CODE='fr', INSTALLED_APPS=extended_apps): - with override('es-ar'): - response = self.client.get('/views/jsi18n_multi_packages2/') - self.assertContains(response, javascript_quote('este texto de app3 debe ser traducido')) + with self.settings(LANGUAGE_CODE='fr', INSTALLED_APPS=extended_apps), \ + override('es-ar'): + response = self.client.get('/views/jsi18n_multi_packages2/') + self.assertContains(response, + javascript_quote('este texto de app3 debe ser traducido')) def testI18NWithLocalePaths(self): extended_locale_paths = settings.LOCALE_PATHS + ( path.join(path.dirname( path.dirname(path.abspath(upath(__file__)))), 'app3', 'locale'),) - with self.settings(LANGUAGE_CODE='es-ar', LOCALE_PATHS=extended_locale_paths): - with override('es-ar'): - response = self.client.get('/views/jsi18n/') - self.assertContains(response, - javascript_quote('este texto de app3 debe ser traducido')) + with self.settings(LANGUAGE_CODE='es-ar', LOCALE_PATHS=extended_locale_paths), \ + override('es-ar'): + response = self.client.get('/views/jsi18n/') + self.assertContains(response, + javascript_quote('este texto de app3 debe ser traducido')) skip_selenium = not os.environ.get('DJANGO_SELENIUM_TESTS', False)