From c1c44b25062c3a793ac0d8416f369383a4a58cb4 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Tue, 1 Oct 2013 09:27:31 +0200 Subject: [PATCH] Factorized requires_tz_support decorator in test utils Thanks Aymeric Augustin for the suggestion. Refs #21165. --- django/test/utils.py | 15 ++++++++++++++- tests/generic_views/test_dates.py | 15 +-------------- tests/timezones/tests.py | 16 ++-------------- 3 files changed, 17 insertions(+), 29 deletions(-) diff --git a/django/test/utils.py b/django/test/utils.py index dc3e5952ea..cd3e99d58b 100644 --- a/django/test/utils.py +++ b/django/test/utils.py @@ -2,6 +2,8 @@ from contextlib import contextmanager import logging import re import sys +import time +from unittest import skipUnless import warnings from functools import wraps from xml.dom.minidom import parseString, Node @@ -21,10 +23,11 @@ from django.utils.translation import deactivate __all__ = ( 'Approximate', 'ContextList', 'get_runner', 'override_settings', - 'setup_test_environment', 'teardown_test_environment', + 'requires_tz_support', 'setup_test_environment', 'teardown_test_environment', ) RESTORE_LOADERS_ATTR = '_original_template_source_loaders' +TZ_SUPPORT = hasattr(time, 'tzset') class Approximate(object): @@ -417,3 +420,13 @@ def patch_logger(logger_name, log_level): yield calls finally: setattr(logger, log_level, orig) + + +# On OSes that don't provide tzset (Windows), we can't set the timezone +# in which the program runs. As a consequence, we must skip tests that +# don't enforce a specific timezone (with timezone.override or equivalent), +# or attempt to interpret naive datetimes in the default timezone. + +requires_tz_support = skipUnless(TZ_SUPPORT, + "This test relies on the ability to run a program in an arbitrary " + "time zone, but your operating system isn't able to do that.") diff --git a/tests/generic_views/test_dates.py b/tests/generic_views/test_dates.py index 03c6d02e5e..d15f6637fd 100644 --- a/tests/generic_views/test_dates.py +++ b/tests/generic_views/test_dates.py @@ -1,27 +1,14 @@ from __future__ import unicode_literals -import time import datetime -from unittest import skipUnless from django.core.exceptions import ImproperlyConfigured from django.test import TestCase, skipUnlessDBFeature -from django.test.utils import override_settings +from django.test.utils import override_settings, requires_tz_support from django.utils import timezone from .models import Book, BookSigning -TZ_SUPPORT = hasattr(time, 'tzset') - -# On OSes that don't provide tzset (Windows), we can't set the timezone -# in which the program runs. As a consequence, we must skip tests that -# don't enforce a specific timezone (with timezone.override or equivalent), -# or attempt to interpret naive datetimes in the default timezone. - -requires_tz_support = skipUnless(TZ_SUPPORT, - "This test relies on the ability to run a program in an arbitrary " - "time zone, but your operating system isn't able to do that.") - def _make_books(n, base_date): for i in range(n): diff --git a/tests/timezones/tests.py b/tests/timezones/tests.py index 3875fa698c..d2f67d9073 100644 --- a/tests/timezones/tests.py +++ b/tests/timezones/tests.py @@ -4,8 +4,7 @@ import datetime import os import re import sys -import time -from unittest import skipIf, skipUnless +from unittest import skipIf import warnings from xml.dom.minidom import parseString @@ -22,7 +21,7 @@ from django.db.models import Min, Max from django.http import HttpRequest from django.template import Context, RequestContext, Template, TemplateSyntaxError from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature -from django.test.utils import override_settings +from django.test.utils import override_settings, requires_tz_support from django.utils import six from django.utils import timezone @@ -42,17 +41,6 @@ UTC = timezone.utc EAT = timezone.get_fixed_timezone(180) # Africa/Nairobi ICT = timezone.get_fixed_timezone(420) # Asia/Bangkok -TZ_SUPPORT = hasattr(time, 'tzset') - -# On OSes that don't provide tzset (Windows), we can't set the timezone -# in which the program runs. As a consequence, we must skip tests that -# don't enforce a specific timezone (with timezone.override or equivalent), -# or attempt to interpret naive datetimes in the default timezone. - -requires_tz_support = skipUnless(TZ_SUPPORT, - "This test relies on the ability to run a program in an arbitrary " - "time zone, but your operating system isn't able to do that.") - @override_settings(TIME_ZONE='Africa/Nairobi', USE_TZ=False) class LegacyDatabaseTests(TestCase):