cmlenz@353: # -*- coding: utf-8 -*- cmlenz@353: # cmlenz@719: # Copyright (C) 2006-2007 Edgewall Software cmlenz@353: # Copyright (C) 2006 Matthew Good cmlenz@353: # All rights reserved. cmlenz@353: # cmlenz@353: # This software is licensed as described in the file COPYING, which cmlenz@353: # you should have received as part of this distribution. The terms cmlenz@353: # are also available at http://genshi.edgewall.org/wiki/License. cmlenz@353: # cmlenz@353: # This software consists of voluntary contributions made by many cmlenz@353: # individuals. For the exact contribution history, see the revision cmlenz@353: # history and logs, available at http://genshi.edgewall.org/log/. cmlenz@353: cmlenz@353: import doctest cmlenz@353: import os cmlenz@353: import unittest cmlenz@353: cmlenz@353: from genshi.core import Stream cmlenz@353: from genshi.output import DocType cmlenz@592: from genshi.template import MarkupTemplate, TextTemplate, NewTextTemplate cmlenz@353: from genshi.template.plugin import ConfigurationError, \ cmlenz@353: MarkupTemplateEnginePlugin, \ cmlenz@353: TextTemplateEnginePlugin cmlenz@353: cmlenz@353: PACKAGE = 'genshi.template.tests' cmlenz@353: cmlenz@353: cmlenz@353: class MarkupTemplateEnginePluginTestCase(unittest.TestCase): cmlenz@353: cmlenz@353: def test_init_no_options(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin() cmlenz@353: self.assertEqual('utf-8', plugin.default_encoding) cmlenz@353: self.assertEqual('html', plugin.default_format) cmlenz@353: self.assertEqual(None, plugin.default_doctype) cmlenz@353: cmlenz@353: self.assertEqual([], plugin.loader.search_path) cmlenz@353: self.assertEqual(True, plugin.loader.auto_reload) cmlenz@353: self.assertEqual(25, plugin.loader._cache.capacity) cmlenz@353: cmlenz@353: def test_init_with_loader_options(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin(options={ cmlenz@353: 'genshi.auto_reload': 'off', cmlenz@353: 'genshi.max_cache_size': '100', cmlenz@353: 'genshi.search_path': '/usr/share/tmpl:/usr/local/share/tmpl', cmlenz@353: }) cmlenz@353: self.assertEqual(['/usr/share/tmpl', '/usr/local/share/tmpl'], cmlenz@353: plugin.loader.search_path) cmlenz@353: self.assertEqual(False, plugin.loader.auto_reload) cmlenz@353: self.assertEqual(100, plugin.loader._cache.capacity) cmlenz@353: cmlenz@353: def test_init_with_invalid_cache_size(self): cmlenz@353: self.assertRaises(ConfigurationError, MarkupTemplateEnginePlugin, cmlenz@353: options={'genshi.max_cache_size': 'thirty'}) cmlenz@353: cmlenz@353: def test_init_with_output_options(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin(options={ cmlenz@353: 'genshi.default_encoding': 'iso-8859-15', cmlenz@353: 'genshi.default_format': 'xhtml', cmlenz@353: 'genshi.default_doctype': 'xhtml-strict', cmlenz@353: }) cmlenz@353: self.assertEqual('iso-8859-15', plugin.default_encoding) cmlenz@353: self.assertEqual('xhtml', plugin.default_format) cmlenz@353: self.assertEqual(DocType.XHTML, plugin.default_doctype) cmlenz@353: cmlenz@353: def test_init_with_invalid_output_format(self): cmlenz@353: self.assertRaises(ConfigurationError, MarkupTemplateEnginePlugin, cmlenz@353: options={'genshi.default_format': 'foobar'}) cmlenz@353: cmlenz@353: def test_init_with_invalid_doctype(self): cmlenz@353: self.assertRaises(ConfigurationError, MarkupTemplateEnginePlugin, cmlenz@353: options={'genshi.default_doctype': 'foobar'}) cmlenz@353: cmlenz@353: def test_load_template_from_file(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.test') cmlenz@353: self.assertEqual('test.html', os.path.basename(tmpl.filename)) cmlenz@353: assert isinstance(tmpl, MarkupTemplate) cmlenz@353: cmlenz@353: def test_load_template_from_string(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(None, template_string="""

