# HG changeset patch # User aflett # Date 1207694323 0 # Node ID fe05ebf91775f56453e51e3fab040d40e9b0522d # Parent 09715f868a738772a1c504671fe383a05e88539b fix ticket [209] - make sure py:with is valid, and add a test to make sure empty py:for is invalid diff --git a/genshi/template/eval.py b/genshi/template/eval.py --- a/genshi/template/eval.py +++ b/genshi/template/eval.py @@ -387,11 +387,12 @@ source = source.strip() if mode == 'exec': lines = [line.expandtabs() for line in source.splitlines()] - first = lines[0] - rest = dedent('\n'.join(lines[1:])).rstrip() - if first.rstrip().endswith(':') and not rest[0].isspace(): - rest = '\n'.join([' %s' % line for line in rest.splitlines()]) - source = '\n'.join([first, rest]) + if lines: + first = lines[0] + rest = dedent('\n'.join(lines[1:])).rstrip() + if first.rstrip().endswith(':') and not rest[0].isspace(): + rest = '\n'.join([' %s' % line for line in rest.splitlines()]) + source = '\n'.join([first, rest]) if isinstance(source, unicode): source = '\xef\xbb\xbf' + source.encode('utf-8') return parse(source, mode) @@ -417,7 +418,10 @@ else: gen = ModuleCodeGenerator(tree) lines = source.splitlines() - extract = lines[0] + if not lines: + extract = '' + else: + extract = lines[0] if len(lines) > 1: extract += ' ...' name = '' % (extract) diff --git a/genshi/template/tests/directives.py b/genshi/template/tests/directives.py --- a/genshi/template/tests/directives.py +++ b/genshi/template/tests/directives.py @@ -499,6 +499,22 @@ if sys.version_info[:2] >= (2, 4): self.assertEqual(2, frames[-1].tb_lineno) + def test_for_with_empty_value(self): + """ + Verify an empty 'for' value is an error + """ + try: + MarkupTemplate(""" + + empty + + """, filename='test.html') + self.fail('ExpectedTemplateSyntaxError') + except TemplateSyntaxError, e: + self.assertEqual('test.html', e.filename) + if sys.version_info[:2] > (2,4): + self.assertEqual(2, e.lineno) + class IfDirectiveTestCase(unittest.TestCase): """Tests for the `py:if` template directive.""" @@ -1104,6 +1120,16 @@ 一二三四五六日 """, str(tmpl.generate())) + + def test_with_empty_value(self): + """ + Verify that an empty py:with works (useless, but legal) + """ + tmpl = MarkupTemplate("""
+ Text
""") + + self.assertEqual("""
+ Text
""", str(tmpl.generate())) def suite():