# HG changeset patch # User cmlenz # Date 1258151464 0 # Node ID 82ba3198d9139d8ab343a8d5e35db781db57c95f # Parent ab619331489a016a4847fdaf8677052ec035b5c5 Add unit tests for correct handling of with statements and yield expressions in the AST code generator. diff --git a/genshi/template/tests/eval.py b/genshi/template/tests/eval.py --- a/genshi/template/tests/eval.py +++ b/genshi/template/tests/eval.py @@ -12,9 +12,11 @@ # history and logs, available at http://genshi.edgewall.org/log/. import doctest +import os import pickle from StringIO import StringIO import sys +from tempfile import NamedTemporaryFile import unittest from genshi.core import Markup @@ -783,6 +785,41 @@ Suite("del d['k']").execute({'d': d}) self.failIf('k' in d, repr(d)) + if sys.version_info >= (2, 5): + def test_with_statement(self): + f = NamedTemporaryFile() + f.write('foo\nbar\n') + f.seek(0) + + d = {'path': f.name} + suite = Suite("""from __future__ import with_statement +lines = [] +with open(path) as file: + for line in file: + lines.append(line) +""") + suite.execute(d) + self.assertEqual(['foo\n', 'bar\n'], d['lines']) + + def test_yield_expression(self): + d = {} + suite = Suite("""results = [] +def counter(maximum): + i = 0 + while i < maximum: + val = (yield i) + if val is not None: + i = val + else: + i += 1 +it = counter(5) +results.append(it.next()) +results.append(it.send(3)) +results.append(it.next()) +""") + suite.execute(d) + self.assertEqual([0, 3, 4], d['results']) + def suite(): suite = unittest.TestSuite() diff --git a/scripts/ast_generator.py b/scripts/ast_generator.py --- a/scripts/ast_generator.py +++ b/scripts/ast_generator.py @@ -34,7 +34,7 @@ done.add(cls) print('# Generated automatically, please do not edit') -print('# Generator can be found in Genshi SVN, scripts/ast-generator.py') +print('# Generator can be found in Genshi SVN, scripts/ast_generator.py') print('') print('__version__ = %s' % _ast.__version__) print('')