cmlenz@353: $message cmlenz@353:

""") cmlenz@353: self.assertEqual(None, tmpl.filename) cmlenz@353: assert isinstance(tmpl, MarkupTemplate) cmlenz@353: cmlenz@353: def test_transform_with_load(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.test') cmlenz@353: stream = plugin.transform({'message': 'Hello'}, tmpl) cmlenz@353: assert isinstance(stream, Stream) cmlenz@353: cmlenz@353: def test_transform_without_load(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin() cmlenz@353: stream = plugin.transform({'message': 'Hello'}, cmlenz@353: PACKAGE + '.templates.test') cmlenz@353: assert isinstance(stream, Stream) cmlenz@353: cmlenz@353: def test_render(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.test') cmlenz@353: output = plugin.render({'message': 'Hello'}, template=tmpl) cmlenz@353: self.assertEqual(""" cmlenz@353: cmlenz@353: cmlenz@353: Test cmlenz@353: cmlenz@353: cmlenz@353:

Test

cmlenz@353:

Hello

cmlenz@353: cmlenz@353: """, output) cmlenz@353: cmlenz@353: def test_render_with_format(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.test') cmlenz@353: output = plugin.render({'message': 'Hello'}, format='xhtml', cmlenz@353: template=tmpl) cmlenz@353: self.assertEqual(""" cmlenz@410: cmlenz@353: cmlenz@353: Test cmlenz@353: cmlenz@353: cmlenz@353:

Test

cmlenz@353:

Hello

cmlenz@353: cmlenz@353: """, output) cmlenz@353: cmlenz@353: def test_render_with_doctype(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin(options={ cmlenz@353: 'genshi.default_doctype': 'html-strict', cmlenz@353: }) cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.test') cmlenz@353: output = plugin.render({'message': 'Hello'}, template=tmpl) cmlenz@353: self.assertEqual(""" cmlenz@353: cmlenz@353: cmlenz@353: Test cmlenz@353: cmlenz@353: cmlenz@353:

Test

cmlenz@353:

Hello

cmlenz@353: cmlenz@353: """, output) cmlenz@353: cmlenz@651: def test_render_fragment_with_doctype(self): cmlenz@651: plugin = MarkupTemplateEnginePlugin(options={ cmlenz@651: 'genshi.default_doctype': 'html-strict', cmlenz@651: }) cmlenz@651: tmpl = plugin.load_template(PACKAGE + '.templates.test_no_doctype') cmlenz@651: output = plugin.render({'message': 'Hello'}, template=tmpl, cmlenz@651: fragment=True) cmlenz@651: self.assertEqual(""" cmlenz@651: cmlenz@651: Test cmlenz@651: cmlenz@651: cmlenz@651:

Test

cmlenz@651:

Hello

