Author: Carl Friedrich Bolz-Tereick <cfb...@gmx.de> Branch: py3.6 Changeset: r97472:6e832892a7f7 Date: 2019-09-13 13:00 +0200 http://bitbucket.org/pypy/pypy/changeset/6e832892a7f7/
Log: merge default diff --git a/pypy/config/test/test_pypyoption.py b/pypy/config/test/test_pypyoption.py --- a/pypy/config/test/test_pypyoption.py +++ b/pypy/config/test/test_pypyoption.py @@ -8,14 +8,13 @@ def test_required(): conf = get_pypy_config() assert not conf.translating - assert conf.objspace.usemodules.gc def test_conflicting_gcrootfinder(): conf = get_pypy_config() conf.translation.gc = "boehm" - py.test.raises(ConfigError, "conf.translation.gcrootfinder = 'asmgcc'") - + with py.test.raises(ConfigError): + conf.translation.gcrootfinder = 'asmgcc' def test_frameworkgc(): for name in ["minimark", "semispace"]: diff --git a/pypy/interpreter/test/apptest_pyframe.py b/pypy/interpreter/test/apptest_pyframe.py --- a/pypy/interpreter/test/apptest_pyframe.py +++ b/pypy/interpreter/test/apptest_pyframe.py @@ -13,7 +13,8 @@ import sys f = sys._getframe() assert f.f_globals is globals() - pytest.raises(AttributeError, "f.f_globals = globals()") + with pytest.raises(AttributeError): + f.f_globals = globals() def test_f_builtins(): import sys, builtins diff --git a/pypy/interpreter/test/test_function.py b/pypy/interpreter/test/test_function.py --- a/pypy/interpreter/test/test_function.py +++ b/pypy/interpreter/test/test_function.py @@ -160,7 +160,8 @@ return 41 assert f() == 42 assert g() == 41 - raises(TypeError, "f.__code__ = 1") + with raises(TypeError): + f.__code__ = 1 f.__code__ = g.__code__ assert f() == 41 def get_h(f=f): @@ -168,14 +169,17 @@ return f() # a closure return h h = get_h() - raises(ValueError, "f.__code__ = h.__code__") + with raises(ValueError): + f.__code__ = h.__code__ @pytest.mark.skipif("config.option.runappdirect") def test_write_code_builtin_forbidden(self): def f(*args): return 42 - raises(TypeError, "dir.__code__ = f.__code__") - raises(TypeError, "list.append.__code__ = f.__code__") + with raises(TypeError): + dir.__code__ = f.__code__ + with raises(TypeError): + list.append.__code__ = f.__code__ def test_set_module_to_name_eagerly(self): skip("fails on PyPy but works on CPython. Unsure we want to care") @@ -313,19 +317,10 @@ def func(self, **kw): return self, kw func = A().func - - # don't want the extra argument passing of raises - try: + with raises(TypeError): func(self=23) - assert False - except TypeError: - pass - - try: + with raises(TypeError): func(**{'self': 23}) - assert False - except TypeError: - pass def test_kwargs_confusing_name(self): def func(self): # 'self' conflicts with the interp-level diff --git a/pypy/interpreter/test/test_nestedscope.py b/pypy/interpreter/test/test_nestedscope.py --- a/pypy/interpreter/test/test_nestedscope.py +++ b/pypy/interpreter/test/test_nestedscope.py @@ -99,7 +99,8 @@ x = 1 g = f() - raises(ValueError, "g.__closure__[0].cell_contents") + with raises(ValueError): + g.__closure__[0].cell_contents def test_compare_cells(self): def f(n): diff --git a/pypy/interpreter/test/test_raise.py b/pypy/interpreter/test/test_raise.py --- a/pypy/interpreter/test/test_raise.py +++ b/pypy/interpreter/test/test_raise.py @@ -2,9 +2,8 @@ class AppTestRaise: def test_arg_as_string(self): - def f(): + with raises(TypeError): raise "test" - raises(TypeError, f) def test_control_flow(self): try: @@ -36,9 +35,8 @@ assert isinstance(e, IndexError) def test_raise_cls(self): - def f(): + with raises(IndexError): raise IndexError - raises(IndexError, f) def test_raise_cls_catch(self): def f(r): @@ -46,7 +44,8 @@ raise r except LookupError: return 1 - raises(Exception, f, Exception) + with raises(Exception): + f(Exception) assert f(IndexError) == 1 def test_raise_wrong(self): @@ -99,7 +98,7 @@ assert sys.exc_info() == (None, None, None) def test_reraise_1(self): - raises(IndexError, """ + with raises(IndexError): import sys try: raise ValueError @@ -109,10 +108,10 @@ finally: assert sys.exc_info()[0] is IndexError raise - """) + def test_reraise_2(self): - raises(IndexError, """ + with raises(IndexError): def foo(): import sys assert sys.exc_info()[0] is IndexError @@ -124,10 +123,10 @@ raise IndexError finally: foo() - """) + def test_reraise_3(self): - raises(IndexError, """ + with raises(IndexError): def spam(): import sys try: @@ -142,7 +141,6 @@ raise IndexError finally: spam() - """) def test_reraise_4(self): import sys @@ -156,7 +154,7 @@ assert ok def test_reraise_5(self): - raises(IndexError, """ + with raises(IndexError): import sys try: raise ValueError @@ -170,17 +168,16 @@ finally: assert sys.exc_info()[0] is IndexError assert sys.exc_info()[2].tb_next is some_traceback - """) def test_nested_reraise(self): - raises(TypeError, """ + with raises(TypeError): def nested_reraise(): raise try: raise TypeError("foo") except: nested_reraise() - """) + def test_with_reraise_1(self): class Context: @@ -196,7 +193,8 @@ with Context(): pass raise - raises(ValueError, "fn()") + with raises(ValueError): + fn() def test_with_reraise_2(self): @@ -213,23 +211,20 @@ with Context(): raise KeyError("caught") raise - raises(ValueError, "fn()") + with raises(ValueError): + fn() def test_userclass(self): # new-style classes can't be raised unless they inherit from # BaseException - class A(object): def __init__(self, x=None): self.x = x - - def f(): + + with raises(TypeError): raise A - raises(TypeError, f) - - def f(): + with raises(TypeError): raise A(42) - raises(TypeError, f) def test_userclass_catch(self): # classes can't be caught unless they inherit from BaseException @@ -259,7 +254,7 @@ def test_catch_tuple(self): class A(Exception): pass - + try: raise ValueError except (ValueError, A): @@ -307,7 +302,9 @@ class MyException(Exception): def __new__(cls, *args): return object() - raises(TypeError, "raise MyException") + + with raises(TypeError): + raise MyException def test_with_exit_True(self): class X: diff --git a/pypy/interpreter/test/test_syntax.py b/pypy/interpreter/test/test_syntax.py --- a/pypy/interpreter/test/test_syntax.py +++ b/pypy/interpreter/test/test_syntax.py @@ -344,9 +344,6 @@ class AppTestWith: def test_with_simple(self): - - s = """ -if 1: class Context: def __init__(self): self.calls = list() @@ -360,78 +357,28 @@ acontext = Context() with acontext: pass - """ - ns = {} - exec(s, ns) - acontext = ns['acontext'] assert acontext.calls == '__enter__ __exit__'.split() def test_compound_with(self): - s = """class Context: - def __init__(self, var): - self.record = [] - self.var = var - def __enter__(self): - self.record.append(("__enter__", self.var)) - return self.var - def __exit__(self, tp, value, tb): - self.record.append(("__exit__", self.var)) -c1 = Context("blah") -c2 = Context("bling") -with c1 as v1, c2 as v2: - pass - """ - ns = {} - exec(s, ns) - assert ns["v1"] == "blah" - assert ns["v2"] == "bling" - assert ns["c1"].record == [("__enter__", "blah"), ("__exit__", "blah")] - assert ns["c2"].record == [("__enter__", "bling"), - ("__exit__", "bling")] - - - def test_start_with_blank_line(self): - s = """ -if 1: class Context: - def __init__(self): - self.calls = list() - + def __init__(self, var): + self.record = [] + self.var = var def __enter__(self): - self.calls.append('__enter__') - - def __exit__(self, exc_type, exc_value, exc_tb): - self.calls.append('__exit__') - - acontext = Context() - with acontext: + self.record.append(("__enter__", self.var)) + return self.var + def __exit__(self, tp, value, tb): + self.record.append(("__exit__", self.var)) + c1 = Context("blah") + c2 = Context("bling") + with c1 as v1, c2 as v2: pass -""" - ns = {} - exec(s, ns) - acontext = ns['acontext'] - assert acontext.calls == '__enter__ __exit__'.split() - - def test_raw_doc_string(self): - s = """r'doc' -class Context(object): - def __enter__(self): - global enter - enter = True - def __exit__(self, *exc): - global exit - exit = True -with Context() as w: - pass""" - ns = {} - exec(s, ns) - assert ns['enter'] - assert ns['exit'] + assert v1 == "blah" + assert v2 == "bling" + assert c1.record == [("__enter__", "blah"), ("__exit__", "blah")] + assert c2.record == [("__enter__", "bling"), ("__exit__", "bling")] def test_with_as_var(self): - - s = """ -if 1: class Context: def __init__(self): self.calls = list() @@ -448,17 +395,10 @@ with acontextfact as avar: avar.append('__body__') pass - """ - ns = {} - exec(s, ns) - acontextfact = ns['acontextfact'] assert acontextfact.exit_params == (None, None, None) assert acontextfact.calls == '__enter__ __body__ __exit__'.split() def test_with_raise_exception(self): - - s = """ -if 1: class Context: def __init__(self): self.calls = list() @@ -482,20 +422,12 @@ pass else: raise AssertionError('With did not raise RuntimeError') - """ - ns = {} - exec(s, ns) - acontextfact = ns['acontextfact'] - error = ns['error'] assert acontextfact.calls == '__enter__ __body__ __exit__'.split() assert acontextfact.exit_params[0:2] == (RuntimeError, error) import types assert isinstance(acontextfact.exit_params[2], types.TracebackType) def test_with_swallow_exception(self): - - s = """ -if 1: class Context: def __init__(self): self.calls = list() @@ -515,11 +447,6 @@ avar.append('__body__') raise error avar.append('__after_raise__') - """ - ns = {} - exec(s, ns) - acontextfact = ns['acontextfact'] - error = ns['error'] assert acontextfact.calls == '__enter__ __body__ __exit__'.split() assert acontextfact.exit_params[0:2] == (RuntimeError, error) import types @@ -544,9 +471,6 @@ assert c.calls == ['exit'] def test_with_break(self): - - s = """ -if 1: class Context: def __init__(self): self.calls = list() @@ -568,17 +492,10 @@ avar.append('__after_break__') else: raise AssertionError('Break failed with With, reached else clause') - """ - ns = {} - exec(s, ns) - acontextfact = ns['acontextfact'] assert acontextfact.calls == '__enter__ __body__ __exit__'.split() assert acontextfact.exit_params == (None, None, None) def test_with_continue(self): - - s = """ -if 1: class Context: def __init__(self): self.calls = list() @@ -600,16 +517,10 @@ avar.append('__after_continue__') else: avar.append('__continue__') - """ - ns = {} - exec(s, ns) - acontextfact = ns['acontextfact'] assert acontextfact.calls == '__enter__ __body__ __exit__ __continue__'.split() assert acontextfact.exit_params == (None, None, None) def test_with_return(self): - s = """ -if 1: class Context: def __init__(self): self.calls = list() @@ -630,28 +541,16 @@ return '__return__' avar.append('__after_return__') acontextfact.calls.append(g(acontextfact)) - """ - ns = {} - exec(s, ns) - acontextfact = ns['acontextfact'] assert acontextfact.calls == '__enter__ __body__ __exit__ __return__'.split() assert acontextfact.exit_params == (None, None, None) def test_with_as_keyword(self): - try: + with raises(SyntaxError): exec("with = 9") - except SyntaxError: - pass - else: - assert False, 'Assignment to with did not raise SyntaxError' def test_with_as_keyword_compound(self): - try: + with raises(SyntaxError): exec("from __future__ import generators, with_statement\nwith = 9") - except SyntaxError: - pass - else: - assert False, 'Assignment to with did not raise SyntaxError' def test_missing_as_SyntaxError(self): snippets = [ @@ -662,21 +561,10 @@ pass """] for snippet in snippets: - try: + with raises(SyntaxError): exec(snippet) - except SyntaxError: - pass - else: - assert False, "%s: did not raise SyntaxError" % snippet - def test_with_propagate_compileflag(self): - s = """ -if 1: - compile('''with x: - pass''', '', 'exec') - """ - exec(s) class AppTestFunctionAnnotations: @@ -707,7 +595,6 @@ pass f1() """ - class AppTestSyntaxError: def test_tokenizer_error_location(self): @@ -752,7 +639,8 @@ # -*- coding: uft-8 -*- pass """ - raises(SyntaxError, exec, program) + with raises(SyntaxError): + exec(program) ''' def test_exception_target_in_nested_scope(self): @@ -798,24 +686,3 @@ raise AssertionError("should have raised") """ - -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 Exception as e: - print '-'*20, 'FAILED TO COMPILE:', '-'*20 - print s - print '%s: %s' % (e.__class__, e) - print '-'*60 - for s in INVALID: - try: - raises(SyntaxError, compile, s, '?', 'exec') - except Exception as e: - print '-'*20, 'UNEXPECTEDLY COMPILED:', '-'*20 - print s - print '%s: %s' % (e.__class__, e) - print '-'*60 - diff --git a/pypy/module/_io/interp_textio.py b/pypy/module/_io/interp_textio.py --- a/pypy/module/_io/interp_textio.py +++ b/pypy/module/_io/interp_textio.py @@ -444,10 +444,9 @@ assert 0 <= ord(marker) < 128 # ascii fast path if self.ulen == len(self.text): - if limit < 0: - end = len(self.text) - else: - end = self.pos + limit + end = len(self.text) + if limit >= 0: + end = min(end, self.pos + limit) pos = self.pos assert pos >= 0 assert end >= 0 @@ -868,8 +867,7 @@ end_scan = self.decoded.pos uend_scan = self.decoded.upos if end_scan > start: - s = self.decoded.text[start:end_scan] - builder.append_utf8(s, uend_scan - ustart) + builder.append_utf8_slice(self.decoded.text, start, end_scan, uend_scan - ustart) if found or (limit >= 0 and builder.getlength() >= limit): break diff --git a/pypy/module/_io/test/test_interp_textio.py b/pypy/module/_io/test/test_interp_textio.py --- a/pypy/module/_io/test/test_interp_textio.py +++ b/pypy/module/_io/test/test_interp_textio.py @@ -35,6 +35,7 @@ @given(data=st_readline(), mode=st.sampled_from(['\r', '\n', '\r\n', ''])) @settings(deadline=None, database=None) +@example(data=(u'\n\r\n', [0, -1, 2, -1, 0, -1]), mode='\r') def test_readline(space, data, mode): txt, limits = data w_stream = W_BytesIO(space) diff --git a/rpython/rlib/rutf8.py b/rpython/rlib/rutf8.py --- a/rpython/rlib/rutf8.py +++ b/rpython/rlib/rutf8.py @@ -772,6 +772,13 @@ self._lgt += length @always_inline + def append_utf8_slice(self, utf8, start, end, slicelength): + self._s.append_slice(utf8, start, end) + self._lgt += slicelength + if not we_are_translated(): + assert len(utf8[start: end].decode("utf-8")) == slicelength + + @always_inline def append_multiple_char(self, utf8, times): self._s.append(utf8 * times) self._lgt += times diff --git a/rpython/rlib/test/test_rutf8.py b/rpython/rlib/test/test_rutf8.py --- a/rpython/rlib/test/test_rutf8.py +++ b/rpython/rlib/test/test_rutf8.py @@ -211,6 +211,10 @@ s.append_code(0xD800) assert s.getlength() == 5 + s.append_utf8_slice(u"äöüß".encode("utf-8"), 2, 6, 2) + assert s.getlength() == 7 + assert s.build().decode("utf-8") == u"abc\u1234\ud800öü" + def test_utf8_string_builder_bad_code(): s = rutf8.Utf8StringBuilder() with pytest.raises(rutf8.OutOfRange): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit