Author: Ronan Lamy <[email protected]>
Branch:
Changeset: r97997:bcfb9bf0b28b
Date: 2019-11-09 02:00 +0000
http://bitbucket.org/pypy/pypy/changeset/bcfb9bf0b28b/
Log: Convert test_exec to apptest
diff --git a/pypy/interpreter/test/test_exec.py
b/pypy/interpreter/test/apptest_exec.py
copy from pypy/interpreter/test/test_exec.py
copy to pypy/interpreter/test/apptest_exec.py
--- a/pypy/interpreter/test/test_exec.py
+++ b/pypy/interpreter/test/apptest_exec.py
@@ -2,271 +2,254 @@
New for PyPy - Could be incorporated into CPython regression tests.
"""
-from rpython.tool.udir import udir
+def test_string():
+ g = {}
+ l = {}
+ exec "a = 3" in g, l
+ assert l['a'] == 3
+def test_localfill():
+ g = {}
+ exec "a = 3" in g
+ assert g['a'] == 3
-def test_file(space):
- fn = udir.join('test_exec_file')
- fn.write('abc=1\ncba=2\n')
- space.appexec([space.wrap(str(fn))], '''
- (filename):
- fo = open(filename, 'r')
- g = {}
- exec fo in g
- assert 'abc' in g
- assert 'cba' in g
- ''')
+def test_builtinsupply():
+ g = {}
+ exec "pass" in g
+ assert g.has_key('__builtins__')
+def test_invalidglobal():
+ def f():
+ exec 'pass' in 1
+ raises(TypeError,f)
-class AppTestExecStmt:
- def test_string(self):
- g = {}
- l = {}
- exec "a = 3" in g, l
- assert l['a'] == 3
+def test_invalidlocal():
+ def f():
+ exec 'pass' in {}, 2
+ raises(TypeError,f)
- def test_localfill(self):
- g = {}
- exec "a = 3" in g
- assert g['a'] == 3
+def test_codeobject():
+ co = compile("a = 3", '<string>', 'exec')
+ g = {}
+ l = {}
+ exec co in g, l
+ assert l['a'] == 3
- def test_builtinsupply(self):
- g = {}
- exec "pass" in g
- assert g.has_key('__builtins__')
+def test_implicit():
+ a = 4
+ exec "a = 3"
+ assert a == 3
- def test_invalidglobal(self):
+def test_tuplelocals():
+ g = {}
+ l = {}
+ exec ("a = 3", g, l)
+ assert l['a'] == 3
+
+def test_tupleglobals():
+ g = {}
+ exec ("a = 3", g)
+ assert g['a'] == 3
+
+def test_exceptionfallthrough():
+ def f():
+ exec 'raise TypeError' in {}
+ raises(TypeError,f)
+
+def test_global_stmt():
+ g = {}
+ l = {}
+ co = compile("global a; a=5", '', 'exec')
+ #import dis
+ #dis.dis(co)
+ exec co in g, l
+ assert l == {}
+ assert g['a'] == 5
+
+def test_specialcase_free_load():
+ exec """if 1:
def f():
- exec 'pass' in 1
- raises(TypeError,f)
+ exec 'a=3'
+ return a
+ x = f()\n"""
+ assert x == 3
- def test_invalidlocal(self):
+def test_specialcase_free_load2():
+ exec """if 1:
+ def f(a):
+ exec 'a=3'
+ return a
+ x = f(4)\n"""
+ assert x == 3
+
+def test_specialcase_globals_and_exec():
+ d = {}
+ exec """if 1:
+ b = 2
+ c = 3
+ d = 4
+ def f(a):
+ global b
+ exec 'd=42 ; b=7'
+ return a,b,c,d
+ #import dis
+ #dis.dis(f)
+ res = f(3)\n""" in d
+ r = d['res']
+ assert r == (3,2,3,42)
+
+def test_nested_names_are_not_confused():
+ def get_nested_class():
+ method_and_var = "var"
+ class Test(object):
+ def method_and_var(self):
+ return "method"
+ def test(self):
+ return method_and_var
+ def actual_global(self):
+ return str("global")
+ def str(self):
+ return str(self)
+ return Test()
+ t = get_nested_class()
+ assert t.actual_global() == "global"
+ assert t.test() == 'var'
+ assert t.method_and_var() == 'method'
+
+def test_import_star_shadows_global():
+ d = {'platform' : 3}
+ exec """if 1:
def f():
- exec 'pass' in {}, 2
- raises(TypeError,f)
+ from sys import *
+ return platform
+ res = f()\n""" in d
+ import sys
+ assert d['res'] == sys.platform
- def test_codeobject(self):
- co = compile("a = 3", '<string>', 'exec')
- g = {}
- l = {}
- exec co in g, l
- assert l['a'] == 3
+def test_import_global_takes_precendence():
+ d = {'platform' : 3}
+ exec """if 1:
+ def f():
+ global platform
+ from sys import *
+ return platform
+ res = f()\n""" in d
+ import sys
+ assert d['platform'] == 3
- def test_implicit(self):
- a = 4
- exec "a = 3"
- assert a == 3
+def test_exec_load_name():
+ d = {'x': 2}
+ exec """if 1:
+ def f():
+ save = x
+ exec "x=3"
+ return x,save
+ \n""" in d
+ res = d['f']()
+ assert res == (3, 2)
- def test_tuplelocals(self):
- g = {}
- l = {}
- exec ("a = 3", g, l)
- assert l['a'] == 3
+def test_space_bug():
+ d = {}
+ exec "x=5 " in d
+ assert d['x'] == 5
- def test_tupleglobals(self):
- g = {}
- exec ("a = 3", g)
- assert g['a'] == 3
+def test_synerr():
+ def x():
+ exec "1 2"
+ raises(SyntaxError, x)
- def test_exceptionfallthrough(self):
- def f():
- exec 'raise TypeError' in {}
- raises(TypeError,f)
+def test_mapping_as_locals():
+ import sys
+ if sys.version_info < (2,5) or not hasattr(sys, 'pypy_objspaceclass'):
+ skip("need CPython 2.5 or PyPy for non-dictionaries in exec
statements")
+ class M(object):
+ def __getitem__(self, key):
+ return key
+ def __setitem__(self, key, value):
+ self.result[key] = value
+ def setdefault(self, key, value):
+ assert key == '__builtins__'
+ m = M()
+ m.result = {}
+ exec "x=m" in {}, m
+ assert m.result == {'x': 'm'}
+ exec "y=n" in m # NOTE: this doesn't work in CPython 2.4
+ assert m.result == {'x': 'm', 'y': 'n'}
- def test_global_stmt(self):
- g = {}
- l = {}
- co = compile("global a; a=5", '', 'exec')
- #import dis
- #dis.dis(co)
- exec co in g, l
- assert l == {}
- assert g['a'] == 5
+def test_filename():
+ try:
+ exec "'unmatched_quote"
+ except SyntaxError as msg:
+ assert msg.filename == '<string>'
+ try:
+ eval("'unmatched_quote")
+ except SyntaxError as msg:
+ assert msg.filename == '<string>'
- def test_specialcase_free_load(self):
- exec """if 1:
- def f():
- exec 'a=3'
- return a
- x = f()\n"""
- assert x == 3
+def test_exec_and_name_lookups():
+ ns = {}
+ exec """def f():
+ exec 'x=1' in locals()
+ return x""" in ns
- def test_specialcase_free_load2(self):
- exec """if 1:
- def f(a):
- exec 'a=3'
- return a
- x = f(4)\n"""
- assert x == 3
+ f = ns['f']
- def test_specialcase_globals_and_exec(self):
- d = {}
- exec """if 1:
- b = 2
- c = 3
- d = 4
- def f(a):
- global b
- exec 'd=42 ; b=7'
- return a,b,c,d
- #import dis
- #dis.dis(f)
- res = f(3)\n""" in d
- r = d['res']
- assert r == (3,2,3,42)
+ try:
+ res = f()
+ except NameError as e: # keep py.test from exploding confused
+ raise e
- def test_nested_names_are_not_confused(self):
- def get_nested_class():
- method_and_var = "var"
- class Test(object):
- def method_and_var(self):
- return "method"
- def test(self):
- return method_and_var
- def actual_global(self):
- return str("global")
- def str(self):
- return str(self)
- return Test()
- t = get_nested_class()
- assert t.actual_global() == "global"
- assert t.test() == 'var'
- assert t.method_and_var() == 'method'
+ assert res == 1
- def test_import_star_shadows_global(self):
- d = {'platform' : 3}
- exec """if 1:
- def f():
- from sys import *
- return platform
- res = f()\n""" in d
- import sys
- assert d['res'] == sys.platform
+def test_exec_unicode():
+ # 's' is a string
+ s = "x = u'\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd'"
+ # 'u' is a unicode
+ u = s.decode('utf-8')
+ exec u
+ assert len(x) == 6
+ assert ord(x[0]) == 0x0439
+ assert ord(x[1]) == 0x0446
+ assert ord(x[2]) == 0x0443
+ assert ord(x[3]) == 0x043a
+ assert ord(x[4]) == 0x0435
+ assert ord(x[5]) == 0x043d
- def test_import_global_takes_precendence(self):
- d = {'platform' : 3}
- exec """if 1:
- def f():
- global platform
- from sys import *
- return platform
- res = f()\n""" in d
- import sys
- assert d['platform'] == 3
+def test_eval_unicode():
+ u = "u'%s'" % unichr(0x1234)
+ v = eval(u)
+ assert v == unichr(0x1234)
- def test_exec_load_name(self):
- d = {'x': 2}
- exec """if 1:
- def f():
- save = x
- exec "x=3"
- return x,save
- \n""" in d
- res = d['f']()
- assert res == (3, 2)
+def test_compile_unicode():
+ s = "x = u'\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd'"
+ u = s.decode('utf-8')
+ c = compile(u, '<input>', 'exec')
+ exec c
+ assert len(x) == 6
+ assert ord(x[0]) == 0x0439
- def test_space_bug(self):
- d = {}
- exec "x=5 " in d
- assert d['x'] == 5
-
- def test_synerr(self):
- def x():
- exec "1 2"
- raises(SyntaxError, x)
-
- def test_mapping_as_locals(self):
- import sys
- if sys.version_info < (2,5) or not hasattr(sys, 'pypy_objspaceclass'):
- skip("need CPython 2.5 or PyPy for non-dictionaries in exec
statements")
- class M(object):
- def __getitem__(self, key):
- return key
- def __setitem__(self, key, value):
- self.result[key] = value
- def setdefault(self, key, value):
- assert key == '__builtins__'
- m = M()
- m.result = {}
- exec "x=m" in {}, m
- assert m.result == {'x': 'm'}
- exec "y=n" in m # NOTE: this doesn't work in CPython 2.4
- assert m.result == {'x': 'm', 'y': 'n'}
-
- def test_filename(self):
- try:
- exec "'unmatched_quote"
- except SyntaxError as msg:
- assert msg.filename == '<string>'
- try:
- eval("'unmatched_quote")
- except SyntaxError as msg:
- assert msg.filename == '<string>'
-
- def test_exec_and_name_lookups(self):
- ns = {}
- exec """def f():
- exec 'x=1' in locals()
- return x""" in ns
-
- f = ns['f']
-
- try:
- res = f()
- except NameError as e: # keep py.test from exploding confused
- raise e
-
- assert res == 1
-
- def test_exec_unicode(self):
- # 's' is a string
- s = "x = u'\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd'"
- # 'u' is a unicode
- u = s.decode('utf-8')
- exec u
- assert len(x) == 6
- assert ord(x[0]) == 0x0439
- assert ord(x[1]) == 0x0446
- assert ord(x[2]) == 0x0443
- assert ord(x[3]) == 0x043a
- assert ord(x[4]) == 0x0435
- assert ord(x[5]) == 0x043d
-
- def test_eval_unicode(self):
- u = "u'%s'" % unichr(0x1234)
- v = eval(u)
- assert v == unichr(0x1234)
-
- def test_compile_unicode(self):
- s = "x = u'\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd'"
- u = s.decode('utf-8')
- c = compile(u, '<input>', 'exec')
- exec c
- assert len(x) == 6
- assert ord(x[0]) == 0x0439
-
- def test_nested_qualified_exec(self):
- import sys
- if sys.version_info < (2, 7, 9):
- skip()
- code = ["""
+def test_nested_qualified_exec():
+ import sys
+ if sys.version_info < (2, 7, 9):
+ skip()
+ code = ["""
def g():
def f():
if True:
exec "" in {}, {}
- """, """
+ """, """
def g():
def f():
if True:
exec("", {}, {})
- """]
- for c in code:
- compile(c, "<code>", "exec")
+ """]
+ for c in code:
+ compile(c, "<code>", "exec")
- def test_exec_tuple(self):
- # note: this is VERY different than testing exec("a = 42", d), because
- # this specific case is handled specially by the AST compiler
- d = {}
- x = ("a = 42", d)
- exec x
- assert d['a'] == 42
+def test_exec_tuple():
+ # note: this is VERY different than testing exec("a = 42", d), because
+ # this specific case is handled specially by the AST compiler
+ d = {}
+ x = ("a = 42", d)
+ exec x
+ assert d['a'] == 42
diff --git a/pypy/interpreter/test/test_exec.py
b/pypy/interpreter/test/test_exec.py
--- a/pypy/interpreter/test/test_exec.py
+++ b/pypy/interpreter/test/test_exec.py
@@ -16,257 +16,3 @@
assert 'abc' in g
assert 'cba' in g
''')
-
-
-class AppTestExecStmt:
- def test_string(self):
- g = {}
- l = {}
- exec "a = 3" in g, l
- assert l['a'] == 3
-
- def test_localfill(self):
- g = {}
- exec "a = 3" in g
- assert g['a'] == 3
-
- def test_builtinsupply(self):
- g = {}
- exec "pass" in g
- assert g.has_key('__builtins__')
-
- def test_invalidglobal(self):
- def f():
- exec 'pass' in 1
- raises(TypeError,f)
-
- def test_invalidlocal(self):
- def f():
- exec 'pass' in {}, 2
- raises(TypeError,f)
-
- def test_codeobject(self):
- co = compile("a = 3", '<string>', 'exec')
- g = {}
- l = {}
- exec co in g, l
- assert l['a'] == 3
-
- def test_implicit(self):
- a = 4
- exec "a = 3"
- assert a == 3
-
- def test_tuplelocals(self):
- g = {}
- l = {}
- exec ("a = 3", g, l)
- assert l['a'] == 3
-
- def test_tupleglobals(self):
- g = {}
- exec ("a = 3", g)
- assert g['a'] == 3
-
- def test_exceptionfallthrough(self):
- def f():
- exec 'raise TypeError' in {}
- raises(TypeError,f)
-
- def test_global_stmt(self):
- g = {}
- l = {}
- co = compile("global a; a=5", '', 'exec')
- #import dis
- #dis.dis(co)
- exec co in g, l
- assert l == {}
- assert g['a'] == 5
-
- def test_specialcase_free_load(self):
- exec """if 1:
- def f():
- exec 'a=3'
- return a
- x = f()\n"""
- assert x == 3
-
- def test_specialcase_free_load2(self):
- exec """if 1:
- def f(a):
- exec 'a=3'
- return a
- x = f(4)\n"""
- assert x == 3
-
- def test_specialcase_globals_and_exec(self):
- d = {}
- exec """if 1:
- b = 2
- c = 3
- d = 4
- def f(a):
- global b
- exec 'd=42 ; b=7'
- return a,b,c,d
- #import dis
- #dis.dis(f)
- res = f(3)\n""" in d
- r = d['res']
- assert r == (3,2,3,42)
-
- def test_nested_names_are_not_confused(self):
- def get_nested_class():
- method_and_var = "var"
- class Test(object):
- def method_and_var(self):
- return "method"
- def test(self):
- return method_and_var
- def actual_global(self):
- return str("global")
- def str(self):
- return str(self)
- return Test()
- t = get_nested_class()
- assert t.actual_global() == "global"
- assert t.test() == 'var'
- assert t.method_and_var() == 'method'
-
- def test_import_star_shadows_global(self):
- d = {'platform' : 3}
- exec """if 1:
- def f():
- from sys import *
- return platform
- res = f()\n""" in d
- import sys
- assert d['res'] == sys.platform
-
- def test_import_global_takes_precendence(self):
- d = {'platform' : 3}
- exec """if 1:
- def f():
- global platform
- from sys import *
- return platform
- res = f()\n""" in d
- import sys
- assert d['platform'] == 3
-
- def test_exec_load_name(self):
- d = {'x': 2}
- exec """if 1:
- def f():
- save = x
- exec "x=3"
- return x,save
- \n""" in d
- res = d['f']()
- assert res == (3, 2)
-
- def test_space_bug(self):
- d = {}
- exec "x=5 " in d
- assert d['x'] == 5
-
- def test_synerr(self):
- def x():
- exec "1 2"
- raises(SyntaxError, x)
-
- def test_mapping_as_locals(self):
- import sys
- if sys.version_info < (2,5) or not hasattr(sys, 'pypy_objspaceclass'):
- skip("need CPython 2.5 or PyPy for non-dictionaries in exec
statements")
- class M(object):
- def __getitem__(self, key):
- return key
- def __setitem__(self, key, value):
- self.result[key] = value
- def setdefault(self, key, value):
- assert key == '__builtins__'
- m = M()
- m.result = {}
- exec "x=m" in {}, m
- assert m.result == {'x': 'm'}
- exec "y=n" in m # NOTE: this doesn't work in CPython 2.4
- assert m.result == {'x': 'm', 'y': 'n'}
-
- def test_filename(self):
- try:
- exec "'unmatched_quote"
- except SyntaxError as msg:
- assert msg.filename == '<string>'
- try:
- eval("'unmatched_quote")
- except SyntaxError as msg:
- assert msg.filename == '<string>'
-
- def test_exec_and_name_lookups(self):
- ns = {}
- exec """def f():
- exec 'x=1' in locals()
- return x""" in ns
-
- f = ns['f']
-
- try:
- res = f()
- except NameError as e: # keep py.test from exploding confused
- raise e
-
- assert res == 1
-
- def test_exec_unicode(self):
- # 's' is a string
- s = "x = u'\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd'"
- # 'u' is a unicode
- u = s.decode('utf-8')
- exec u
- assert len(x) == 6
- assert ord(x[0]) == 0x0439
- assert ord(x[1]) == 0x0446
- assert ord(x[2]) == 0x0443
- assert ord(x[3]) == 0x043a
- assert ord(x[4]) == 0x0435
- assert ord(x[5]) == 0x043d
-
- def test_eval_unicode(self):
- u = "u'%s'" % unichr(0x1234)
- v = eval(u)
- assert v == unichr(0x1234)
-
- def test_compile_unicode(self):
- s = "x = u'\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd'"
- u = s.decode('utf-8')
- c = compile(u, '<input>', 'exec')
- exec c
- assert len(x) == 6
- assert ord(x[0]) == 0x0439
-
- def test_nested_qualified_exec(self):
- import sys
- if sys.version_info < (2, 7, 9):
- skip()
- code = ["""
-def g():
- def f():
- if True:
- exec "" in {}, {}
- """, """
-def g():
- def f():
- if True:
- exec("", {}, {})
- """]
- for c in code:
- compile(c, "<code>", "exec")
-
- def test_exec_tuple(self):
- # note: this is VERY different than testing exec("a = 42", d), because
- # this specific case is handled specially by the AST compiler
- d = {}
- x = ("a = 42", d)
- exec x
- assert d['a'] == 42
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit