diff -r 8d941af65caf -r 77b6da96e6f1 web/lib/django/test/utils.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/django/test/utils.py Wed Jun 02 18:57:35 2010 +0200 @@ -0,0 +1,79 @@ +import sys, time, os +from django.conf import settings +from django.core import mail +from django.core.mail.backends import locmem +from django.test import signals +from django.template import Template +from django.utils.translation import deactivate + +class ContextList(list): + """A wrapper that provides direct key access to context items contained + in a list of context objects. + """ + def __getitem__(self, key): + if isinstance(key, basestring): + for subcontext in self: + if key in subcontext: + return subcontext[key] + raise KeyError(key) + else: + return super(ContextList, self).__getitem__(key) + + +def instrumented_test_render(self, context): + """ + An instrumented Template render method, providing a signal + that can be intercepted by the test system Client + """ + signals.template_rendered.send(sender=self, template=self, context=context) + return self.nodelist.render(context) + + +def setup_test_environment(): + """Perform any global pre-test setup. This involves: + + - Installing the instrumented test renderer + - Set the email backend to the locmem email backend. + - Setting the active locale to match the LANGUAGE_CODE setting. + """ + Template.original_render = Template._render + Template._render = instrumented_test_render + + mail.original_SMTPConnection = mail.SMTPConnection + mail.SMTPConnection = locmem.EmailBackend + + mail.original_email_backend = settings.EMAIL_BACKEND + settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend' + + mail.outbox = [] + + deactivate() + +def teardown_test_environment(): + """Perform any global post-test teardown. This involves: + + - Restoring the original test renderer + - Restoring the email sending functions + + """ + Template._render = Template.original_render + del Template.original_render + + mail.SMTPConnection = mail.original_SMTPConnection + del mail.original_SMTPConnection + + settings.EMAIL_BACKEND = mail.original_email_backend + del mail.original_email_backend + + del mail.outbox + +def get_runner(settings): + test_path = settings.TEST_RUNNER.split('.') + # Allow for Python 2.5 relative paths + if len(test_path) > 1: + test_module_name = '.'.join(test_path[:-1]) + else: + test_module_name = '.' + test_module = __import__(test_module_name, {}, {}, test_path[-1]) + test_runner = getattr(test_module, test_path[-1]) + return test_runner