diff options
| author | Russell Keith-Magee <russell@keith-magee.com> | 2008-05-29 13:11:23 +0000 |
|---|---|---|
| committer | Russell Keith-Magee <russell@keith-magee.com> | 2008-05-29 13:11:23 +0000 |
| commit | d53e8f1285247a2a9579f30982086cc495c1098d (patch) | |
| tree | b099a6f84733103c300ea79729297bb09141b894 /tests | |
| parent | d4d5f4ce2f3fc27d7680c0d2a920774873232fde (diff) | |
Fixed #6430 -- Corrected the loading of templates from eggs, which was broken by the unicode merge. Thanks for the excellent report and patch, Juan Manuel Caicedo <juan.manuel.caicedo@gmail.com>.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@7565 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/templates/loaders.py | 88 | ||||
| -rw-r--r-- | tests/regressiontests/templates/tests.py | 7 |
2 files changed, 93 insertions, 2 deletions
diff --git a/tests/regressiontests/templates/loaders.py b/tests/regressiontests/templates/loaders.py new file mode 100644 index 0000000000..bc630dad49 --- /dev/null +++ b/tests/regressiontests/templates/loaders.py @@ -0,0 +1,88 @@ +# -*- coding: utf-8 -*- +""" +Test cases for the template loaders +""" + +from django.conf import settings + +if __name__ == '__main__': + settings.configure() + +import unittest +import sys +import pkg_resources +import imp +import StringIO + +from django.template import TemplateDoesNotExist +from django.template.loaders.eggs import load_template_source as lts_egg + +#Mock classes and objects for pkg_resources functions +class MockProvider(pkg_resources.NullProvider): + def __init__(self, module): + pkg_resources.NullProvider.__init__(self, module) + self.module = module + + def _has(self, path): + return path in self.module._resources + + def _isdir(self,path): + return False + + def get_resource_stream(self, manager, resource_name): + return self.module._resources[resource_name] + + def _get(self, path): + return self.module._resources[path].read() + +class MockLoader(object): pass + +def create_egg(name, resources): + """ + Creates a mock egg with a list of resources + + name: The name of the module + resources: A dictionary of resources. Keys are the names and values the the data. + """ + egg = imp.new_module(name) + egg.__loader__ = MockLoader() + egg._resources = resources + sys.modules[name] = egg + + +class EggLoader(unittest.TestCase): + def setUp(self): + pkg_resources._provider_factories[MockLoader] = MockProvider + + self.empty_egg = create_egg("egg_empty", {}) + self.egg_1 = create_egg("egg_1", { + 'templates/y.html' : StringIO.StringIO("y"), + 'templates/x.txt' : StringIO.StringIO("x"), + }) + settings.INSTALLED_APPS = [] + + def test_empty(self): + "Loading any template on an empty egg should fail" + settings.INSTALLED_APPS = ['egg_empty'] + self.assertRaises(TemplateDoesNotExist, lts_egg, "not-existing.html") + + def test_non_existing(self): + "Template loading fails if the template is not in the egg" + settings.INSTALLED_APPS = ['egg_1'] + self.assertRaises(TemplateDoesNotExist, lts_egg, "not-existing.html") + + def test_existing(self): + "A template can be loaded from an egg" + settings.INSTALLED_APPS = ['egg_1'] + contents, template_name = lts_egg("y.html") + self.assertEqual(contents, "y") + self.assertEqual(template_name, "egg:egg_1:templates/y.html") + + def test_not_installed(self): + "Loading an existent template from an egg not included in INSTALLED_APPS should fail" + settings.INSTALLED_APPS = [] + self.assertRaises(TemplateDoesNotExist, lts_egg, "y.html") + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index aef6f504b1..4effea55de 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -19,12 +19,15 @@ from django.utils.tzinfo import LocalTimezone from unicode import unicode_tests from context import context_tests + +from loaders import * + import filters # Some other tests we would like to run __test__ = { - 'unicode': unicode_tests, - 'context': context_tests, + 'unicode': unicode_tests, + 'context': context_tests } ################################# |