cmlenz@651: cmlenz@651: """, output) cmlenz@651: cmlenz@353: def test_helper_functions(self): cmlenz@353: plugin = MarkupTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.functions') cmlenz@353: output = plugin.render({'snippet': 'Foo'}, template=tmpl) cmlenz@353: self.assertEqual("""
cmlenz@353: False cmlenz@353: bar cmlenz@353: Foo cmlenz@353: Foo cmlenz@353:
""", output) cmlenz@353: cmlenz@353: cmlenz@353: class TextTemplateEnginePluginTestCase(unittest.TestCase): cmlenz@353: cmlenz@353: def test_init_no_options(self): cmlenz@353: plugin = TextTemplateEnginePlugin() cmlenz@353: self.assertEqual('utf-8', plugin.default_encoding) cmlenz@353: self.assertEqual('text', plugin.default_format) cmlenz@353: cmlenz@353: self.assertEqual([], plugin.loader.search_path) cmlenz@353: self.assertEqual(True, plugin.loader.auto_reload) cmlenz@353: self.assertEqual(25, plugin.loader._cache.capacity) cmlenz@353: cmlenz@353: def test_init_with_loader_options(self): cmlenz@353: plugin = TextTemplateEnginePlugin(options={ cmlenz@353: 'genshi.auto_reload': 'off', cmlenz@353: 'genshi.max_cache_size': '100', cmlenz@353: 'genshi.search_path': '/usr/share/tmpl:/usr/local/share/tmpl', cmlenz@353: }) cmlenz@353: self.assertEqual(['/usr/share/tmpl', '/usr/local/share/tmpl'], cmlenz@353: plugin.loader.search_path) cmlenz@353: self.assertEqual(False, plugin.loader.auto_reload) cmlenz@353: self.assertEqual(100, plugin.loader._cache.capacity) cmlenz@353: cmlenz@353: def test_init_with_output_options(self): cmlenz@353: plugin = TextTemplateEnginePlugin(options={ cmlenz@353: 'genshi.default_encoding': 'iso-8859-15', cmlenz@353: }) cmlenz@353: self.assertEqual('iso-8859-15', plugin.default_encoding) cmlenz@353: cmlenz@592: def test_init_with_new_syntax(self): cmlenz@592: plugin = TextTemplateEnginePlugin(options={ cmlenz@592: 'genshi.new_text_syntax': 'yes', cmlenz@592: }) cmlenz@592: self.assertEqual(NewTextTemplate, plugin.template_class) cmlenz@592: tmpl = plugin.load_template(PACKAGE + '.templates.new_syntax') cmlenz@592: output = plugin.render({'foo': True}, template=tmpl) cmlenz@592: self.assertEqual('bar', output) cmlenz@592: cmlenz@353: def test_load_template_from_file(self): cmlenz@353: plugin = TextTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.test') cmlenz@353: assert isinstance(tmpl, TextTemplate) cmlenz@353: self.assertEqual('test.txt', os.path.basename(tmpl.filename)) cmlenz@353: cmlenz@353: def test_load_template_from_string(self): cmlenz@353: plugin = TextTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(None, template_string="$message") cmlenz@353: self.assertEqual(None, tmpl.filename) cmlenz@353: assert isinstance(tmpl, TextTemplate) cmlenz@353: cmlenz@353: def test_transform_without_load(self): cmlenz@353: plugin = TextTemplateEnginePlugin() cmlenz@353: stream = plugin.transform({'message': 'Hello'}, cmlenz@353: PACKAGE + '.templates.test') cmlenz@353: assert isinstance(stream, Stream) cmlenz@353: cmlenz@353: def test_transform_with_load(self): cmlenz@353: plugin = TextTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.test') cmlenz@353: stream = plugin.transform({'message': 'Hello'}, tmpl) cmlenz@353: assert isinstance(stream, Stream) cmlenz@353: cmlenz@353: def test_render(self): cmlenz@353: plugin = TextTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.test') cmlenz@353: output = plugin.render({'message': 'Hello'}, template=tmpl) cmlenz@353: self.assertEqual("""Test cmlenz@353: ==== cmlenz@353: cmlenz@353: Hello cmlenz@353: """, output) cmlenz@353: cmlenz@353: def test_helper_functions(self): cmlenz@353: plugin = TextTemplateEnginePlugin() cmlenz@353: tmpl = plugin.load_template(PACKAGE + '.templates.functions') cmlenz@353: output = plugin.render({}, template=tmpl) cmlenz@353: self.assertEqual("""False cmlenz@353: bar cmlenz@353: """, output) cmlenz@353: cmlenz@353: cmlenz@353: def suite(): cmlenz@353: suite = unittest.TestSuite() cmlenz@353: suite.addTest(unittest.makeSuite(MarkupTemplateEnginePluginTestCase, 'test')) cmlenz@353: suite.addTest(unittest.makeSuite(TextTemplateEnginePluginTestCase, 'test')) cmlenz@353: return suite cmlenz@353: cmlenz@353: if __name__ == '__main__': cmlenz@353: unittest.main(defaultTest='suite')