Author: Ronan Lamy <[email protected]>
Branch: py3.6
Changeset: r97067:7c9b554a3d09
Date: 2019-08-05 17:50 +0100
http://bitbucket.org/pypy/pypy/changeset/7c9b554a3d09/
Log: convert test_compile.py to new-style apptest
diff --git a/pypy/module/__builtin__/test/test_compile.py
b/pypy/module/__builtin__/test/apptest_compile.py
copy from pypy/module/__builtin__/test/test_compile.py
copy to pypy/module/__builtin__/test/apptest_compile.py
--- a/pypy/module/__builtin__/test/test_compile.py
+++ b/pypy/module/__builtin__/test/apptest_compile.py
@@ -1,161 +1,159 @@
-# coding: utf-8
-class AppTestCompile:
+from pytest import raises, skip
+import sys
- def test_simple(self):
- import sys
- co = compile('1+2', '?', 'eval')
- assert eval(co) == 3
- co = compile(memoryview(b'1+2'), '?', 'eval')
- assert eval(co) == 3
- exc = raises(ValueError, compile, chr(0), '?', 'eval')
- assert str(exc.value) == "source code string cannot contain null bytes"
- compile("from __future__ import with_statement", "<test>", "exec")
- raises(SyntaxError, compile, '-', '?', 'eval')
- raises(SyntaxError, compile, '"\\xt"', '?', 'eval')
- raises(ValueError, compile, '1+2', '?', 'maybenot')
- raises(ValueError, compile, "\n", "<string>", "exec", 0xff)
- raises(TypeError, compile, '1+2', 12, 34)
+def test_simple():
+ co = compile('1+2', '?', 'eval')
+ assert eval(co) == 3
+ co = compile(memoryview(b'1+2'), '?', 'eval')
+ assert eval(co) == 3
+ exc = raises(ValueError, compile, chr(0), '?', 'eval')
+ assert str(exc.value) == "source code string cannot contain null bytes"
+ compile("from __future__ import with_statement", "<test>", "exec")
+ raises(SyntaxError, compile, '-', '?', 'eval')
+ raises(SyntaxError, compile, '"\\xt"', '?', 'eval')
+ raises(ValueError, compile, '1+2', '?', 'maybenot')
+ raises(ValueError, compile, "\n", "<string>", "exec", 0xff)
+ raises(TypeError, compile, '1+2', 12, 34)
- def test_error_message(self):
- import re
- compile('# -*- coding: iso-8859-15 -*-\n', 'dummy', 'exec')
- compile(b'\xef\xbb\xbf\n', 'dummy', 'exec')
- compile(b'\xef\xbb\xbf# -*- coding: utf-8 -*-\n', 'dummy', 'exec')
- exc = raises(SyntaxError, compile,
- b'# -*- coding: fake -*-\n', 'dummy', 'exec')
- assert 'fake' in str(exc.value)
- exc = raises(SyntaxError, compile,
- b'\xef\xbb\xbf# -*- coding: iso-8859-15 -*-\n', 'dummy', 'exec')
- assert 'iso-8859-15' in str(exc.value)
- assert 'BOM' in str(exc.value)
- exc = raises(SyntaxError, compile,
- b'\xef\xbb\xbf# -*- coding: fake -*-\n', 'dummy', 'exec')
- assert 'fake' in str(exc.value)
- assert 'BOM' in str(exc.value)
+def test_error_message():
+ compile('# -*- coding: iso-8859-15 -*-\n', 'dummy', 'exec')
+ compile(b'\xef\xbb\xbf\n', 'dummy', 'exec')
+ compile(b'\xef\xbb\xbf# -*- coding: utf-8 -*-\n', 'dummy', 'exec')
+ exc = raises(SyntaxError, compile,
+ b'# -*- coding: fake -*-\n', 'dummy', 'exec')
+ assert 'fake' in str(exc.value)
+ exc = raises(SyntaxError, compile,
+ b'\xef\xbb\xbf# -*- coding: iso-8859-15 -*-\n', 'dummy', 'exec')
+ assert 'iso-8859-15' in str(exc.value)
+ assert 'BOM' in str(exc.value)
+ exc = raises(SyntaxError, compile,
+ b'\xef\xbb\xbf# -*- coding: fake -*-\n', 'dummy', 'exec')
+ assert 'fake' in str(exc.value)
+ assert 'BOM' in str(exc.value)
- def test_unicode(self):
- try:
- compile(u'-', '?', 'eval')
- except SyntaxError as e:
- assert e.lineno == 1
+def test_unicode():
+ try:
+ compile(u'-', '?', 'eval')
+ except SyntaxError as e:
+ assert e.lineno == 1
- def test_incorrect_escape_deprecation_bytes(self):
- import warnings
- with warnings.catch_warnings(record=True) as l:
- warnings.simplefilter('always', category=DeprecationWarning)
- compile(r"b'\}'", '', 'exec')
- assert len(l) == 1
+def test_incorrect_escape_deprecation_bytes():
+ import warnings
+ with warnings.catch_warnings(record=True) as l:
+ warnings.simplefilter('always', category=DeprecationWarning)
+ compile(r"b'\}'", '', 'exec')
+ assert len(l) == 1
- def test_unicode_encoding(self):
- code = "# -*- coding: utf-8 -*-\npass\n"
- compile(code, "tmp", "exec")
+def test_unicode_encoding():
+ code = "# -*- coding: utf-8 -*-\npass\n"
+ compile(code, "tmp", "exec")
- def test_bytes(self):
- code = b"# -*- coding: utf-8 -*-\npass\n"
- compile(code, "tmp", "exec")
- c = compile(b"# coding: latin1\nfoo = 'caf\xe9'\n", "<string>", "exec")
- ns = {}
- exec(c, ns)
- assert ns['foo'] == 'café'
- assert eval(b"# coding: latin1\n'caf\xe9'\n") == 'café'
+def test_bytes():
+ code = b"# -*- coding: utf-8 -*-\npass\n"
+ compile(code, "tmp", "exec")
+ c = compile(b"# coding: latin1\nfoo = 'caf\xe9'\n", "<string>", "exec")
+ ns = {}
+ exec(c, ns)
+ assert ns['foo'] == 'café'
+ assert eval(b"# coding: latin1\n'caf\xe9'\n") == 'café'
- def test_memoryview(self):
- m = memoryview(b'2 + 1')
- co = compile(m, 'baz', 'eval')
- assert eval(co) == 3
- assert eval(m) == 3
- ns = {}
- exec(memoryview(b'r = 2 + 1'), ns)
- assert ns['r'] == 3
+def test_memoryview():
+ m = memoryview(b'2 + 1')
+ co = compile(m, 'baz', 'eval')
+ assert eval(co) == 3
+ assert eval(m) == 3
+ ns = {}
+ exec(memoryview(b'r = 2 + 1'), ns)
+ assert ns['r'] == 3
- def test_recompile_ast(self):
- import _ast
- # raise exception when node type doesn't match with compile mode
- co1 = compile('print(1)', '<string>', 'exec', _ast.PyCF_ONLY_AST)
- raises(TypeError, compile, co1, '<ast>', 'eval')
- co2 = compile('1+1', '<string>', 'eval', _ast.PyCF_ONLY_AST)
- tree = compile(co2, '<ast>', 'eval')
- assert compile(co2, '<ast>', 'eval', _ast.PyCF_ONLY_AST) is co2
+def test_recompile_ast():
+ import _ast
+ # raise exception when node type doesn't match with compile mode
+ co1 = compile('print(1)', '<string>', 'exec', _ast.PyCF_ONLY_AST)
+ raises(TypeError, compile, co1, '<ast>', 'eval')
+ co2 = compile('1+1', '<string>', 'eval', _ast.PyCF_ONLY_AST)
+ tree = compile(co2, '<ast>', 'eval')
+ assert compile(co2, '<ast>', 'eval', _ast.PyCF_ONLY_AST) is co2
- def test_leading_newlines(self):
- src = """
+def test_leading_newlines():
+ src = """
def fn(): pass
"""
- co = compile(src, 'mymod', 'exec')
- firstlineno = co.co_firstlineno
- assert firstlineno == 2
+ co = compile(src, 'mymod', 'exec')
+ firstlineno = co.co_firstlineno
+ assert firstlineno == 2
- def test_null_bytes(self):
- raises(ValueError, compile, '\x00', 'mymod', 'exec', 0)
- src = "#abc\x00def\n"
- raises(ValueError, compile, src, 'mymod', 'exec')
- raises(ValueError, compile, src, 'mymod', 'exec', 0)
+def test_null_bytes():
+ raises(ValueError, compile, '\x00', 'mymod', 'exec', 0)
+ src = "#abc\x00def\n"
+ raises(ValueError, compile, src, 'mymod', 'exec')
+ raises(ValueError, compile, src, 'mymod', 'exec', 0)
- def test_null_bytes_flag(self):
- try:
- from _ast import PyCF_ACCEPT_NULL_BYTES
- except ImportError:
- skip('PyPy only (requires _ast.PyCF_ACCEPT_NULL_BYTES)')
- raises(SyntaxError, compile, '\x00', 'mymod', 'exec',
- PyCF_ACCEPT_NULL_BYTES)
- src = "#abc\x00def\n"
- compile(src, 'mymod', 'exec', PyCF_ACCEPT_NULL_BYTES) # works
+def test_null_bytes_flag():
+ try:
+ from _ast import PyCF_ACCEPT_NULL_BYTES
+ except ImportError:
+ skip('PyPy only (requires _ast.PyCF_ACCEPT_NULL_BYTES)')
+ raises(SyntaxError, compile, '\x00', 'mymod', 'exec',
+ PyCF_ACCEPT_NULL_BYTES)
+ src = "#abc\x00def\n"
+ compile(src, 'mymod', 'exec', PyCF_ACCEPT_NULL_BYTES) # works
- def test_compile_regression(self):
- """Clone of the part of the original test that was failing."""
- import ast
+def test_compile_regression():
+ """Clone of the part of the original test that was failing."""
+ import ast
- codestr = '''def f():
- """doc"""
- try:
- assert False
- except AssertionError:
- return (True, f.__doc__)
- else:
- return (False, f.__doc__)
- '''
+ codestr = '''def f():
+ """doc"""
+ try:
+ assert False
+ except AssertionError:
+ return (True, f.__doc__)
+ else:
+ return (False, f.__doc__)
+ '''
- def f(): """doc"""
- values = [(-1, __debug__, f.__doc__),
- (0, True, 'doc'),
- (1, False, 'doc'),
- (2, False, None)]
+ def f(): """doc"""
+ values = [(-1, __debug__, f.__doc__),
+ (0, True, 'doc'),
+ (1, False, 'doc'),
+ (2, False, None)]
- for optval, debugval, docstring in values:
- # test both direct compilation and compilation via AST
- codeobjs = []
- codeobjs.append(
- compile(codestr, "<test>", "exec", optimize=optval))
- tree = ast.parse(codestr)
- codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
+ for optval, debugval, docstring in values:
+ # test both direct compilation and compilation via AST
+ codeobjs = []
+ codeobjs.append(
+ compile(codestr, "<test>", "exec", optimize=optval))
+ tree = ast.parse(codestr)
+ codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
- for i, code in enumerate(codeobjs):
- print(optval, debugval, docstring, i)
- ns = {}
- exec(code, ns)
- rv = ns['f']()
- assert rv == (debugval, docstring)
+ for i, code in enumerate(codeobjs):
+ print(optval, debugval, docstring, i)
+ ns = {}
+ exec(code, ns)
+ rv = ns['f']()
+ assert rv == (debugval, docstring)
- def test_assert_remove(self):
- """Test removal of the asserts with optimize=1."""
- import ast
+def test_assert_remove():
+ """Test removal of the asserts with optimize=1."""
+ import ast
- code = """def f():
- assert False
- """
- tree = ast.parse(code)
- for to_compile in [code, tree]:
- compiled = compile(to_compile, "<test>", "exec", optimize=1)
- ns = {}
- exec(compiled, ns)
- ns['f']()
+ code = """def f():
+ assert False
+ """
+ tree = ast.parse(code)
+ for to_compile in [code, tree]:
+ compiled = compile(to_compile, "<test>", "exec", optimize=1)
+ ns = {}
+ exec(compiled, ns)
+ ns['f']()
- def test_docstring_remove(self):
- """Test removal of docstrings with optimize=2."""
- import ast
- import marshal
+def test_docstring_remove():
+ """Test removal of docstrings with optimize=2."""
+ import ast
+ import marshal
- code = """
+ code = """
'module_doc'
def f():
@@ -164,59 +162,19 @@
class C:
'class_doc'
"""
- tree = ast.parse(code)
- for to_compile in [code, tree]:
- compiled = compile(to_compile, "<test>", "exec", optimize=2)
+ tree = ast.parse(code)
+ for to_compile in [code, tree]:
+ compiled = compile(to_compile, "<test>", "exec", optimize=2)
- ns = {}
- exec(compiled, ns)
- assert '__doc__' not in ns
- assert ns['f'].__doc__ is None
- assert ns['C'].__doc__ is None
+ ns = {}
+ exec(compiled, ns)
+ assert '__doc__' not in ns
+ assert ns['f'].__doc__ is None
+ assert ns['C'].__doc__ is None
- # Check that the docstrings are gone from the bytecode and not just
- # inaccessible.
- marshalled = str(marshal.dumps(compiled))
- assert 'module_doc' not in marshalled
- assert 'func_doc' not in marshalled
- assert 'class_doc' not in marshalled
-
-
-class TestOptimizeO:
- """Test interaction of -O flag and optimize parameter of compile."""
-
- def setup_method(self, method):
- space = self.space
- self._sys_debug = space.sys.debug
- # imitate -O
- space.sys.debug = False
-
- def teardown_method(self, method):
- self.space.sys.debug = self._sys_debug
-
- def test_O_optmize_0(self):
- """Test that assert is not ignored if -O flag is set but optimize=0."""
- space = self.space
- w_res = space.appexec([], """():
- assert False # check that our -O imitation hack works
- try:
- exec(compile('assert False', '', 'exec', optimize=0))
- except AssertionError:
- return True
- else:
- return False
- """)
- assert space.unwrap(w_res)
-
- def test_O_optimize__1(self):
- """Test that assert is ignored with -O and optimize=-1."""
- space = self.space
- space.appexec([], """():
- exec(compile('assert False', '', 'exec', optimize=-1))
- """)
-
-
-# TODO: Check the value of __debug__ inside of the compiled block!
-# According to the documentation, it should follow the optimize flag.
-# However, cpython3.5.0a0 behaves the same way as PyPy (__debug__ follows
-# -O, -OO flags of the interpreter).
+ # Check that the docstrings are gone from the bytecode and not just
+ # inaccessible.
+ marshalled = str(marshal.dumps(compiled))
+ assert 'module_doc' not in marshalled
+ assert 'func_doc' not in marshalled
+ assert 'class_doc' not in marshalled
diff --git a/pypy/module/__builtin__/test/test_compile.py
b/pypy/module/__builtin__/test/test_compile.py
--- a/pypy/module/__builtin__/test/test_compile.py
+++ b/pypy/module/__builtin__/test/test_compile.py
@@ -1,187 +1,3 @@
-# coding: utf-8
-class AppTestCompile:
-
- def test_simple(self):
- import sys
- co = compile('1+2', '?', 'eval')
- assert eval(co) == 3
- co = compile(memoryview(b'1+2'), '?', 'eval')
- assert eval(co) == 3
- exc = raises(ValueError, compile, chr(0), '?', 'eval')
- assert str(exc.value) == "source code string cannot contain null bytes"
- compile("from __future__ import with_statement", "<test>", "exec")
- raises(SyntaxError, compile, '-', '?', 'eval')
- raises(SyntaxError, compile, '"\\xt"', '?', 'eval')
- raises(ValueError, compile, '1+2', '?', 'maybenot')
- raises(ValueError, compile, "\n", "<string>", "exec", 0xff)
- raises(TypeError, compile, '1+2', 12, 34)
-
- def test_error_message(self):
- import re
- compile('# -*- coding: iso-8859-15 -*-\n', 'dummy', 'exec')
- compile(b'\xef\xbb\xbf\n', 'dummy', 'exec')
- compile(b'\xef\xbb\xbf# -*- coding: utf-8 -*-\n', 'dummy', 'exec')
- exc = raises(SyntaxError, compile,
- b'# -*- coding: fake -*-\n', 'dummy', 'exec')
- assert 'fake' in str(exc.value)
- exc = raises(SyntaxError, compile,
- b'\xef\xbb\xbf# -*- coding: iso-8859-15 -*-\n', 'dummy', 'exec')
- assert 'iso-8859-15' in str(exc.value)
- assert 'BOM' in str(exc.value)
- exc = raises(SyntaxError, compile,
- b'\xef\xbb\xbf# -*- coding: fake -*-\n', 'dummy', 'exec')
- assert 'fake' in str(exc.value)
- assert 'BOM' in str(exc.value)
-
- def test_unicode(self):
- try:
- compile(u'-', '?', 'eval')
- except SyntaxError as e:
- assert e.lineno == 1
-
- def test_incorrect_escape_deprecation_bytes(self):
- import warnings
- with warnings.catch_warnings(record=True) as l:
- warnings.simplefilter('always', category=DeprecationWarning)
- compile(r"b'\}'", '', 'exec')
- assert len(l) == 1
-
- def test_unicode_encoding(self):
- code = "# -*- coding: utf-8 -*-\npass\n"
- compile(code, "tmp", "exec")
-
- def test_bytes(self):
- code = b"# -*- coding: utf-8 -*-\npass\n"
- compile(code, "tmp", "exec")
- c = compile(b"# coding: latin1\nfoo = 'caf\xe9'\n", "<string>", "exec")
- ns = {}
- exec(c, ns)
- assert ns['foo'] == 'café'
- assert eval(b"# coding: latin1\n'caf\xe9'\n") == 'café'
-
- def test_memoryview(self):
- m = memoryview(b'2 + 1')
- co = compile(m, 'baz', 'eval')
- assert eval(co) == 3
- assert eval(m) == 3
- ns = {}
- exec(memoryview(b'r = 2 + 1'), ns)
- assert ns['r'] == 3
-
- def test_recompile_ast(self):
- import _ast
- # raise exception when node type doesn't match with compile mode
- co1 = compile('print(1)', '<string>', 'exec', _ast.PyCF_ONLY_AST)
- raises(TypeError, compile, co1, '<ast>', 'eval')
- co2 = compile('1+1', '<string>', 'eval', _ast.PyCF_ONLY_AST)
- tree = compile(co2, '<ast>', 'eval')
- assert compile(co2, '<ast>', 'eval', _ast.PyCF_ONLY_AST) is co2
-
- def test_leading_newlines(self):
- src = """
-def fn(): pass
-"""
- co = compile(src, 'mymod', 'exec')
- firstlineno = co.co_firstlineno
- assert firstlineno == 2
-
- def test_null_bytes(self):
- raises(ValueError, compile, '\x00', 'mymod', 'exec', 0)
- src = "#abc\x00def\n"
- raises(ValueError, compile, src, 'mymod', 'exec')
- raises(ValueError, compile, src, 'mymod', 'exec', 0)
-
- def test_null_bytes_flag(self):
- try:
- from _ast import PyCF_ACCEPT_NULL_BYTES
- except ImportError:
- skip('PyPy only (requires _ast.PyCF_ACCEPT_NULL_BYTES)')
- raises(SyntaxError, compile, '\x00', 'mymod', 'exec',
- PyCF_ACCEPT_NULL_BYTES)
- src = "#abc\x00def\n"
- compile(src, 'mymod', 'exec', PyCF_ACCEPT_NULL_BYTES) # works
-
- def test_compile_regression(self):
- """Clone of the part of the original test that was failing."""
- import ast
-
- codestr = '''def f():
- """doc"""
- try:
- assert False
- except AssertionError:
- return (True, f.__doc__)
- else:
- return (False, f.__doc__)
- '''
-
- def f(): """doc"""
- values = [(-1, __debug__, f.__doc__),
- (0, True, 'doc'),
- (1, False, 'doc'),
- (2, False, None)]
-
- for optval, debugval, docstring in values:
- # test both direct compilation and compilation via AST
- codeobjs = []
- codeobjs.append(
- compile(codestr, "<test>", "exec", optimize=optval))
- tree = ast.parse(codestr)
- codeobjs.append(compile(tree, "<test>", "exec", optimize=optval))
-
- for i, code in enumerate(codeobjs):
- print(optval, debugval, docstring, i)
- ns = {}
- exec(code, ns)
- rv = ns['f']()
- assert rv == (debugval, docstring)
-
- def test_assert_remove(self):
- """Test removal of the asserts with optimize=1."""
- import ast
-
- code = """def f():
- assert False
- """
- tree = ast.parse(code)
- for to_compile in [code, tree]:
- compiled = compile(to_compile, "<test>", "exec", optimize=1)
- ns = {}
- exec(compiled, ns)
- ns['f']()
-
- def test_docstring_remove(self):
- """Test removal of docstrings with optimize=2."""
- import ast
- import marshal
-
- code = """
-'module_doc'
-
-def f():
- 'func_doc'
-
-class C:
- 'class_doc'
-"""
- tree = ast.parse(code)
- for to_compile in [code, tree]:
- compiled = compile(to_compile, "<test>", "exec", optimize=2)
-
- ns = {}
- exec(compiled, ns)
- assert '__doc__' not in ns
- assert ns['f'].__doc__ is None
- assert ns['C'].__doc__ is None
-
- # Check that the docstrings are gone from the bytecode and not just
- # inaccessible.
- marshalled = str(marshal.dumps(compiled))
- assert 'module_doc' not in marshalled
- assert 'func_doc' not in marshalled
- assert 'class_doc' not in marshalled
-
-
class TestOptimizeO:
"""Test interaction of -O flag and optimize parameter of compile."""
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit