Mercurial > genshi > mirror
changeset 436:57e8bd746717 trunk
Raise syntax error on empty value for `py:replace` directive.
author | cmlenz |
---|---|
date | Mon, 02 Apr 2007 13:54:10 +0000 |
parents | be39660919a5 |
children | 821fc97d3c0a |
files | genshi/template/directives.py genshi/template/tests/directives.py |
diffstat | 2 files changed, 25 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/genshi/template/directives.py +++ b/genshi/template/directives.py @@ -443,6 +443,9 @@ __slots__ = [] def attach(cls, template, stream, value, namespaces, pos): + if not value: + raise TemplateSyntaxError('missing value for "replace" directive', + template.filepath, *pos[1:]) expr = cls._parse_expr(value, template.filepath, *pos[1:]) return None, [(EXPR, expr, pos)] attach = classmethod(attach)
--- a/genshi/template/tests/directives.py +++ b/genshi/template/tests/directives.py @@ -16,7 +16,7 @@ import unittest from genshi.template import directives, MarkupTemplate, TextTemplate, \ - TemplateRuntimeError + TemplateRuntimeError, TemplateSyntaxError class AttrsDirectiveTestCase(unittest.TestCase): @@ -462,6 +462,7 @@ </doc>""", filename='test.html') try: list(tmpl.generate(foo=12)) + self.fail('Expected TemplateRuntimeError') except TemplateRuntimeError, e: self.assertEqual('test.html', e.filename) if sys.version_info[:2] >= (2, 4): @@ -837,6 +838,25 @@ # </div>""", str(tmpl.generate())) +class ReplaceDirectiveTestCase(unittest.TestCase): + """Tests for the `py:replace` template directive.""" + + def test_replace_with_empty_value(self): + """ + Verify that the directive raises an apprioriate exception when an empty + expression is supplied. + """ + try: + tmpl = MarkupTemplate("""<doc xmlns:py="http://genshi.edgewall.org/"> + <elem py:replace="">Foo</elem> + </doc>""", filename='test.html') + self.fail('Expected TemplateSyntaxError') + except TemplateSyntaxError, e: + self.assertEqual('test.html', e.filename) + if sys.version_info[:2] >= (2, 4): + self.assertEqual(2, e.lineno) + + class StripDirectiveTestCase(unittest.TestCase): """Tests for the `py:strip` template directive.""" @@ -951,6 +971,7 @@ suite.addTest(unittest.makeSuite(ForDirectiveTestCase, 'test')) suite.addTest(unittest.makeSuite(IfDirectiveTestCase, 'test')) suite.addTest(unittest.makeSuite(MatchDirectiveTestCase, 'test')) + suite.addTest(unittest.makeSuite(ReplaceDirectiveTestCase, 'test')) suite.addTest(unittest.makeSuite(StripDirectiveTestCase, 'test')) suite.addTest(unittest.makeSuite(WithDirectiveTestCase, 'test')) return suite