changeset 867:efc03d0719f3

Add unit tests for correct handling of with statements and yield expressions in the AST code generator.
author cmlenz
date Fri, 13 Nov 2009 22:31:04 +0000
parents 6148ec774d7a
children 9309530ee279
files genshi/template/tests/eval.py scripts/ast_generator.py
diffstat 2 files changed, 38 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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()
--- 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('')
Copyright (C) 2012-2017 Edgewall Software