Author: Armin Rigo <ar...@tunes.org> Branch: py3.6 Changeset: r97979:2a48a020ef28 Date: 2019-11-07 14:07 +0100 http://bitbucket.org/pypy/pypy/changeset/2a48a020ef28/
Log: merge heads diff --git a/lib-python/3/test/test_dis.py b/lib-python/3/test/test_dis.py --- a/lib-python/3/test/test_dis.py +++ b/lib-python/3/test/test_dis.py @@ -262,7 +262,7 @@ 20 RETURN_VALUE """ -# XXX: change for PyPy? +# changed for PyPy dis_traceback = """\ %3d 0 SETUP_EXCEPT 12 (to 14) @@ -280,18 +280,18 @@ 22 POP_TOP 24 STORE_FAST 0 (e) 26 POP_TOP - 28 SETUP_FINALLY 12 (to 42) + 28 SETUP_FINALLY 10 (to 40) %3d 30 LOAD_FAST 0 (e) 32 LOAD_ATTR 1 (__traceback__) 34 STORE_FAST 1 (tb) 36 POP_BLOCK - 38 POP_EXCEPT - 40 LOAD_CONST 0 (None) - >> 42 LOAD_CONST 0 (None) - 44 STORE_FAST 0 (e) - 46 DELETE_FAST 0 (e) - 48 END_FINALLY + 38 LOAD_CONST 0 (None) + >> 40 LOAD_CONST 0 (None) + 42 STORE_FAST 0 (e) + 44 DELETE_FAST 0 (e) + 46 END_FINALLY + 48 POP_EXCEPT 50 JUMP_FORWARD 2 (to 54) >> 52 END_FINALLY @@ -686,9 +686,9 @@ # End fodder for opinfo generation tests expected_outer_line = 1 _line_offset = outer.__code__.co_firstlineno - 1 -code_object_f = outer.__code__.co_consts[3] +code_object_f = outer.__code__.co_consts[2] expected_f_line = code_object_f.co_firstlineno - _line_offset -code_object_inner = code_object_f.co_consts[3] +code_object_inner = code_object_f.co_consts[2] expected_inner_line = code_object_inner.co_firstlineno - _line_offset expected_jumpy_line = 1 @@ -713,22 +713,22 @@ Instruction = dis.Instruction expected_opinfo_outer = [ - Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval=(3, 4), argrepr='(3, 4)', offset=0, starts_line=2, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=(3, 4), argrepr='(3, 4)', offset=0, starts_line=2, is_jump_target=False), Instruction(opname='LOAD_CLOSURE', opcode=135, arg=0, argval='a', argrepr='a', offset=2, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CLOSURE', opcode=135, arg=1, argval='b', argrepr='b', offset=4, starts_line=None, is_jump_target=False), Instruction(opname='BUILD_TUPLE', opcode=102, arg=2, argval=2, argrepr='', offset=6, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval=code_object_f, argrepr=repr(code_object_f), offset=8, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='outer.<locals>.f', argrepr="'outer.<locals>.f'", offset=10, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=2, argval=code_object_f, argrepr=repr(code_object_f), offset=8, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval='outer.<locals>.f', argrepr="'outer.<locals>.f'", offset=10, starts_line=None, is_jump_target=False), Instruction(opname='MAKE_FUNCTION', opcode=132, arg=9, argval=9, argrepr='', offset=12, starts_line=None, is_jump_target=False), Instruction(opname='STORE_FAST', opcode=125, arg=2, argval='f', argrepr='f', offset=14, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=0, argval='print', argrepr='print', offset=16, starts_line=7, is_jump_target=False), Instruction(opname='LOAD_DEREF', opcode=136, arg=0, argval='a', argrepr='a', offset=18, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_DEREF', opcode=136, arg=1, argval='b', argrepr='b', offset=20, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval='', argrepr="''", offset=22, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=6, argval=1, argrepr='1', offset=24, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='', argrepr="''", offset=22, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=1, argrepr='1', offset=24, starts_line=None, is_jump_target=False), Instruction(opname='BUILD_LIST', opcode=103, arg=0, argval=0, argrepr='', offset=26, starts_line=None, is_jump_target=False), Instruction(opname='BUILD_MAP', opcode=105, arg=0, argval=0, argrepr='', offset=28, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=7, argval='Hello world!', argrepr="'Hello world!'", offset=30, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=6, argval='Hello world!', argrepr="'Hello world!'", offset=30, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=7, argval=7, argrepr='', offset=32, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=34, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_FAST', opcode=124, arg=2, argval='f', argrepr='f', offset=36, starts_line=8, is_jump_target=False), @@ -736,14 +736,14 @@ ] expected_opinfo_f = [ - Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=(5, 6), argrepr='(5, 6)', offset=0, starts_line=3, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval=(5, 6), argrepr='(5, 6)', offset=0, starts_line=3, is_jump_target=False), Instruction(opname='LOAD_CLOSURE', opcode=135, arg=2, argval='a', argrepr='a', offset=2, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CLOSURE', opcode=135, arg=3, argval='b', argrepr='b', offset=4, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CLOSURE', opcode=135, arg=0, argval='c', argrepr='c', offset=6, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CLOSURE', opcode=135, arg=1, argval='d', argrepr='d', offset=8, starts_line=None, is_jump_target=False), Instruction(opname='BUILD_TUPLE', opcode=102, arg=4, argval=4, argrepr='', offset=10, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval=code_object_inner, argrepr=repr(code_object_inner), offset=12, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='outer.<locals>.f.<locals>.inner', argrepr="'outer.<locals>.f.<locals>.inner'", offset=14, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=2, argval=code_object_inner, argrepr=repr(code_object_inner), offset=12, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval='outer.<locals>.f.<locals>.inner', argrepr="'outer.<locals>.f.<locals>.inner'", offset=14, starts_line=None, is_jump_target=False), Instruction(opname='MAKE_FUNCTION', opcode=132, arg=9, argval=9, argrepr='', offset=16, starts_line=None, is_jump_target=False), Instruction(opname='STORE_FAST', opcode=125, arg=2, argval='inner', argrepr='inner', offset=18, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=0, argval='print', argrepr='print', offset=20, starts_line=5, is_jump_target=False), diff --git a/lib-python/3/test/test_extcall.py b/lib-python/3/test/test_extcall.py --- a/lib-python/3/test/test_extcall.py +++ b/lib-python/3/test/test_extcall.py @@ -57,7 +57,7 @@ Traceback (most recent call last): ... TypeError: ...got multiple values for keyword argument 'a' - >>> f(1, 2, a=3, **{'a': 4}, **{'a': 5}) + >>> f(1, 2, a=3, **{'a': 4}, **{'a': 5}) #doctest: +ELLIPSIS Traceback (most recent call last): ... TypeError: ...got multiple values for keyword argument 'a' @@ -254,20 +254,21 @@ ... TypeError: h() argument after * must be an iterable, not function - >>> h(*[1], *h) + >>> h(*[1], *h) #doctest: +ELLIPSIS Traceback (most recent call last): ... - TypeError: h() argument after * must be an iterable, not function + TypeError: ... >>> dir(*h) Traceback (most recent call last): ... TypeError: dir() argument after * must be an iterable, not function - >>> None(*h) + >>> None(**h) #doctest: +ELLIPSIS Traceback (most recent call last): ... - TypeError: ...argument after * must be an iterable, not function + TypeError: ... object argument after ** must be a mapping, \ +not function >>> h(**h) Traceback (most recent call last): @@ -289,35 +290,20 @@ ... TypeError: h() argument after ** must be a mapping, not list - >>> h(**{'a': 1}, **h) + >>> h(**{'a': 1}, **h) #doctest: +ELLIPSIS Traceback (most recent call last): ... - TypeError: h() argument after ** must be a mapping, not function + TypeError: ...argument after ** must be a mapping, not function - >>> h(**{'a': 1}, **[]) + >>> h(**{'a': 1}, **[]) #doctest: +ELLIPSIS Traceback (most recent call last): ... - TypeError: h() argument after ** must be a mapping, not list + TypeError: ...argument after ** must be a mapping, not list >>> dir(**h) Traceback (most recent call last): ... - TypeError: ...argument after * must be an iterable, not function - - >>> None(*h) #doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: ...argument after * must be an iterable, not function - - >>> h(**h) #doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: ...argument after ** must be a mapping, not function - - >>> dir(**h) #doctest: +ELLIPSIS - Traceback (most recent call last): - ... - TypeError: ...argument after ** must be a mapping, not function + TypeError: dir() argument after ** must be a mapping, not function >>> None(**h) #doctest: +ELLIPSIS Traceback (most recent call last): diff --git a/lib-python/3/test/test_flufl.py b/lib-python/3/test/test_flufl.py --- a/lib-python/3/test/test_flufl.py +++ b/lib-python/3/test/test_flufl.py @@ -15,7 +15,7 @@ self.assertEqual(cm.exception.text, '2 != 3\n') self.assertEqual(cm.exception.filename, '<FLUFL test>') self.assertEqual(cm.exception.lineno, 2) - self.assertEqual(cm.exception.offset, 4) + self.assertEqual(cm.exception.offset, 2) # changed in PyPy def test_guido_as_bdfl(self): code = '2 {0} 3' @@ -26,7 +26,7 @@ self.assertEqual(cm.exception.text, '2 <> 3\n') self.assertEqual(cm.exception.filename, '<FLUFL test>') self.assertEqual(cm.exception.lineno, 1) - self.assertEqual(cm.exception.offset, 4) + self.assertEqual(cm.exception.offset, 2) # changed in PyPy if __name__ == '__main__': diff --git a/pypy/config/pypyoption.py b/pypy/config/pypyoption.py --- a/pypy/config/pypyoption.py +++ b/pypy/config/pypyoption.py @@ -218,10 +218,6 @@ BoolOption("newshortcut", "cache and shortcut calling __new__ from builtin types", default=False), - BoolOption("reinterpretasserts", - "Perform reinterpretation when an assert fails " - "(only relevant for tests)", - default=False), ]), ]) diff --git a/pypy/conftest.py b/pypy/conftest.py --- a/pypy/conftest.py +++ b/pypy/conftest.py @@ -135,8 +135,8 @@ return PyPyModule(path, parent) def is_applevel(item): - from pypy.tool.pytest.apptest import AppTestFunction - return isinstance(item, AppTestFunction) + from pypy.tool.pytest.apptest import AppTestMethod + return isinstance(item, AppTestMethod) def pytest_collection_modifyitems(config, items): if config.getoption('runappdirect') or config.getoption('direct_apptest'): @@ -166,8 +166,6 @@ def funcnamefilter(self, name): if name.startswith('test_'): return self.accept_regular_test() - if name.startswith('app_test_'): - return True return False def classnamefilter(self, name): @@ -182,13 +180,6 @@ if name.startswith('AppTest'): from pypy.tool.pytest.apptest import AppClassCollector return AppClassCollector(name, parent=self) - - elif hasattr(obj, 'func_code') and self.funcnamefilter(name): - if name.startswith('app_test_'): - assert not obj.func_code.co_flags & 32, \ - "generator app level functions? you must be joking" - from pypy.tool.pytest.apptest import AppTestFunction - return AppTestFunction(name, parent=self) return super(PyPyModule, self).makeitem(name, obj) def skip_on_missing_buildoption(**ropts): @@ -207,27 +198,15 @@ py.test.skip("need translated pypy3 with: %s, got %s" %(ropts,options)) -class LazyObjSpaceGetter(object): - def __get__(self, obj, cls=None): - from pypy.tool.pytest.objspace import gettestobjspace - space = gettestobjspace() - if cls: - cls.space = space - return space - - @pytest.hookimpl(tryfirst=True) def pytest_runtest_setup(item): if isinstance(item, py.test.collect.Function): appclass = item.getparent(py.test.Class) if appclass is not None: + from pypy.tool.pytest.objspace import gettestobjspace # Make cls.space and cls.runappdirect available in tests. - spaceconfig = getattr(appclass.obj, 'spaceconfig', None) - if spaceconfig is not None: - from pypy.tool.pytest.objspace import gettestobjspace - appclass.obj.space = gettestobjspace(**spaceconfig) - else: - appclass.obj.space = LazyObjSpaceGetter() + spaceconfig = getattr(appclass.obj, 'spaceconfig', {}) + appclass.obj.space = gettestobjspace(**spaceconfig) appclass.obj.runappdirect = option.runappdirect def pytest_ignore_collect(path, config): diff --git a/pypy/interpreter/astcompiler/astbuilder.py b/pypy/interpreter/astcompiler/astbuilder.py --- a/pypy/interpreter/astcompiler/astbuilder.py +++ b/pypy/interpreter/astcompiler/astbuilder.py @@ -497,10 +497,10 @@ def handle_async_funcdef(self, node, decorators=None): return self.handle_funcdef_impl(node.get_child(1), 1, decorators) - + def handle_funcdef(self, node, decorators=None): return self.handle_funcdef_impl(node, 0, decorators) - + def handle_async_stmt(self, node): ch = node.get_child(1) if ch.type == syms.funcdef: @@ -942,7 +942,7 @@ if flufl and comp_node.get_value() == '!=': self.error("with Barry as BDFL, use '<>' instead of '!='", comp_node) elif not flufl and comp_node.get_value() == '<>': - self.error('invalid comparison', comp_node) + self.error('invalid syntax', comp_node) return ast.NotEq elif comp_type == tokens.NAME: if comp_node.get_value() == "is": @@ -1014,7 +1014,7 @@ atom_node.get_column()) else: return atom_expr - + def handle_power(self, power_node): atom_expr = self.handle_atom_expr(power_node.get_child(0)) if power_node.num_children() == 1: @@ -1092,7 +1092,7 @@ def handle_call(self, args_node, callable_expr): arg_count = 0 # position args + iterable args unpackings keyword_count = 0 # keyword args + keyword args unpackings - generator_count = 0 + generator_count = 0 for i in range(args_node.num_children()): argument = args_node.get_child(i) if argument.type == syms.argument: @@ -1300,7 +1300,6 @@ if is_dict: raise self.error("dict unpacking cannot be used in " "dict comprehension", atom_node) - return self.handle_dictcomp(maker, atom_node) else: # a dictionary display @@ -1423,7 +1422,7 @@ comps = self.comprehension_helper(dict_maker.get_child(i)) return ast.DictComp(key, value, comps, atom_node.get_lineno(), atom_node.get_column()) - + def handle_dictdisplay(self, node, atom_node): keys = [] values = [] @@ -1435,7 +1434,7 @@ i += 1 return ast.Dict(keys, values, atom_node.get_lineno(), atom_node.get_column()) - + def handle_setdisplay(self, node, atom_node): elts = [] i = 0 diff --git a/pypy/interpreter/astcompiler/codegen.py b/pypy/interpreter/astcompiler/codegen.py --- a/pypy/interpreter/astcompiler/codegen.py +++ b/pypy/interpreter/astcompiler/codegen.py @@ -393,6 +393,14 @@ self.emit_op_arg(ops.BUILD_CONST_KEY_MAP, l) return l + def _visit_defaults(self, defaults): + w_tup = self._tuple_of_consts(defaults) + if w_tup: + self.load_const(w_tup) + else: + self.visit_sequence(defaults) + self.emit_op_arg(ops.BUILD_TUPLE, len(defaults)) + @specialize.arg(2) def _visit_function(self, func, function_code_generator): self.update_position(func.lineno, True) @@ -403,11 +411,10 @@ assert isinstance(args, ast.arguments) oparg = 0 - self.visit_sequence(args.defaults) if args.defaults is not None and len(args.defaults): oparg = oparg | 0x01 - self.emit_op_arg(ops.BUILD_TUPLE, len(args.defaults)) + self._visit_defaults(args.defaults) if args.kwonlyargs: kw_default_count = self._visit_kwonlydefaults(args) @@ -438,12 +445,10 @@ args = lam.args assert isinstance(args, ast.arguments) - self.visit_sequence(args.defaults) - oparg = 0 if args.defaults is not None and len(args.defaults): oparg = oparg | 0x01 - self.emit_op_arg(ops.BUILD_TUPLE, len(args.defaults)) + self._visit_defaults(args.defaults) if args.kwonlyargs: kw_default_count = self._visit_kwonlydefaults(args) diff --git a/pypy/interpreter/astcompiler/test/apptest_misc.py b/pypy/interpreter/astcompiler/test/apptest_misc.py new file mode 100644 --- /dev/null +++ b/pypy/interpreter/astcompiler/test/apptest_misc.py @@ -0,0 +1,18 @@ +def test_warning_to_error_translation(): + import warnings + statement = """\ +def wrong1(): + a = 1 + b = 2 + global a + global b +""" + with warnings.catch_warnings(): + warnings.filterwarnings("error", module="<test string>") + try: + compile(statement, '<test string>', 'exec') + except SyntaxError as err: + assert err.lineno is not None + assert err.filename is not None + assert err.offset is not None + assert err.msg is not None diff --git a/pypy/interpreter/astcompiler/test/test_compiler.py b/pypy/interpreter/astcompiler/test/test_compiler.py --- a/pypy/interpreter/astcompiler/test/test_compiler.py +++ b/pypy/interpreter/astcompiler/test/test_compiler.py @@ -1548,6 +1548,30 @@ counts = self.count_instructions(source) assert ops.BUILD_TUPLE not in counts + def test_fold_defaults_tuple(self): + source = """def f(): + def g(a, b=2, c=None, d='foo'): + return None + return g + """ + counts = self.count_instructions(source) + assert ops.BUILD_TUPLE not in counts + + source = """def f(): + g = lambda a, b=2, c=None, d='foo': None + return g + """ + counts = self.count_instructions(source) + assert ops.BUILD_TUPLE not in counts + + source = """def f(): + def g(a, b=2, c=None, d=[]): + return None + return g + """ + counts = self.count_instructions(source) + assert counts[ops.BUILD_TUPLE] == 1 + def test_constant_tuples_star(self): source = """def f(a, c): return (u"a", 1, *a, 3, 5, 3, *c) diff --git a/pypy/interpreter/astcompiler/test/test_misc.py b/pypy/interpreter/astcompiler/test/test_misc.py --- a/pypy/interpreter/astcompiler/test/test_misc.py +++ b/pypy/interpreter/astcompiler/test/test_misc.py @@ -43,26 +43,6 @@ Instruction(ops.LOAD_FAST, 0x5030201).encode(c) assert c == [chr(ops.EXTENDED_ARG), '\x05', chr(ops.EXTENDED_ARG), '\x03', chr(ops.EXTENDED_ARG), '\x02', chr(ops.LOAD_FAST), '\x01'] -def app_test_warning_to_error_translation(): - import warnings - - with warnings.catch_warnings(): - warnings.filterwarnings("error", module="<test string>") - statement = """\ -def wrong1(): - a = 1 - b = 2 - global a - global b -""" - try: - compile(statement, '<test string>', 'exec') - except SyntaxError as err: - assert err.lineno is not None - assert err.filename is not None - assert err.offset is not None - assert err.msg is not None - def test_encode_lnotab_pair(): l = [] _encode_lnotab_pair(0, 1, l) diff --git a/pypy/interpreter/test/test_appinterp.py b/pypy/interpreter/test/test_appinterp.py --- a/pypy/interpreter/test/test_appinterp.py +++ b/pypy/interpreter/test/test_appinterp.py @@ -98,10 +98,6 @@ w_clsattr = space.getattr(c, space.wrap('attr')) assert space.eq_w(w_clsattr, space.wrap(17)) -def app_test_something_at_app_level(): - x = 2 - assert x/2 == 1 - class AppTestMethods: def test_some_app_test_method(self): assert 2 == 2 diff --git a/pypy/objspace/std/test/test_operation.py b/pypy/objspace/std/test/apptest_operation.py rename from pypy/objspace/std/test/test_operation.py rename to pypy/objspace/std/test/apptest_operation.py --- a/pypy/objspace/std/test/test_operation.py +++ b/pypy/objspace/std/test/apptest_operation.py @@ -1,10 +1,11 @@ +from pytest import raises +def teq(a, b): + assert a == b + assert type(a) is type(b) -def app_test_int_vs_float(): - def teq(a, b): - assert a == b - assert type(a) is type(b) +def test_int_vs_float(): # binary operators teq( 5 - 2 , 3 ) teq( 5 - 2.0 , 3.0 ) diff --git a/pypy/tool/pytest/apptest.py b/pypy/tool/pytest/apptest.py --- a/pypy/tool/pytest/apptest.py +++ b/pypy/tool/pytest/apptest.py @@ -1,7 +1,7 @@ # Collects and executes application-level tests. # -# Classes which names start with "AppTest", or function which names -# start with "app_test*" are not executed by the host Python, but +# Classes which names start with "AppTest" +# are not executed by the host Python, but # by an interpreted pypy object space. # # ...unless the -A option ('runappdirect') is passed. @@ -232,7 +232,7 @@ return fn -class AppTestFunction(py.test.collect.Function): +class AppTestMethod(py.test.collect.Function): def _prunetraceback(self, traceback): return traceback @@ -252,21 +252,10 @@ raise AppError, AppError(appexcinfo), tb raise - def runtest(self): - target = self.obj - src = extract_docstring_if_empty_function(target) - if self.config.option.runappdirect: - return run_with_python(self.config.option.python, src, None) - space = gettestobjspace(**{'objspace.std.reinterpretasserts': True}) - filename = self._getdynfilename(target) - func = app2interp_temp(src, filename=filename) - # print "executing", func - self.execute_appex(space, func, space) - def repr_failure(self, excinfo): if excinfo.errisinstance(AppError): excinfo = excinfo.value.excinfo - return super(AppTestFunction, self).repr_failure(excinfo) + return super(AppTestMethod, self).repr_failure(excinfo) def _getdynfilename(self, func): code = getattr(func, 'im_func', func).func_code @@ -279,8 +268,6 @@ if hasattr(self, 'space'): self.space.getexecutioncontext()._run_finalizers_now() - -class AppTestMethod(AppTestFunction): def setup(self): super(AppTestMethod, self).setup() instance = self.parent.obj diff --git a/pypy/tool/pytest/objspace.py b/pypy/tool/pytest/objspace.py --- a/pypy/tool/pytest/objspace.py +++ b/pypy/tool/pytest/objspace.py @@ -33,9 +33,6 @@ config.objspace.extmodules = 'pypy.tool.pytest.fake_pytest' space = make_objspace(config) space.startup() # Initialize all builtin modules - if config.objspace.std.reinterpretasserts: - space.setitem(space.builtin.w_dict, space.wrap('AssertionError'), - appsupport.build_pytest_assertion(space)) space.setitem(space.builtin.w_dict, space.wrap('raises'), space.wrap(appsupport.app_raises)) space.setitem(space.builtin.w_dict, space.wrap('skip'), diff --git a/pypy/tool/pytest/pypy_test_failure_demo.py b/pypy/tool/pytest/pypy_test_failure_demo.py --- a/pypy/tool/pytest/pypy_test_failure_demo.py +++ b/pypy/tool/pytest/pypy_test_failure_demo.py @@ -1,39 +1,14 @@ -class AppTestTest: +class AppTestTest: def test_app_method(self): - assert 42 == 41 + assert 42 == 41 -def app_test_app_func(): - assert 41 == 42 - -def test_interp_func(space): - assert space.is_true(space.w_None) +def test_interp_func(space): + assert space.is_true(space.w_None) def test_interp_reinterpret(space): a = 1 assert a == 2 -class TestInterpTest: - def test_interp_method(self): - assert self.space.is_true(self.space.w_False) - -def app_test_raises_in_statement(): - raises(ValueError, """ - y = x # name error - """) - -def app_test_raises_something(): - int("hallo") - -def app_test_raises_wrong1(): - raises(SyntaxError, 'int("hello")') - -def app_test_raises_wrong2(): - raises(SyntaxError, int, "hello") - -def app_test_raises_doesnt(): - raises(ValueError, int, 3) - -def app_test_skip(): - skip("skipped test") - - +class TestInterpTest: + def test_interp_method(self): + assert self.space.is_true(self.space.w_False) diff --git a/pypy/tool/pytest/test/conftest1_innertest.py b/pypy/tool/pytest/test/conftest1_innertest.py --- a/pypy/tool/pytest/test/conftest1_innertest.py +++ b/pypy/tool/pytest/test/conftest1_innertest.py @@ -1,17 +1,9 @@ -def test_something(space): - assert space.w_None is space.w_None +def test_something(space): + assert space.w_None is space.w_None -def app_test_something(): - assert 42 == 42 - -def app_test_code_in_docstring_failing(): - """ - assert False - """ - -class AppTestSomething: - def test_method_app(self): +class AppTestSomething: + def test_method_app(self): assert 23 == 23 def test_code_in_docstring_failing(self): @@ -26,12 +18,7 @@ """ assert True - + class TestSomething: - def test_method(self): - assert self.space - -def app_test_raise_in_a_closure(): - def f(x): - raises(AttributeError, "x.foo") - f(42) + def test_method(self): + assert self.space diff --git a/pypy/tool/pytest/test/test_appsupport.py b/pypy/tool/pytest/test/test_appsupport.py --- a/pypy/tool/pytest/test/test_appsupport.py +++ b/pypy/tool/pytest/test/test_appsupport.py @@ -77,8 +77,6 @@ def test_applevel_raises_simple_display(testdir): setpypyconftest(testdir) p = testdir.makepyfile(""" - def app_test_raises(): - raises(ValueError, x) class AppTestRaises: def test_func(self): raises (ValueError, x) @@ -87,7 +85,6 @@ result = testdir.runpytest(p, "-s") assert result.ret == 1 result.stdout.fnmatch_lines([ - "*E*application-level*NameError*x*not defined", "*test_func(self)*", ">*raises*ValueError*", "*E*application-level*NameError*x*not defined", @@ -99,37 +96,6 @@ "*E*application-level*NameError*x*not defined", ]) -def test_applevel_raises_display(testdir): - setpypyconftest(testdir) - p = testdir.makepyfile(""" - def app_test_raises(): - raises(ValueError, "x") - pass - """) - result = testdir.runpytest(p, "-s") - assert result.ret == 1 - result.stdout.fnmatch_lines([ - "*E*application-level*NameError*x*not defined", - ]) - result = testdir.runpytest(p) # this time we may run the pyc file - assert result.ret == 1 - result.stdout.fnmatch_lines([ - "*E*application-level*NameError*x*not defined", - ]) - -def test_applevel_raise_keyerror(testdir): - setpypyconftest(testdir) - p = testdir.makepyfile(""" - def app_test_raises(): - raise KeyError(42) - pass - """) - result = testdir.runpytest(p, "-s") - assert result.ret == 1 - result.stdout.fnmatch_lines([ - "*E*application-level*KeyError*42*", - ]) - def test_apptest_raise(testdir): setpypyconftest(testdir) p = testdir.makepyfile(apptest_raise=""" @@ -170,17 +136,6 @@ "*E*+ bar*", ]) - -def app_test_raises(): - info = raises(TypeError, id) - assert info.type is TypeError - assert isinstance(info.value, TypeError) - - x = 43 - info = raises(ZeroDivisionError, "x/0") - assert info.type is ZeroDivisionError - assert isinstance(info.value, ZeroDivisionError) - def test_rename_module(): from pypy.tool.pytest.apptest import _rename_module assert _rename_module("sys") == "sys" diff --git a/pypy/tool/pytest/test/test_conftest1.py b/pypy/tool/pytest/test/test_conftest1.py --- a/pypy/tool/pytest/test/test_conftest1.py +++ b/pypy/tool/pytest/test/test_conftest1.py @@ -41,10 +41,9 @@ def test_selection_by_keyword_app(self): passed, failed = subproc_run("-m", "applevel -docstring", innertest) - assert len(passed) == 4 - assert len(failed) == 2 - assert "app_test_something" in passed[0] - assert "test_method_app" in passed[1] + assert len(passed) == 2 + assert len(failed) == 1 + assert "test_method_app" in passed[0] def test_docstring_in_methods(self): passed, failed = subproc_run("-k", "AppTestSomething and test_code_in_docstring", @@ -54,12 +53,6 @@ assert "test_code_in_docstring_ignored" in passed[0] assert "test_code_in_docstring_failing" in failed[0] - def test_docstring_in_functions(self): - passed, failed = subproc_run("-k", "app_test_code_in_docstring", innertest) - assert passed == [] - assert len(failed) == 1 - assert "app_test_code_in_docstring_failing" in failed[0] - @py.test.mark.xfail(reason='fails on buildslave') def test_docstring_runappdirect(self): passed, failed = subproc_run(innertest, diff --git a/pypy/tool/pytest/test/test_pytestsupport.py b/pypy/tool/pytest/test/test_pytestsupport.py --- a/pypy/tool/pytest/test/test_pytestsupport.py +++ b/pypy/tool/pytest/test/test_pytestsupport.py @@ -6,21 +6,6 @@ pytest_plugins = "pytester" -def app_test_exception(): - try: - raise AssertionError("42") - except AssertionError: - pass - else: - raise AssertionError("app level AssertionError mixup!") - -def app_test_exception_with_message(): - try: - assert 0, "Failed" - except AssertionError as e: - assert e.msg == "Failed" - - def test_appexecinfo(space): try: space.appexec([], "(): raise ValueError") _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit