From a0791b2759b475fda9ffea31154d5e436ffdd00f Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Sat, 11 Jun 2011 20:40:02 +0000 Subject: [PATCH] Fixed #16224 -- Fixed override_settings test utility to correctly work with TestCase classes. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16377 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/test/utils.py | 20 ++++++++++++++----- tests/regressiontests/settings_tests/tests.py | 15 ++++++++++++-- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/django/test/utils.py b/django/test/utils.py index b9f4743a34..19a3190166 100644 --- a/django/test/utils.py +++ b/django/test/utils.py @@ -197,11 +197,21 @@ class override_settings(object): def __exit__(self, exc_type, exc_value, traceback): self.disable() - def __call__(self, func): - @wraps(func) - def inner(*args, **kwargs): - with self: - return func(*args, **kwargs) + def __call__(self, test_func): + from django.test import TestCase + if isinstance(test_func, type) and issubclass(test_func, TestCase): + class inner(test_func): + def _pre_setup(innerself): + self.enable() + super(inner, innerself)._pre_setup() + def _post_teardown(innerself): + super(inner, innerself)._post_teardown() + self.disable() + else: + @wraps(test_func) + def inner(*args, **kwargs): + with self: + return test_func(*args, **kwargs) return inner def enable(self): diff --git a/tests/regressiontests/settings_tests/tests.py b/tests/regressiontests/settings_tests/tests.py index 630ab1c6c6..a04f8e3556 100644 --- a/tests/regressiontests/settings_tests/tests.py +++ b/tests/regressiontests/settings_tests/tests.py @@ -1,11 +1,22 @@ from __future__ import with_statement -import os, sys +import os from django.conf import settings, global_settings from django.test import TestCase, signals from django.test.utils import override_settings -from django.utils.unittest import skipIf +# @override_settings(TEST='override') +class FullyDecoratedTestCase(TestCase): + + def test_override(self): + self.assertEqual(settings.TEST, 'override') + + @override_settings(TEST='override2') + def test_method_override(self): + self.assertEqual(settings.TEST, 'override2') + +FullyDecoratedTestCase = override_settings(TEST='override')(FullyDecoratedTestCase) + class SettingGetter(object): def __init__(self): self.test = getattr(settings, 'TEST', 'undefined')