[pypy-svn] r16494 - pypy/dist/pypy/interpreter/test

arigo at codespeak.net arigo at codespeak.net
Thu Aug 25 16:04:43 CEST 2005


Author: arigo
Date: Thu Aug 25 16:04:41 2005
New Revision: 16494

Added:
   pypy/dist/pypy/interpreter/test/inprogress_test_syntax.py   (contents, props changed)
Log:
A nasty test checking that some constructions are explicitely forbidden by the
compiler.  (Doesn't work for now.)


Added: pypy/dist/pypy/interpreter/test/inprogress_test_syntax.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/interpreter/test/inprogress_test_syntax.py	Thu Aug 25 16:04:41 2005
@@ -0,0 +1,265 @@
+import py
+
+def splitcases(s):
+    lines = [line.rstrip() for line in s.split('\n')]
+    s = '\n'.join(lines)
+    result = []
+    for case in s.split('\n\n'):
+        if case.strip():
+            result.append(str(py.code.Source(case))+'\n')
+    return result
+
+
+VALID = splitcases("""
+
+    def f():
+        def g():
+            global x
+            exec "hi"
+            x
+
+    def f():
+        def g():
+            global x
+            from a import *
+            x
+
+    def f(x):
+        def g():
+            global x
+            exec "hi"
+            x
+
+    def f(x):
+        def g():
+            global x
+            from a import *
+            x
+
+    def f():
+        def g():
+            from a import *
+
+    def f():
+        def g():
+            exec "hi"
+
+    def f():
+        from a import *
+
+    def f():
+        exec "hi"
+
+    def f():
+        from a import *
+        def g():
+            global x
+            x
+
+    def f():
+        exec "hi"
+        def g():
+            global x
+            x
+
+    def f():
+        from a import *
+        def g(x):
+            x
+
+    def f():
+        exec "hi"
+        def g(x):
+            x
+
+    def f():
+        from a import *
+        lambda x: x
+
+    def f():
+        exec "hi"
+        lambda x: x
+
+    def f():
+        from a import *
+        x
+
+    def f():
+        exec "hi"
+        x
+
+    def f():
+        from a import *
+        (i for i in x)
+
+    def f():
+        exec "hi"
+        (i for i in x)
+
+    def f():
+        class g:
+            exec "hi"
+            x
+
+    def f(x):
+        class g:
+            exec "hi"
+            x
+
+    def f():
+        class g:
+            from a import *
+            x
+
+    def f(x):
+        class g:
+            from a import *
+            x
+
+""")
+
+
+INVALID = splitcases("""
+
+    def f():
+        def g():
+            exec "hi"
+            x
+
+    def f(x):
+        def g():
+            exec "hi"
+            x
+
+    def f():
+        def g():
+            from a import *
+            x
+
+    def f(x):
+        def g():
+            from a import *
+            x
+
+    def f():
+        exec "hi"
+        def g():
+            x
+
+    def f():
+        exec "hi"
+        lambda x: y
+
+    def f():
+        from a import *
+        def g():
+            x
+
+    def f():
+        from a import *
+        lambda x: y
+
+    def f():
+        exec "hi"
+        class g:
+            x
+
+    def f():
+        from a import *
+        class g:
+            x
+
+    def f():
+        exec "hi"
+        class g:
+            def h():
+                x
+
+    def f():
+        from a import *
+        class g:
+            def h():
+                x
+
+    def f(x):
+        exec "hi"
+        class g:
+            x
+
+    def f(x):
+        from a import *
+        class g:
+            x
+
+    def f(x):
+        exec "hi"
+        class g:
+            def h():
+                x
+
+    def f(x):
+        from a import *
+        class g:
+            def h():
+                x
+
+    def f():
+        (i for i in x) = 10
+
+""")
+
+
+for i in range(len(VALID)):
+    exec """def test_valid_%d(space):
+                checkvalid(space, %r)
+""" % (i, VALID[i])
+
+for i in range(len(INVALID)):
+    exec """def test_invalid_%d(space):
+                checkinvalid(space, %r)
+""" % (i, INVALID[i])
+
+
+def checkvalid(space, s):
+    try:
+        space.call_function(space.builtin.get('compile'),
+                            space.wrap(s),
+                            space.wrap('?'),
+                            space.wrap('exec'))
+    except:
+        print '\n' + s
+        raise
+
+def checkinvalid(space, s):
+    from pypy.interpreter.error import OperationError
+    try:
+        try:
+            space.call_function(space.builtin.get('compile'),
+                                space.wrap(s),
+                                space.wrap('?'),
+                                space.wrap('exec'))
+        except OperationError, e:
+            if not e.match(space, space.w_SyntaxError):
+                raise
+        else:
+            raise Exception("Should have raised SyntaxError")
+    except:
+        print '\n' + s
+        raise
+
+
+if __name__ == '__main__':
+    # only to check on top of CPython (you need 2.4)
+    from py.test import raises
+    for s in VALID:
+        try:
+            compile(s, '?', 'exec')
+        except:
+            print s
+            raise
+    for s in INVALID:
+        try:
+            raises(SyntaxError, compile, s, '?', 'exec')
+        except:
+            print s
+            raise



More information about the Pypy-commit mailing list