[1.6.x] Factorized requires_tz_support decorator in test utils

Thanks Aymeric Augustin for the suggestion. Refs #21165.
Backport of c1c44b2506 from master.
This commit is contained in:
Claude Paroz 2013-10-01 09:27:31 +02:00
parent 47a65ad40e
commit 5b97b99a01
3 changed files with 17 additions and 29 deletions

View File

@ -2,6 +2,7 @@ from contextlib import contextmanager
import logging import logging
import re import re
import sys import sys
import time
import warnings import warnings
from functools import wraps from functools import wraps
from xml.dom.minidom import parseString, Node from xml.dom.minidom import parseString, Node
@ -17,14 +18,16 @@ from django.test.signals import template_rendered, setting_changed
from django.utils.encoding import force_str from django.utils.encoding import force_str
from django.utils import six from django.utils import six
from django.utils.translation import deactivate from django.utils.translation import deactivate
from django.utils.unittest import skipUnless
__all__ = ( __all__ = (
'Approximate', 'ContextList', 'get_runner', 'override_settings', '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' RESTORE_LOADERS_ATTR = '_original_template_source_loaders'
TZ_SUPPORT = hasattr(time, 'tzset')
class Approximate(object): class Approximate(object):
@ -436,3 +439,13 @@ def patch_logger(logger_name, log_level):
yield calls yield calls
finally: finally:
setattr(logger, log_level, orig) 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.")

View File

@ -1,27 +1,14 @@
from __future__ import absolute_import from __future__ import absolute_import
import time
import datetime import datetime
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.test import TestCase, skipUnlessDBFeature 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 django.utils import timezone
from django.utils.unittest import skipUnless
from .models import Book, BookSigning 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): def _make_books(n, base_date):
for i in range(n): for i in range(n):

View File

@ -4,7 +4,6 @@ import datetime
import os import os
import re import re
import sys import sys
import time
import warnings import warnings
from xml.dom.minidom import parseString from xml.dom.minidom import parseString
@ -21,11 +20,11 @@ from django.db.models import Min, Max
from django.http import HttpRequest from django.http import HttpRequest
from django.template import Context, RequestContext, Template, TemplateSyntaxError from django.template import Context, RequestContext, Template, TemplateSyntaxError
from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature 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 six
from django.utils import timezone from django.utils import timezone
from django.utils.tzinfo import FixedOffset from django.utils.tzinfo import FixedOffset
from django.utils.unittest import skipIf, skipUnless from django.utils.unittest import skipIf
from .forms import EventForm, EventSplitForm, EventLocalizedForm, EventModelForm, EventLocalizedModelForm from .forms import EventForm, EventSplitForm, EventLocalizedForm, EventModelForm, EventLocalizedModelForm
from .models import Event, MaybeEvent, Session, SessionEvent, Timestamp, AllDayEvent from .models import Event, MaybeEvent, Session, SessionEvent, Timestamp, AllDayEvent
@ -43,17 +42,6 @@ UTC = timezone.utc
EAT = FixedOffset(180) # Africa/Nairobi EAT = FixedOffset(180) # Africa/Nairobi
ICT = FixedOffset(420) # Asia/Bangkok ICT = FixedOffset(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) @override_settings(TIME_ZONE='Africa/Nairobi', USE_TZ=False)
class LegacyDatabaseTests(TestCase): class LegacyDatabaseTests(TestCase):