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
Copyright (C) 2012-2017 Edgewall Software